Wie Agentic RAG Halluzinationen reduziert und den Abruf verbessert
Entdecken Sie, wie Agentic RAG Halluzinationen reduzieren und den Abruf durch Umformulierung von Abfragen, Verfeinerung von Ergebnissen und Nutzung größerer Sprachmodelle verbessern kann. Erschließen Sie umfassendere und relevantere Antworten für Ihre RAG-Anwendungen.
15. Februar 2025

Erschließen Sie die Kraft der Retrieval Augmented Generation (RAG) mit Agents. Entdecken Sie, wie Sie Ihre RAG-Pipeline verbessern und Halluzinationen reduzieren können, indem Sie intelligente Agenten einführen, die Abfragen analysieren, Suchen verfeinern und genauere und umfassendere Antworten generieren können. Dieser Blogbeitrag bietet eine praktische Anleitung zur Implementierung von agentenbasierter RAG und stattet Sie mit den Werkzeugen aus, um Ihre Anwendungen für natürliche Sprache zu verbessern.
Wie Agenten Halluzinationen in RAG beheben können
Aufbau einer agentischen RAG-Pipeline
Erstellung eines Abrufwerkzeugs
Integration des Sprachmodells
Implementierung des agentischen Agenten
Vergleich von Standard-RAG und agentischem RAG
Schlussfolgerung
Wie Agenten Halluzinationen in RAG beheben können
Wie Agenten Halluzinationen in RAG beheben können
Der Informationsabrufschritt im Retrieval Augmented Generation (RAG)-Verfahren hängt stark davon ab, wie der Benutzer Fragen stellt. Wenn die Abfrage nicht gut formuliert ist, kann der Informationsabruf schwierig sein, auch wenn die vom Benutzer gesuchte Information in der Wissensbasis vorhanden ist. Im traditionellen RAG erhalten wir einen einzelnen, kurzen Abruf, aber wir können dies mit agentenbasiertem RAG beheben.
Um zu verstehen, wie agentenbasiertes RAG helfen kann, schauen wir uns den traditionellen RAG-Aufbau für den Abruf an. Die Benutzerabfrage wird durch eine semantikbasierte Ähnlichkeitssuche geschickt, die nach den relevantesten Chunks in der Informationsbasis sucht. Aber was passiert, wenn die Frage selbst nicht richtig gestellt wird? In diesem Fall wird Ihre RAG-Pipeline wahrscheinlich halluzinieren, d.h. sie wird beginnen, Antworten zu erfinden, oder das LLM wird dem Benutzer mitteilen, dass es die Information nicht finden konnte, obwohl sie tatsächlich in der Wissensbasis vorhanden ist.
Wir können dies beheben, indem wir Agenten in die RAG-Pipeline einführen und ihnen die Fähigkeit geben, nicht nur die Ausgangsabfrage, sondern auch die von der RAG-Pipeline generierten Antworten zu analysieren. Hier ist, wie es normalerweise aussieht:
- Die Ausgangsabfrage wird an einen Agenten weitergeleitet.
- Der Agent wird die Ausgangsabfrage umformulieren.
- Die verfeinerte Abfrage wird durch die Wissensbasis geschickt und eine semantikbasierte Ähnlichkeitssuche durchgeführt, um die relevantesten Dokumente abzurufen.
- Bevor die relevanten Dokumente an das LLM weitergegeben werden, analysiert der Agent diese Dokumente oder Chunks erneut und verfeinert die Abfrage, wenn er denkt, dass die abgerufenen Dokumente die Frage nicht beantworten können.
- Basierend auf der verfeinerten Abfrage wird der Prozess wiederholt, bis der Agent mit den abgerufenen Dokumenten und der umformulierten Abfrage zufrieden ist.
- Der endgültige Kontext wird dann an das LLM übergeben, um die Antwort zu generieren.
Um die agentenbasierte Schleife in Ihrer RAG-Pipeline umzusetzen, haben Sie mehrere Optionen, wie z.B. Frameworks wie Crew AI, Auto oder LangGraph von LangChain. In diesem Fall werden wir Transformers Agents verwenden, ein weniger bekanntes Feature innerhalb des Transformers-Pakets, mit dem Sie Ihre eigenen Agenten erstellen können.
Aufbau einer agentischen RAG-Pipeline
Aufbau einer agentischen RAG-Pipeline
Der Informationsabrufschritt im Retrieval Augmented Generation oder RAG hängt stark davon ab, wie der Benutzer Fragen stellt. Wenn die Abfrage nicht gut formuliert ist, kann der Informationsabruf schwierig sein, auch wenn die vom Benutzer gesuchte Information in der Wissensbasis vorhanden ist. Im traditionellen RAG erhalten wir einen einzelnen, kurzen Abruf, aber wir können dies mit agentenbasiertem RAG beheben.
Um zu verstehen, wie agentenbasiertes RAG helfen kann, schauen wir uns den traditionellen RAG-Aufbau für den Abruf an. Die Benutzerabfrage wird durch eine semantikbasierte Ähnlichkeitssuche geschickt, die nach den relevantesten Chunks in der Informationsbasis sucht. Aber was passiert, wenn die Frage selbst nicht richtig gestellt wird? In diesem Fall wird Ihre RAG-Pipeline wahrscheinlich halluzinieren, d.h. sie wird beginnen, Antworten zu erfinden, oder das LLM wird dem Benutzer mitteilen, dass es die Information nicht finden konnte, obwohl sie tatsächlich in der Wissensbasis vorhanden ist.
Wir können dies beheben, indem wir Agenten in die RAG-Pipeline einführen und ihnen die Fähigkeit geben, nicht nur die Ausgangsabfrage, sondern auch die von der RAG-Pipeline generierten Antworten zu analysieren. Hier ist, wie es normalerweise aussieht:
- Die Ausgangsabfrage wird an einen Agenten weitergeleitet.
- Der Agent wird die Ausgangsabfrage umformulieren.
- Die verfeinerte Abfrage wird durch die Wissensbasis geschickt und eine semantikbasierte Ähnlichkeitssuche durchgeführt, um die relevantesten Dokumente abzurufen.
- Bevor die relevanten Dokumente an das LLM weitergegeben werden, analysiert der Agent diese Dokumente oder Chunks erneut und verfeinert die Abfrage, wenn er denkt, dass die abgerufenen Dokumente die Frage nicht beantworten können.
- Basierend auf der verfeinerten Abfrage wird der Prozess wiederholt, bis der Agent mit den abgerufenen Dokumenten und der umformulierten Abfrage zufrieden ist.
- Der endgültige Kontext wird dann an das LLM übergeben, um die Antwort zu generieren.
Um die agentenbasierte Schleife in Ihrer RAG-Pipeline umzusetzen, haben Sie mehrere Optionen, wie z.B. Frameworks wie Crew AI, Auto oder LangGraph von LangChain. In diesem Fall werden wir Transformers Agents verwenden, ein weniger bekanntes Feature innerhalb des Transformers-Pakets, mit dem Sie Ihre eigenen Agenten erstellen können.
Erstellung eines Abrufwerkzeugs
Erstellung eines Abrufwerkzeugs
Um ein Abrufwerkzeug für die agentenbasierte RAG-Pipeline zu erstellen, definieren wir eine RetrievalTool
-Klasse mit der folgenden Struktur:
class RetrievalTool:
"""Using semantic similarity, retrieves some documents from the knowledge base that have the closest embeddings to the input."""
def __init__(self, vector_db):
self.vector_db = vector_db
def __call__(self, query: str) -> List[str]:
"""
Retrieve up to 7 most similar chunks from the vector DB for the given query.
Args:
query (str): A query to perform retrieval on. This should be semantically close to the target documents.
Returns:
List[str]: A list of up to 7 most similar chunks from the vector DB.
"""
results = self.vector_db.similarity_search(query, k=7)
return [chunk.page_content for chunk in results]
Die RetrievalTool
-Klasse nimmt ein vector_db
-Objekt als Eingabe, das der Vektorstore (z.B. Faiss, Chroma, Pinecone) ist, der zum Speichern der Dokumentembeddings verwendet wird.
Die __call__
-Methode der Klasse nimmt eine query
-Zeichenfolge als Eingabe und gibt eine Liste von bis zu 7 ähnlichsten Chunks aus dem Vektorstore zurück. Sie verwendet die similarity_search
-Methode des vector_db
-Objekts, um die ähnlichsten Chunks basierend auf der Kosinusähnlichkeit zu finden.
Dieses Abrufwerkzeug kann dann als Teil der agentenbasierten RAG-Pipeline verwendet werden, wobei der Agent die Ausgangsabfrage analysieren, verfeinern und durch das Abrufwerkzeug schicken kann, um die relevantesten Chunks aus der Wissensbasis zu erhalten.
Integration des Sprachmodells
Integration des Sprachmodells
Um das Sprachmodell in die agentenbasierte RAG-Pipeline zu integrieren, müssen wir das LLM einrichten, das sowohl vom Agenten als auch zur Generierung der endgültigen Antwort verwendet wird. Wir haben zwei Optionen:
-
Verwendung der Hugging Face-Engine: Dies ermöglicht es uns, direkt die API-Endpunkte verschiedener LLMs aufzurufen, die über die Hugging Face-Serverless-Architektur verfügbar sind. Wir können Modelle wie Llama 38B oder 70B verwenden, aber diese erfordern in der Regel ein Hugging Face Pro-Abonnement.
-
Verwendung von OpenAI: Für dieses Beispiel werden wir die OpenAI-Engine verwenden. Der Prozess kann angepasst werden, um ein anderes LLM einzurichten.
Um die OpenAI-Engine einzurichten, erstellen wir eine Klasse namens OpenAIEngine
, die die Funktionen message_rle
und gpt_generate_message_list
aus der Transformer Agents LLM-Engine verwendet. Diese Klasse verarbeitet das Bereinigen der Eingabenachrichten und die Verwendung des OpenAI-Chat-Completion-Endpunkts zur Generierung von Antworten.
Als Nächstes erstellen wir den eigentlichen Agenten. Der Agent hat Zugriff auf das zuvor erstellte Abrufwerkzeug, das LLM, das wir verwenden möchten (in diesem Fall die OpenAIEngine
), und die maximale Anzahl der Iterationen, die der Agent vor dem Stoppen der agentenbasierten Schleife durchführen soll.
Wir liefern dem Agenten auch einen Systemprompt, der ihm Anweisungen gibt, wie er die Informationen in der Wissensbasis nutzen soll, um dem Benutzer eine umfassende Antwort auf seine Frage zu geben. Der Prompt ermutigt den Agenten, den Abrufprozess mit unterschiedlichen Abfragen zu wiederholen, wenn er die erforderlichen Informationen nicht finden kann.
Mit dem Agenten und dem LLM eingerichtet, können wir nun die agentenbasierte Schleife ausführen, um Benutzerfragen zu beantworten. Der Agent wird die Abfrage iterativ verfeinern, relevante Informationen aus der Wissensbasis abrufen und eine endgültige Antwort unter Verwendung des LLM generieren. Dieser Ansatz führt zu detaillierteren und relevanteren Antworten im Vergleich zu einer Standard-RAG-Pipeline.
Implementierung des agentischen Agenten
Implementierung des agentischen Agenten
Um den agentenbasierten Agenten zu implementieren, werden wir die Transformers Agents-Funktion innerhalb des Transformers-Pakets verwenden. Dies bietet einen modularen und klaren Ansatz zum Erstellen von benutzerdefinierten Agenten.
Zuerst müssen wir die erforderlichen Pakete installieren, darunter pandas, Langchain, das Langchain Community-Paket, Sentence Transformers und die Transformers Agents.
Als Nächstes importieren wir die notwendigen Module und Pakete. Wir werden den ReactJsonAgent verwenden, benutzerdefinierte Tools für den Agenten erstellen und die Hugging Face-Engine für das Sprachmodell nutzen.
Um die RAG-Pipeline aufzubauen, beginnen wir mit einem Datensatz, der die Hugging Face-Dokumentation enthält. Wir teilen die Dokumente in Chunks auf und erstellen Embeddings mit dem GTE-small-Modell. Anschließend entfernen wir doppelte Chunks und speichern die eindeutigen Chunks in einem F-basierten Vektorstore.
Nun führen wir den Agenten in die Mischung ein. Wir erstellen ein RetrievalTool
, das semantische Ähnlichkeit verwendet, um die relevantesten Chunks aus der Wissensbasis basierend auf der Benutzerabfrage abzurufen.
Wir richten auch das Sprachmodell ein, in diesem Fall unter Verwendung der OpenAI-Engine mit dem GPT-4-Modell.
Der Agent wird dann erstellt, mit Zugriff auf das Abrufwerkzeug und das Sprachmodell. Wir geben auch die maximale Anzahl der Iterationen an, die der Agent durchführen kann, um die Abfrage und den abgerufenen Kontext zu verfeinern.
Dem Agenten wird ein Systemprompt vorgegeben, der ihn anweist, die Wissensbasis zu nutzen, um dem Benutzer eine umfassende Antwort auf seine Frage zu geben. Der Agent durchläuft dann einen iterativen Prozess, bei dem er die Abfrage umformuliert und weitere relevante Informationen abruft, bis er mit der Antwort zufrieden ist.
Die agentenbasierte RAG-Pipeline wird dann mit einer Standard-RAG-Pipeline verglichen, um zu zeigen, wie der agentenbasierte Ansatz detailliertere und relevantere Antworten liefern kann, insbesondere wenn die Ausgangsabfrage des Benutzers nicht gut formuliert ist.
Vergleich von Standard-RAG und agentischem RAG
Vergleich von Standard-RAG und agentischem RAG
Die Schlüsselunterschiede zwischen Standard-RAG und agentenbasiertem RAG sind:
-
Abfrageumformulierung: Im Standard-RAG wird die Benutzerabfrage direkt durch die semantikbasierte Ähnlichkeitssuche geschickt, um relevante Chunks aus der Wissensbasis abzurufen. Im agentenbasierten RAG analysiert ein Agent die Ausgangsabfrage und kann sie umformulieren, um den Abrufprozess zu verbessern.
-
Iterative Verfeinerung:
FAQ
FAQ