Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Retrieval Augmented Generation (RAG) ist ein Design Pattern, das die Fähigkeiten eines Chat-Komplettierungsmodells wie ChatGPT erweitert, indem ein Schritt zur Informationsabrufung hinzugefügt wird, der Ihre proprietären Unternehmensinhalte zur Formulierung der Antwort einbezieht. Für eine Unternehmenslösung ist es möglich, die generative KI vollständig auf Ihre Unternehmensinhalte zu beschränken.
Die Entscheidung darüber, welches Informationsempfangssystem verwendet werden soll, ist entscheidend, da sie die Eingaben für das LLM bestimmt. Das Informationsempfangssystem sollte Folgendes bereitstellen:
Indizierungsstrategien, die skaliert geladen und aktualisiert werden, für alle Ihre Inhalte in der von Ihnen benötigten Häufigkeit.
Abfragefunktionen und Relevanzoptimierung. Das System sollte relevante Ergebnisse in den kurzformatigen Formaten zurückgeben, die erforderlich sind, um die Tokenlängenanforderungen von LLM-Eingaben (Large Language Model) zu erfüllen.
Sicherheit, globale Reichweite und Zuverlässigkeit sowohl für Daten als auch für Vorgänge.
Integration in Einbettungsmodelle für die Indizierung und Chatmodelle oder Language Understanding-Modelle zum Abrufen.
Azure KI Search ist eine bewährte Lösung zum Abrufen von Informationen in einer RAG-Architektur. Es bietet Indizierungs- und Abfragefunktionen mit der Infrastruktur und Sicherheit der Azure-Cloud. Mithilfe von Code und anderen Komponenten können Sie eine umfassende RAG-Lösung entwerfen, die alle Elemente für generative KI über Ihre proprietären Inhalte enthält.
Note
Sie sind neu bei Copilot und RAG-Konzepten? Sehen Sie sich Vektorsuche und modernstes Abrufen für Apps mit generativer KI an.
Ansätze für RAG mit Azure KI Search
Microsoft verfügt über mehrere integrierte Implementierungen für die Verwendung von Azure KI Search in einer RAG-Lösung.
- Azure AI Search, erstellen Sie eine agentische Abrufpipeline in einer benutzerdefinierten Lösung. Die agentenbasierte Pipeline wurde speziell für das RAG-Framework entwickelt. Sie schreiben Code, der die Azure AI Search-APIs aufruft, die zur Integration eines Chatabschlussmodells mit Ihrem indizierten Inhalt entwickelt wurden.
- Azure KI Foundry: Vektorindex und Abruferweiterung verwenden.
- Azure OpenAI, Suchindex mit oder ohne Vektoren verwenden.
- Azure Machine Learning: Suchindex als Vektorspeicher in einem Prompt Flow verwenden.
Benutzerdefiniertes RAG-Muster für Azure KI Search
Eine allgemeine Zusammenfassung eines RAG-Musters basierend auf Azure AI Search sieht wie folgt aus:
- Beginnen Sie mit einer Benutzerfrage oder Anfrage (Prompt).
- Senden Sie sie an Azure KI Search, um relevante Informationen zu finden.
- Geben Sie die am höchsten bewerteten Suchergebnisse an ein LLM zurück.
- Verwenden Sie die Funktionen für natürliches Sprachverständnis und natürliche Sprachfolgerung des LLM, um eine Antwort auf den ersten Prompt zu generieren.
Azure KI Search stellt Eingaben für den LLM-Prompt bereit, trainiert das Modell jedoch nicht. In einem herkömmlichen RAG-Muster gibt es keine zusätzliche Schulung. Das LLM wird mit öffentlichen Daten vorab trainiert, generiert jedoch Antworten, die durch Informationen vom Abrufer erweitert werden, in diesem Fall Azure KI-Suche.
RAG-Muster, die Azure KI Search enthalten, weisen die in der folgenden Abbildung angegebenen Elemente auf.
- App-UX (Web-App) für die Benutzererfahrung
- App-Server oder Orchestrator (Integrations- und Koordinationsebene)
- Azure KI Search (Information Retrieval System)
- Azure OpenAI (LLM für generative KI)
Die Web-App stellt die Benutzererfahrung, Präsentation, den Kontext und die Benutzerinteraktion bereit. Fragen oder Prompts von einem Benutzer beginnen hier. Eingaben durchlaufen die Integrationsebene, gehen zuerst zum Informationsabruf, um die Suchergebnisse zu erhalten, werden allerdings auch zum LLM übertragen, um den Kontext und die Absicht festzulegen.
Der App-Server oder Orchestrator ist der Integrationscode, der die Übergaben zwischen dem Abrufen von Informationen und dem LLM koordiniert. Zu den gängigen Lösungen gehören Azure Semantic Kernel oder LangChain , um den Workflow zu koordinieren. LangChain ist in Azure AI Search integriert und erleichtert die Einbindung von Azure AI Search als Retriever in Ihren Workflow. LlamaIndex und Semantic Kernel sind weitere Optionen.
Das Informationsabrufsystem stellt den durchsuchbaren Index, die Abfragelogik und die Nutzlast (Abfrageantwort) bereit. Der Suchindex kann Inhalte mit oder ohne Vektoren enthalten. Obwohl die meisten Beispiele und Demos Vektorfelder enthalten, ist das keine Notwendigkeit. Die Abfrage wird mithilfe der vorhandenen Suchmaschine in Azure KI Search ausgeführt, welches Schlüsselwort- (oder Ausdrucks-) und Vektorabfragen verarbeiten kann. Der Index wird im Voraus basierend auf einem von Ihnen definierten Schema erstellt und mit Ihren Inhalten geladen, die aus Dateien, Datenbanken oder Speicher stammen.
Das LLM erhält den ursprünglichen Prompt sowie die Ergebnisse von Azure KI Search. Das LLM analysiert die Ergebnisse und formuliert eine Antwort. Wenn das LLM, wie etwa ChatGPT, verwendet wird, kann die Benutzerinteraktion aus mehreren Gesprächswechseln bestehen. Eine Azure-Lösung verwendet höchstwahrscheinlich Azure OpenAI, aber es gibt keine feste Abhängigkeit von diesem spezifischen Dienst.
Mit Ausnahme von Funktionen, die sich derzeit in der Vorschau befinden, bietet Azure AI Search keine native Integration von Large Language Models (LLM) für Eingabeaufforderungsflüsse oder die Erhaltung von Konversationen. Daher müssen Sie Code schreiben, der die Orchestrierung und den Status verwaltet. Sie können die Demoquelle (Azure-Samples/azure-search-openai-demo) überprüfen, die für den agentenbasierten Abruf aktualisiert wurde, um eine Blaupause dafür zu erhalten, was eine vollständige Lösung beinhaltet. Außerdem wird Azure KI Foundry empfohlen, um RAG-basierte Azure KI-Suche-Lösungen zu erstellen, die in LLMs integriert werden.
Durchsuchbare Inhalte in Azure KI Search
In der Azure KI-Suche werden alle durchsuchbaren Inhalte in einem Suchindex gespeichert, der in Ihrem Suchdienst gehostet wird. Ein Suchindex ist für schnelle Abfragen mit Millisekunden Antwortzeiten konzipiert, sodass die internen Datenstrukturen entworfen wurden, um dieses Ziel zu ermöglichen. Zu diesem Zweck speichert ein Suchindex indizierte Inhalteund nicht ganze Inhaltsdateien wie ganze PDFs oder Bilder. Intern enthalten die Datenstrukturen invertierte Indizes von tokenisiertem Text, Vektorindizes für Einbettungen und unveränderten Nur-Text für Fälle, in denen verbatim-Abgleich erforderlich ist (z. B. in Filtern, Fuzzy-Suche, reguläre Ausdrucksabfragen).
Wenn Sie die Daten für Ihre RAG-Lösung einrichten, verwenden Sie die Features, die einen Index in Azure KI Search erstellen und laden. Ein Index enthält Felder, die Ihre Quellinhalte duplizieren oder darstellen. Ein Indexfeld kann eine einfache Übertragung sein (ein Titel oder eine Beschreibung in einem Quelldokument wird zu einem Titel oder einer Beschreibung in einem Suchindex), oder ein Feld kann die Ausgabe eines externen Prozesses enthalten, z. B. Vektorisierung oder Skill-Verarbeitung, die eine Darstellung oder Textbeschreibung eines Bilds generiert.
Da Sie wahrscheinlich wissen, welche Art von Inhalt Sie durchsuchen möchten, bedenken Sie die Indizierungsfeatures, die für jeden Inhaltstyp gelten:
Inhaltstyp | Indiziert als | Features |
---|---|---|
text | Token, unveränderter Text | Indexer können Klartext aus anderen Azure-Ressourcen wie Azure Storage und Cosmos DB abrufen. Sie können auch jeden JSON-Inhalt an einen Index übertragen. Verwenden Sie zum spontanen Ändern von Text Analysetools und Normalizer, um während der Indizierung lexikalische Verarbeitung hinzuzufügen. Synonymzuordnungen sind nützlich, wenn Quelldokumente keine Terminologie enthalten, die in einer Abfrage verwendet werden kann. |
text | Vektoren 1 | Text kann in einer Indexerpipeline segmentiert und vektorisiert oder extern verarbeitet und dann als Vektorfelder in Ihrem Index indiziert werden. |
image | Token, unveränderter Text 2 | Skills für OCR und Bildanalyse können Bilder für die Texterkennung oder Bildmerkmale verarbeiten. Skills haben eine Indexeranforderung. |
image | Vektoren 1 | Bilder können in einer Indexerpipeline vektorisiert oder extern für eine mathematische Darstellung von Bildinhalten verarbeitet und dann als Vektorfelder in Ihrem Index indiziert werden. Sie können Azure KI Vision multimodal oder ein Open Source-Modell wie OpenAI CLIP verwenden, um Text und Bilder im gleichen Einbettungsbereich zu vektorisieren. |
1 Azure KI-Suche bietet integrierte Datensegmentierung und -vektorisierung, aber Sie müssen eine Abhängigkeit von Indexern und Skillsets akzeptieren. Wenn Sie keinen Indexer verwenden können, können der semantische Kernel von Microsoft oder andere Communityangebote Sie bei einer vollständigen Stapellösung unterstützen. Codebeispiele mit beiden Ansätzen finden Sie unter azure-suche-vektoren repo.
2 Bildbeschreibungen werden in durchsuchbaren Text konvertiert und dem Index hinzugefügt. Die Bilder selbst werden nicht im Index gespeichert. Fähigkeiten sind integrierte Unterstützung für angewandte KI. Für OCR- und Bildanalyse führt die Indizierungspipeline einen internen Aufruf der Azure KI Vision-APIs durch. Diese Skills übergeben ein extrahiertes Bild zur Verarbeitung an Azure KI und erhalten die Ausgabe als Text, der von Azure KI Search indiziert wird. Skills werden auch für die integrierte Datensegmentierung (Skill „Textaufteilung“) und die integrierte Einbettung verwendet (Skills, die Azure KI Vision multimodal, Azure OpenAI und Modelle im Azure KI Foundry-Modellkatalog aufrufen).
Vektoren bieten die beste Möglichkeit für unterschiedliche Inhalte (mehrere Dateiformate und Sprachen), da Inhalte universell in mathematischen Darstellungen ausgedrückt werden. Vektoren unterstützen auch die Ähnlichkeitssuche: Übereinstimmung mit den Koordinaten, die der Vektorabfrage am ehesten ähneln. Im Vergleich zur Stichwortsuche (oder Begriffssuche), die mit tokenisierten Ausdrücken übereinstimmt, ist die Ähnlichkeitssuche differenzierter. Es ist eine bessere Wahl, wenn im Inhalt oder in Abfragen Mehrdeutigkeit oder Interpretationsanforderungen vorliegen.
Abrufen von Inhalten in Azure KI Search
Sobald sich Ihre Daten in einem Suchindex befindet, verwenden Sie die Abfragefunktionen von Azure KI Search, um Inhalte abzurufen.
In einem Nicht-RAG-Muster erstellen Abfragen einen Roundtrip von einem Suchclient. Die Abfrage wird übermittelt und in einer Suchmaschine ausgeführt. Die Antwort wird daraufhin an die Clientanwendung zurückgegeben. Die Antwort oder Suchergebnisse bestehen ausschließlich aus den im Index gefundenen wortwörtlichen Inhalten.
In einem RAG-Muster werden Abfragen und Antworten zwischen der Suchmaschine und dem LLM koordiniert. Die Frage oder Abfrage eines Benutzers wird sowohl an die Suchmaschine als auch an das LLM als Prompt weitergeleitet. Die Suchergebnisse kommen von der Suchmaschine zurück und werden zu einem LLM umgeleitet. Die Antwort, die sie an den Benutzer zurückgibt, ist generative KI, entweder eine Summierung oder Antwort von dem LLM.
Es gibt keinen Abfragetyp in Azure KI Search – nicht einmal semantische oder Vektorsuche – welche neue Antworten erstellt. Nur das LLM stellt generative KI bereit. Hier sind die Funktionen in Azure KI Search, die zum Formulieren von Abfragen verwendet werden:
Abfragefunktion | Purpose | Argumente für die Verwendung |
---|---|---|
Einfache oder vollständige Lucene-Syntax | Abfrageausführung für Text und numerische Inhalte ohne Vektoren | Die Volltextsuche eignet sich am besten für genaue Übereinstimmungen und nicht für ähnliche Übereinstimmungen. Volltextsuchabfragen werden mithilfe des BM25-Algorithmus bewertet und unterstützen die Relevanzoptimierung durch Bewertungsprofile. Sie unterstützt auch Filter und Facetten. |
Filter und Facetten | Gilt nur für Textfelder oder numerische Felder (ohne Vektoren). Reduziert den Suchumfang basierend auf Einschluss- oder Ausschlusskriterien. | Fügt Präzision zu Ihren Abfragen hinzu. |
Semantischer Sortierer | Bewertet ein BM25-Resultset mit semantischen Modellen neu. Erzeugt Beschriftungen und Antworten im Kurzformat, die als LLM-Eingaben nützlich sind. | Einfacher als Bewertungsprofile und je nach Inhalt eine zuverlässigere Technik für die Relevanzoptimierung. |
Vektorsuche | Abfrageausführung über Vektorfelder für die Ähnlichkeitssuche, wobei die Abfragezeichenfolge ein oder mehrere Vektoren ist. | Vektoren können alle Inhaltstypen in jeder Sprache darstellen. |
Hybridsuche | Kombiniert jegliche oder sämtliche oben genannte Abfragetechniken. Abfragen mit und ohne Vektoren werden parallel ausgeführt und in einem einzelnen Resultset zurückgegeben. | Die wichtigsten Gewinne bei Genauigkeit und Rückruf kommen von hybride Abfragen. |
Agentenbasierte Suche (Vorschau) | Parallele Abfrageausführungspipeline mehrerer Unterabfragen und Zurückgeben einer Antwort, die für RAG-Workloads und Agent-Consumer entwickelt wurde. Abfragen können Vektor- oder Stichwortsuche sein. Die semantische Rangfolge stellt sicher, dass die besten Ergebnisse von Unterabfragen in der endgültigen Antwortstruktur enthalten sind. Dies ist der empfohlene Ansatz für RAG-Muster basierend auf Azure AI Search. |
Die Abfrageantwort strukturieren
Die Antwort einer Abfrage liefert die Eingabe an das LLM, sodass die Qualität Ihrer Suchergebnisse für den Erfolg von entscheidender Bedeutung ist. Die Ergebnisse sind ein tabellarischer Zeilensatz. Die Zusammensetzung oder Struktur der Ergebnisse hängt ab von:
- Feldern, die bestimmen, welche Teile des Indexes in der Antwort enthalten sind.
- Zeilen, die eine Übereinstimmung aus dem Index darstellen.
Felder werden in Suchergebnissen angezeigt, wenn das Attribut „abrufbar“ ist. Eine Felddefinition im Indexschema weist Attribute auf, und diese bestimmen, ob ein Feld in einer Antwort verwendet wird. Nur „abrufbare“ Felder werden in Volltext- oder Vektorabfrageergebnissen zurückgegeben. Standardmäßig werden alle „abrufbaren“ Felder zurückgegeben, aber Sie können „select“ verwenden, um eine Teilmenge anzugeben. Neben „abrufbar“ gibt es keine Einschränkungen für das Feld. Felder können eine beliebige Länge oder einen beliebigen Typen aufweisen. Hinsichtlich der Länge gibt es in Azure KI Search keine maximale Feldlängenbeschränkung, aber es gibt Grenzwerte für die Größe einer API-Anforderung.
Zeilen sind Übereinstimmungen mit der Abfrage, priorisiert nach Relevanz, Ähnlichkeit oder beidem. Standardmäßig werden die Ergebnisse für die Volltextsuche oder k-nearest-neighbour Übereinstimmungen für die Vektorsuche auf die obersten 50 Übereinstimmungen begrenzt. Sie können die Standardwerte ändern, um den Grenzwert bis zum Maximum von 1.000 Dokumenten zu erhöhen oder zu reduzieren. Sie können auch die „top“ verwenden und Paging-Parameter überspringen, um Ergebnisse als eine Reihe von in Seiten eingeteilten Ergebnissen abzurufen.
Maximieren von Relevanz und Abruf
Wenn Sie mit komplexen Prozessen, einer großen Menge an Daten und Erwartungen von Antworten in Millisekunden arbeiten, ist es wichtig, dass jeder Schritt etwas beiträgt und die Qualität des Endergebnisses verbessert. Auf der Informationsabrufseite gibt es die Relevanzoptimierung, eine Aktivität, welche die Qualität der an das LLM gesendeten Ergebnisse verbessert. Nur die relevantesten oder am meisten übereinstimmenden Dokumente sollten in Ergebnisse einbezogen werden.
Hier sind einige Tipps für die Maximierung von Relevanz und Abruf:
Hybridabfragen, die die Schlüsselwortsuche (keine Vektorsuche) und die Vektorsuche kombinieren, liefern einen maximalen Abruf, wenn die Eingaben identisch sind. Wenn Sie in einer Hybridabfrage eine Eingabe verdoppeln, generieren eine Textzeichenfolge und deren Vektoräquivalent parallele Abfragen für die Schlüsselwort- und die Ähnlichkeitssuche und geben die relevantesten Übereinstimmungen für jeden Abfragetyp in einem einheitlichen Resultset zurück.
Hybridabfragen können auch umfangreich sein. Sie können in einer Anforderung eine Ähnlichkeitssuche für ausführliche segmentierte Inhalte und eine Schlüsselwortsuche für Namen ausführen.
Die Relevanzoptimierung wird durch Folgendes unterstützt:
Bewertungsprofile, welche die Suchbewertung erhöhen, wenn Übereinstimmungen in einem bestimmten Suchfeld oder in anderen Kriterien gefunden werden.
semantischen Sortierer, der ein erstes Resultset neu bewertet, indem semantische Modelle von Bing verwendet werden, um Ergebnisse für eine passendere Semantik an die ursprüngliche Abfrage neu zu sortieren.
Abfrageparameter für die Feinabstimmung. Sie können die Wichtigkeit von Vektorabfragen erhöhen oder die Menge der BM25-bewerteten Ergebnisse in einer Hybridabfrageantwort anpassen. Sie können auch Mindestschwellenwerte festlegen, um Ergebnisse mit einer niedrige Bewertung aus einer Vektorabfrage auszuschließen.
Im Vergleichs- und Benchmarktest erzeugen Hybridabfragen mit Text- und Vektorfeldern, ergänzt durch semantische Rangfolge, die relevantesten Ergebnisse.
Beispielcode für einen RAG-Workflow
Der folgende Python-Code veranschaulicht die wesentlichen Komponenten eines grundlegenden RAG-Workflows in Azure AI Search. Sie müssen die Clients einrichten, einen Systemprompt definieren und eine Abfrage bereitstellen. Der Prompt weist das LLM an, nur die Ergebnisse aus der Abfrage zu verwenden und wie die Ergebnisse zurückgegeben werden sollen. Weitere Schritte basierend auf diesem Beispiel finden Sie in diesem RAG-Schnellstart.
Note
Ändern Sie für die Azure Government-Cloud den API-Endpunkt des Tokenanbieters in "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)
Integrationscode und LLMs
Eine RAG-Lösung, die Azure KI-Suche enthält, kann integrierte Funktionen für Datensegmentierung und -vektorisierung nutzen, oder Sie können mit Plattformen wie Semantic Kernel, LangChain oder LlamaIndex eigene erstellen.
Notebooks im Demo-Repository sind ein guter Ausgangspunkt, da sie Muster für die LLM-Integration zeigen. Der Großteil des Codes in einer RAG-Lösung besteht aus Aufrufen des LLM, sodass Sie ein Verständnis dafür entwickeln müssen, wie diese APIs funktionieren, was jenseits des Umfangs dieses Artikels liegt.
Einstieg
Es gibt viele Möglichkeiten, um zu beginnen, einschließlich Code-first-Lösungen und Demos.
Probieren Sie diesen RAG-Schnellstart für eine Demonstration der Abfrageintegration mit Chatmodellen über einen Suchindex aus.
Probieren Sie diesen Agentic Retrieval Quickstart aus, um den neuen und empfohlenen Ansatz für RAG zu durchlaufen.
Tutorial: Erstellen einer RAG-Lösung in Azure KI-Suche für eine gezielte Beschreibung der Features und Muster für RAG-Lösungen, die Groundingdaten aus einem Suchindex abrufen.
Überprüfen Sie die Indizierungskonzepte und -strategien, um zu bestimmen, wie Sie Daten aufnehmen und aktualisieren möchten. Entscheiden Sie, ob Vektorsuche, Stichwortsuche oder Hybridsuche verwendet werden soll. Die Art der Inhalte, die Sie durchsuchen müssen, und die Art der Abfragen, die Sie ausführen möchten, bestimmt den Indexentwurf.
Sehen Sie sich das Erstellen von Abfragen an, um mehr über die Syntax von Suchabfragen und Anforderungen an diese zu erfahren.
Note
Einige Azure KI Search-Features sind für die menschliche Interaktion vorgesehen und sind in einem RAG-Muster nicht hilfreich. Insbesondere können Sie Features wie AutoVervollständigen und Vorschläge überspringen. Andere Features wie Facetten und orderby können nützlich sein, wären aber in einem RAG-Szenario ungewöhnlich.