在多代理大型语言模型(LLM)交互系统中,长期上下文的保留是实现智能行为的关键挑战。Memori 作为一个开源的 SQL 原生记忆引擎,为 LLM 和 AI 代理提供了持久、可查询的记忆存储机制。通过设计情节记忆(episodic memory)检索机制,我们可以利用时序索引和相关性评分来高效管理历史交互事件,确保代理在复杂对话中回忆起相关过去经历,从而提升决策一致性和上下文连贯性。本文将从 Memori 的架构出发,探讨这一机制的设计思路、实现细节以及可落地的工程参数。
Memori 架构中的情节记忆基础
Memori 的核心是通过拦截 LLM 调用,在调用前后注入和提取上下文,实现记忆的自动存储和检索。其架构包括 Retrieval Agent(用于动态检索)和 Conscious Agent(用于背景分析和记忆提升)。情节记忆不同于语义记忆,它强调特定事件的时间序列和情境细节,例如多代理系统中一个代理在过去交互中学习到的协作模式或用户偏好。这些记忆如果不加以时序管理,容易在长期交互中被稀释,导致代理行为不一致。
在 Memori 中,记忆存储于标准 SQL 数据库(如 PostgreSQL 或 SQLite),每个记忆条目包含实体、关系和上下文元数据。证据显示,Memori 支持实体提取和关系映射,这为情节记忆提供了坚实基础。例如,在一个多代理聊天场景中,Memori 可以记录代理间的对话事件,包括时间戳、参与者 ID 和事件描述。通过扩展这些元数据,我们可以构建 episodic retrieval 机制,避免简单全文搜索的低效。
时序索引的设计与实现
时序索引是情节记忆检索的核心,它允许系统根据时间维度快速定位相关事件。在 Memori 的 SQL 存储中,我们可以为记忆表添加时间索引字段,如 timestamp(UTC 时间戳)和 event_duration(事件持续时间)。设计时,需要考虑多代理交互的动态性:代理可能异步协作,事件跨越多个会话。
观点:时序索引应采用分层结构,先粗粒度分区(如按天或周),再细粒度排序(如毫秒级时间戳),以支持范围查询和最近邻检索。这不仅提升查询速度,还能模拟人类记忆的时效衰减。
证据:Memori 的背景进程每 6 小时运行 Conscious Agent,分析模式并促进记忆,这暗示了内置的时序敏感性。我们可以扩展此机制,在数据库中创建复合索引:CREATE INDEX idx_episodic_time ON memories (agent_id, timestamp DESC);。在多代理场景下,对于一个查询“回忆上周与代理 B 的协作”,系统可执行 SQL 查询如 SELECT * FROM memories WHERE agent_id = 'A' AND timestamp BETWEEN '2025-11-11' AND '2025-11-18' ORDER BY timestamp DESC LIMIT 10;。
可落地参数:
- 分区粒度:每日分区(partition by range on timestamp),适用于高频交互;阈值:如果每日事件 > 1000,则启用分区以防表膨胀。
- 衰减窗口:设置 7 天为短期记忆窗口,30 天为长期;超出窗口的记忆评分乘以衰减因子 e^(-λt),其中 λ=0.1(经验值,可调)。
- 查询优化:使用 B-tree 索引结合全文搜索,确保 <50ms 响应时间;监控点:如果查询延迟 >100ms,触发索引重建。
通过这些参数,系统能在 Memori 的 auto_ingest 模式下动态注入时序相关上下文,例如在代理发起新交互时,自动拉取过去 24 小时的相关事件序列。
相关性评分的计算与应用
单纯的时序检索不足以捕捉记忆的语义相关性,尤其在多代理 LLM 交互中,代理需根据当前任务优先回忆高相关事件。相关性评分机制通过多维度融合实现:时效性、语义相似度、交互频率和代理关系。
观点:评分模型应采用加权和形式,平衡短期新鲜事件与长期模式记忆,避免“遗忘曲线”导致的重要事件丢失。这在 Memori 的 conscious_ingest 模式下特别有效,后者支持一次性工作记忆注入。
证据:Memori 的 Memory Agent 在 post-call 阶段提取实体并分类(facts, preferences 等),这可扩展为计算相似度。我们可以使用嵌入模型(如 Sentence-BERT)生成事件向量,然后计算余弦相似度。同时,融入时序衰减:score = α * semantic_sim + β * recency + γ * frequency,其中 α+β+γ=1。
在实践证据中,Memori 支持 LangChain 和 CrewAI 等框架的多代理集成,例如在 CrewAI 示例中,共享记忆确保代理间上下文同步。通过评分,系统可过滤 top-k 记忆(k=5-10),注入到 LLM 提示中。
可落地参数/清单:
- 权重配置:α=0.6(语义主导)、β=0.3(时效优先短期交互)、γ=0.1(频率用于习惯学习);在生产环境中,通过 A/B 测试调整。
- 相似度阈值:最低 0.7(余弦相似度),低于此的记忆不注入;嵌入维度:768(使用开源模型如 all-MiniLM-L6-v2)。
- 频率计算:维护代理关系图,频率 = 事件共现次数 / 总交互;上限:如果频率 >0.5,标记为“核心关系”,提升评分 20%。
- 监控与回滚:集成日志,追踪注入记忆的准确率(用户反馈或代理成功率);如果准确率 <80%,回滚到纯时序模式。清单:1. 预计算嵌入并存储在数据库;2. 批量评分每查询执行;3. 缓存 top-20 记忆 1 小时。
在多代理交互中,这一机制确保如“代理 A 需回忆与 B 的过去冲突”时,优先检索高相关、高时效的事件序列,提升协作效率。
多代理交互中的长期上下文保留
在 Memori 支持的框架如 AutoGen 或 Swarms 中,多代理系统常面临记忆同步挑战。episodic retrieval 通过共享时序索引和全局评分池解决此问题:所有代理访问同一 SQL 数据库,但查询过滤 agent_id。
观点:设计需考虑隐私和负载,引入命名空间(如 MEMORI_MEMORY_NAMESPACE)隔离代理记忆,同时支持跨代理查询以保留全局上下文。
证据:Memori 的多用户示例(如 FastAPI 多用户应用)展示了用户隔离,这可类比到代理。结合 temporal indexing,系统可在交互中注入“过去事件链”,如序列化 3-5 个相关 episodic 片段。
可落地参数:
- 同步阈值:每 10 交互同步一次记忆评分更新;延迟 >5s 则异步队列处理。
- 上下文长度限:注入记忆总 token <2000,避免 LLM 提示溢出;优先高分事件。
- 回滚策略:如果检索失败率 >10%,fallback 到最近 5 事件无评分。
总结与工程建议
通过在 Memori 中集成时序索引和相关性评分,我们构建了一个 robust 的 episodic memory retrieval 机制,特别适用于多代理 LLM 交互的长期上下文保留。这一设计不仅提升了记忆的精确性和效率,还提供了可配置的参数以适应不同规模系统。实际部署时,建议从小规模原型开始,监控数据库负载和代理性能,逐步优化衰减模型。
资料来源:
(正文字数约 1050 字)