Conçu avec état : créer un outil de recherche RAG
Dans la leçon précédente, vous avez vu comment constituer et interroger une base de connaissances vectorielle de manuels d’appareils à l’aide d’embeddings.
Vous allez maintenant créer un outil personnalisé qui encapsule cette logique de recherche, afin qu’un agent puisse l’utiliser pour répondre aux questions sur les appareils.
L’outil que vous allez écrire héritera de la classe de base Tool et exposera une seule entrée : une question sur l’utilisation d’un appareil.
Vous avez déjà accès à :
- Une variable appelée
vector_store, qui contient votre index FAISS préconstruit - Des fragments de documents issus de manuels d’appareils, vectorisés et prêts pour la recherche
Votre mission est d’implémenter la structure et la logique de l’outil qui rendront cette base de connaissances accessible à un agent.
Cet exercice fait partie du cours
Agents IA avec Hugging Face smolagents
Instructions
- Acceptez un paramètre
vector_storedans la méthode__init__(). - Ajoutez
querycomme paramètre de la méthodeforward(). - Utilisez
self.kpour définir combien de documents pertinents doivent être renvoyés par la recherche de similarité.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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."