Hotdry.
ai-systems

Memori 多代理记忆持久化:开源引擎构建与同步策略

面向 LLM 多代理系统,给出 Memori 记忆引擎的持久化存储、语义检索与跨会话同步的工程化参数与实现要点。

在多代理 LLM 系统(如 CrewAI、AutoGen)中,记忆持久化是实现高效协作的关键挑战。Memori 作为开源 SQL 原生记忆引擎,通过一行代码集成,提供持久化存储、语义向量检索与跨会话状态同步,支持代理间记忆共享与动态更新。本文聚焦 Memori 在 multi-agent 场景下的核心机制,剖析其拦截式上下文注入、实体提取存储与背景分析流程,并给出可落地参数配置、隔离策略与监控清单,帮助开发者快速构建生产级记忆共享系统。

Memori 核心架构:拦截与持久化机制

Memori 的工作原理基于 LLM 调用拦截:预调用阶段检索相关记忆注入消息,后调用阶段提取实体并持久化到 SQL 数据库(如 PostgreSQL 或 SQLite)。在 multi-agent 环境中,这意味着每个代理(如规划器、执行器、验证器)的交互历史可统一存储,支持跨代理检索。

具体流程:

  1. 预调用检索:使用 Retrieval Agent(auto_ingest=True)或 Conscious Agent(conscious_ingest=True)从 SQL 中动态拉取相关记忆。Retrieval Agent 通过全文搜索与实体匹配实现近似语义检索,无需额外向量数据库。
  2. 上下文注入:检索到的记忆(如事实、偏好、技能)作为 system prompt 前置注入,避免 token 爆炸。
  3. 后调用提取:Memory Agent 解析响应,提取实体(人名、项目、规则)、关系图谱,并分类存储(facts、preferences、skills、rules、context)。
  4. 背景优化:每 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_idagent_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()

# 代理 A (规划器)
client = OpenAI()  # 或 LiteLLM
response = client.chat.completions.create(
    model="gpt-4o-mini",
    extra_headers={"user-id": "agent-planner", "namespace": "team-task"},
    messages=[{"role": "user", "content": "规划任务分解"}]
)

# 代理 B 自动获知规划上下文
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%。

风险控制:

  1. 性能瓶颈:>1k 代理时,升级 PG 分片(namespace 级),加 Redis 缓存 Top-100 记忆(TTL 1h)。
  2. 隐私:自控 SQL,避免 vendor lock-in,定期 EXPORT TO SQLite 备份。

实际案例:Swarms 多代理示例中,记忆持久化提升任务成功率 40%,因共享技能库(如工具调用历史)。

总结与扩展

Memori 以 SQL 驱动的多代理记忆持久化,简化了从单代理到协作系统的迁移。通过精确参数(如 similarity_threshold=0.7)和隔离(如 namespace),开发者可实现高效共享与同步。未来 v3 预计增强企业级 fabric,支持更精细权限。

资料来源:

(正文字数:约 1250 字)

查看归档