Tillståndsstyrd design: Bygg ett RAG-sökverktyg
I föregående lektion såg du hur en vektorbaserad kunskapsbas med apparatmanualer kan byggas och sökas med hjälp av inbäddningar (embeddings – vektorrepresentationer).
Nu ska du bygga ett anpassat verktyg som kapslar in den här söklogiken, så att en agent kan använda det för att svara på frågor om apparater.
Verktyget du skriver kommer att ärva från basklassen Tool och exponera en indata: en fråga om hur en apparat används.
Du har redan tillgång till:
- En variabel som heter
vector_store, som innehåller ditt förbyggda FAISS-index - Dokumentfragment med innehåll från apparatmanualer, inbäddade och redo för sökning
Din uppgift är att implementera strukturen och logiken i verktyget som gör den här kunskapsbasen tillgänglig för en agent.
Den här övningen är en del av kursen
AI-agenter med Hugging Face smolagents
Övningsinstruktioner
- Ta emot en parameter
vector_storei metoden__init__(). - Lägg till
querysom parameter till metodenforward(). - Använd
self.kför att ange hur många relevanta dokument som ska returneras från likhetssökningen.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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."