学员最近面蚂蚁聊到他做的 Agent 项目面试官就问了这个“你的 Agent 是每轮对话结束都往记忆里写吗”他说“对每轮结束后触发一次提取。”面试官冷笑了一下“每轮都触发用户和 Agent 聊了 50 轮你要额外调 50 次 LLM API 做提取成本不爆吗而且用户刚说了 ‘好的’ 两个字也要提取一次”他一下子说不出话来他确实没想过什么值得触发提取什么不值得这个问题。今天就把这个问题讲透。从 Claude Code 的源码出发再对比 Generative Agents、MemGPT、Mem0 三个主流框架把Agent 记忆提取的触发策略彻底梳理清楚。一、问题的本质记忆提取是有代价的先把问题说清楚。Agent 系统里的记忆提取是指从对话历史中识别出值得长期保存的信息写入持久化存储。这个过程本质上要调用一次 LLM让它判断这段对话里有什么值得记。这是额外的 API 调用有成本有延迟。如果每轮对话都触发100 轮对话就有 100 次额外的 LLM 调用。而现实中大量对话根本没有值得提取的内容用户说明白了用户说继续用户说好的谢谢用户在测试 Agent 是否在线“你好”这些轮次触发提取纯粹是浪费。另一个极端是完全不提取靠对话历史撑但 context window 是有限的历史会被压缩丢失。所以问题变成怎么设计触发策略在成本控制和记忆覆盖率之间找到平衡不同框架给出了不同答案。二、Claude Code 的策略消息数量阈值 Coalescing 防并发先从 Claude Code 的实现说起因为这是上篇文章的延伸。触发条件MIN_NEW_MESSAGES 4ExtractionCoordinatorextractor.py:253-328在每轮 REPL 结束后被调用但它不是每次都真的触发提取。核心判断在这里increment len(messages) - self._watermark # 与上次提取时的消息数之差 if increment MIN_NEW_MESSAGES: # MIN_NEW_MESSAGES 4 await extract_memories(messages, memory_dir, model) self._watermark len(messages)_watermark记录的是上次提取时消息总数的水位线。每次被调用时先计算当前消息数与水位线的差值。只有新增消息数达到 4 条才真正调用extract_memories()。为什么是 4 条这是一个经验阈值背后的工程逻辑很朴实少于 4 条新消息说明刚开始对话或者用户只是做了一两次简单确认提取出有意义信息的概率很低。4 条是一次有实质内容的对话交换的最小粒度至少有两来两回才值得花一次 API 调用去扫描。Coalescing防止并发写乱但光有阈值还不够还有一个并发问题用户快速连续输入多轮前一次提取还没跑完新一轮又来了。两种直觉方案都不好队列排队每轮都入队等待前一次提取完才跑下一次用户快速输入 10 轮就要串行跑 10 次提取延迟叠加。Debounce 丢弃只处理最后一次中间的都丢如果第 8 轮到第 10 轮之间包含关键信息这些信息永远不会被提取。Claude Code 用的是Coalescing合并三个状态变量控制流程_running: bool False # 是否有提取正在运行 _dirty: bool False # 运行中是否有新请求进来 _watermark: int 0 # 上次提取时的消息水位逻辑流程是来了新请求如果_running为 True直接设_dirty True返回不启动新提取如果_running为 False加锁开始提取设_running True提取完成后检查_dirty如果为 False说明提取过程中没有新消息直接退出如果_dirty为 True清除标记重新跑一轮提取扫描提取过程中新增的消息循环直到_dirty为 False关键保证只要有新消息到来最终一定会被扫描到。中间的请求不会丢失只是被合并到下一次提取里。同时任意时刻最多只有一个提取任务在运行不会有并发写。这是一个标准的竞争者合并模式在后台任务调度里很常见但第一次看 Claude Code 源码的时候很容易忽略它的价值。ExtractionCoordinator 的 Coalescing 工作流程三、Generative Agents用重要性积分触发反思Claude Code 的策略是基于消息数量的机械触发实现简单可预测。但 2023 年那篇经典的 Generative Agents 论文Stanford GoogleUIST 2023引用量 2000用的是完全不同的思路重要性积分触发反思Reflection。Memory Stream 重要性评分Generative Agents 里所有 Agent 经历的事件都被记录进 Memory Stream自然语言的流水账不做过滤。每条记忆在写入时LLM 会给它打一个重要性分数1-10 分我和 Isabella 聊了天可能得 6 分我决定要在下周的 Hobbs Café 活动里组织一次选举讨论可能得 9 分我走过了图书馆可能得 1 分这些分数会累积。系统维护一个importance_sum变量每次有新记忆写入就加上对应分数。当累积分数超过阈值论文中设定为 150时触发一次 Reflection。Reflection 本质上是一次高阶提取给 LLM 最近 100 条记忆让它生成更抽象的洞察不是某天某件事而是这个人的性格特点是什么“他和某人的关系是什么”。这些洞察本身也作为新记忆写入 Memory Stream重要性分数更高。触发逻辑 importance_sum new_memory.importance_score if importance_sum REFLECTION_THRESHOLD: # 150 run_reflection(recent_memories[-100:]) importance_sum 0 # 重置与 Claude Code 的本质区别Claude Code 是时钟驱动每 4 条消息扫一次Generative Agents 是事件驱动积累了足够重要的信息才触发。优点很明显用户连续说了 20 条好的/明白/继续没有重要信息积分不会积累到阈值不触发反思不浪费 API 调用。只有真正发生了重要事件才会触发。代价是需要对每条记忆都打重要性分数因为这本身也是一次 LLM 调用。所以它是用更多小调用换取减少大调用在事件密集时整体成本可能反而更高。检索时的三维评分顺便提一下 Generative Agents 的检索策略这也是面试里会问到的。检索时不是简单的语义相似度而是三维加权score α × recency_score β × importance_score γ × relevance_scorerecency_score时间衰减越近的记忆分越高公式是decay_rate ^ hours_passed论文默认 decay_rate 0.995importance_score写入时打的重要性分relevance_scoreQuery 与记忆的语义相似度三维加权的意义是既考虑跟当前问题有多相关也考虑这件事多重要还考虑这件事是不是很久以前的了。纯语义检索会把很久以前的高相关记忆排得很靠前但那条记忆对应的状态可能早就变了。三种 Memory 提取触发策略对比四、MemGPT让 LLM 自己决定什么时候写记忆如果说 Generative Agents 是规则驱动的触发那 MemGPTUC BerkeleyNeurIPS 2023走向了另一个极端让 LLM 自己决定什么时候需要写记忆什么时候需要读记忆。虚拟内存类比MemGPT 的核心类比是操作系统的虚拟内存管理。OS 把内存分成内存中的页当前可用和磁盘上的页需要时加载通过页面置换算法管理。MemGPT 把这个思路套到 LLM 的 context window 上主上下文Main Context 当前正在用的内存受 context window 大小限制外部存储External Storage 磁盘上的页可以无限大LLM 通过**函数调用function calling**来主动管理这两层存储# LLM 可以调用这些函数 memory_search(query: str) # 从外部存储检索记忆 memory_insert(content: str) # 向外部存储写入记忆 core_memory_replace(key, new_val) # 修改核心记忆永远在主上下文中 conversation_search(query: str) # 搜索对话历史当 LLM 觉得当前对话包含了值得记住的信息它自己调用memory_insert()当它需要某个以前的信息自己调用memory_search()。不需要外部触发逻辑。这种设计的代价MemGPT 的思路很优雅但工程上有两个明显问题第一不可预测性。LLM 的函数调用不是 100% 可靠的。在测试中LLM 有时会忘记调用memory_insert()导致关键信息丢失有时会在不必要的时候反复调用memory_search()消耗 token。规则驱动的触发Claude Code 的 4 条阈值Generative Agents 的重要性积分是确定性的LLM 自主决策是非确定性的。第二延迟问题。每次 LLM 决定要操作记忆就是一次额外的函数调用和等待。在实时对话场景这会让响应变慢。Claude Code 用 fire-and-forget 后台任务解耦了记忆提取和主对话MemGPT 的记忆操作和主对话是耦合的。在我们的实战项目里MemGPT 的思路更适合后台批处理型 Agent不需要实时响应但需要大量上下文管理不太适合直接面向用户的对话 Agent。五、Mem0用 CRUD 操作规范化提取结果如果说前面三个框架都在解决什么时候触发提取那 Mem02025更关心的是提取出来的结果怎么组织。四操作模型Mem0 提出了一个清晰的提取结果分类每次提取后对已有记忆的处理只有四种操作ADD ← 全新信息之前没有 UPDATE ← 已有记忆的值发生了变化用户换了工作更新职位信息 DELETE ← 已有记忆过时或被否定用户说我已经不用 mock 了 NOOP ← 没有值得记的新信息不做任何操作这个分类的价值在于它把是否需要提取内置到了提取过程本身。NOOP 就是这轮对话没有值得写入记忆的内容因为返回 NOOP 比不触发提取要晚一点还是调了 LLM但比盲目写入要好。Mem0 的实测数据是相比 OpenAI 方案提升 26% 准确率降低 91% 的 p95 延迟节省 90% token 成本。成本下降的主要原因是 NOOP 识别避免了大量无效写入以及增量更新UPDATE代替了全量重写。与 Claude Code 的对比Claude Code 用MIN_NEW_MESSAGES4阈值控制触发频率是在量上做过滤至少 4 条消息才触发。Mem0 用 NOOP 在质上做过滤触发了但判断没有有价值信息返回 NOOP 不写入。两种思路不冲突可以叠加先用数量阈值决定是否触发触发后用 CRUD 分类决定写什么。Claude Code 本质上也是这样做的extract_memories()内部的 LLM 调用会识别是否有新信息值得写入。Mem0 的四操作提取模型六、四种策略的工程对比把前面讲的整理成一个对比表维度Claude CodeGenerative AgentsMemGPTMem0触发方式数量阈值≥4条新消息重要性积分≥150LLM 自主判断每轮触发NOOP过滤触发确定性确定性确定性非确定性确定性与主对话关系完全解耦后台异步写入同步反思异步耦合函数调用可解耦并发控制Coalescing无单 Agent无LLM 自管理依实现防无效提取数量门槛重要性积分门槛LLM 判断NOOP 操作适用场景代码辅助/长期工具角色扮演/社交 Agent批处理/上下文密集生产级对话 Agent选哪种策略取决于你的场景实时对话 Agent用户实时等待响应优先参考 Claude Code 的架构——后台 fire-and-forget 解耦不阻塞主对话Coalescing 防并发。触发阈值根据实际对话长度调整不一定非得是 4。角色扮演或社交 Agent信息密度高事件驱动Generative Agents 的重要性积分更合适能根据对话内容的实际价值动态调整提取频率。批处理分析型 Agent大量历史对话不要求实时Mem0 的 CRUD 模型更规范增量更新代替全量重写长期成本更低。面试怎么答Agent 的记忆提取触发策略面试官问这个问题本质上是在考察你对 Agent 系统工程权衡的理解不是背诵某个具体实现。先说问题本质15秒。“记忆提取有成本每次触发要额外调一次 LLM所以触发策略的核心是在成本控制和记忆覆盖率之间取平衡。”再说两类主流策略20秒。“一类是规则驱动Claude Code 用消息数量阈值≥4条Generative Agents 用重要性积分阈值触发时机确定可预测。另一类是 LLM 自主驱动MemGPT 让 LLM 通过函数调用自己决定何时读写记忆灵活但非确定性。”然后说提取结果的处理15秒。“触发之后怎么处理也是设计点。Mem0 用 ADD/UPDATE/DELETE/NOOP 四种操作NOOP 表示没有有价值的新信息避免无效写入。”最后说你的项目实践20秒。“在我们的 Agent 项目里用的是类似 Claude Code 的后台异步策略每 N 条新消息触发一次用单独的任务异步执行不阻塞主对话。触发后 LLM 扫描新增内容有新信息才写入没有就跳过。实测下来 API 调用次数比每轮触发降低了约 60%记忆覆盖率没有明显下降。”面试回答框架Agent 记忆提取触发策略写在最后上篇文章里ExtractionCoordinator 的 Coalescing 策略和MIN_NEW_MESSAGES4阈值只是简短带过了。但从工程角度看这两个设计决定背后是同一个问题记忆提取是有代价的你需要一套策略控制它的频率和成本同时保证重要信息不丢。Claude Code、Generative Agents、MemGPT、Mem0 给出了不同的答案各有适用场景。把这些对比说清楚和每轮都触发这个答案之间就是这次面试的分水岭。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】