记忆工具
记忆工具使代理能够在推理过程中自主搜索自己的长期记忆。代理不再完全依赖外部编排,而是自行决定何时以及如何查询记忆。
概述
ADK-Rust 在 memory-tools 功能标志后提供了两个记忆工具:
| 工具 | 用途 | 调用方式 |
|---|---|---|
LoadMemoryTool | 推理过程中按需搜索记忆 | Agent 像调用其他工具一样调用它 |
PreloadMemoryTool | 在每轮开始时自动加载相关上下文 | 作为 BeforeModelCallback 运行 |
快速开始
use adk_tool::memory::{LoadMemoryTool, PreloadMemoryTool};
use adk_memory::InMemoryMemoryService;
use std::sync::Arc;
let memory_service = Arc::new(InMemoryMemoryService::new());
// LoadMemoryTool — agent calls during reasoning
let load_tool = LoadMemoryTool::builder()
.memory_service(memory_service.clone())
.max_results(5)
.min_relevance_score(0.3)
.build()?;
// PreloadMemoryTool — auto-injects at turn start
let preload_tool = PreloadMemoryTool::builder()
.memory_service(memory_service.clone())
.max_results(3)
.build()?;
// Use LoadMemoryTool as a regular tool
let agent = LlmAgentBuilder::new("assistant")
.model(model)
.tool(Arc::new(load_tool))
.before_model_callback(preload_tool.into_before_model_callback())
.build()?;
安装
[dependencies]
adk-tool = { version = "2.1.0", features = ["memory-tools"] }
adk-memory = "2.1.0"
LoadMemoryTool
代理在推理过程中调用此工具,以使用查询搜索记忆:
{
"name": "load_memory",
"parameters": {
"type": "object",
"properties": {
"query": { "type": "string", "description": "Search query" },
"limit": { "type": "integer", "minimum": 1, "maximum": 100 }
},
"required": ["query"]
}
}
该工具返回结构化的 JSON:
{
"memories": [
{
"content": "The user prefers dark mode",
"author": "assistant",
"timestamp": "2026-05-15T10:30:00Z"
}
],
"count": 1
}
PreloadMemoryTool
有两种使用方式:
作为常规工具
代理会显式调用它(可选的 query 参数——如果未提供,则使用用户最新的输入)。
作为 BeforeModelCallback
在每次模型调用之前,自动将相关记忆注入系统指令中:
let preload = PreloadMemoryTool::builder()
.memory_service(service)
.max_results(3)
.build()?;
let agent = LlmAgentBuilder::new("assistant")
.model(model)
.before_model_callback(preload.into_before_model_callback())
.build()?;
配置
两个工具共享 MemoryToolConfig:
| 选项 | 默认值 | 范围 | 描述 |
|---|---|---|---|
max_results | 5 | 1–100 | 返回的最大记忆条目数 |
min_relevance_score | None | 0.0–1.0 | 最低相似度阈值 |
project_id | 无 | — | 将搜索范围限定为项目 |
项目范围内的记忆
配置 project_id 后,搜索范围将限定为用户记忆中的该项目:
let tool = LoadMemoryTool::builder()
.memory_service(service)
.project_id("my-project")
.build()?;
适用于任何后端
记忆工具委托给 MemoryService trait。任何后端都可以使用:
InMemoryMemoryService— 开发与测试PostgresMemoryService— 使用 pgvector 的生产环境- 自定义实现