Ferramentas de memória

As ferramentas de memória permitem que os agentes pesquisem autonomamente sua própria memória de longo prazo durante o raciocínio. Em vez de depender exclusivamente da orquestração externa, o agente decide quando e como consultar a memória.

Visão geral

ADK-Rust fornece duas ferramentas de memória por trás da flag de recurso memory-tools:

FerramentaFinalidadeInvocação
LoadMemoryToolPesquisa de memória sob demanda durante o raciocínioO agente a chama como qualquer outra ferramenta
PreloadMemoryToolCarrega automaticamente o contexto relevante no início do turnoÉ executado como um BeforeModelCallback

Início rápido

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()?;

Instalação

[dependencies]
adk-tool = { version = "2.1.0", features = ["memory-tools"] }
adk-memory = "2.1.0"

LoadMemoryTool

O agente chama esta ferramenta durante o raciocínio para pesquisar na memória com uma consulta:

{
  "name": "load_memory",
  "parameters": {
    "type": "object",
    "properties": {
      "query": { "type": "string", "description": "Search query" },
      "limit": { "type": "integer", "minimum": 1, "maximum": 100 }
    },
    "required": ["query"]
  }
}

A ferramenta retorna JSON estruturado:

{
  "memories": [
    {
      "content": "The user prefers dark mode",
      "author": "assistant",
      "timestamp": "2026-05-15T10:30:00Z"
    }
  ],
  "count": 1
}

PreloadMemoryTool

Pode ser usada de duas maneiras:

Como uma ferramenta comum

O agente a chama explicitamente (parâmetro query opcional — usa como padrão a entrada mais recente do usuário).

Como um BeforeModelCallback

Insere automaticamente memórias relevantes na instrução do sistema antes de cada chamada do modelo:

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()?;

Configuração

Ambas as ferramentas compartilham MemoryToolConfig:

OpçãoPadrãoIntervaloDescrição
max_results51–100Número máximo de entradas de memória retornadas
min_relevance_scoreNenhum0.0–1.0Limite mínimo de similaridade
project_idNenhumLimita as pesquisas a um projeto

Memória com Escopo de Projeto

Quando project_id é configurado, as pesquisas ficam limitadas a esse projeto na memória do usuário:

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

Funciona com Qualquer Backend

As ferramentas de memória delegam ao trait MemoryService. Qualquer backend funciona:

  • InMemoryMemoryService — desenvolvimento e testes
  • PostgresMemoryService — produção com pgvector
  • Implementações personalizadas

Anterior: ← Normalização de Schema | Próximo: Sessões →