Sdílet prostřednictvím


Načítání rozšířené generace (RAG) ve službě Azure AI Search

Načítání rozšířené generace (RAG) je architektura, která rozšiřuje možnosti rozsáhlého jazykového modelu (LLM), jako je ChatGPT, přidáním systému načítání informací, který poskytuje základní data. Když přidáte systém načítání informací, budete mít kontrolu nad uzemněním dat používaných LLM, když formuluje odpověď. U podnikového řešení architektura RAG znamená, že můžete omezit generování umělé inteligence na podnikový obsah zdrojový z vektorizovaných dokumentů a obrázků a dalších formátů dat, pokud pro tento obsah vkládáte modely.

Rozhodnutí o tom, který systém načítání informací se má použít, je kritický, protože určuje vstupy do LLM. Systém načítání informací by měl poskytovat:

  • Strategie indexování, které se načítají a aktualizují ve velkém měřítku pro veškerý obsah, s frekvencí, kterou potřebujete.

  • Možnosti dotazů a ladění relevance Systém by měl vrátit relevantní výsledky v krátkých formátech nezbytných pro splnění požadavků na délku tokenu vstupů LLM.

  • Zabezpečení, globální dosah a spolehlivost dat i operací

  • Integrace s vloženými modely pro indexování a modely chatu nebo jazykové modely pro načítání

Azure AI Search je osvědčené řešení pro načítání informací v architektuře RAG. Poskytuje možnosti indexování a dotazů s infrastrukturou a zabezpečením cloudu Azure. Prostřednictvím kódu a dalších komponent můžete navrhnout komplexní řešení RAG, které obsahuje všechny prvky pro generování umělé inteligence pro váš proprietární obsah.

Poznámka:

Začínáte s koncepty copilotu a RAG? Sledujte vektorové vyhledávání a nejmodernější načítání pro aplikace Generative AI.

Microsoft má několik integrovaných implementací pro použití služby Azure AI Search v řešení RAG.

Kurátorované přístupy usnadňují začátek, ale pro větší kontrolu nad architekturou potřebujete vlastní řešení. Tyto šablony vytvářejí ucelená řešení v:

Pokud nástroje a šablony nesplňují požadavky vaší aplikace, můžete vytvořit vlastní řešení RAG pomocí rozhraní API služby Azure AI Search. Ve zbývající části tohoto článku se dozvíte, jak Azure AI Search zapadá do vlastního řešení RAG.

Souhrnný přehled vzoru vypadá takto:

  • Začněte dotazem nebo požadavkem uživatele (výzva).
  • Odešlete ho do služby Azure AI Search a najděte relevantní informace.
  • Vrátí nejlépe seřazené výsledky hledání do LLM.
  • K vygenerování odpovědi na počáteční výzvu použijte porozumění přirozenému jazyku a možnosti odůvodnění LLM.

Azure AI Search poskytuje vstupy do výzvy LLM, ale nenatrénuje model. V architektuře RAG neexistuje žádné další školení. LLM je předem natrénovaný pomocí veřejných dat, ale generuje odpovědi, které jsou rozšířeny informacemi z retrieveru, v tomto případě Azure AI Search.

Vzory RAG, které zahrnují Azure AI Search, mají prvky uvedené na následujícím obrázku.

Diagram architektury načítání informací s vyhledáváním a protokolem ChatGPT

  • Uživatelské prostředí aplikace (webová aplikace) pro uživatelské prostředí
  • Aplikační server nebo orchestrátor (integrační a koordinační vrstva)
  • Azure AI Search (systém načítání informací)
  • Azure OpenAI (LLM pro generování AI)

Webová aplikace poskytuje uživatelské prostředí, které poskytuje prezentaci, kontext a interakci uživatele. Dotazy nebo výzvy od uživatele začínají tady. Vstupy procházejí vrstvou integrace a nejprve načítají informace, aby získaly výsledky hledání, ale také přejděte do LLM a nastavte kontext a záměr.

Aplikační server nebo orchestrátor je integrační kód, který koordinuje předání informací mezi načtením informací a LLM. Mezi běžná řešení patří LangChain ke koordinaci pracovního postupu. LangChain se integruje se službou Azure AI Search, což usnadňuje zahrnutí služby Azure AI Search jako načítáče do pracovního postupu. LlamaIndex a sémantické jádro jsou další možnosti.

Systém načítání informací poskytuje prohledávatelný index, logiku dotazu a datovou část (odpověď dotazu). Index vyhledávání může obsahovat vektory nebo obsah nevectoru. I když většina ukázek a ukázek obsahuje vektorová pole, není to požadavek. Dotaz se spustí pomocí existujícího vyhledávacího webu ve službě Azure AI Search, který dokáže zpracovat klíčové slovo (nebo termín) a vektorové dotazy. Index se vytvoří předem na základě schématu, které definujete, a načte se obsahem, který je zdrojem ze souborů, databází nebo úložiště.

LLM obdrží původní výzvu a výsledky služby Azure AI Search. LLM analyzuje výsledky a formuluje odpověď. Pokud je LLM ChatGPT, může interakce uživatele představovat konverzaci tam a zpět. Pokud používáte Davinci, může být dotaz plně složenou odpovědí. Řešení Azure s největší pravděpodobností používá Azure OpenAI, ale na této konkrétní službě není žádná pevná závislost.

Azure AI Search neposkytuje nativní integraci LLM pro toky výzvy nebo zachování chatu, takže potřebujete napsat kód, který zpracovává orchestraci a stav. Ukázkový zdroj (Azure-Samples/azure-search-openai-demo) najdete v podrobném plánu, který zahrnuje kompletní řešení. Doporučujeme také, aby Azure AI Studio vytvářelo řešení Azure AI Search založená na RAG, která se integrují s LLM.

Ve službě Azure AI Search se veškerý prohledávatelný obsah uloží do indexu vyhledávání, který je hostovaný ve vaší vyhledávací službě. Index vyhledávání je určený pro rychlé dotazy s dobou odezvy milisekund, takže její interní datové struktury existují pro podporu tohoto cíle. Index vyhledávání proto ukládá indexovaný obsah, ne celý obsah, jako jsou celé soubory PDF nebo obrázky. Datové struktury interně zahrnují invertované indexy tokenizovaného textu, vektorové indexy pro vkládání a nealterovaný text pro případy, kdy se vyžaduje doslovné porovnávání (například ve filtrech, přibližné vyhledávání, dotazy regulárních výrazů).

Při nastavování dat pro vaše řešení RAG použijete funkce, které vytvářejí a načítají index ve službě Azure AI Search. Index obsahuje pole, která duplikují nebo představují váš zdrojový obsah. Pole indexu může být jednoduchý přenos (název nebo popis ve zdrojovém dokumentu se stane názvem nebo popisem v indexu vyhledávání) nebo pole může obsahovat výstup externího procesu, jako je vektorizace nebo zpracování dovedností, které generuje reprezentaci nebo textový popis obrázku.

Vzhledem k tomu, že pravděpodobně víte, jaký druh obsahu chcete prohledávat, zvažte funkce indexování, které platí pro jednotlivé typy obsahu:

Typ obsahu Indexováno jako Funkce
text tokeny, nealterovaný text Indexery můžou načíst prostý text z jiných prostředků Azure, jako je Azure Storage a Cosmos DB. Do indexu můžete také odeslat libovolný obsah JSON. Pokud chcete upravit text v letu, použijte analyzátory a normalizátory k přidání lexikálního zpracování během indexování. Mapy synonym jsou užitečné, pokud ve zdrojových dokumentech chybí terminologie, která by se mohla použít v dotazu.
text vektory 1 Text může být blokovaný a vektorizovaný v kanálu indexeru nebo externě zpracován a pak indexován jako vektorová pole v indexu.
image tokeny, nealterovaný text 2 Dovednosti pro OCR a analýzu obrázků můžou zpracovávat obrázky pro rozpoznávání textu nebo charakteristiky obrázků. Informace o obrázku se převedou na prohledávatelný text a přidají se do indexu. Dovednosti mají požadavek indexeru.
image vektory 1 Obrázky lze vektorizovat v kanálu indexeru nebo externě zpracovávat pro matematickou reprezentaci obsahu obrázku a pak indexovat jako vektorová pole v indexu. Multimodální nebo opensourcový model Azure AI Vision, jako je OpenAI CLIP, můžete použít k vektorizaci textu a obrázků ve stejném prostoru pro vložení.

1 Azure AI Search poskytuje integrované bloky dat a vektorizaci, ale musíte mít závislost na indexerech a sadách dovedností. Pokud nemůžete použít indexer, může vám s řešením úplného zásobníku pomoct sémantickým jádrem Microsoftu nebo jinými nabídkami komunity. Ukázky kódu zobrazující oba přístupy najdete v úložišti azure-search-vectors.

2 Dovednosti jsou integrovanou podporou použité umělé inteligence. V případě analýzy OCR a image kanál indexování provádí interní volání rozhraní API služby Azure AI Vision. Tyto dovednosti předávají extrahovaný obrázek do Azure AI ke zpracování a dostanou výstup jako text indexovaný službou Azure AI Search. Dovednosti se také používají k integrovanému vytváření bloků dat (dovednost rozdělení textu) a integrované vkládání (dovednosti, které volají multimodální azure AI Vision, Azure OpenAI a modely v katalogu modelů Azure AI Studio.)

Vektory poskytují nejlepší ubytování pro rozdílný obsah (více formátů souborů a jazyků), protože obsah je vyjádřen univerzálně v matematických reprezentacích. Vektory také podporují vyhledávání podobnosti: porovnávání souřadnic, které jsou nejvíce podobné vektorovém dotazu. Ve srovnání s vyhledáváním klíčových slov (nebo vyhledáváním termínů), které odpovídá tokenizovaným termínům, je vyhledávání podobnosti více nuancí. Je lepší volbou, pokud obsah nebo dotazy obsahuje nejednoznačnost nebo požadavky na interpretaci.

Jakmile jsou vaše data v indexu vyhledávání, použijete k načtení obsahu možnosti dotazu služby Azure AI Search.

V případě jiného vzoru než RAG provede dotazy odezvu z vyhledávacího klienta. Dotaz se odešle, spustí se na vyhledávacím webu a odpověď vrácená klientské aplikaci. Odpověď nebo výsledky hledání se skládají výhradně z doslovného obsahu nalezeného v indexu.

V modelu RAG jsou dotazy a odpovědi sladěné mezi vyhledávacím webem a LLM. Dotaz nebo dotaz uživatele se přepošla do vyhledávacího webu i do LLM jako výzva. Výsledky hledání se vrátí z vyhledávacího webu a přesměrují se do LLM. Odpověď, která ji vrátí zpět uživateli, je generovat umělou inteligenci, a to buď sumaci, nebo odpověď z LLM.

Ve službě Azure AI Search neexistuje žádný typ dotazu , ani sémantické nebo vektorové vyhledávání, které kompozuje nové odpovědi. Pouze LLM poskytuje generování umělé inteligence. Tady jsou možnosti ve službě Azure AI Search, které se používají k formulaci dotazů:

Funkce dotazu Účel Proč ho použít
Jednoduchá nebo úplná syntaxe Lucene Provádění dotazů u textového a nevectoru číselného obsahu Fulltextové vyhledávání je nejvhodnější pro přesnou shodu místo podobných shod. Fulltextové vyhledávací dotazy jsou seřazené pomocí algoritmu BM25 a podporují ladění relevance prostřednictvím hodnoticích profilů. Podporuje také filtry a omezující vlastnosti.
Filtry a omezující vlastnosti Platí jenom pro textová nebo číselná pole (nevector). Zmenšuje oblast hledání na základě kritérií zahrnutí nebo vyloučení. Přidává přesnost k dotazům.
Sémantický ranker Znovu seřadí sadu výsledků BM25 pomocí sémantických modelů. Vytvoří stručné titulky a odpovědi, které jsou užitečné jako vstupy LLM. Snadnější než bodovací profily a v závislosti na obsahu je spolehlivější technika optimalizace relevance.
Vektorové vyhledávání Provádění dotazu u vektorových polí pro vyhledávání podobnosti, kde řetězec dotazu je jeden nebo více vektorů. Vektory můžou představovat všechny typy obsahu v libovolném jazyce.
Hybridní vyhledávání Kombinuje všechny výše uvedené techniky dotazu. Vektorové a nevectorové dotazy se provádějí paralelně a vrací se ve sjednocené sadě výsledků. Nejvýznamnějším nárůstem přesnosti a úplnosti jsou hybridní dotazy.

Strukturování odpovědi dotazu

Odpověď dotazu poskytuje vstup do LLM, takže kvalita výsledků hledání je pro úspěch důležitá. Výsledky jsou tabulková sada řádků. Složení nebo struktura výsledků závisí na:

  • Pole, která určují, které části indexu jsou součástí odpovědi.
  • Řádky, které představují shodu z indexu

Pole se zobrazí ve výsledcích hledání, pokud je atribut "retrievable". Definice pole ve schématu indexu má atributy a ty určují, jestli se pole používá v odpovědi. Ve výsledcích dotazu na celý text nebo vektorový dotaz se vrátí pouze pole s možností načtení. Ve výchozím nastavení se vrátí všechna pole s možností načítání, ale k zadání podmnožině můžete použít možnost "select". Kromě možnosti "načítání" nejsou v poli žádná omezení. Pole můžou mít libovolnou délku nebo typ. Pokud jde o délku, ve službě Azure AI Search neexistuje limit maximální délky pole, ale existuje omezení velikosti požadavku rozhraní API.

Řádky jsou shodné s dotazem, seřazené podle relevance, podobnosti nebo obojího. Ve výchozím nastavení jsou výsledky omezeny na prvních 50 shod pro fulltextové vyhledávání nebo shody k-nejbližšího souseda pro vektorové vyhledávání. Výchozí hodnoty můžete změnit tak, aby se limit zvýšil nebo snížil až na 1 000 dokumentů. K načtení výsledků jako řady stránkovaných výsledků můžete použít také horní a přeskočení parametrů stránkování.

Maximalizace relevance a úplnosti

Při práci se složitými procesy je důležité, aby každý krok přidal hodnotu a zlepšil kvalitu konečného výsledku. Na straně načítání informací je optimalizace relevance aktivitou, která zlepšuje kvalitu výsledků odeslaných do LLM. Ve výsledcích by měly být zahrnuty pouze ty nejrelevavantnější nebo nejpodobnější odpovídající dokumenty.

Tady je několik tipů pro maximalizaci relevance a úplnosti:

V porovnání a srovnávacím testování vytvářejí hybridní dotazy s textovými a vektorovými poli doplněné sémantickým řazením nejrelevavantnější výsledky.

Příklad kódu pracovního postupu RAG

Následující kód Pythonu ukazuje základní součásti pracovního postupu RAG ve službě Azure AI Search. Potřebujete nastavit klienty, definovat systémovou výzvu a zadat dotaz. Výzva říká LLM, aby používal pouze výsledky z dotazu a jak vrátit výsledky. Další kroky založené na tomto příkladu najdete v tomto rychlém startu RAG.

V případě cloudu Azure Government upravte koncový bod rozhraní API poskytovatele 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)

Integrační kód a LLM

Řešení RAG, které zahrnuje Azure AI Search, může využívat integrované funkce pro vytváření bloků a vektorizace dat nebo můžete vytvořit vlastní pomocí platforem, jako je sémantické jádro, LangChain nebo LlamaIndex.

Poznámkové bloky v ukázkovém úložišti jsou skvělým výchozím bodem, protože zobrazují vzory integrace LLM. Většina kódu v řešení RAG se skládá z volání LLM, takže potřebujete vyvinout pochopení toho, jak tato rozhraní API fungují, což je mimo rozsah tohoto článku.

Jak začít

Poznámka:

Některé funkce Azure AI Search jsou určené pro lidskou interakci a nejsou užitečné ve vzoru RAG. Konkrétně můžete přeskočit funkce, jako jsou automatické dokončování a návrhy. Další funkce, jako jsou omezující vlastnosti a řazení, můžou být užitečné, ale ve scénáři RAG by byly neobvyklé.

Viz také