内存后端
所有后端都实现了相同的 MemoryService
trait,因此您可以通过启用功能标志并构造它来选择一个 — 您的
Agent 代码不会改变。共有六种。
概览
| 后端 | 特性 | 持久性 | 搜索 | 使用场景 |
|---|---|---|---|---|
InMemoryMemoryService | (默认) | 仅进程内 | 关键词 | 开发、测试、演示 |
SqliteMemoryService | sqlite-memory | 文件 | 关键词 | 单节点应用、本地持久化 |
PostgresMemoryService | database-memory | Postgres + pgvector | 向量相似度 | 生产环境语义搜索 |
RedisMemoryService | redis-memory | Redis (可选的 TTL) | 关键词 | 快速、临时性、共享缓存 |
MongoMemoryService | mongodb-memory | MongoDB | 关键词 / 向量 | 现有 Mongo 基础设施 |
Neo4jMemoryService | neo4j-memory | Neo4j | 图 | 现有 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)
Postgres + pgvector — 生产级语义搜索
用于真实相似性搜索的后端。它将嵌入存储在 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。
下一步:知识图谱 →