Con estado desde el diseño: crea una herramienta de búsqueda RAG
En la lección anterior, viste cómo construir y consultar una base de conocimiento basada en vectores de manuales de electrodomésticos usando embeddings.
Ahora, vas a crear una herramienta personalizada que encapsule esta lógica de búsqueda, para que un agente pueda usarla para responder preguntas sobre electrodomésticos.
La herramienta que vas a escribir heredará de la clase base Tool y expondrá una única entrada: una pregunta sobre el funcionamiento de un electrodoméstico.
Ya tienes acceso a:
- Una variable llamada
vector_store, que contiene tu índice FAISS ya construido - Fragmentos de documentos con contenido de manuales de electrodomésticos, embebidos y listos para buscar
Tu tarea es implementar la estructura y la lógica de la herramienta que permitirá a un agente acceder a esta base de conocimiento.
Este ejercicio forma parte del curso
Agentes de IA con Hugging Face smolagents
Instrucciones del ejercicio
- Acepta un parámetro
vector_storeen el método__init__(). - Añade
querycomo parámetro del métodoforward(). - Usa
self.kpara indicar cuántos documentos relevantes deben devolverse desde la búsqueda por similitud.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
class ApplianceSearchTool(Tool):
name = "appliance_manual_search"
description = "Search appliance manuals for maintenance and usage information"
inputs = {"query": {"type": "string", "description": "Question about appliance operation"}}
output_type = "string"
# Pass the vector store into the constructor
def __init__(self, ____, k=3):
super().__init__()
self.vector_store = vector_store
self.k = k
# Accept the query string as input to the forward method
def forward(self, ____):
# Use self.k here to specify how many chunks to return
docs = self.vector_store.similarity_search(query, k=____)
return "\n\n".join(doc.page_content for doc in docs) or "No relevant manual sections found."