Proiectat cu stare: construiește un instrument RAG de căutare
În lecția anterioară, ai văzut cum se poate construi și interoga o bază de cunoștințe bazată pe vectori, care conține manuale de electrocasnice, folosind încorporări (embeddings).
Acum vei construi un instrument personalizat care împachetează această logică de căutare, astfel încât un agent să îl poată folosi pentru a răspunde la întrebări despre electrocasnice.
Instrumentul pe care îl scrii va extinde clasa de bază Tool și va expune un singur input: o întrebare despre funcționarea unui electrocasnic.
Ai deja acces la:
- O variabilă numită
vector_store, care conține indexul FAISS pre-construit - Fragmente de documente cu conținut din manuale de electrocasnice, încorporate și pregătite pentru căutare
Sarcina ta este să implementezi structura și logica instrumentului care va face această bază de cunoștințe accesibilă unui agent.
Acest exercițiu face parte din cursul
Agenți AI cu Hugging Face smolagents
Instrucțiuni pentru exercițiu
- Acceptă un parametru
vector_storeîn metoda__init__(). - Adaugă
queryca parametru al metodeiforward(). - Folosește
self.kpentru a stabili câte documente relevante să fie returnate din căutarea de similaritate.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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."