Cómo el RAG Agéntico Reduce las Alucinaciones y Mejora la Recuperación
Descubre cómo Agentic RAG puede reducir las alucinaciones y mejorar la recuperación reformulando consultas, refinando resultados y aprovechando modelos de lenguaje más grandes. Desbloquea respuestas más completas y relevantes para tus aplicaciones RAG.
24 de febrero de 2025

Desbloquea el poder de la Generación Aumentada por Recuperación (RAG) con Agentes. Descubre cómo mejorar tu pipeline de RAG y reducir las alucinaciones al introducir agentes inteligentes que puedan analizar consultas, refinar búsquedas y generar respuestas más precisas y completas. Esta entrada de blog proporciona una guía práctica para implementar RAG con agentes, equipándote con las herramientas para elevar tus aplicaciones de procesamiento de lenguaje natural.
Cómo los agentes pueden arreglar las alucinaciones en RAG
Construir una canalización de RAG agéntica
Crear una herramienta de recuperación
Integrar el modelo de lenguaje
Implementar el agente agéntico
Comparar RAG estándar y RAG agéntico
Conclusión
Cómo los agentes pueden arreglar las alucinaciones en RAG
Cómo los agentes pueden arreglar las alucinaciones en RAG
El paso de recuperación de información en la generación aumentada por recuperación (RAG) depende en gran medida de cómo el usuario formula las preguntas. Si la consulta no está bien formulada, la recuperación de información puede ser difícil, incluso si la información que el usuario está buscando está presente en la base de conocimientos. En el RAG tradicional, obtenemos una sola y breve recuperación, pero podemos solucionar esto con el RAG agéntico.
Para entender cómo el RAG agéntico puede ayudar, veamos la configuración tradicional del RAG para la recuperación. La consulta del usuario se ejecuta a través de una búsqueda de similitud basada en semántica que busca los fragmentos más relevantes en la base de información. Pero, ¿qué sucede si la pregunta en sí no se formula de la manera adecuada? En ese caso, su canalización de RAG probablemente alucinará, es decir, comenzará a inventar respuestas, o el modelo de lenguaje le dirá al usuario que no pudo encontrar la información, a pesar de que la información está realmente presente en la base de conocimientos.
Podemos solucionar esto introduciendo agentes en la canalización de RAG y otorgándoles la capacidad de no solo analizar la consulta inicial, sino también analizar las respuestas generadas por la canalización de RAG. Así es como suele verse:
- La consulta inicial se pasa a través de un agente.
- El agente reformulará la consulta inicial.
- La consulta refinada se pasa a través de la base de conocimientos y se realiza una búsqueda de similitud basada en semántica para recuperar los documentos más relevantes.
- Antes de pasar los documentos relevantes al modelo de lenguaje, el agente analiza esos documentos o fragmentos nuevamente y refina la consulta si cree que los documentos recuperados no pueden responder a la pregunta.
- Basándose en la consulta refinada, el proceso se repite hasta que el agente esté satisfecho tanto con los documentos recuperados como con la consulta reformulada.
- El contexto final se pasa entonces al modelo de lenguaje para generar la respuesta.
Construir una canalización de RAG agéntica
Construir una canalización de RAG agéntica
El paso de recuperación de información en la generación aumentada por recuperación, o RAG, depende en gran medida de cómo el usuario formula las preguntas. Si la consulta no está bien formulada, la recuperación de información puede ser difícil, incluso si la información que el usuario está buscando está presente en la base de conocimientos. En el RAG tradicional, obtenemos una sola y breve recuperación, pero podemos solucionar esto con el RAG agéntico.
Para entender cómo el RAG agéntico puede ayudar, veamos la configuración tradicional del RAG para la recuperación. La consulta del usuario se ejecuta a través de una búsqueda de similitud basada en semántica que busca los fragmentos más relevantes en la base de información. Pero, ¿qué sucede si la pregunta en sí no se formula de la manera adecuada? En ese caso, su canalización de RAG probablemente alucinará, es decir, comenzará a inventar respuestas, o el LLM le dirá al usuario que no pudo encontrar la información, a pesar de que la información está realmente presente en la base de conocimientos.
Podemos solucionar esto introduciendo agentes en la canalización de RAG y otorgándoles la capacidad de no solo analizar la consulta inicial, sino también analizar las respuestas generadas por la canalización de RAG. Así es como suele verse:
- La consulta inicial se pasa a través de un agente.
- El agente reformulará la consulta inicial.
- La consulta refinada se pasa a través de la base de conocimientos y se realiza una búsqueda de similitud basada en semántica para recuperar los documentos más relevantes.
- Antes de pasar los documentos relevantes al LLM, el agente analiza esos documentos o fragmentos nuevamente y refina la consulta si cree que los documentos recuperados no pueden responder a la pregunta.
- Basándose en la consulta refinada, el proceso se repite hasta que el agente esté satisfecho tanto con los documentos recuperados como con la consulta reformulada.
- El contexto final se pasa entonces al LLM para generar la respuesta.
Para implementar el bucle agéntico en su canalización de RAG, tiene varias opciones, como los marcos como Crew AI, Auto o LangGraph de LangChain. En este caso, usaremos Transformers Agents, una característica poco conocida dentro del paquete Transformers que le permite crear sus propios agentes.
Crear una herramienta de recuperación
Crear una herramienta de recuperación
Para crear una herramienta de recuperación para la canalización de RAG agéntico, definimos una clase RetrievalTool
con la siguiente estructura:
class RetrievalTool:
"""Usando similitud semántica, recupera algunos documentos de la base de conocimientos que tienen los vectores más cercanos al de la entrada."""
def __init__(self, vector_db):
self.vector_db = vector_db
def __call__(self, query: str) -> List[str]:
"""
Recupera hasta 7 fragmentos más similares de la base de vectores para la consulta dada.
Args:
query (str): Una consulta para realizar la recuperación. Esto debe estar semánticamente cerca de los documentos objetivo.
Returns:
List[str]: Una lista de hasta 7 fragmentos más similares de la base de vectores.
"""
results = self.vector_db.similarity_search(query, k=7)
return [chunk.page_content for chunk in results]
La clase RetrievalTool
toma un objeto vector_db
como entrada, que es el almacén de vectores (por ejemplo, Faiss, Chroma, Pinecone) utilizado para almacenar los vectores de los documentos.
El método __call__
de la clase toma una cadena query
como entrada y devuelve una lista de hasta 7 fragmentos más similares de la base de vectores. Utiliza el método similarity_search
del objeto vector_db
para encontrar los fragmentos más similares en función de la similitud del coseno.
Integrar el modelo de lenguaje
Integrar el modelo de lenguaje
Para integrar el modelo de lenguaje en la canalización de RAG agéntico, necesitamos configurar el LLM que se utilizará tanto por el agente como para generar la respuesta final. Tenemos dos opciones:
-
Usar el motor de Hugging Face: Esto nos permite llamar directamente a los puntos finales de la API de los diferentes LLM disponibles a través de la arquitectura sin servidor de Hugging Face. Podemos usar modelos como Llama 38B o 70B, pero generalmente requieren una suscripción a Hugging Face Pro.
-
Usar OpenAI: Para este ejemplo, usaremos el motor de OpenAI. El proceso se puede adaptar para configurar cualquier otro LLM.
Para configurar el motor de OpenAI, creamos una clase llamada OpenAIEngine
que utiliza las funciones message_rle
y gpt_generate_message_list
del motor LLM de Transformer Agents. Esta clase maneja la limpieza de los mensajes de entrada y utiliza el punto final de finalización de chat de OpenAI para generar respuestas.
A continuación, creamos el agente real. El agente tiene acceso a la herramienta de recuperación que creamos anteriormente, al LLM que queremos usar (el OpenAIEngine
en este caso) y al número máximo de iteraciones que queremos que el agente realice antes de detener el bucle agéntico.
También proporcionamos un mensaje del sistema al agente, que le da instrucciones sobre cómo usar la información de la base de conocimientos para proporcionar una respuesta integral a la pregunta del usuario. El mensaje alienta al agente a volver a intentar el proceso de recuperación con diferentes consultas si no puede encontrar la información necesaria.
Con el agente y el LLM configurados, ahora podemos ejecutar el bucle agéntico para responder a las preguntas de los usuarios. El agente refinará iterativamente la consulta, recuperará la información relevante de la base de conocimientos y generará una respuesta final utilizando el LLM. Este enfoque conduce a respuestas más detalladas y relevantes en comparación con una canalización de RAG estándar.
Implementar el agente agéntico
Implementar el agente agéntico
Para implementar el agente agéntico, utilizaremos la característica Transformers Agents dentro del paquete Transformers. Esto proporciona un enfoque modular y claro para crear agentes personalizados.
Primero, debemos instalar los paquetes requeridos, incluyendo pandas, Langchain, el paquete Langchain Community, Sentence Transformers y Transformers Agents.
A continuación, importamos los módulos y paquetes necesarios. Utilizaremos el ReactJsonAgent, construiremos herramientas personalizadas para el agente y aprovecharemos el motor de Hugging Face para el modelo de lenguaje.
Para construir la canalización de RAG, comenzamos con un conjunto de datos que contiene la documentación de Hugging Face. Dividimos los documentos en fragmentos y creamos vectores utilizando el modelo GTE-small. Luego eliminamos cualquier fragmento duplicado y almacenamos los fragmentos únicos en un almacén de vectores basado en F.
Ahora, introducimos al agente en la mezcla. Creamos un RetrievalTool
que utiliza la similitud semántica para recuperar los fragmentos más relevantes de la base de conocimientos en función de la consulta del usuario.
También configuramos el modelo de lenguaje, en este caso, utilizando el motor de OpenAI con el modelo GPT-4.
El agente se crea entonces, con acceso a la herramienta de recuperación y al modelo de lenguaje. También especificamos el número máximo de iteraciones que el agente puede realizar para refinar la consulta y el contexto recuperado.
Se proporciona al agente un mensaje del sistema que lo guía para que utilice la base de conocimientos para proporcionar una respuesta integral a la pregunta del usuario. El agente luego pasa por un proceso iterativo, reformulando la consulta y recuperando información más relevante hasta que está satisfecho con la respuesta.
La canalización de RAG agéntico se compara entonces con una canalización de RAG estándar, demostrando cómo el enfoque basado en agentes puede proporcionar respuestas más detalladas y relevantes, especialmente cuando la consulta inicial del usuario no está bien formulada.
Comparar RAG estándar y RAG agéntico
Comparar RAG estándar y RAG agéntico
Las diferencias clave entre el RAG estándar y el RAG agéntico son:
-
Reformulación de la consulta: En el RAG estándar, la consulta del usuario se pasa directamente a través de la búsqueda de similitud basada en semántica para recuperar los fragmentos relevantes de la base de conocimientos. En el RAG agéntico, un agente analiza la consulta inicial y puede reformularla para mejorar el proceso de recuperación.
-
Refinamiento iterativo: El RAG agéntico permite que el agente refiné iterativamente la consulta y el contexto recuperado. Si el agente no está satisfecho con la recuperación inicial, puede repetir el proceso con una consulta refinada para obtener mejores resultados.
-
Respuestas concisas y relevantes: El enfoque agéntico tiende a generar respuestas más concisas y relevantes en comparación con el RAG estándar. La capacidad del agente para analizar la consulta y el contexto recuperado le ayuda a proporcionar una respuesta más integral.
-
Manejo de consultas mal formuladas: El RAG agéntico está mejor equipado para manejar casos en los que la consulta del usuario no está bien formulada. El agente puede reconocer las limitaciones de la consulta inicial y trabajar para reformularla, lo que conduce a una mejor recuperación y respuestas más informativas.
-
Flexibilidad y personalización: El RAG agéntico permite una mayor flexibilidad y personalización, ya que el agente se puede equipar con varias herramientas y capacidades para adaptarse a las necesidades específicas de la aplicación.
En resumen, el RAG agéntico introduce una capa adicional de inteligencia y control, lo que permite que el sistema comprenda mejor la intención del usuario, refiné el proceso de recuperación y genere respuestas más específicas e informativas, incluso cuando la consulta inicial no es óptima.
Conclusión
Conclusión
La introducción de agentes en la canalización de Generación Aumentada por Recuperación (RAG) puede mejorar significativamente la calidad y relevancia de las respuestas generadas. Al permitir que el agente analice la consulta inicial, la refiné y recupere y evalúe iterativamente la información más relevante de la base de conocimientos, el enfoque de RAG agéntico puede superar las limitaciones de las configuraciones tradicionales de RAG, donde la calidad de la salida depende en gran medida de la capacidad del usuario para formular la consulta de manera efectiva.
Los principales beneficios del enfoque de RAG agéntico incluyen:
-
Mejor reformulación de consultas: La capacidad del agente para analizar la consulta inicial y reformularla en función de la información recuperada asegura que la consulta final esté más alineada semánticamente con la intención del usuario, lo que conduce a resultados más relevantes.
-
Recuperación y evaluación iterativa: La capacidad del agente para recuperar y evaluar repetidamente la información recuperada le permite refiné la consulta y asegurarse de que el contexto final proporcionado al modelo de lenguaje sea integral y aborde la pregunta del usuario.
-
Mayor robustez: Al no depender únicamente de la consulta inicial del usuario, el enfoque de RAG agéntico es más robusto a las preguntas mal formuladas, ya que el agente puede trabajar para superar estas limitaciones a través de su proceso iterativo.
-
Respuestas detalladas e informativas: El enfoque de RAG agéntico, como se demostró en los ejemplos, puede generar respuestas más detalladas e informativas en comparación con las configuraciones tradicionales de RAG, proporcionando a los usuarios una comprensión más integral del tema.
En general, la integración de agentes en la canalización de RAG representa un avance significativo en el campo de la generación aumentada por recuperación, y las técnicas y herramientas presentadas en esta sección pueden servir como base para construir sistemas de IA conversacional más potentes y amigables para el usuario.
Preguntas más frecuentes
Preguntas más frecuentes