Udostępnij za pośrednictwem


Pobieranie rozszerzonej generacji (RAG) w usłudze Azure AI Search

Pobieranie rozszerzonej generacji (RAG) to architektura, która rozszerza możliwości modelu dużego języka, takiego jak ChatGPT, dodając system pobierania informacji, który zapewnia dane uziemione. Dodanie systemu pobierania informacji zapewnia kontrolę nad danymi uziemienia używanymi przez moduł LLM podczas formułowania odpowiedzi. W przypadku rozwiązania dla przedsiębiorstw architektura RAG oznacza, że możesz ograniczyć generowanie sztucznej inteligencji do zawartości przedsiębiorstwa pochodzącej z wektoryzowanych dokumentów i obrazów oraz innych formatów danych, jeśli osadzasz modele dla tej zawartości.

Decyzja o tym, który system pobierania informacji ma kluczowe znaczenie, ponieważ określa dane wejściowe w usłudze LLM. System pobierania informacji powinien podać następujące informacje:

  • Strategie indeksowania, które ładują się i odświeżają na dużą skalę dla całej zawartości, z wymaganą częstotliwością.

  • Możliwości zapytań i dostrajanie istotności. System powinien zwrócić odpowiednie wyniki w formatach krótkich formularzy niezbędnych do spełnienia wymagań dotyczących długości tokenu danych wejściowych LLM.

  • Bezpieczeństwo, globalny zasięg i niezawodność danych i operacji.

  • Integracja z modelami osadzania na potrzeby indeksowania oraz modeli czatów lub modeli interpretacji języka na potrzeby pobierania.

Usługa Azure AI Search to sprawdzone rozwiązanie do pobierania informacji w architekturze RAG. Zapewnia ona możliwości indeksowania i wykonywania zapytań z infrastrukturą i zabezpieczeniami chmury platformy Azure. Za pomocą kodu i innych składników można zaprojektować kompleksowe rozwiązanie RAG, które zawiera wszystkie elementy generowania sztucznej inteligencji w ramach własnej zawartości.

Uwaga

Nowe pojęcia dotyczące copilot i RAG? Obejrzyj wyszukiwanie wektorów i stan pobierania sztuki dla aplikacji generacyjnych sztucznej inteligencji.

Firma Microsoft ma kilka wbudowanych implementacji do korzystania z usługi Azure AI Search w rozwiązaniu RAG.

Wyselekcjonowane podejścia ułatwiają rozpoczęcie pracy, ale aby uzyskać większą kontrolę nad architekturą, potrzebujesz rozwiązania niestandardowego. Te szablony tworzą kompleksowe rozwiązania:

Jeśli narzędzia i szablony nie spełniają wymagań aplikacji, możesz utworzyć niestandardowe rozwiązanie RAG przy użyciu interfejsów API usługi Azure AI Search. W pozostałej części tego artykułu opisano, jak usługa Azure AI Search pasuje do niestandardowego rozwiązania RAG.

Ogólne podsumowanie wzorca wygląda następująco:

  • Zacznij od pytania użytkownika lub żądania (monit).
  • Wyślij ją do usługi Azure AI Search, aby znaleźć odpowiednie informacje.
  • Zwróć najwyżej sklasyfikowane wyniki wyszukiwania do usługi LLM.
  • Użyj funkcji interpretacji języka naturalnego i rozumowania w usłudze LLM, aby wygenerować odpowiedź na początkowy monit.

Usługa Azure AI Search udostępnia dane wejściowe do monitu LLM, ale nie trenuje modelu. W architekturze RAG nie ma dodatkowych szkoleń. Usługa LLM jest wstępnie wytrenowana przy użyciu danych publicznych, ale generuje odpowiedzi rozszerzone przez informacje z modułu pobierania, w tym przypadku azure AI Search.

Wzorce RAG obejmujące usługę Azure AI Search zawierają elementy wskazane na poniższej ilustracji.

Diagram architektury pobierania informacji z wyszukiwaniem i funkcją ChatGPT.

  • Środowisko użytkownika aplikacji (aplikacja internetowa) dla środowiska użytkownika
  • Serwer aplikacji lub orkiestrator (warstwa integracji i koordynacji)
  • Azure AI Search (system pobierania informacji)
  • Azure OpenAI (LLM for generative AI)

Aplikacja internetowa zapewnia środowisko użytkownika, zapewniając prezentację, kontekst i interakcję użytkownika. Pytania lub monity od użytkownika zaczynają się tutaj. Dane wejściowe przechodzą przez warstwę integracji, przechodząc najpierw do pobierania informacji w celu uzyskania wyników wyszukiwania, ale także przejdź do usługi LLM, aby ustawić kontekst i intencję.

Serwer aplikacji lub koordynator to kod integracji, który koordynuje przekazywanie między pobieraniem informacji a usługą LLM. Typowe rozwiązania obejmują LangChain w celu koordynowania przepływu pracy. Aplikacja LangChain integruje się z usługą Azure AI Search, co ułatwia dołączanie usługi Azure AI Search jako elementu pobierającego do przepływu pracy. LlamaIndex i Semantic Kernel to inne opcje.

System pobierania informacji udostępnia indeks z możliwością wyszukiwania, logikę zapytań i ładunek (odpowiedź zapytania). Indeks wyszukiwania może zawierać wektory lub zawartość niewektorów. Chociaż większość przykładów i pokazów zawiera pola wektorów, nie jest to wymagane. Zapytanie jest wykonywane przy użyciu istniejącej wyszukiwarki w usłudze Azure AI Search, która może obsługiwać zapytania słów kluczowych (lub terminów) i wektorów. Indeks jest tworzony z wyprzedzeniem na podstawie zdefiniowanego schematu i ładowany z zawartością źródłową z plików, baz danych lub magazynu.

Usługa LLM otrzymuje oryginalny monit oraz wyniki z usługi Azure AI Search. LlM analizuje wyniki i formułuje odpowiedź. Jeśli llM jest ChatGPT, interakcja użytkownika może być konwersacją w tył i z powrotem. Jeśli używasz języka Davinci, monit może być w pełni skomponowaną odpowiedzią. Rozwiązanie platformy Azure najprawdopodobniej korzysta z usługi Azure OpenAI, ale nie ma twardej zależności od tej konkretnej usługi.

Usługa Azure AI Search nie zapewnia natywnej integracji z usługą LLM na potrzeby przepływów monitów ani zachowywania czatów, dlatego musisz napisać kod obsługujący aranżację i stan. Możesz zapoznać się ze źródłem demonstracyjnym (Azure-Samples/azure-search-openai-demo) pod kątem strategii tego, co wiąże się z pełnym rozwiązaniem. Zalecamy również program Azure AI Studio do tworzenia rozwiązań azure AI Search opartych na usłudze RAG, które integrują się z usługami LLM.

W usłudze Azure AI Search cała zawartość z możliwością wyszukiwania jest przechowywana w indeksie wyszukiwania hostowanym w usłudze wyszukiwania. Indeks wyszukiwania jest przeznaczony dla szybkich zapytań z milisekundowymi czasami odpowiedzi, więc jej wewnętrzne struktury danych istnieją w celu obsługi tego celu. W tym celu indeks wyszukiwania przechowuje indeksowaną zawartość, a nie całe pliki zawartości, takie jak całe pliki PDF lub obrazy. Wewnętrznie struktury danych obejmują odwrócone indeksy tokenizowanego tekstu, indeksy wektorów do osadzania i niezmierzone tekst w przypadkach, w których wymagane jest dopasowanie dosłowne (na przykład w filtrach, wyszukiwanie rozmyte, zapytania wyrażeń regularnych).

Podczas konfigurowania danych dla rozwiązania RAG użyjesz funkcji, które tworzą i ładują indeks w usłudze Azure AI Search. Indeks zawiera pola, które duplikują lub reprezentują zawartość źródłową. Pole indeksu może być prostym transferem (tytuł lub opis w dokumencie źródłowym staje się tytułem lub opisem w indeksie wyszukiwania), albo pole może zawierać dane wyjściowe procesu zewnętrznego, takie jak wektoryzacja lub przetwarzanie umiejętności, które generuje reprezentację lub opis tekstu obrazu.

Ponieważ prawdopodobnie wiesz, jakiego rodzaju zawartość chcesz przeszukiwać, rozważ funkcje indeksowania, które mają zastosowanie do każdego typu zawartości:

Typ zawartości Indeksowane jako Funkcje
text tokeny, tekst niezbrojony Indeksatory mogą ściągać zwykły tekst z innych zasobów platformy Azure, takich jak Azure Storage i Cosmos DB. Możesz również wypchnąć dowolną zawartość JSON do indeksu. Aby zmodyfikować tekst w locie, użyj analizatorów i normalizacji, aby dodać przetwarzanie leksykalne podczas indeksowania. Mapy synonimów są przydatne, jeśli brakuje terminologii źródłowej, która może być używana w zapytaniu.
text wektory 1 Tekst może być fragmentowany i wektoryzowany w potoku indeksatora lub obsługiwany zewnętrznie, a następnie indeksowany jako pola wektorowe w indeksie.
obraz tokeny, tekst niezbrojony 2 Umiejętności dotyczące rozpoznawania znaków OCR i analizy obrazów mogą przetwarzać obrazy na potrzeby rozpoznawania tekstu lub cech obrazu. Informacje o obrazie są konwertowane na tekst z możliwością wyszukiwania i dodawane do indeksu. Umiejętności mają wymaganie indeksatora.
obraz wektory 1 Obrazy mogą być wektorowane w potoku indeksatora lub obsługiwane zewnętrznie w celu matematycznej reprezentacji zawartości obrazu, a następnie indeksowane jako pola wektorowe w indeksie. Aby wektoryzować tekst i obrazy w tym samym miejscu osadzania, można użyć wielomodalnego przetwarzania obrazów usługi Azure AI Vision lub modelu open source, takiego jak OpenAI CLIP .

1 Usługa Azure AI Search zapewnia zintegrowane fragmentowanie i wektoryzacja danych, ale musisz mieć zależność od indeksatorów i zestawów umiejętności. Jeśli nie możesz użyć indeksatora, semantyczne jądro firmy Microsoft lub inne oferty społeczności mogą pomóc w rozwiązaniu pełnego stosu. Przykłady kodu przedstawiające oba podejścia można znaleźć w repozytorium azure-search-vectors.

2 Umiejętności są wbudowane w obsługę stosowanej sztucznej inteligencji. W przypadku funkcji OCR i Analizy obrazów potok indeksowania wykonuje wewnętrzne wywołanie interfejsów API usługi Azure AI Vision. Te umiejętności przekazują wyodrębniony obraz do usługi Azure AI na potrzeby przetwarzania i odbierają dane wyjściowe jako tekst indeksowany przez usługę Azure AI Search. Umiejętności są również używane do zintegrowanych fragmentów danych (umiejętność dzielenia tekstu) i zintegrowanego osadzania (umiejętności, które nazywają multimodalne funkcje Azure AI Vision, Azure OpenAI i modeli w katalogu modeli usługi Azure AI Studio).

Wektory zapewniają najlepsze zakwaterowanie dla różnej zawartości (wiele formatów plików i języków), ponieważ zawartość jest wyrażana powszechnie w reprezentacjach matematycznych. Wektory obsługują również wyszukiwanie podobieństwa: dopasowywanie na współrzędnych, które są najbardziej podobne do zapytania wektorowego. W porównaniu z wyszukiwaniem słów kluczowych (lub wyszukiwaniem terminów), które pasuje do tokenizowanych terminów, wyszukiwanie podobieństwa jest bardziej zniuansowane. Jest to lepszy wybór, jeśli istnieje niejednoznaczność lub wymagania dotyczące interpretacji w zawartości lub w zapytaniach.

Gdy dane są w indeksie wyszukiwania, możesz pobrać zawartość za pomocą funkcji zapytań usługi Azure AI Search.

W przypadku wzorca innego niż RAG zapytania tworzą rundę od klienta wyszukiwania. Zapytanie jest przesyłane, wykonywane w wyszukiwarce, a odpowiedź zwrócona do aplikacji klienckiej. Odpowiedź lub wyniki wyszukiwania składają się wyłącznie z zawartości dosłownej znalezionej w indeksie.

We wzorcu RAG zapytania i odpowiedzi są koordynowane między wyszukiwarką a usługą LLM. Pytanie lub zapytanie użytkownika jest przekazywane zarówno do wyszukiwarki, jak i do usługi LLM jako monitu. Wyniki wyszukiwania pochodzą z wyszukiwarki i są przekierowywane do usługi LLM. Odpowiedź, która sprawia, że powrót do użytkownika to generowanie sztucznej inteligencji — sumowanie lub odpowiedź z usługi LLM.

W usłudze Azure AI Search nie ma typu zapytania — nawet wyszukiwania semantycznego ani wektorowego — które komponuje nowe odpowiedzi. Tylko usługa LLM zapewnia generowanie sztucznej inteligencji. Poniżej przedstawiono możliwości usługi Azure AI Search, które są używane do formułowania zapytań:

Funkcja kwerendy Purpose Dlaczego używać tej opcji
Prosta lub pełna składnia Lucene Wykonywanie zapytań względem zawartości tekstowej i niewektorowej Wyszukiwanie pełnotekstowe najlepiej sprawdza się pod kątem dokładnych dopasowań, a nie podobnych dopasowań. Zapytania wyszukiwania pełnotekstowego są klasyfikowane przy użyciu algorytmu BM25 i obsługują dostrajanie istotności za pośrednictwem profilów oceniania. Obsługuje również filtry i aspekty.
Filtry i aspekty Dotyczy tylko pól tekstowych lub liczbowych (niewektorów). Zmniejsza obszar powierzchni wyszukiwania na podstawie kryteriów dołączania lub wykluczania. Zwiększa precyzję zapytań.
Ranga semantyczna Ponownie plasuje zestaw wyników BM25 przy użyciu modeli semantycznych. Tworzy krótkie podpisy i odpowiedzi, które są przydatne jako dane wejściowe LLM. Łatwiejsze niż ocenianie profilów i w zależności od zawartości bardziej niezawodna technika dostrajania istotności.
Wyszukiwanie wektorowe Wykonywanie zapytań w polach wektorów na potrzeby wyszukiwania podobieństwa, gdzie ciąg zapytania jest co najmniej jednym wektorem. Wektory mogą reprezentować wszystkie typy zawartości w dowolnym języku.
Wyszukiwanie hybrydowe Łączy dowolne lub wszystkie powyższe techniki zapytań. Zapytania wektorowe i niewektorowe są wykonywane równolegle i są zwracane w ujednoliconym zestawie wyników. Najbardziej znaczące zyski w precyzji i kompletności dotyczą zapytań hybrydowych.

Struktura odpowiedzi zapytania

Odpowiedź zapytania dostarcza dane wejściowe do usługi LLM, więc jakość wyników wyszukiwania ma kluczowe znaczenie dla powodzenia. Wyniki to tabelaryczny zestaw wierszy. Kompozycja lub struktura wyników zależy od:

  • Pola określające, które części indeksu są uwzględnione w odpowiedzi.
  • Wiersze reprezentujące dopasowanie z indeksu.

Pola są wyświetlane w wynikach wyszukiwania, gdy atrybut jest "możliwy do pobrania". Definicja pola w schemacie indeksu ma atrybuty, a te określają, czy pole jest używane w odpowiedzi. Tylko "możliwe do pobrania" pola są zwracane w wynikach zapytania pełnotekstowego lub wektorowego. Domyślnie zwracane są wszystkie pola "możliwe do pobrania", ale można użyć opcji "select", aby określić podzbiór. Poza "pobieraniem" nie ma żadnych ograniczeń dotyczących pola. Pola mogą mieć dowolną długość lub typ. Jeśli chodzi o długość, w usłudze Azure AI Search nie ma maksymalnego limitu długości pola, ale istnieją limity rozmiaru żądania interfejsu API.

Wiersze są zgodne z zapytaniem, sklasyfikowane według istotności, podobieństwa lub obu tych elementów. Domyślnie wyniki są ograniczone do 50 pierwszych dopasowań dla wyszukiwania pełnotekstowego lub k najbliższych sąsiadów do wyszukiwania wektorowego. Możesz zmienić wartości domyślne, aby zwiększyć lub zmniejszyć limit maksymalnie 1000 dokumentów. Możesz również użyć pierwszych i pomijanych parametrów stronicowania, aby pobrać wyniki jako serię stronicowanych wyników.

Maksymalizowanie istotności i kompletności

Podczas pracy ze złożonymi procesami, dużą ilością danych i oczekiwaniami dotyczącymi odpowiedzi milisekund ważne jest, aby każdy krok zwiększał wartość i poprawia jakość wyniku końcowego. Po stronie pobierania informacji dostrajanie istotności jest działaniem, które poprawia jakość wyników wysyłanych do usługi LLM. W wynikach należy uwzględnić tylko najbardziej istotne lub najbardziej podobne pasujące dokumenty.

Poniżej przedstawiono kilka wskazówek dotyczących maksymalizacji istotności i kompletności:

  • Zapytania hybrydowe łączące wyszukiwanie słów kluczowych (niewektorów) i wyszukiwanie wektorów zapewniają maksymalną kompletność, gdy dane wejściowe są takie same. W zapytaniu hybrydowym, jeśli podwoisz te same dane wejściowe, ciąg tekstowy i jego odpowiednik wektorowy generują zapytania równoległe dla słów kluczowych i wyszukiwania podobieństwa, zwracając najbardziej odpowiednie dopasowania z każdego typu zapytania w ujednoliconym zestawie wyników.

  • Zapytania hybrydowe mogą być również ekspansywne. Wyszukiwanie podobieństwa można uruchamiać za pośrednictwem pełnej fragmentowanej zawartości i wyszukiwania słów kluczowych nad nazwami, a wszystko to w tym samym żądaniu.

  • Dostrajanie istotności jest obsługiwane za pomocą następujących funkcji:

W porównaniu i testach porównawczych zapytania hybrydowe z polami tekstowymi i wektorowymi, uzupełnione o klasyfikację semantyczną, generują najbardziej odpowiednie wyniki.

Przykładowy kod dla przepływu pracy RAG

Poniższy kod w języku Python przedstawia podstawowe składniki przepływu pracy RAG w usłudze Azure AI Search. Należy skonfigurować klientów, zdefiniować monit systemowy i podać zapytanie. Monit informuje moduł LLM, aby używał tylko wyników zapytania i sposobu zwracania wyników. Aby uzyskać więcej kroków na podstawie tego przykładu, zobacz ten przewodnik Szybki start RAG.

W przypadku chmury Azure Government zmodyfikuj punkt końcowy interfejsu API u dostawcy tokenu na "https://cognitiveservices.azure.us/.default".

# Set up the query for generating responses
from azure.identity import DefaultAzureCredential
from azure.identity import get_bearer_token_provider
from azure.search.documents import SearchClient
from openai import AzureOpenAI

credential = DefaultAzureCredential()
token_provider = get_bearer_token_provider(credential, "https://cognitiveservices.azure.com/.default")
openai_client = AzureOpenAI(
    api_version="2024-06-01",
    azure_endpoint=AZURE_OPENAI_ACCOUNT,
    azure_ad_token_provider=token_provider
)

search_client = SearchClient(
    endpoint=AZURE_SEARCH_SERVICE,
    index_name="hotels-sample-index",
    credential=credential
)

# This prompt provides instructions to the model. 
# The prompt includes the query and the source, which are specified further down in the code.
GROUNDED_PROMPT="""
You are a friendly assistant that recommends hotels based on activities and amenities.
Answer the query using only the sources provided below in a friendly and concise bulleted manner.
Answer ONLY with the facts listed in the list of sources below.
If there isn't enough information below, say you don't know.
Do not generate answers that don't use the sources below.
Query: {query}
Sources:\n{sources}
"""

# The query is sent to the search engine, but it's also passed in the prompt
query="Can you recommend a few hotels near the ocean with beach access and good views"

# Retrieve the selected fields from the search index related to the question
search_results = search_client.search(
    search_text=query,
    top=5,
    select="Description,HotelName,Tags"
)
sources_formatted = "\n".join([f'{document["HotelName"]}:{document["Description"]}:{document["Tags"]}' for document in search_results])

response = openai_client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": GROUNDED_PROMPT.format(query=query, sources=sources_formatted)
        }
    ],
    model="gpt-35"
)

print(response.choices[0].message.content)

Kod integracji i moduły LLM

Rozwiązanie RAG, które obejmuje usługę Azure AI Search, może korzystać z wbudowanych funkcji fragmentowania i wektoryzacji danych lub tworzyć własne przy użyciu platform, takich jak Semantic Kernel, LangChain lub LlamaIndex.

Notesy w repozytorium demonstracyjnym są doskonałym punktem wyjścia, ponieważ pokazują wzorce integracji z usługą LLM. Większość kodu w rozwiązaniu RAG składa się z wywołań do usługi LLM, więc musisz opracować informacje o sposobie działania tych interfejsów API, które wykraczają poza zakres tego artykułu.

Pierwsze kroki

Uwaga

Niektóre funkcje usługi Azure AI Search są przeznaczone do interakcji człowieka i nie są przydatne we wzorcu RAG. W szczególności możesz pominąć funkcje, takie jak autouzupełnianie i sugestie. Inne funkcje, takie jak aspekty i kolejność, mogą być przydatne, ale byłyby rzadkie w scenariuszu RAG.

Zobacz też