记忆工具

记忆工具使代理能够在推理过程中自主搜索自己的长期记忆。代理不再完全依赖外部编排,而是自行决定何时以及如何查询记忆。

概述

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_results51–100返回的最大记忆条目数
min_relevance_scoreNone0.0–1.0最低相似度阈值
project_id将搜索范围限定为项目

项目范围内的记忆

配置 project_id 后,搜索范围将限定为用户记忆中的该项目:

let tool = LoadMemoryTool::builder()
    .memory_service(service)
    .project_id("my-project")
    .build()?;

适用于任何后端

记忆工具委托给 MemoryService trait。任何后端都可以使用:

  • InMemoryMemoryService — 开发与测试
  • PostgresMemoryService — 使用 pgvector 的生产环境
  • 自定义实现

上一页← 模式规范化 | 下一页会话 →