ComenzarEmpieza gratis

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

Ver curso

Instrucciones del ejercicio

  • Acepta un parámetro vector_store en el método __init__().
  • Añade query como parámetro del método forward().
  • Usa self.k para 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."
Editar y ejecutar código