CommencerCommencer gratuitement

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

Afficher le cours

Instructions

  • Acceptez un paramètre vector_store dans la méthode __init__().
  • Ajoutez query comme paramètre de la méthode forward().
  • Utilisez self.k pour 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."
Modifier et exécuter le code