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
Istruzioni dell'esercizio
- Accetta un parametro
vector_storenel metodo__init__(). - Aggiungi
querycome parametro del metodoforward(). - Usa
self.kper 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."