Com estado por design: construa uma ferramenta de busca RAG
Na lição anterior, você viu como criar e pesquisar uma base de conhecimento de manuais de eletrodomésticos baseada em vetores usando embeddings.
Agora, você vai construir uma ferramenta personalizada que encapsula essa lógica de busca, para que um agente possa usá-la para responder a perguntas sobre eletrodomésticos.
A ferramenta que você vai escrever será uma subclasse da classe base Tool e exporá uma única entrada: uma pergunta sobre a operação do eletrodoméstico
Você já tem acesso a:
- Uma variável chamada
vector_store, que contém seu índice FAISS pré-construído - Blocos de documentos com conteúdo de manuais de eletrodomésticos, incorporados e prontos para busca
Sua tarefa é implementar a estrutura e a lógica da ferramenta que tornará essa base de conhecimento acessível a um agente.
Este exercício faz parte do curso
Agentes de IA com Hugging Face smolagents
Instruções do exercício
- Aceite um parâmetro
vector_storeno método__init__(). - Adicione
querycomo parâmetro do métodoforward(). - Use
self.kpara definir quantos documentos relevantes devem ser retornados pela busca por similaridade.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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."