Como o RAG Agêntico Reduz Alucinações e Melhora a Recuperação
Descubra como o Agentic RAG pode reduzir as alucinações e melhorar a recuperação reformulando consultas, refinando resultados e aproveitando modelos de linguagem maiores. Desbloqueie respostas mais abrangentes e relevantes para suas aplicações RAG.
17 de fevereiro de 2025

Desbloqueie o poder da Geração Aumentada por Recuperação (RAG) com Agentes. Descubra como aprimorar seu pipeline de RAG e reduzir alucinações, introduzindo agentes inteligentes que podem analisar consultas, refinar pesquisas e gerar respostas mais precisas e abrangentes. Este post de blog fornece um guia prático para implementar o RAG ágil, equipando você com as ferramentas para elevar suas aplicações de processamento de linguagem natural.
Como os Agentes Podem Corrigir Alucinações em RAG
Construindo um Pipeline RAG Agêntico
Criando uma Ferramenta de Recuperação
Integrando o Modelo de Linguagem
Implementando o Agente Agêntico
Comparando RAG Padrão e RAG Agêntico
Conclusão
Como os Agentes Podem Corrigir Alucinações em RAG
Como os Agentes Podem Corrigir Alucinações em RAG
A etapa de recuperação de informações na geração aumentada por recuperação (RAG) é altamente dependente de como o usuário faz as perguntas. Se a consulta não for bem formulada, a recuperação de informações pode ser difícil, mesmo que as informações que o usuário está procurando estejam presentes na base de conhecimento. No RAG tradicional, obtemos uma única e curta recuperação, mas podemos corrigir isso com o RAG agêntico.
Para entender como o RAG agêntico pode ajudar, vamos olhar para a configuração tradicional do RAG para recuperação. A consulta do usuário é executada por meio de uma pesquisa de similaridade baseada em semântica que procura os trechos mais relevantes na base de informações. Mas o que acontece se a própria pergunta não for feita da maneira adequada? Nesse caso, seu pipeline de RAG provavelmente alucinará, ou seja, começará a inventar respostas, ou o modelo de linguagem dirá ao usuário que não conseguiu encontrar a informação, mesmo que a informação esteja realmente presente na base de conhecimento.
Podemos corrigir isso introduzindo agentes no pipeline de RAG e dando a eles a capacidade de não apenas analisar a consulta inicial, mas também analisar as respostas geradas pelo pipeline de RAG. Aqui está como geralmente funciona:
- A consulta inicial é passada por um agente.
- O agente reformulará a consulta inicial.
- A consulta refinada é passada pela base de conhecimento e uma pesquisa de similaridade baseada em semântica é realizada para recuperar os documentos mais relevantes.
- Antes de passar os documentos relevantes para o modelo de linguagem, o agente analisa esses documentos ou trechos novamente e refina a consulta se achar que os documentos recuperados não podem responder à pergunta.
- Com base na consulta refinada, o processo é repetido até que o agente esteja satisfeito tanto com os documentos recuperados quanto com a consulta reformulada.
- O contexto final é então passado para o modelo de linguagem para gerar a resposta.
Neste caso, o agente pode planejar, analisar e executar para implementar o loop agêntico em seu pipeline de RAG. Você tem várias opções, como estruturas como Crew AI, AutoGPT ou LangGraph do LangChain, que você pode usar para construir agentes. Neste vídeo, usaremos os Transformers Agents, um recurso pouco conhecido dentro do pacote Transformers que permite criar seus próprios agentes.
Construindo um Pipeline RAG Agêntico
Construindo um Pipeline RAG Agêntico
A etapa de recuperação de informações na geração aumentada por recuperação ou RAG é altamente dependente de como o usuário faz as perguntas. Se a consulta não for bem formulada, a recuperação de informações pode ser difícil, mesmo que as informações que o usuário está procurando estejam presentes na base de conhecimento. No RAG tradicional, obtemos uma única e curta recuperação, mas podemos corrigir isso com o RAG agêntico.
Para entender como o RAG agêntico pode ajudar, vamos olhar para a configuração tradicional do RAG para recuperação. A consulta do usuário é executada por meio de uma pesquisa de similaridade baseada em semântica que procura os trechos mais relevantes na base de informações. Mas o que acontece se a própria pergunta não for feita da maneira adequada? Nesse caso, seu pipeline de RAG provavelmente alucinará, ou seja, começará a inventar respostas, ou o LLM dirá ao usuário que não conseguiu encontrar a informação, mesmo que a informação esteja realmente presente na base de conhecimento.
Podemos corrigir isso introduzindo agentes no pipeline de RAG e dando a eles a capacidade de não apenas analisar a consulta inicial, mas também analisar as respostas geradas pelo pipeline de RAG. Aqui está como geralmente funciona:
- A consulta inicial é passada por um agente.
- O agente reformulará a consulta inicial.
- A consulta refinada é passada pela base de conhecimento e uma pesquisa de similaridade baseada em semântica é realizada para recuperar os documentos mais relevantes.
- Antes de passar os documentos relevantes para o LLM, o agente analisa esses documentos ou trechos novamente e refina a consulta se achar que os documentos recuperados não podem responder à pergunta.
- Com base na consulta refinada, o processo é repetido até que o agente esteja satisfeito tanto com os documentos recuperados quanto com a consulta reformulada.
- O contexto final é então passado para o LLM para gerar a resposta.
Para implementar o loop agêntico em seu pipeline de RAG, você tem várias opções, como estruturas como Crew AI, Auto ou LangGraph do LangChain. Neste caso, usaremos os Transformers Agents, um recurso pouco conhecido dentro do pacote Transformers que permite criar seus próprios agentes.
Primeiro, precisamos instalar os pacotes necessários, incluindo pandas, LangChain, o pacote da comunidade LangChain, o pacote Sentence Transformer e o pacote Transformers. Em seguida, importaremos os módulos necessários e configuraremos os dados, incluindo a divisão dos documentos em trechos e a criação de embeddings.
A seguir, criaremos uma ferramenta de recuperação que o agente poderá usar para recuperar os documentos relevantes da base de conhecimento. Também configuraremos o LLM, neste caso, usando o mecanismo da OpenAI.
Finalmente, criaremos o próprio agente, que terá acesso à ferramenta de recuperação e ao LLM, bem como a um prompt de sistema que orienta o comportamento do agente. Em seguida, executaremos o agente pelo loop agêntico para gerar respostas a perguntas de amostra, comparando os resultados a um pipeline RAG padrão.
A abordagem do RAG agêntico permite respostas mais robustas e abrangentes, ao permitir que o agente refine a consulta e recupere as informações mais relevantes, levando a respostas de melhor qualidade do LLM.
Criando uma Ferramenta de Recuperação
Criando uma Ferramenta de Recuperação
Para criar uma ferramenta de recuperação para o pipeline de RAG agêntico, definimos uma classe RetrievalTool
com a seguinte estrutura:
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]
A classe RetrievalTool
recebe um objeto vector_db
como entrada, que é o armazenamento de vetores (por exemplo, Faiss, Chroma, Pinecone) usado para armazenar os embeddings dos documentos.
O método __call__
da classe recebe uma string query
como entrada e retorna uma lista de até 7 trechos mais semelhantes do banco de vetores. Ele usa o método similarity_search
do objeto vector_db
para encontrar os trechos mais semelhantes com base na similaridade de cosseno.
Essa ferramenta de recuperação pode então ser usada como parte do pipeline de RAG agêntico, onde o agente pode analisar a consulta inicial, refiná-la e passá-la pela ferramenta de recuperação para obter os trechos mais relevantes da base de conhecimento.
Integrando o Modelo de Linguagem
Integrando o Modelo de Linguagem
Para integrar o modelo de linguagem no pipeline de RAG agêntico, precisamos configurar o LLM que será usado tanto pelo agente quanto para gerar a resposta final. Temos duas opções:
-
Usando o mecanismo Hugging Face: Isso nos permite chamar diretamente os endpoints da API de diferentes LLMs disponíveis por meio da arquitetura sem servidor da Hugging Face. Podemos usar modelos como Llama 38B ou 70B, mas esses geralmente exigem uma assinatura Pro da Hugging Face.
-
Usando a OpenAI: Neste exemplo, usaremos o mecanismo da OpenAI. O processo pode ser adaptado para configurar qualquer outro LLM.
Para configurar o mecanismo da OpenAI, criamos uma classe chamada OpenAIEngine
que usa as funções message_rle
e gpt_generate_message_list
do mecanismo LLM dos Transformers Agents. Essa classe lida com a limpeza das mensagens de entrada e usa o endpoint de conclusão de chat da OpenAI para gerar respostas.
Em seguida, criamos o próprio agente. O agente tem acesso à ferramenta de recuperação que criamos anteriormente, ao LLM que queremos usar (o OpenAIEngine
neste caso) e ao número máximo de iterações que queremos que o agente execute antes de interromper o loop agêntico.
Também fornecemos um prompt de sistema para o agente, que lhe dá instruções sobre como usar as informações na base de conhecimento para fornecer uma resposta abrangente à pergunta do usuário. O prompt incentiva o agente a repetir o processo de recuperação com consultas diferentes se não conseguir encontrar as informações necessárias.
Com o agente e o LLM configurados, podemos agora executar o loop agêntico para responder às perguntas dos usuários. O agente refinará iterativamente a consulta, recuperará informações relevantes da base de conhecimento e gerará uma resposta final usando o LLM. Essa abordagem leva a respostas mais detalhadas e relevantes em comparação a um pipeline RAG padrão.
Implementando o Agente Agêntico
Implementando o Agente Agêntico
Para implementar o agente agêntico, usaremos o recurso Transformers Agents dentro do pacote Transformers. Isso fornece uma abordagem modular e clara para criar agentes personalizados.
Primeiro, precisamos instalar os pacotes necessários, incluindo pandas, Langchain, o pacote da comunidade Langchain, Sentence Transformers e os Transformers Agents.
Em seguida, importamos os módulos e pacotes necessários. Usaremos o ReactJsonAgent, construiremos ferramentas personalizadas para o agente e aproveitaremos o mecanismo Hugging Face para o modelo de linguagem.
Para construir o pipeline de RAG, começamos com um conjunto de dados contendo a documentação da Hugging Face. Dividimos os documentos em trechos e criamos embeddings usando o modelo GTE-small. Em seguida, removemos quaisquer trechos duplicados e armazenamos os trechos exclusivos em um armazenamento de vetores baseado em F.
Agora, introduzimos o agente na mistura. Criamos um RetrievalTool
que usa a similaridade semântica para recuperar os trechos mais relevantes da base de conhecimento com base na consulta do usuário.
Também configuramos o modelo de linguagem, neste caso, usando o mecanismo da OpenAI com o modelo GPT-4.
O agente é então criado, com acesso à ferramenta de recuperação e ao modelo de linguagem. Também especificamos o número máximo de iterações que o agente pode executar para refinar a consulta e o contexto recuperado.
O agente recebe um prompt de sistema que o orienta a usar a base de conhecimento para fornecer uma resposta abrangente à pergunta do usuário. O agente então passa por um processo iterativo, reformulando a consulta e recuperando informações mais relevantes até que esteja satisfeito com a resposta.
O pipeline de RAG agêntico é então comparado a um pipeline RAG padrão, demonstrando como a abordagem baseada em agente pode fornecer respostas mais detalhadas e relevantes, especialmente quando a consulta inicial do usuário não é bem formulada.
Comparando RAG Padrão e RAG Agêntico
Comparando RAG Padrão e RAG Agêntico
As principais diferenças entre o RAG padrão e o RAG agêntico são:
-
Reformulação da consulta: No RAG padrão, a consulta do usuário é passada diretamente pela pesquisa de similaridade baseada em semântica para recuperar os trechos relevantes da base de conhecimento. No RAG agêntico, um agente analisa a consulta inicial e pode reformulá-la para melhorar o processo de recuperação.
-
Refinamento iterativo: O RAG agêntico permite que o agente refine iterativamente a consulta e o contexto recuperado. Se o agente não estiver satisfeito com a recuperação inicial, ele pode repetir o processo com uma consulta refinada para obter melhores resultados.
-
Respostas concisas e relevantes: A abordagem agêntica tende a gerar respostas mais concisas e relevantes em comparação ao RAG padrão. A capacidade do agente de analisar a consulta e o contexto recuperado o ajuda a fornecer uma resposta mais abrangente.
-
Lidar com consultas mal formuladas: O RAG agêntico está melhor equipado para lidar com casos em que a consulta do usuário não é bem formulada. O agente pode reconhecer as limitações da consulta inicial e trabalhar para reformulá-la, levando a uma melhor recuperação e respostas mais informativas.
-
Flexibilidade e personalização: O RAG agêntico permite mais flexibilidade e personalização, pois o agente pode ser equipado com várias ferramentas e capacidades para atender às necessidades específicas da aplicação.
Em resumo, o RAG agêntico introduz uma camada adicional de inteligência e controle, permitindo que o sistema entenda melhor a intenção do usuário, refine o processo de recuperação e gere respostas mais direcionadas e informativas, mesmo quando a consulta inicial não é ideal.
Conclusão
Conclusão
A introdução de agentes no pipeline de Geração Aumentada por Recuperação (RAG) pode melhorar significativamente a qualidade e a relevância das respostas geradas. Ao permitir que o agente analise a consulta inicial, a refine e recupere e avalie iterativamente as informações mais relevantes da base de conhecimento, a abordagem de RAG agêntico pode superar as limitações dos setups tradicionais de RAG, onde a qualidade da saída depende muito da capacidade do usuário de formular a consulta de forma eficaz.
Os principais benefícios da abordagem de RAG agêntico incluem:
-
Melhoria na reformulação da consulta: A capacidade do agente de analisar a consulta inicial e reformulá-la com base nas informações recuperadas garante que a consulta final esteja mais semanticamente alinhada com a intenção do usuário, levando a resultados mais relevantes.
-
Recuperação e avaliação iterativa: A capacidade do agente de recuperar e avaliar repetidamente as informações recuperadas permite que ele refine a consulta e garanta que o contexto final fornecido ao modelo de linguagem seja abrangente e atenda à pergunta do usuário.
-
Aumento da robustez: Ao não depender apenas da consulta inicial do usuário, a abordagem de RAG agêntico é mais robusta a perguntas mal formuladas, p
Perguntas frequentes
Perguntas frequentes