Omówienie wzorca RAG za pomocą usługi Azure Database for PostgreSQL

Zakończone

Wyobraź sobie, że tworzysz asystenta wewnętrznego, który odpowiada na pytania pracowników dotyczące zasad firmy. Duży model językowy (LLM) może generować płynne odpowiedzi. Jeśli jednak nie ma dostępu do najnowszych danych firmy, usługa LLM daje nieaktualne lub nieprawidłowe odpowiedzi. Pobieranie rozszerzonej generacji (RAG) rozwiązuje ten problem, łącząc moc rozumowania modułu LLM z dokładnością własnych danych.

Dlaczego RAG ma znaczenie

LLM są szkolone na ogromnych ilościach tekstu, ale nie znają danych ani treści własnościowych twojej organizacji. Aby rozwiązać ten problem, metoda RAG pobiera odpowiednie informacje z podanych zaufanych źródeł, stanowiąc podstawę dla odpowiedzi modelu LLM. Takie podejście zwiększa dokładność, zmniejsza liczbę odpowiedzi generowanych przez sztuczną inteligencję, które mogą być nieprawidłowe, i zapewnia, że odpowiedzi są oparte na faktach, które kontrolujesz.

Jak działa potok RAG

RAG pipeline składa się z kilku kluczowych elementów, które współpracują ze sobą, aby zapewnić dokładne i odpowiednie odpowiedzi. Rag można traktować jako sekwencję kroków, które współpracują ze sobą:

  • Przygotowywanie i przechowywanie zawartości: podziel dokumenty na mniejsze fragmenty i zapisz je w celu wydajnego wyszukiwania.
  • Tworzenie osadzania: przekonwertuj tekst na wektory liczbowe, które przechwytują znaczenie, dzięki czemu można znaleźć powiązaną zawartość, nawet jeśli wyrazy są inne.
  • Pobieranie odpowiednich fragmentów: gdy użytkownik zadaje pytanie, system znajdzie najbardziej podobne fragmenty w bazie danych przy użyciu wyszukiwania podobieństwa wektorów.
  • Generuj odpowiedź: Pobrane fragmenty są zwykle przekazywane do aplikacji, która wywołuje model językowy, co z kolei tworzy odpowiedź języka naturalnego na podstawie rzeczywistych danych.

Dlatego, jeśli na przykład polityki firmy są przechowywane w bazie danych, pipeline RAG może pomóc w znalezieniu najbardziej odpowiednich polityk dla własnej firmy zamiast ogólnych danych, które mógłby dostarczyć LLM sam w sobie.

Gdzie usługa Azure Database for PostgreSQL pasuje do przepływu RAG

Usługa Azure Database for PostgreSQL może obsługiwać warstwę pobierania tego potoku. Usługa Azure Database for PostgreSQL obejmuje wbudowaną obsługę osadzania wektorów i wyszukiwania podobieństwa. Oznacza to, że możesz efektywnie zarządzać osadzaniami i wykonywać zapytania za pomocą funkcji bazy danych. Usługa Azure Database for PostgreSQL udostępnia dwa kluczowe rozszerzenia, które umożliwiają ten proces:

  • azure_ai rozszerzenie: wywołuje usługi Azure AI, takie jak Azure OpenAI, w celu generowania osadzeń bezpośrednio z SQL. Udostępnia również operatory semantyczne, które mogą generować odpowiedzi (azure_ai.generate), oceniać stwierdzenia (azure_ai.is_true), wyodrębniać wartości ustrukturyzowane (azure_ai.extract) i ustalać na nowo porządek dokumentów (azure_ai.rank) wewnątrz bazy danych. Te możliwości umożliwiają zaawansowane generowanie i rozumowanie przepływów pracy bez opuszczania środowiska SQL.
  • vector (pgvector) extension: przechowuje osadzanie w bazie danych i efektywnie uruchamia wyszukiwania podobieństwa.

Dlatego nie ma potrzeby oddzielnej bazy danych wektorów. Możesz przechowywać wszystkie elementy, takie jak dane ustrukturyzowane, metadane i embeddingi, wewnątrz instancji bazy danych PostgreSQL, co również upraszcza zarządzanie i zabezpieczenia.

Prosty przykład RAG

Usługa Azure Database for PostgreSQL może na przykład służyć do implementowania potoku RAG dla wewnętrznej bazy wiedzy firmy. Aplikacja używa usługi Azure Database for PostgreSQL do wykonywania zapytań dotyczących bazy danych pod kątem odpowiednich dokumentów i używania ich jako kontekstu do generowania odpowiedzi. Następnie przekażesz ten kontekst do modelu językowego, aby utworzyć odpowiedź w języku naturalnym.

Załóżmy na przykład, że masz tabelę zasad firmy o nazwie company_policies. Za pomocą azure_ai rozszerzenia można wygenerować osadzanie dla każdej zasady i zapisać je wraz z tekstem w tej samej tabeli. W ten sposób, gdy pracownicy zadają pytanie, to pytanie jest zamieniane w osadzanie i można od razu ściągnąć pasujące zasady. Następujące polecenia SQL ilustrują sposób konfigurowania tego polecenia:

Uwaga / Notatka

Przed uruchomieniem poleceń CREATE EXTENSION w celu włączenia tych rozszerzeń należy dodać azure_aivector do parametru azure.extensionsServer na serwerze Azure Database for PostgreSQL za pośrednictwem Azure Portal lub poleceń CLI.

-- Enable required extensions (to enable, only need to be run once per database)
CREATE EXTENSION IF NOT EXISTS azure_ai;
CREATE EXTENSION IF NOT EXISTS vector;

-- Configure Azure OpenAI endpoint and key (requires azure_ai_settings_manager role)
SELECT azure_ai.set_setting('azure_openai.endpoint', '<your-endpoint>');
SELECT azure_ai.set_setting('azure_openai.subscription_key', '<your-key>');

-- Create a table to store documents and embeddings
CREATE TABLE IF NOT EXISTS company_policies (
    id bigserial PRIMARY KEY,
    title text,
    policy_text text NOT NULL,
    embedding vector(1536) -- set to your model's dimension
);

-- Insert a sample row and generate its embedding in one step.
-- Obviously your table will have hundreds, thousands or millions of rows.
INSERT INTO company_policies (title, policy_text, embedding)
VALUES (
    'vacation policy',
    'Employees receive 15 vacation days per year. Unused days can roll over to the next year.',
    azure_openai.create_embeddings('<embedding-deployment-name>',
                                   'Employees receive 15 vacation days per year. Unused days can roll over to the next year.')
);

-- Run a quick test to retrieve the most similar chunk to a sample question.
-- Notice how you are converting the question into an embedding for the search,
-- then using that embedding to find the closest match in the database.
SELECT id, title, policy_text
FROM company_policies
ORDER BY embedding <-> azure_openai.create_embeddings('<embedding-deployment-name>',
                                                      'How many vacation days do employees get?')::vector
LIMIT 1;

-- This query returns the most relevant row that matches the query. 
-- The final step on a RAG is to pass 'both' the returned row(s) and the question back 
-- to your application. Your application then passes that context to the LLM
-- to generate a natural language answer.

W tym przykładzie tabela jest teraz gotowa do przechowywania zasad i ich osadzania. Zasady można wstawić do tabeli przy użyciu poleceń SQL, a osadzanie jest generowane przy użyciu usług Azure AI. W kolejnych sekcjach omawiasz indeksowanie i wykonywanie zapytań dotyczących tych osadzeń.

Niezależnie od złożoności własnych rozwiązań należy użyć podobnego podejścia do skonfigurowania własnego środowiska. Najpierw należy włączyć wymagane rozszerzenia, a następnie utworzyć tabele z odpowiednimi kolumnami wektorów, a następnie rozpocząć wstawianie i osadzanie zawartości razem. Następnie zadajesz pytania, których osadzanie jest porównywane z osadzaniem tabeli. Na koniec wiersze zwrócone z bazy danych są wykorzystywane do zapewnienia kontekstu dla LLM w celu wygenerowania odpowiedzi w języku naturalnym. Te kroki umożliwiają łatwe tworzenie aplikacji RAG na bazie danych PostgreSQL.

Kluczowe wnioski

Usługa Azure Database for PostgreSQL może skutecznie implementować wzorce RAG, stosując wbudowane funkcje sztucznej inteligencji i wyszukiwania wektorów. azure_ai Rozszerzenie umożliwia bezproblemową integrację z usługami Azure OpenAI i Azure AI Services na potrzeby generowania osadzeń, tworzenia uzupełnień czatu oraz używania operatorów semantycznych do zadań, takich jak generowanie tekstu, wyodrębnianie informacji, ocena wiarygodności i rankingowanie — bezpośrednio w zapytaniach SQL. vector Rozszerzenie (pgvector) ułatwia wydajne przechowywanie i pobieranie osadzonych elementów, dzięki czemu można wykonywać wyszukiwania podobieństwa bez konieczności używania oddzielnej bazy danych wektorów. Zacznij od małych kroków przy wdrażaniu tych metod do nowych scenariuszy, stopniowo rozszerzając zakres, gdy doskonalisz swoje podejście we własnym środowisku.