内存后端

所有后端都实现了相同的 MemoryService trait,因此您可以通过启用功能标志并构造它来选择一个 — 您的 Agent 代码不会改变。共有六种。

概览

后端特性持久性搜索使用场景
InMemoryMemoryService(默认)仅进程内关键词开发、测试、演示
SqliteMemoryServicesqlite-memory文件关键词单节点应用、本地持久化
PostgresMemoryServicedatabase-memoryPostgres + pgvector向量相似度生产环境语义搜索
RedisMemoryServiceredis-memoryRedis (可选的 TTL)关键词快速、临时性、共享缓存
MongoMemoryServicemongodb-memoryMongoDB关键词 / 向量现有 Mongo 基础设施
Neo4jMemoryServiceneo4j-memoryNeo4j现有 Neo4j 基础设施

(双时态 GraphMemoryService 是第七个,在其专属页面中介绍 — 知识图谱。)

InMemory — 从这里开始

零配置。所有内容都存在于进程中,并在退出时消失。

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

非常适合开发和测试套件;由于 trait 相同,只需一行代码即可将其替换为持久化后端。

SQLite — 一个文件

持久化、单文件、无需服务器。非常适合桌面应用和单节点服务。

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

用于真实相似性搜索的后端。它将嵌入存储在 pgvector 中,并允许您选择索引策略。

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 可扩展到大型数据集。向量搜索需要一个 嵌入提供者

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(...) 遵循相同的 结构。它们都遵循来自概念(app, user, project) 隔离。

嵌入

执行向量相似性搜索的后端(Postgres,可选 Mongo)需要将文本转换为向量。提供一个 EmbeddingProvider

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

关键词后端(InMemory, SQLite, Redis)不需要。将您用于索引的嵌入模型与用于查询的模型匹配。

迁移

SQL 支持的服务运行版本化、幂等的迁移来创建和升级其 schema,因此部署新版本不需要手动 DDL。在启动时调用服务的 migrate()(或让构造函数处理)。

选择

  • 构建 / 测试 → InMemory。
  • 单节点,需要持久化 → SQLite。
  • 大规模真实语义召回 → Postgres + pgvector。
  • 您已经运行 Redis / Mongo / Neo4j → 该后端。
  • 您想要一个可查询的用户模型,而不是一个记录GraphMemoryService

下一步:知识图谱 →