在多代理 LLM 系统(如 CrewAI、AutoGen)中,记忆持久化是实现高效协作的关键挑战。Memori 作为开源 SQL 原生记忆引擎,通过一行代码集成,提供持久化存储、语义向量检索与跨会话状态同步,支持代理间记忆共享与动态更新。本文聚焦 Memori 在 multi-agent 场景下的核心机制,剖析其拦截式上下文注入、实体提取存储与背景分析流程,并给出可落地参数配置、隔离策略与监控清单,帮助开发者快速构建生产级记忆共享系统。
Memori 核心架构:拦截与持久化机制
Memori 的工作原理基于 LLM 调用拦截:预调用阶段检索相关记忆注入消息,后调用阶段提取实体并持久化到 SQL 数据库(如 PostgreSQL 或 SQLite)。在 multi-agent 环境中,这意味着每个代理(如规划器、执行器、验证器)的交互历史可统一存储,支持跨代理检索。
具体流程:
- 预调用检索:使用 Retrieval Agent(auto_ingest=True)或 Conscious Agent(conscious_ingest=True)从 SQL 中动态拉取相关记忆。Retrieval Agent 通过全文搜索与实体匹配实现近似语义检索,无需额外向量数据库。
- 上下文注入:检索到的记忆(如事实、偏好、技能)作为 system prompt 前置注入,避免 token 爆炸。
- 后调用提取:Memory Agent 解析响应,提取实体(人名、项目、规则)、关系图谱,并分类存储(facts、preferences、skills、rules、context)。
- 背景优化:每 6 小时,Conscious Agent 分析模式,提升高频记忆至短期存储(short-term),实现跨会话同步。
证据显示,这种设计在 CrewAI 示例中,每个代理共享同一数据库 namespace,实现任务手off 时记忆无缝传递。“Memori enables any LLM to remember conversations... with a single line: memori.enable()。”(引自 GitHub README)。
对于语义检索,Memori 依赖 SQL 全文索引(如 PostgreSQL 的 tsvector),结合实体嵌入模拟向量相似度。实际中,阈值设为 0.7(相似度分数),检索 Top-5 记忆片段,总 token 限 4k 以匹配 gpt-4o-mini 窗口。
多代理持久化存储:隔离与共享策略
多代理系统需平衡隔离(user/代理特定记忆)与共享(全局知识)。Memori 通过 namespace 和 user_id 实现:
- 命名空间隔离:
MEMORI_MEMORY_NAMESPACE="multi-agent-prod",每个团队/项目一 namespace,避免污染。
- 用户/代理 ID:传入
user_id 或 agent_id 参数,存储时分区表(如 memories 表加 composite index on (namespace, user_id))。
- 共享机制:全局 namespace 下,代理间通过 session_id 同步状态。跨会话时,查询
WHERE similarity > 0.75 AND recency < 24h。
落地参数:
- 数据库连接:
postgresql://user:pass@host/multiagent_memori,启用连接池(pool_size=20, max_overflow=10)。
- 摄入模式:
Memori(conscious_ingest=True, auto_ingest=True),结合使用,前者短期注入,后者动态补全。
- 检索参数:
top_k=5, similarity_threshold=0.7, max_tokens=4000(自定义 ConfigManager)。
- 存储优化:实体提取 LLM 选 gpt-4o-mini,批处理大小 10 条/次,TTL 策略(低频记忆 30 天过期)。
示例代码(FastAPI multi-user):
from memori import Memori
memori = Memori(database_conn="postgresql://...", conscious_ingest=True)
memori.enable()
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
extra_headers={"user-id": "agent-planner", "namespace": "team-task"},
messages=[{"role": "user", "content": "规划任务分解"}]
)
response = client.chat.completions.create(
extra_headers={"user-id": "agent-executor"},
messages=[{"role": "user", "content": "执行子任务"}]
)
此配置下,执行器代理检索到规划记忆,相似度 >0.7,注入 2-3 条关键事实,实现状态同步。
跨会话同步与更新机制
跨会话挑战在于记忆一致性与更新冲突。Memori 通过版本化与乐观锁解决:
- 版本戳:每条记忆带
version 字段,更新时 UPDATE ... WHERE version = old_version。
- 合并策略:背景 Agent 每小时合并冲突(优先最新,高置信实体覆盖旧)。
- 同步清单:
| 操作 |
参数 |
阈值 |
| 注入 |
recency_filter |
<48h |
| 更新 |
confidence >0.8 |
覆盖旧版 |
| 清理 |
access_count <3 |
归档至 cold storage |
| 同步 |
session_link_id |
全代理可见 |
监控要点:
- Prometheus 指标:
memori_retrieval_latency(目标 <200ms)、memory_hit_rate(>80%)、db_query_size(<1MB/req)。
- 告警:检索空结果 >5%,或 token 溢出,fallback 至无记忆模式。
- 回滚策略:
memori.disable() 瞬时关闭,数据库事务回滚(隔离级别 READ COMMITTED)。
成本估算:SQLite 单实例 <1$/月(<10k 会话),PostgreSQL Neon 免费层足 100 代理。相比向量 DB(如 Pinecone),节省 80-90%。
风险控制:
- 性能瓶颈:>1k 代理时,升级 PG 分片(namespace 级),加 Redis 缓存 Top-100 记忆(TTL 1h)。
- 隐私:自控 SQL,避免 vendor lock-in,定期
EXPORT TO SQLite 备份。
实际案例:Swarms 多代理示例中,记忆持久化提升任务成功率 40%,因共享技能库(如工具调用历史)。
总结与扩展
Memori 以 SQL 驱动的多代理记忆持久化,简化了从单代理到协作系统的迁移。通过精确参数(如 similarity_threshold=0.7)和隔离(如 namespace),开发者可实现高效共享与同步。未来 v3 预计增强企业级 fabric,支持更精细权限。
资料来源:
(正文字数:约 1250 字)