在多代理 LLM 系统开发中,持久记忆是实现跨会话连贯性和智能协作的关键。Memori 作为一个开源的 SQL 原生记忆引擎,通过混合向量-图存储机制,巧妙地将向量嵌入用于语义搜索,与图结构用于关系查询相结合。这种设计不仅避免了昂贵的专用向量数据库,还利用标准 SQL 数据库(如 PostgreSQL 或 SQLite)实现了高效的数据持久化。本文将深入探讨 Memori 中 hybrid vector-graph 存储的实现原理、工程实践要点,以及可落地的参数配置和监控策略,帮助开发者构建可靠的多代理记忆系统。
混合向量-图存储的核心观点
Memori 的存储架构本质上是一种 hybrid retrieval 系统,它将非结构化对话数据转化为结构化记忆,同时支持语义相似性和关系推理。向量部分负责捕捉对话的语义本质,例如用户偏好或事件描述的相似度匹配;图部分则建模实体间的关系,如代理间协作历史或 episodic recall(事件回忆)。这种结合使得多代理系统能够在持久存储中高效检索,不仅限于单次会话,还能跨代理和跨会话进行知识共享。
为什么这种混合设计优于单一向量或图存储?单一向量存储擅长模糊匹配,但忽略时间上下文和关系链路,导致召回不精确;纯图存储虽强于关系查询,但对非结构化文本的语义表示较弱。Memori 通过 SQL 数据库的全文索引和扩展(如 pgvector)融合两者,实现低成本、高可解释的持久记忆。证据显示,在多代理场景下,这种架构可将上下文注入延迟降低 80%,并提升召回准确率达 2-4 倍,尤其在处理复杂交互如团队决策或连续任务时表现突出。
实现原理与证据支持
Memori 的核心流程包括拦截 LLM 调用、上下文注入和后置记录。首先,系统通过 LiteLLM 回调拦截 API 请求,在调用前由 Retrieval Agent 执行 hybrid retrieval:向量嵌入(使用 OpenAI 或 Ollama 生成)计算语义相似度,结合关键词匹配和时间衰减因子(e.g., 最近事件权重更高)从 SQL 表中检索相关记忆。同时,Conscious Agent 在后台分析对话,提取实体(如用户 ID、代理角色)和关系(如“代理 A 委托代理 B”),构建图结构存储在关系表中。
例如,在 SQL schema 中,向量嵌入存储在带 pgvector 扩展的列中,支持余弦相似度查询;图结构则通过节点表(entities)和边表(relationships)实现,节点包含嵌入向量,边记录关系类型和权重。证据来自 Memori 的架构文档:Memory Agent 自动分类记忆为 facts、preferences 等,并通过关系映射形成知识图谱,支持 Cypher-like 查询(虽非 Neo4j,但 SQL JOIN 模拟)。在多代理设置下,每个代理有独立 namespace,确保隔离,同时共享全局图以实现协作回忆。
这种设计在持久性上表现出色:所有数据 ACID 合规,支持 TTL(Time-To-Live)自动过期旧记忆,避免存储膨胀。实验表明,在 1000+ 会话的多代理模拟中,episodic recall 准确率达 90%以上,远超无记忆基线。
可落地参数与工程清单
要实现 Memori 中的 hybrid vector-graph 存储,开发者需关注以下参数和配置,确保系统稳定运行。
1. 数据库与存储配置
- 数据库选择:优先 PostgreSQL + pgvector 扩展,支持原生向量索引;SQLite 适合轻量原型,但向量查询效率较低(<10k 条记录)。
- Schema 参数:
- 向量维度:使用 1536 维 OpenAI embeddings(gpt-4o-mini),存储在
embeddings 列(vector(1536))。
- 图节点表:
entities (id, name, type, embedding, timestamp);边表:relationships (source_id, target_id, relation_type, weight, created_at)。
- 索引:创建 HNSW 索引 on embeddings(ef_construction=128, m=16),加速近似最近邻搜索;复合索引 on (namespace, timestamp) 用于时间衰减。
- 连接字符串:
postgresql://user:pass@localhost/memori?sslmode=disable,启用连接池(max_connections=20)。
2. Retrieval 参数
- Hybrid 权重:向量相似度权重 0.6,关键词 TF-IDF 0.3,时间衰减 0.1(公式:score = 0.6 * cos_sim + 0.3 * keyword_score + 0.1 * exp(-λ * age),λ=0.01/天)。
- Top-K:默认 k=5,阈值 >0.7 过滤低相关记忆;多代理时,按 namespace 分组检索。
- Embedding 路由:配置
embedding_model="text-embedding-3-small",批量大小 32 以优化 API 调用。
3. 图结构与关系管理
- 实体提取:使用 LLM prompt 提取实体(e.g., "Extract entities from: {text}"),阈值置信度 >0.8。
- 关系生成:Memory Agent 运行每 6 小时,检测冲突(e.g., 同实体多关系时,使用 LLM resolver 合并);边权重基于交互频率(初始 1.0,增 0.1/次)。
- 查询模式:语义搜索用
SELECT * FROM memories ORDER BY embedding <=> query_emb LIMIT k;关系查询用 SQL JOIN,如 SELECT e1.name, r.type, e2.name FROM entities e1 JOIN relationships r ON e1.id=r.source_id JOIN entities e2 ON r.target_id=e2.id WHERE e1.namespace='agent1'。
4. 持久多代理集成清单
- 启用模式:
Memori(conscious_ingest=True, auto_ingest=True, database_connect="..." );多代理用 namespace=(agent_id, user_id)。
- 跨会话 Recall:实现 episodic 钩子,存储事件序列(e.g., JSONB 列存对话链),检索时注入前 3 事件。
- 安全与隔离:启用 AES-256 加密(key per namespace);GDPR 合规,一键导出 SQL dump。
- 性能调优:监控查询延迟 <100ms,存储增长 <1GB/月;使用 TTL=30 天过期旧边。
5. 监控与回滚策略
- 关键指标:召回精度(LLM-as-Judge >0.8)、注入 token 量 (<2000/请求)、图密度(边/节点 <5)。
- 警报阈值:向量索引重建当命中率 <90%;关系冲突 >5% 时触发手动审核。
- 回滚:版本化 schema(Flyway),测试分支 namespace;故障时 fallback 到纯关键词检索。
通过这些参数,开发者可快速部署 hybrid 存储,实现 Memori 在多代理 LLM 中的持久记忆。实际项目中,建议从小规模 SQLite 原型迭代到生产 PostgreSQL。
结语与资料来源
Memori 的 hybrid vector-graph 存储不仅简化了多代理记忆管理,还提供了可解释性和低成本路径,推动 AI 系统向更智能的长期学习演进。未来,可扩展到分布式图查询以应对更大规模。
资料来源: