메모리 백엔드

모든 백엔드는 동일한 MemoryService trait를 구현하므로, 기능 플래그를 활성화하고 구성하여 하나를 선택합니다. Agent 코드는 변경되지 않습니다. 총 여섯 가지가 있습니다.

한눈에 보기

백엔드기능영속성검색사용 시점
InMemoryMemoryService(기본값)프로세스 내에서만키워드개발, 테스트, 데모
SqliteMemoryServicesqlite-memory파일키워드단일 노드 앱, 로컬 영속성
PostgresMemoryServicedatabase-memoryPostgres + pgvector벡터 유사성프로덕션 시맨틱 검색
RedisMemoryServiceredis-memoryRedis (선택 사항 TTL)키워드빠르고, 일시적이며, 공유 캐시
MongoMemoryServicemongodb-memoryMongoDB키워드 / 벡터기존 Mongo 인프라
Neo4jMemoryServiceneo4j-memoryNeo4j그래프기존 Neo4j 인프라

(bi-temporal **GraphMemoryService**는 일곱 번째이며, 별도의 페이지에서 다룹니다 — Knowledge graph.)

InMemory — 여기부터 시작

설정 없음. 모든 것이 프로세스 내에 존재하며 종료 시 사라집니다.

use adk_memory::InMemoryMemoryService;
let memory = InMemoryMemoryService::new();

개발 및 테스트 스위트에 완벽합니다. 트레이트가 동일하므로 한 줄 변경으로 영구적인 백엔드로 교체할 수 있습니다.

SQLite — 파일

영구적이고, 단일 파일이며, 서버가 없습니다. 데스크톱 앱 및 단일 노드 서비스에 적합합니다.

use adk_memory::SqliteMemoryService;
let memory = SqliteMemoryService::new("sqlite://memory.db").await?;
// or build from an existing pool: SqliteMemoryService::from_pool(pool)

실제 유사성 검색을 위한 백엔드입니다. pgvector에 embeddings를 저장하고 인덱스 전략을 선택할 수 있습니다.

use adk_memory::{PostgresMemoryService, VectorIndexType};

let memory = PostgresMemoryService::builder(pool, embedding_provider)
    .vector_index(VectorIndexType::Hnsw { m: 32, ef_construction: 128 })  // or IvfFlat / None
    .build()
    .await?;

VectorIndexType::None는 정확한 (무차별 대입) 검색을 수행합니다 — 작은 세트에 적합합니다; Hnsw (기본값) 및 IvfFlat는 큰 세트로 확장됩니다. Vector search에는 embedding provider가 필요합니다.

Redis, MongoDB, Neo4j

이미 인프라를 운영 중인 경우 다음을 사용하세요:

use adk_memory::{RedisMemoryService, RedisMemoryConfig};
use std::time::Duration;

let memory = RedisMemoryService::new(RedisMemoryConfig {
    url: "redis://localhost:6379".into(),
    ttl: Some(Duration::from_secs(60 * 60 * 24 * 30)),   // optional expiry
}).await?;

MongoMemoryService::new(...)Neo4jMemoryService::new(...)는 동일한 형태를 따릅니다. 이들 모두 Concepts(app, user, project) 격리를 준수합니다.

Embeddings

vector 유사성을 수행하는 백엔드(Postgres, 선택적으로 Mongo)는 텍스트를 vectors로 변환해야 합니다. EmbeddingProvider를 제공하세요:

#[async_trait]
pub trait EmbeddingProvider: Send + Sync {
    async fn embed(&self, texts: &[String]) -> Result<Vec<Vec<f32>>>;
}

Keyword 백엔드(InMemory, SQLite, Redis)는 필요하지 않습니다. 인덱싱하는 embedding model과 쿼리하는 embedding model을 일치시키세요.

마이그레이션

SQL 기반 서비스는 스키마를 생성하고 업그레이드하기 위해 버전 관리되는 멱등성 마이그레이션을 실행하므로, 새 버전을 배포할 때 수동 DDL이 필요하지 않습니다. 시작 시 서비스의 migrate()를 호출하세요 (또는 생성자가 처리하도록 하세요).

선택

  • 구축 / 테스트 → InMemory.
  • 단일 노드, 영구적으로 유지하고 싶다면 → SQLite.
  • 대규모 실제 semantic recall → Postgres + pgvector.
  • 이미 Redis / Mongo / Neo4j를 운영 중이라면 → 해당 백엔드.
  • 사용자의 쿼리 가능한 모델을 원하고, 대화 기록이 아니라면GraphMemoryService.

다음: Knowledge graph →

메모리 백엔드 - ADK-Rust 문서 | ADK-Rust