메모리 도구
메모리 도구를 사용하면 에이전트가 추론 중에 자체 장기 메모리를 자율적으로 검색할 수 있습니다. 외부 오케스트레이션에만 의존하는 대신, 에이전트가 메모리를 언제 어떻게 조회할지 결정합니다.
개요
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_results | 5 | 1–100 | 반환되는 최대 메모리 항목 수 |
min_relevance_score | None | 0.0–1.0 | 최소 유사도 임계값 |
project_id | 없음 | — | 검색 범위를 프로젝트로 제한 |
프로젝트 범위 메모리
project_id이 구성되면 사용자의 메모리에서 검색 범위가 해당 프로젝트로 제한됩니다.
let tool = LoadMemoryTool::builder()
.memory_service(service)
.project_id("my-project")
.build()?;
모든 백엔드와 함께 작동
메모리 도구는 MemoryService 트레이트에 작업을 위임합니다. 모든 백엔드가 작동합니다.
InMemoryMemoryService— 개발 및 테스트PostgresMemoryService— pgvector를 사용하는 프로덕션- 사용자 지정 구현