Hotdry.
ai-systems

Memori 分层语义记忆引擎:语义去重压缩与混合存储实现

剖析 Memori 的分层语义记忆机制,详解 hybrid 存储、多级索引与实时去重压缩管道的参数配置。

在 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:

  1. 提取与分类:Memory Agent 用 LLM(gpt-4o-mini)解析响应,Prompt 聚焦 “提取具体事实,避免意见 / 总结”。输出 XML 标签,如 <fact>用户偏好 FastAPI</fact>,过滤重复(相似度阈值 0.9)。
  2. 相似检索去重:Retrieval Agent pre-call 查询时,先向量搜索 Top-K(默认 5),MMR(Maximal Marginal Relevance)多样性阈值 0.7 剔除冗余。随后 KV 精确匹配 entity_id + process_id。
  3. 压缩策略:事实超 max_facts(默认 20)时,触发 LLM 总结合并,如 “FastAPI 项目偏好” 聚合多条。时间衰减:记忆分数 *= exp (-age_days / 30),低分自动归档。
  4. 图谱消歧: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。

落地步骤:

  1. pip install memorisdk
  2. mem = Memori(database_connect="postgresql://...", conscious_ingest=True, auto_ingest=True)
  3. mem.enable(); client = OpenAI()
  4. 测试跨会话:告知 “FastAPI 项目”,后问 “加认证”—— 自动忆起。

此设计参数化强,适用于 agent 集群:CrewAI/AutoGen 共享 namespace,多级索引防 OOM。

资料来源

  • Memori GitHub:核心 README 与 docs/AdvancedAugmentation.md。
  • HN 讨论:Memori 在 ai-systems 帖子中提及 hybrid 存储优势(news.ycombinator.com)。

(字数:1256)

查看归档