메모리 도구

메모리 도구를 사용하면 에이전트가 추론 중에 자체 장기 메모리를 자율적으로 검색할 수 있습니다. 외부 오케스트레이션에만 의존하는 대신, 에이전트가 메모리를 언제 어떻게 조회할지 결정합니다.

개요

ADK-Rust는 memory-tools 기능 플래그를 통해 두 가지 메모리 도구를 제공합니다:

도구용도호출
LoadMemoryTool추론 중 필요할 때 메모리 검색에이전트가 다른 도구와 동일하게 호출
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 트레이트에 작업을 위임합니다. 모든 백엔드가 작동합니다.

  • InMemoryMemoryService — 개발 및 테스트
  • PostgresMemoryService — pgvector를 사용하는 프로덕션
  • 사용자 지정 구현

이전: ← 스키마 정규화 | 다음: 세션 →