为状态而生:构建 RAG 搜索工具
在上一节课中,您已经看到如何使用嵌入向量(embedding — 向量表示)来构建并搜索一个基于向量的家电手册知识库。
现在,您将构建一个封装该搜索逻辑的自定义工具,便于代理使用它来回答与家电相关的问题。
您要编写的工具将继承 Tool 基类,并只暴露一个输入:关于家电操作的问题。
您已经可以使用:
- 一个名为
vector_store的变量,其中包含预先构建好的 FAISS 索引 - 按段拆分的家电手册文档内容,已完成嵌入,可直接用于搜索
您的任务是实现该工具的结构与逻辑,使代理可以访问并利用此知识库。
本练习是课程的一部分
使用 Hugging Face smolagents 的 AI Agents
练习说明
- 在
__init__()方法中接收一个vector_store参数。 - 在
forward()方法中添加参数query。 - 使用
self.k设置相似度搜索返回的相关文档数量。
交互式实操练习
通过完成这段示例代码来试试这个练习。
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."