CommencezCommencez gratuitement

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

Voir le cours

Instructions de l’exercice

  • 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 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."
Modifier et exécuter le code