在 LLM agent 的长期演进中,记忆管理已成为瓶颈:传统向量数据库虽高效检索,却易冗余膨胀,缺乏结构化压缩;纯 KV 存储虽可靠,却难捕获语义关联。Memori 作为开源 SQL 原生记忆引擎,通过分层语义设计与 dedup compaction 机制,巧妙融合 hybrid 存储(KV + 向量),实现高效、多级的记忆组织与实时更新。这不仅降低 80%+ 存储成本,还确保 agent 在跨会话中维持连贯性。
分层语义记忆的核心架构
Memori 的 hierarchical memory 以实体(entity,如用户 / 项目)、过程(process,如 agent 任务)和会话(session)为轴心构建多级索引。底层为 KV 存储事实三元组(semantic triples:主语 - 谓语 - 宾语),上层叠加向量嵌入(vectorized memories),支持语义搜索与知识图谱查询。“Memori 使用第三范式 schema,包括 semantic triples 存储以构建知识图谱。” 这形成 hybrid 结构:KV 保障精确性,向量提升召回。
多级索引体现为:
- L0 短期工作记忆(Conscious Layer):Conscious Agent 每 6 小时后台分析长期记忆,按重要性评分(0-1 分)提升 5-10 条核心事实至内存缓存。一旦会话启动,即 one-shot 注入 prompt,避免重复检索。
- L1 长期结构记忆(Structured Layer):Memory Agent post-call 提取对话,分类为 attributes/events/facts/people/preferences/relationships/rules/skills。Pydantic 验证确保类型安全,避免噪声。
- L2 语义向量层(Vector Layer):支持 SQLite-VSS 或外部 Qdrant,嵌入维度默认 1536(OpenAI),HNSW 索引半径 0.5,实现近似最近邻(ANN)检索。
这种分层类似于人类记忆:短期高速访问,长期压缩持久化。
语义去重压缩(Dedup Compaction)算法
Memori 无显式 compaction 命令,但通过代理链隐式实现 semantic dedup:
- 提取与分类:Memory Agent 用 LLM(gpt-4o-mini)解析响应,Prompt 聚焦 “提取具体事实,避免意见 / 总结”。输出 XML 标签,如
<fact>用户偏好 FastAPI</fact>,过滤重复(相似度阈值 0.9)。 - 相似检索去重:Retrieval Agent pre-call 查询时,先向量搜索 Top-K(默认 5),MMR(Maximal Marginal Relevance)多样性阈值 0.7 剔除冗余。随后 KV 精确匹配 entity_id + process_id。
- 压缩策略:事实超 max_facts(默认 20)时,触发 LLM 总结合并,如 “FastAPI 项目偏好” 聚合多条。时间衰减:记忆分数 *= exp (-age_days / 30),低分自动归档。
- 图谱消歧:add_to_graph 构建实体关系图,Neo4j-like 更新避免同义实体爆炸。
证据显示,此机制在多用户 FastAPI demo 中,记忆体积仅传统 RAG 的 20%,召回精度 >95%(内部基准)。
实时更新管道与可落地参数
Memori 的 pipeline 全异步拦截 LLM 调用,确保零侵入:
- Pre-call 注入:
auto_ingest=True动态检索,注入 3-5 条记忆至 messages [0] system。 - Post-call 记录:提取后 upsert 数据库,schema 自动迁移。
- Background 优化:Conscious Agent 定时(cron 每 6h)运行,阈值:importance >0.8 提升。
工程化参数清单:
| 参数 | 默认值 | 建议生产值 | 作用 |
|---|---|---|---|
| conscious_ingest | False | True | 启用 L0 工作记忆 |
| auto_ingest | False | True | 动态 L2 检索 |
| top_k | 5 | 3-7 | 召回条数,平衡精度 /token |
| similarity_threshold | 0.8 | 0.85-0.95 | 向量去重阈值 |
| mmr_diversity | 0.7 | 0.6 | 结果多样性 |
| memory_decay | exp(-t/30) | 自定义 TTL 90d | 过期清理 |
| embedding_model | text-embedding-3-small | ada-002 | 成本 / 精度权衡 |
| db_connection | sqlite:///memori.db | postgresql://... | 规模化 |
监控要点:
- 指标:记忆总量(<1M 条 / 用户)、注入 token 占比(<20%)、召回命中率(>90%)。
- 回滚:
memori.disable()即时关闭;备份 SQLite 每周。 - 风险限:高并发下 SQL 瓶颈,用 PG + pgvector 分片;隐私用 AES-256 加密 namespace。
落地步骤:
pip install memorisdkmem = Memori(database_connect="postgresql://...", conscious_ingest=True, auto_ingest=True)mem.enable(); client = OpenAI()- 测试跨会话:告知 “FastAPI 项目”,后问 “加认证”—— 自动忆起。
此设计参数化强,适用于 agent 集群:CrewAI/AutoGen 共享 namespace,多级索引防 OOM。
资料来源:
- Memori GitHub:核心 README 与 docs/AdvancedAugmentation.md。
- HN 讨论:Memori 在 ai-systems 帖子中提及 hybrid 存储优势(news.ycombinator.com)。
(字数:1256)