✦ 大道至简 · 时光是画在卷上的河流 · 行到水穷处,坐看云起时

agent2026.08.27 · 10 分钟阅读

Memory 的管理策略

LLM 无状态,每次调用的上下文窗口有限,对话一长就"装不下、记不住"。三种常用记忆策略 = 三种"腾空间、留信息"的方式。

L

Leo

2026.08.27 · 更新于 2026.09.23

4 次浏览
Memory 的管理策略

Agent 对话记忆(memory-use 三种方式)

核心问题:LLM 无状态,每次调用的上下文窗口有限,对话一长就"装不下、记不住"。三种常用记忆策略 = 三种"腾空间、留信息"的方式。

三种方式对比

方式对应文件核心思路优点缺点
截断truncation-memory.js超限后只留最近 N 条消息 / N 个 token,旧的直接丢零成本、实现最简单、无延迟信息永久丢失,对话一长就"失忆"
总结summarization-memory.js / summarization-memory2.js超限后把旧消息用 LLM 压成摘要,最近几条原文保留保留关键信息、省大量 token每次调 LLM(耗时+花钱);摘要丢细节、可能有误差
向量数据库milvusmemory.js(写)/ retrieval-memory.js(RAG 查)每轮对话 embedding 后存进 Milvus;新提问按语义相似度召回最相关历史跨会话长期记忆、按需召回、可扩展要部署 Milvus + embedding;检索质量决定上限

1. 截断(truncation-memory.js)

  • 两个变体:
    • 按消息数量:allMessages.slice(-maxMessages) 保留最近 N 条。
    • 按 token 数:用 js-tiktoken 的 cl100k_base 编码计数,配合 LangChain 的 trimMessages(strategy: "last")保留最近的部分。
  • 本质是上下文预算管理,最省事,但没有任何"找补"——旧信息直接没了。

2. 总结(summarization-memory.js / summarization-memory2.js)

  • 超过阈值(消息数 / token 数)→ 把 slice(0, -keepRecent) 的旧消息拼成文本 → 丢给 LLM 生成摘要 → history.clear() 后只重放最近保留的消息。
  • 摘要保住"大意",丢掉"细节";每次总结要调一次 LLM(额外 +token、+延迟)。

3. 向量数据库(milvusmemory.js → retrieval-memory.js)

  • 写入:对话文本 → OpenAIEmbeddings 转 1024 维向量 → 存入 Milvus(字段 id/vector/content/round/timestamp,IVF_FLAT + COSINE 索引)。
  • 查询(RAG 记忆流):新提问 → 同样转向量 → client.search 召回 top-k 相似历史 → 拼进 Prompt → LLM 基于召回回答 → 新对话再回写进库。
  • 本质:把 RAG 用在记忆上——检索对象从"文档库"换成了"历史对话库"。

记忆基础存储(三种策略的地基)

  • memory.js:InMemoryChatMessageHistory 纯内存,会话内有效。
  • longmemory.js / readlongmemory.js:FileSystemChatMessageHistory 持久化到 chat_history.json,跨会话恢复。

分层记忆示意图(Mermaid)

读图要点:写(内存 → 文件持久化)→ 管(超限时截断 / 总结 / 入库)→ 取(热上下文 + 摘要 + 语义检索拼成最小可用上下文)。

市场调研结论(2026.08)

一句话:市场上没有产品只做上面某一种技术,成熟的记忆系统都是"分层混合"架构——你学的三种方式,恰好就是所有商业记忆层的三个基本组件。

头部三条技术路线

产品技术路线融资 / 规模
Mem0通用记忆层 SDK:向量 + 图关系 + 键值多存储;写入时自动抽取事实,不存原始对话$24M A轮(2025.10),58K+ stars,AWS Agent SDK 独家记忆供应商,Apache 2.0 可自托管
Letta(原 MemGPT)Agent 运行时:上下文=RAM、外部存储=磁盘,由 agent 自己决定分页换入换出;Core/Archival/Recall 三层记忆$10M 种子,源于 UC Berkeley 论文(长任务 3.4× 提升)
Zep(Graphiti)时序知识图谱:实体为节点、关系为边、边带双时间戳,追踪"事实如何随时间变化"而非覆盖五家中唯一 SOC2/HIPAA/GDPR 全认证,适合审计严格的行业

平台巨头下场

  • OpenAI:ChatGPT Dreaming V3——空闲时把"记忆碎片"整理成带权重的"记忆链",新会话自动联想;API 侧 memory_context 参数 + Responses API Server-side Compaction(服务端压缩而非粗暴截断)。但标准 API 本身仍无记忆。
  • Anthropic:官方 memory tool(文件系统式"笔记本")配合 CLAUDE.md 项目记忆 + 自动 context editing;实测 100 轮搜索任务 token 降 84%。官方博客专门写了《用 Milvus 给 Claude Managed Agents 加长期记忆》——正是你练的方向。
  • AWS 选 Mem0,微软 Azure AI Foundry、Oracle 各自出了原生记忆。

国内

  • 腾讯云 TencentDB Agent Memory(2026.5 开源,MIT,80 天 15K+ stars):四层记忆金字塔 L0 原始对话 → L1 原子记忆 → L2 场景归纳 → L3 用户画像,任意信息沿"高层符号→中层索引→底层原文"100% 找回;上下文卸载(工具结果写外部文件、上下文只留一行摘要+路径)让 token 降 61%、成功率反升。

市场共识(四条)

  1. 分层记忆是唯一共识:热上下文(最近 N 轮)+ 滚动摘要 + 语义检索,三层各司其职——基本就是你把三份 demo 拼起来的样子。
  2. 存什么 ≠ 存原文:领先方案都是"写入时抽取结构化事实",而不是存原始对话;原文仅作为可追溯的证据链底层。
  3. 检索是新一代战场:从纯向量 → 混合检索(向量 + BM25 关键词 + 实体/图匹配,多路得分融合),再加时间衰减 / 主动遗忘模拟人脑遗忘曲线。
  4. 可解释 + 合规:每条记忆可审计("agent 为什么想起这个")、可被用户纠正、软删除 + 版本化,是生产级标配。

你的代码 ↔ 市场对应:截断 ≈ 各家的"上下文预算管理";总结 ≈ Letta 的 rolling summary、腾讯 L0→L1 的提取-聚合;向量检索 ≈ Mem0 向量存储 / Letta archival memory / Anthropic 官方推荐的 Milvus 方案。下一步可练的"第四层":事实抽取 + 混合检索 + 时间衰减/遗忘机制。

标签 / TAGSagent
L

Leo

博主

独立开发者 / Blogger,原博客「大道至简」维护者。正在把 WordPress 上攒了几年的文章与拾语迁移到 Next.js。

读者留言

COMMENTS · 0

发表留言

评论经审核后展示 · 请友善发言0/100