用于 ADK 的 Files Retrieval 工具¶
FilesRetrieval 工具让你的 ADK 智能体使用检索增强生成(RAG)对本地文档建立索引并进行查询。它使用 Google 的 Gemini 嵌入模型,在你指定的目录上构建 LlamaIndex VectorStoreIndex。随后,你的智能体就能从本地文本文件、Markdown 文档和源代码文件中检索相关片段,使答案以项目专属的上下文为依据。
用例¶
- 代码库与文档搜索:从本地仓库中检索相关函数、设计说明和文档,以回答技术问题。
- 本地知识库基础信息获取 (Grounding):直接从你自己的文件系统中索引内部 Markdown 文件、技术规范和指南,无需先把它们加载到托管文档存储中。文档内容会被发送到所配置的嵌入模型进行索引,因此在索引敏感材料之前,请先查看 Google AI Studio 或 Agent Platform 的数据处理条款。
- 上下文增强的辅助:从报告、日志或文本文件中检索相关的领域特定数据,使智能体的响应以经过验证的源材料为依据。
前提条件¶
FilesRetrieval 工具使用 LlamaIndex 来索引文档,而 ADK 默认不会安装它。请安装提供该能力的扩展依赖:
然后为 Google AI Studio 或 Agent Platform 配置凭据:
在 Google AI Studio 中生成一个 API key,并设置环境变量:
Note
在生产环境中,请通过 embedding_model=GoogleGenAIEmbedding(model_name="gemini-embedding-2", embed_batch_size=1) 显式传入 GA 模型。有关详情,请参阅 Gemini Embedding。有关将你的 ADK 智能体连接到 Google Cloud 资源和服务的详情,请参阅 Google Cloud 连接指南。
与智能体一起使用¶
本示例为一个本地数据目录配置 FilesRetrieval,并把它挂载到一个 ADK 智能体上。运行之前,请在你的智能体模块旁创建一个 data/ 目录,并加入你想索引的 .txt 或 .md 文件:FilesRetrieval 在构造时会加载并嵌入整个目录,因此该目录必须已经存在,并且每次导入智能体模块时都会重新索引其中的内容。
import os
from google.adk.agents import Agent
from google.adk.tools.retrieval.files_retrieval import FilesRetrieval
# 源文档所在目录的路径
DATA_DIR = os.path.join(os.path.dirname(__file__), "data")
# 初始化 FilesRetrieval 工具
files_retrieval = FilesRetrieval(
name="search_documents",
description=(
"搜索本地文档文件以找到相关信息。"
"当用户询问有关架构、项目结构或工具的问题时,"
"请使用此工具。"
),
input_dir=DATA_DIR,
)
# 创建配备了检索工具的智能体
root_agent = Agent(
model="gemini-flash-latest",
name="files_retrieval_agent",
instruction=(
"你是一个有用的助手,会基于本地文档文件回答问题。"
"在生成答案之前,务必先使用 search_documents 工具"
"检索相关上下文。"
),
tools=[files_retrieval],
)
可用工具¶
FilesRetrieval 类是一个工具。通过 tools=[...] 挂载后,智能体会看到一个函数,它只接受一个 query 字符串参数:
| 工具 | 描述 |
|---|---|
search_documents |
对已索引目录中的文档执行语义向量搜索,并针对给定的自然语言查询返回最相关的内容片段。可用 name 参数为其重命名。 |
配置¶
FilesRetrieval 构造函数接受以下参数:
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
name |
str |
是 | — | 工具的唯一标识符,供模型用于函数调用。 |
description |
str |
是 | — | 说明智能体应在何时以及如何调用该检索工具。 |
input_dir |
str |
是 | — | 包含待加载和索引文档的本地文件系统目录路径。 |
embedding_model |
Optional[BaseEmbedding] |
否 | None |
自定义的 LlamaIndex BaseEmbedding 实例。省略时,默认为 GoogleGenAIEmbedding(model_name="gemini-embedding-2-preview", embed_batch_size=1)。 |
自定义嵌入模型¶
你可以通过传入符合 LlamaIndex BaseEmbedding 接口的实例来定制嵌入模型:
from google.adk.tools.retrieval.files_retrieval import FilesRetrieval
from llama_index.embeddings.google_genai import GoogleGenAIEmbedding
custom_embedding = GoogleGenAIEmbedding(
model_name="gemini-embedding-2",
embed_batch_size=1,
)
files_retrieval = FilesRetrieval(
name="search_documents",
description="搜索本地知识库文件。",
input_dir=os.path.join(os.path.dirname(__file__), "data"),
embedding_model=custom_embedding,
)