Pensé pour conserver l'état : créer un outil de recherche RAG
Dans la leçon précédente, vous avez vu comment bâtir et interroger une base de connaissances vectorielle de manuels d'appareils à l'aide d'intégrations.
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 liées aux appareils.
L'outil que vous allez écrire sera une sous-classe de la classe de base Tool et exposera une seule entrée : une question sur le fonctionnement d'un appareil
Vous avez déjà accès à :
- Une variable nommée
vector_store, qui contient votre index FAISS préconstruit - Des fragments de documents contenant le contenu des manuels d'appareils, intégrés et prêts pour la recherche
Votre tâche consiste à implémenter la structure et la logique de l'outil qui rendront cette base de connaissances accessible à un agent.
Cette activité fait partie du cours
Agents IA avec Hugging Face smolagents
Instructions de l’exercice
- 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 ce code d’exemple.
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."