Herramientas de memoria

Las herramientas de memoria permiten a los agentes buscar de forma autónoma en su propia memoria a largo plazo durante el razonamiento. En lugar de depender únicamente de la orquestación externa, el agente decide cuándo y cómo consultar la memoria.

Descripción general

ADK-Rust proporciona dos herramientas de memoria detrás del indicador de funcionalidad memory-tools:

HerramientaPropósitoInvocación
LoadMemoryToolBúsqueda de memoria bajo demanda durante el razonamientoEl agente la invoca como cualquier otra herramienta
PreloadMemoryToolCarga automáticamente el contexto relevante al inicio del turnoSe ejecuta como un BeforeModelCallback

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

Instalación

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

LoadMemoryTool

El agente llama a esta herramienta durante el razonamiento para buscar en la memoria con una consulta:

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

La herramienta devuelve JSON estructurado:

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

PreloadMemoryTool

Se puede usar de dos maneras:

Como herramienta normal

El agente la llama explícitamente (parámetro query opcional; si no se proporciona, utiliza la entrada más reciente del usuario).

Como BeforeModelCallback

Inyecta automáticamente los recuerdos relevantes en la instrucción del sistema antes de cada llamada al 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()?;

Configuración

Ambas herramientas comparten MemoryToolConfig:

OpciónPredeterminadoRangoDescripción
max_results51–100Máximo de entradas de memoria devueltas
min_relevance_scoreNinguno0.0–1.0Umbral mínimo de similitud
project_idNingunoLimita las búsquedas a un proyecto

Memoria con ámbito de proyecto

Cuando se configura project_id, las búsquedas se limitan a ese proyecto dentro de la memoria del usuario:

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

Funciona con cualquier backend

Las herramientas de memoria delegan en el trait MemoryService. Cualquier backend funciona:

  • InMemoryMemoryService — desarrollo y pruebas
  • PostgresMemoryService — producción con pgvector
  • Implementaciones personalizadas

Anterior: ← Normalización del esquema | Siguiente: Sesiones →

Herramientas de memoria - Documentación ADK-Rust | ADK-Rust