IniziaInizia gratis

Stateful by Design: crea uno strumento di ricerca RAG

Nella lezione precedente hai visto come creare e interrogare una base di conoscenza di manuali di elettrodomestici basata su vettori usando embedding.

Ora costruirai uno strumento personalizzato che incapsula questa logica di ricerca, così un agente potrà usarlo per rispondere a domande sugli elettrodomestici.

Lo strumento che stai scrivendo estenderà la classe base Tool ed esporrà un solo input: una domanda sul funzionamento di un elettrodomestico.

Hai già accesso a:

  • Una variabile chiamata vector_store, che contiene il tuo indice FAISS già pronto
  • Porzioni di documenti con contenuti dei manuali degli elettrodomestici, con embedding e pronti per la ricerca

Il tuo compito è implementare la struttura e la logica dello strumento che renderà questa base di conoscenza accessibile a un agente.

Questo esercizio fa parte del corso

Agenti AI con Hugging Face smolagents

Visualizza il corso

Istruzioni dell'esercizio

  • Accetta un parametro vector_store nel metodo __init__().
  • Aggiungi query come parametro del metodo forward().
  • Usa self.k per impostare quanti documenti pertinenti devono essere restituiti dalla similarity search.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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."
Modifica ed esegui il codice