Agents Course documentation
Creando una Herramienta RAG para Historias de Invitados
Creando una Herramienta RAG para Historias de Invitados
Alfred, tu agente de confianza, está preparando la gala más extravagante del siglo. Para asegurar que el evento transcurra sin problemas, Alfred necesita acceso rápido a información actualizada sobre cada invitado. Ayudemos a Alfred creando una herramienta personalizada de Generación Aumentada por Recuperación (RAG), impulsada por nuestro conjunto de datos personalizado.
¿Por qué RAG para una Gala?
Imagina a Alfred mezclándose entre los invitados, necesitando recordar detalles específicos sobre cada persona en un instante. Un LLM tradicional podría tener dificultades con esta tarea porque:
- La lista de invitados es específica para tu evento y no está en los datos de entrenamiento del modelo
- La información de los invitados puede cambiar o actualizarse frecuentemente
- Alfred necesita recuperar detalles precisos como direcciones de correo electrónico
Aquí es donde brilla la Generación Aumentada por Recuperación (RAG)! Al combinar un sistema de recuperación con un LLM, Alfred puede acceder a información precisa y actualizada sobre tus invitados bajo demanda.
Puedes elegir cualquiera de los frameworks cubiertos en el curso para este caso de uso. Selecciona tu opción preferida de las pestañas de código.
Configurando nuestra aplicación
En esta unidad, desarrollaremos nuestro agente dentro de un Espacio de HF(HF Space), como un proyecto Python estructurado. Este enfoque nos ayuda a mantener un código limpio y modular, organizando diferentes funcionalidades en archivos separados. Además, esto crea un caso de uso más realista donde desplegarías la aplicación para uso público.
Estructura del Proyecto
tools.py– Proporciona herramientas auxiliares para el agente.retriever.py– Implementa funciones de recuperación para apoyar el acceso al conocimiento.app.py– Integra todos los componentes en un agente completamente funcional, que finalizaremos en la última parte de esta unidad.
Para una referencia práctica, consulta este Espacio de HF, donde el RAG Agéntico desarrollado en esta unidad está en vivo. ¡Siéntete libre de clonarlo y experimentar!
Puedes probar directamente el agente a continuación:
Descripción General del Conjunto de Datos
Nuestro conjunto de datos agents-course/unit3-invitees contiene los siguientes campos para cada invitado:
- Nombre: Nombre completo del invitado
- Relación: Cómo se relaciona el invitado con el anfitrión
- Descripción: Una breve biografía o hechos interesantes sobre el invitado
- Dirección de Correo Electrónico: Información de contacto para enviar invitaciones o seguimientos
A continuación se muestra una vista previa del conjunto de datos:
En un escenario del mundo real, este conjunto de datos podría ampliarse para incluir preferencias dietéticas, intereses de regalos, temas de conversación a evitar y otros detalles útiles para un anfitrión.
Construyendo la Herramienta de Lista de Invitados
Crearemos una herramienta personalizada que Alfred pueda usar para recuperar rápidamente información de los invitados durante la gala. Dividamos esto en tres pasos manejables:
- Cargar y preparar el conjunto de datos
- Crear la Herramienta de Recuperación
- Integrar la Herramienta con Alfred
¡Comencemos con la carga y preparación del conjunto de datos!
Paso 1: Cargar y Preparar el Conjunto de Datos
Primero, necesitamos transformar nuestros datos brutos de invitados en un formato optimizado para la recuperación.
Usaremos la librería datasets de Hugging Face para cargar el conjunto de datos y convertirlo en una lista de objetos Document del módulo langchain.docstore.document.
import datasets
from langchain_core.documents import Document
# Cargar el conjunto de datos
guest_dataset = datasets.load_dataset("agents-course/unit3-invitees", split="train")
# Convertir entradas del conjunto de datos en objetos Document
docs = [
Document(
page_content="\n".join([
f"Name: {guest['name']}",
f"Relation: {guest['relation']}",
f"Description: {guest['description']}",
f"Email: {guest['email']}"
]),
metadata={"name": guest["name"]}
)
for guest in guest_dataset
]
En el código anterior:
- Cargamos el conjunto de datos
- Convertimos cada entrada de invitado en un objeto
Documentcon contenido formateado - Almacenamos los objetos
Documenten una lista
Esto significa que tenemos todos nuestros datos disponibles de manera ordenada para poder comenzar a configurar nuestra recuperación.
Paso 2: Crear la Herramienta de Recuperación
Ahora, creemos una herramienta personalizada que Alfred pueda usar para buscar en nuestra información de invitados.
Usaremos el BM25Retriever del módulo langchain_community.retrievers para crear una herramienta de recuperación.
El
BM25Retrieveres un gran punto de partida para la recuperación, pero para búsquedas semánticas más avanzadas, podrías considerar usar recuperadores basados en embeddings como los de sentence-transformers.
from smolagents import Tool
from langchain_community.retrievers import BM25Retriever
class GuestInfoRetrieverTool(Tool):
name = "guest_info_retriever"
description = "Recupera información detallada sobre los invitados de la gala basada en su nombre o relación."
inputs = {
"query": {
"type": "string",
"description": "El nombre o relación del invitado sobre el que deseas información."
}
}
output_type = "string"
def __init__(self, docs):
self.is_initialized = False
self.retriever = BM25Retriever.from_documents(docs)
def forward(self, query: str):
results = self.retriever.get_relevant_documents(query)
if results:
return "\n\n".join([doc.page_content for doc in results[:3]])
else:
return "No se encontró información que coincida con la búsqueda."
# Inicializar la herramienta
guest_info_tool = GuestInfoRetrieverTool(docs)Entendamos esta herramienta paso a paso:
- El
namey ladescriptionayudan al agente a entender cuándo y cómo usar esta herramienta - Los
inputsdefinen qué parámetros espera la herramienta (en este caso, una consulta de búsqueda) - Estamos usando un
BM25Retriever, que es un algoritmo poderoso de recuperación de texto que no requiere embeddings - El método
forwardprocesa la consulta y devuelve la información más relevante del invitado
Paso 3: Integrar la Herramienta con Alfred
Finalmente, juntemos todo creando nuestro agente y equipándolo con nuestra herramienta personalizada:
from smolagents import CodeAgent, InferenceClientModel
# Inicializar el modelo de Hugging Face
model = InferenceClientModel()
# Crear Alfred, nuestro agente de gala, con la herramienta de información de invitados
alfred = CodeAgent(tools=[guest_info_tool], model=model)
# Ejemplo de consulta que Alfred podría recibir durante la gala
response = alfred.run("Cuéntame sobre nuestra invitada llamada 'Lady Ada Lovelace'.")
print("🎩 Respuesta de Alfred:")
print(response)Salida esperada:
🎩 Respuesta de Alfred:
Basado en la información que recuperé, Lady Ada Lovelace es una estimada matemática y amiga. Es reconocida por su trabajo pionero en matemáticas e informática, a menudo celebrada como la primera programadora de computadoras debido a su trabajo en la Máquina Analítica de Charles Babbage. Su dirección de correo electrónico es ada.lovelace@example.com.Lo que está sucediendo en este paso final:
- Inicializamos un modelo de Hugging Face usando la clase
InferenceClientModel - Creamos nuestro agente (Alfred) como un
CodeAgent, que puede ejecutar código Python para resolver problemas - Le pedimos a Alfred que recupere información sobre una invitada llamada “Lady Ada Lovelace”
Ejemplo de Interacción
Durante la gala, una conversación podría fluir así:
Tú: “Alfred, ¿quién es ese caballero hablando con el embajador?”
Alfred: rápidamente busca en la base de datos de invitados “Ese es el Dr. Nikola Tesla, señor. Es un viejo amigo de sus días universitarios. Recientemente ha patentado un nuevo sistema de transmisión de energía inalámbrica y estaría encantado de discutirlo con usted. Solo recuerde que es apasionado por las palomas, así que eso podría ser un buen tema de conversación.”
{
"name": "Dr. Nikola Tesla",
"relation": "viejo amigo de días universitarios",
"description": "El Dr. Nikola Tesla es un viejo amigo de sus días universitarios. Recientemente ha patentado un nuevo sistema de transmisión de energía inalámbrica y estaría encantado de discutirlo con usted. Solo recuerde que es apasionado por las palomas, así que eso podría ser un buen tema de conversación.",
"email": "nikola.tesla@gmail.com"
}Llevándolo Más Allá
Ahora que Alfred puede recuperar información de invitados, considera cómo podrías mejorar este sistema:
- Mejorar el recuperador para usar un algoritmo más sofisticado como sentence-transformers
- Implementar una memoria de conversación para que Alfred recuerde interacciones previas
- Combinar con búsqueda web para obtener la información más reciente sobre invitados desconocidos
- Integrar múltiples índices para obtener información más completa de fuentes verificadas
¡Ahora Alfred está completamente equipado para manejar consultas de invitados sin esfuerzo, asegurando que tu gala sea recordada como el evento más sofisticado y encantador del siglo!
Update on GitHubIntenta extender la herramienta de recuperación para que también devuelva iniciadores de conversación basados en los intereses o antecedentes de cada invitado. ¿Cómo modificarías la herramienta para lograr esto?
Cuando hayas terminado, implementa tu herramienta de recuperación de invitados en el archivo
retriever.py.