Hur Agentic RAG minskar hallucinationer och förbättrar återhämtning
Upptäck hur Agentic RAG kan minska hallucinationer och förbättra återhämtning genom att omformulera frågor, förfina resultat och utnyttja större språkmodeller. Lås upp mer omfattande och relevanta svar för dina RAG-applikationer.
24 februari 2025

Frigör kraften i Retrieval Augmented Generation (RAG) med Agents. Upptäck hur du kan förbättra din RAG-pipeline och minska hallucinationer genom att införa intelligenta agenter som kan analysera frågor, förfina sökningar och generera mer exakta och omfattande svar. Den här blogginlägget ger en praktisk guide till att implementera agentic RAG, och utrusta dig med verktygen för att höja dina naturliga språkbearbetningsapplikationer.
Hur agenter kan åtgärda hallucinationer i RAG
Bygga en agentisk RAG-pipeline
Skapa ett hämtningsverktyg
Integrera språkmodellen
Implementera den agentiska agenten
Jämföra standard-RAG och agentisk RAG
Slutsats
Hur agenter kan åtgärda hallucinationer i RAG
Hur agenter kan åtgärda hallucinationer i RAG
Informationshämtningssteget i retrieval augmented generation (RAG) är i hög grad beroende av hur användaren ställer frågor. Om frågan inte är väl formulerad kan det vara svårt att hämta information, även om den information som användaren letar efter finns i kunskapsbasen. I traditionell RAG får vi en enda, kort hämtning, men vi kan åtgärda detta med agentic RAG.
För att förstå hur agentic RAG kan hjälpa, låt oss titta på den traditionella RAG-inställningen för hämtning. Användarfrågan körs genom en semantikbaserad likhetssökning som letar efter de mest relevanta delarna i informationsbasen. Men vad händer om frågan i sig inte ställs på rätt sätt? I så fall kommer din RAG-pipeline troligtvis att hallucinera, vilket innebär att den börjar uppfinna svar, eller så kommer språkmodellen att berätta för användaren att den inte kunde hitta informationen, även om informationen faktiskt finns i kunskapsbasen.
Vi kan åtgärda detta genom att införa agenter i RAG-pipelinen och ge dem möjlighet att inte bara analysera den ursprungliga frågan utan också analysera de svar som genereras av RAG-pipelinen. Här är hur det vanligtvis ser ut:
- Den ursprungliga frågan skickas genom en agent.
- Agenten kommer att omformulera den ursprungliga frågan.
- Den förfinade frågan skickas genom kunskapsbasen och en semantikbaserad likhetssökning utförs för att hämta de mest relevanta dokumenten.
- Innan de relevanta dokumenten skickas till språkmodellen analyserar agenten dessa dokument eller delar igen och förfinar frågan om den anser att de hämtade dokumenten inte kan besvara frågan.
- Baserat på den förfinade frågan upprepas processen tills agenten är nöjd med både de hämtade dokumenten och den omformulerade frågan.
- Den slutliga kontexten skickas sedan till språkmodellen för att generera svaret.
Bygga en agentisk RAG-pipeline
Bygga en agentisk RAG-pipeline
Informationshämtningssteget i retrieval augmented generation eller RAG är i hög grad beroende av hur användaren ställer frågor. Om frågan inte är väl formulerad kan det vara svårt att hämta information, även om den information som användaren letar efter finns i kunskapsbasen. I traditionell RAG får vi en enda, kort hämtning, men vi kan åtgärda detta med agentic RAG.
För att förstå hur agentic RAG kan hjälpa, låt oss titta på den traditionella RAG-inställningen för hämtning. Användarfrågan körs genom en semantikbaserad likhetssökning som letar efter de mest relevanta delarna i informationsbasen. Men vad händer om frågan i sig inte ställs på rätt sätt? I så fall kommer din RAG-pipeline troligtvis att hallucinera, det vill säga den kommer att börja uppfinna svar, eller så kommer språkmodellen att berätta för användaren att den inte kunde hitta informationen, även om informationen faktiskt finns i kunskapsbasen.
Vi kan åtgärda detta genom att införa agenter i RAG-pipelinen och ge dem möjlighet att inte bara analysera den ursprungliga frågan utan också analysera de svar som genereras av RAG-pipelinen. Här är hur det vanligtvis ser ut:
- Den ursprungliga frågan skickas genom en agent.
- Agenten kommer att omformulera den ursprungliga frågan.
- Den förfinade frågan skickas genom kunskapsbasen och en semantikbaserad likhetssökning utförs för att hämta de mest relevanta dokumenten.
- Innan de relevanta dokumenten skickas till språkmodellen analyserar agenten dessa dokument eller delar igen och förfinar frågan om den anser att de hämtade dokumenten inte kan besvara frågan.
- Baserat på den förfinade frågan upprepas processen tills agenten är nöjd med både de hämtade dokumenten och den omformulerade frågan.
- Den slutliga kontexten skickas sedan till språkmodellen för att generera svaret.
Skapa ett hämtningsverktyg
Skapa ett hämtningsverktyg
För att skapa ett hämtningsverktyg för den agentic RAG-pipelinen definierar vi en RetrievalTool
-klass med följande 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]
Klassen RetrievalTool
tar ett vector_db
-objekt som indata, vilket är vektorlagringen (t.ex. Faiss, Chroma, Pinecone) som används för att lagra dokumentembeddingar.
Metoden __call__
i klassen tar en query
-sträng som indata och returnerar en lista med upp till 7 mest liknande delar från vektorbasen. Den använder similarity_search
-metoden i vector_db
-objektet för att hitta de mest liknande delarna baserat på cosinus-likhet.
Detta hämtningsverktyg kan sedan användas som en del av den agentic RAG-pipelinen, där agenten kan analysera den ursprungliga frågan, förfina den och skicka den genom hämtningsverktyget för att få de mest relevanta delarna från kunskapsbasen.
Integrera språkmodellen
Integrera språkmodellen
För att integrera språkmodellen i den agentic RAG-pipelinen måste vi konfigurera LLM som ska användas både av agenten och för att generera det slutliga svaret. Vi har två alternativ:
-
Använda Hugging Face-motorn: Detta låter oss direkt anropa API-slutpunkterna för olika LLM:er som finns tillgängliga via Hugging Face serverless-arkitekturen. Vi kan använda modeller som Llama 38B eller 70B, men dessa kräver vanligtvis en Hugging Face Pro-prenumeration.
-
Använda OpenAI: I det här exemplet kommer vi att använda OpenAI-motorn. Processen kan anpassas för att konfigurera någon annan LLM.
För att konfigurera OpenAI-motorn skapar vi en klass som heter OpenAIEngine
som använder funktionerna message_rle
och gpt_generate_message_list
från Transformer Agents LLM-motorn. Denna klass hanterar rensning av inkommande meddelanden och använder OpenAI:s slutpunkt för chattkompletering för att generera svar.
Nästa steg är att skapa själva agenten. Agenten har tillgång till det hämtningsverktyg vi skapade tidigare, den LLM vi vill använda (i det här fallet OpenAIEngine
) och det maximala antalet iterationer som agenten ska utföra innan den stoppar den agentic-loopen.
Vi tillhandahåller också en systemuppmaning till agenten, som ger den instruktioner om hur den ska använda informationen i kunskapsbasen för att ge ett omfattande svar på användarens fråga. Uppmaningen uppmuntrar agenten att försöka hämta igen med olika frågor om den inte kan hitta den nödvändiga informationen.
Implementera den agentiska agenten
Implementera den agentiska agenten
För att implementera den agentic-agenten kommer vi att använda Transformers Agents-funktionen inom Transformers-paketet. Detta ger ett modulärt och tydligt tillvägagångssätt för att skapa anpassade agenter.
Först måste vi installera de nödvändiga paketen, inklusive pandas, Langchain, Langchain Community-paketet, Sentence Transformers och Transformers Agents.
Nästa steg är att importera de nödvändiga modulerna och paketen. Vi kommer att använda ReactJsonAgent, bygga anpassade verktyg för agenten och utnyttja Hugging Face-motorn för språkmodellen.
För att bygga RAG-pipelinen börjar vi med en datauppsättning som innehåller Hugging Face-dokumentationen. Vi delar upp dokumenten i delar och skapar embeddingar med GTE-small-modellen. Vi tar sedan bort eventuella duplicerade delar och lagrar de unika delarna i en F-baserad vektorlagring.
Nu introducerar vi agenten i blandningen. Vi skapar en RetrievalTool
som använder semantisk likhet för att hämta de mest relevanta delarna från kunskapsbasen baserat på användarens fråga.
Vi konfigurerar också språkmodellen, i det här fallet med hjälp av OpenAI-motorn och GPT-4-modellen.
Agenten skapas sedan med tillgång till hämtningsverktyget och språkmodellen. Vi anger också det maximala antalet iterationer som agenten kan utföra för att förfina frågan och den hämtade kontexten.
Agenten får en systemuppmaning som vägleder den att använda kunskapsbasen för att ge ett omfattande svar på användarens fråga. Agenten går sedan igenom en iterativ process, omformulerar frågan och hämtar mer relevant information tills den är nöjd med svaret.
Den agentic RAG-pipelinen jämförs sedan med en standardRAG-pipeline, vilket visar hur den agentbaserade metoden kan ge mer detaljerade och relevanta svar, särskilt när användarens ursprungliga fråga inte är väl formulerad.
Jämföra standard-RAG och agentisk RAG
Jämföra standard-RAG och agentisk RAG
De viktigaste skillnaderna mellan standardRAG och agentic RAG är:
-
Frågeomformulering: I standardRAG skickas användarfrågan direkt genom den semantikbaserade likhetssökningen för att hämta relevanta delar från kunskapsbasen. I agentic RAG analyserar en agent den ursprungliga frågan och kan omformulera den för att förbättra hämtningsprocessen.
-
Iterativ förfining: Agentic RAG låter agenten iterativt förfina frågan och den hämtade kontexten. Om agenten inte är nöjd med den ursprungliga hämtningen kan den upprepa processen med en förfinad fråga för att få bättre resultat.
-
Koncisa och relevanta svar: Den agentic-baserade metoden tenderar att generera mer koncisa och relevanta svar jämfört med standardRAG. Agentens förmåga att analysera frågan och den hämtade kontexten hjälper den att ge ett mer omfattande svar.
-
Hantering av dåligt formulerade frågor: Agentic RAG är bättre utrustad för att hantera fall där användarfrågan inte är väl formulerad. Agenten kan känna igen begränsningarna i den ursprungliga frågan och arbeta för att omformulera den, vilket leder till bättre hämtning och mer informativa svar.
-
Flexibilitet och anpassning: Agentic RAG möjliggör mer flexibilitet och anpassning, eftersom agenten kan utrustas med olika verktyg och funktioner för att uppfylla de specifika behoven i applikationen.
Slutsats
Slutsats
Introduktionen av agenter i Retrieval Augmented Generation (RAG)-pipelinen kan avsevärt förbättra kvaliteten och relevansen hos de genererade svaren. Genom att låta agenten analysera den ursprungliga frågan, förfina den och iterativt hämta och utvärdera den mest relevanta informationen från kunskapsbasen kan den agentic RAG-metoden övervinna begränsningarna i traditionella RAG-uppställningar, där kvaliteten på utdata i hög grad beror på användarens förmåga att formulera frågan effektivt.
De viktigaste fördelarna med den agentic RAG-metoden är:
-
Förbättrad frågeomformulering: Agentens förmåga att analysera den ursprungliga frågan och omformulera den baserat på den hämtade informationen säkerställer att den slutliga frågan är mer semantiskt anpassad till användarens avsikt, vilket leder till mer relevanta resultat.
-
Iterativ hämtning och utvärdering: Agentens förmåga att upprepade gånger hämta och utvärdera den hämtade informationen gör att den kan förfina frågan och säkerställa att den slutliga kontexten som tillhandahålls till språkmodellen är omfattande och svarar på användarens fråga.
-
Ökad robusthet: Genom att inte enbart förlita sig på den ursprungliga användarfrågan är den agentic RAG-metoden mer robust mot dåligt formulerade frågor, eftersom agenten kan arbeta för att övervinna dessa begränsningar genom sin iterativa process.
-
Detaljerade och informativa svar: Den agentic RAG-metoden, som visas i exemplen, kan generera mer detaljerade och informativa svar jämfört med traditionella RAG-uppställningar, vilket ger användarna en mer omfattande förståelse av ämnet.
FAQ
FAQ