在多代理 LLM 系统(如 CrewAI 或 AutoGen)中,代理间的协作依赖持久、可检索的记忆层,但传统向量数据库成本高、检索不精确,且缺乏版本化支持。日志结构化合并(LSM)树理念——追加式写入、后台合并、高效范围查询——完美契合代理记忆需求:对话日志 append-only 存储,后台智能合并优化检索,支持多代理共享或隔离上下文。本文基于开源 Memori 引擎,构建高效记忆层,实现持久上下文、多代理协作、高效检索与版本化。
LSM-like 记忆引擎的核心机制
Memori 采用 SQL-native 存储(SQLite/PostgreSQL/MySQL),将对话日志作为不可变记录追加,避免频繁更新开销,类似 LSM 的 memtable → sstable 流程。“Memori 通过拦截 LLM 调用,在预调用阶段检索相关记忆注入上下文,后调用阶段提取实体存储。”1 其架构分为三层:
-
追加存储层:每轮交互后,Memory Agent 使用 LLM 提取实体(事实、偏好、技能、规则、上下文),分类存入 SQL 表。支持全文本搜索索引,确保日志不可变,提供天然版本化(时间戳 + 会话 ID)。
-
检索层:双模式并行——Conscious 模式(即时注入短时工作记忆)和 Auto 模式(动态查询长时记忆)。预调用时,Retrieval Agent 根据当前消息语义检索 Top-K 相关片段,注入系统提示。
-
合并层:后台 Conscious Agent 每 6 小时分析模式,将高频/关键记忆从长时提升至短时(promote),模拟 LSM compaction,优化下次检索命中率。
此设计零向量 DB,成本降 80-90%,数据全自控,无锁入。
多代理协作层的集成实现
Memori 原生支持 LiteLLM callback,轻松集成多代理框架,实现共享记忆池或用户隔离。
CrewAI 示例(共享任务记忆):
from memori import Memori
from crewai import Agent, Task, Crew
memori = Memori(
database_conn="postgresql://user:pass@localhost/memori",
conscious_ingest=True,
auto_ingest=True,
openai_api_key="sk-..."
)
memori.enable()
researcher = Agent(role="研究员", goal="...", llm="gpt-4o-mini")
writer = Agent(role="撰稿人", goal="...", llm="gpt-4o-mini")
crew = Crew(agents=[researcher, writer], tasks=[...])
result = crew.kickoff()
代理协作中,researcher 检索共享历史,writer 获益于已提取实体。命名空间 MEMORI_MEMORY_NAMESPACE="crew-prod" 隔离不同 Crew。
AutoGen 示例(群聊持久化):
类似配置,group chat 记忆跨会话持久:
from memori import Memori
from autogen import AssistantAgent, UserProxyAgent, GroupChat
groupchat = GroupChat(agents=[...], messages=[], max_round=10)
manager = GroupChatManager(groupchat)
多用户隔离:user_id 参数分区表,如 FastAPI 示例中 memori.get_context(user_id="alice")。
高效检索与版本化的落地参数
核心参数配置:
conscious_ingest=True:启用短时记忆,阈值 max_tokens_inject=2000,优先高频实体。
auto_ingest=True:动态检索,top_k=5,语义相似度 >0.7,结合 BM25 + LLM rerank。
- DB 连接:生产用 PG
postgresql://...,索引 CREATE INDEX ON memories USING GIN(to_tsvector('english', content))。
- 命名空间:
namespace="multi-agent-v1",版本化查询 SELECT * FROM memories WHERE session_id=... ORDER BY timestamp DESC LIMIT 10。
监控与阈值:
| 指标 |
阈值 |
监控 SQL |
| 注入延迟 |
<500ms |
EXPLAIN ANALYZE SELECT ... |
| 存储增长 |
日增 <1GB |
SELECT COUNT(*) FROM memories WHERE date_trunc('day', timestamp)=CURRENT_DATE |
| 检索命中率 |
>80% |
日志 retrieval_recall |
| LLM 提取准确 |
>90% |
采样人工校验 |
异常时,回滚:memori.disable() 降级无记忆,或 auto_ingest=False 只用 conscious。
规模化清单:
- 初始化:
pip install memorisdk,Env MEMORI_DATABASE_CONNECTION_STRING=...。
- 迁移:
memori.migrate() 建表/索引。
- 测试:模拟 1000 会话,测 QPS >10,延迟 <1s。
- 部署:Docker + PG,备份
pg_dump memori_db | gzip。
- 扩展:分片 namespace,支持 10k+ 代理。
风险与优化
风险:LLM 提取幻觉 → 引入规则校验,如实体去重;SQL 膨胀 → 定时 VACUUM + TTL DELETE WHERE timestamp < NOW() - INTERVAL '30 days'。
Memori v3 预告企业 fabric,进一步强化多代理支持。
资料来源:
(正文字数:约 1050 字)