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.

Visión General

ADK-Rust proporciona dos herramientas de memoria detrás de la bandera de característica memory-tools:

HerramientaPropósitoInvocación
LoadMemoryToolBúsqueda de memoria bajo demanda durante el razonamientoEl agente la llama 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.0.0", features = ["memory-tools"] }
adk-memory = "2.0.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

Puede utilizarse de dos maneras:

Como herramienta regular

El agent lo llama explícitamente (parámetro opcional query — recurre a la última entrada del usuario).

Como un BeforeModelCallback

Inyecta automáticamente memorias relevantes en la instrucción del sistema antes de cada llamada al model:

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–100Número máximo de entradas de memoria devueltas
min_relevance_scoreNone0.0–1.0Umbral de similitud mínimo
project_idNoneLimita las búsquedas a un proyecto

Memoria con Alcance de Proyecto

Cuando se configura project_id, las búsquedas se limitan a ese project 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: ← Schema Normalization | Siguiente: Sessions →