Agent 的记忆是什么,难在哪?
现在的看法
在 Agent 应用层,我更关心记忆能否被持续管理,而不只是上下文能装多少。它既要记录交流,也要记录行动;关键在于决定什么值得保存、什么时候更新,以及当前任务应该取用什么。对于我的个人知识系统,判断历史应当可追溯,但旧判断不应被当作当前立场使用。
更新
查看出处与限定
本人已公开表达,沿用原有公开署名,不表示本次重新确认。
论述上下文 · p2 · 关系待复核
这里主要讨论应用层可读写的记忆:对话记录、行动记录,以及从中整理出来、供后续任务使用的信息。它不涵盖模型内部所有形式的记忆。
论述上下文 · p10 · 关系待复核
记录“做过什么”也需要区分层次。文字可以记下调用过什么工具、遇到过什么错误,但不等于保存了能够继续运行的计算现场。回顾经历与恢复执行,是不同的需求。
论述上下文 · p16 · 关系待复核
已经公开的判断发生变化时,应保留原来的表述、形成时间和修订关系,让人能够追溯我为什么改变看法。Agent 回答“我现在怎么看”时,则应优先使用当前有效的判断;涉及观点演变时,再取用历史记录。
论述上下文 · p18 · 关系待复核
这里讨论的是判断历史的可追溯性,不意味着所有原始材料都必须永久保留。
这里只定位已有署名公开表达和论述上下文;未核验外部原始证据,不证明事实正确或本人重新确认了证据关系。
我关注的是怎样管理记忆
这里主要讨论应用层可读写的记忆:对话记录、行动记录,以及从中整理出来、供后续任务使用的信息。它不涵盖模型内部所有形式的记忆。
把信息保存下来只是开始。保存的内容是否准确、后来有没有变化、在当前任务中是否仍然适用,决定了这些记录能不能真正帮上忙。
记录行动,也要选择当前取用的信息
在《深度解析 Memory 本质》中,我讨论过工具调用的行为记忆:记录调用的工具、输入、输出和成功标记。其中举的例子是,如果 Agent 不记得某次搜索已经失败,它可能会不断重试。 行为记忆的原文
保留行动记录,不意味着把全部记录都放进模型当前的上下文。我在《上下文不等于记忆》中把两件事分开:记忆工程决定保留什么、遗忘什么,上下文工程筛选与当前决策相关的片段,决定让模型此刻看到什么。《深度解析 Memory 本质》也写到,任务执行中按当前子任务的语义检索历史错题集与最佳实践。 保留与取用的区别 · 按任务读取
系统怎样继续执行,也需要单独处理
在 Agent Infra 的阶段性理解里,我讨论的是另一类保证:引入多 Worker、重试和故障接管后,任务进度和已发生的副作用,需要由执行者共享的事实源来判断。Temporal 是文中举出的持久化运行方案,着重解决一次运行在崩溃后继续推进的问题。 执行状态与共享事实源 · Temporal 的讨论
这些执行保证与“这一步给模型什么上下文”,在那篇文章里分别放在控制层和 Harness 层讨论。 上下文装配的讨论
记录“做过什么”也需要区分层次。文字可以记下调用过什么工具、遇到过什么错误,但不等于保存了能够继续运行的计算现场。回顾经历与恢复执行,是不同的需求。在 OpenScience 那篇文章中,按 session 复用 Kernel 是维持连续计算的具体做法;运行中的 Kernel 仍不等于永久保存的实验环境,长期复现还需要代码版本、依赖、随机种子、输入数据和计算环境。 Kernel 连续运行的例子 · 长期复现的限定
上下文压缩与缓存复用之间有取舍
在 KV Cache 那篇文章里,我用一个例子说明摘要式压缩:保留最近的 E、F,把更早的 A、B、C、D 整理成摘要。后续可以保留旧摘要,只压缩新增历史,也可以把旧摘要与新增历史重新整理成一份统一摘要。 摘要压缩的例子
这与 KV Cache 的作用不同:缓存复用已有计算,压缩会删减、截断或总结历史信息,因此可能遗漏细节。保留旧摘要有利于维持稳定前缀,但摘要可能逐渐重复、过时或矛盾;重新合并能整理这些内容,却会改变前缀,使变化位置之后的旧缓存通常不能继续用于压缩后的对话。生成新摘要的请求仍可能利用未变化的前缀缓存,这与新摘要替换后、主对话如何复用缓存是两个阶段。文中最终讨论的是缓存成本、上下文长度和信息完整性之间的平衡。 压缩可能遗漏细节 · 前缀变化与缓存 · 取舍
保留历史,与让旧信息退出当前回答
对我正在建设的个人知识系统,我倾向于把“保存记录”和“参与当前回答”分开处理。
已经公开的判断发生变化时,应保留原来的表述、形成时间和修订关系,让人能够追溯我为什么改变看法。Agent 回答“我现在怎么看”时,则应优先使用当前有效的判断;涉及观点演变时,再取用历史记录。
因此,保留历史与遗忘机制可以同时成立。旧记录可以继续存在,同时被标记为已取代、降低检索优先级,或不再进入当前任务的上下文。
这里讨论的是判断历史的可追溯性,不意味着所有原始材料都必须永久保留。
怎么想过来的
7 条结论,从早到晚。
Agent Memory 真正的挑战不在写入这个动作本身,而在写入之后的一整套记忆管理难题:写入策略、读取策略、遗忘策略、隐私安全。
判断 · 把握较大
查看出处与限定
本人已公开表达,沿用原有公开署名,不表示本次重新确认。
论述上下文 · p51 · 关系待复核
那 Agent Memory 不就是加个写入吗?其实,真正的挑战不在于写入这个动作本身,而在于写入之后带来的一整套复杂的记忆管理难题。
论述上下文 · p52 · 关系待复核
1、决定记什么——写入策略
论述上下文 · p54 · 关系待复核
必须有智能的触发式写入:Agent 要学会判断什么是重要事实(如「海鲜过敏」「称呼:晨光」),或者采用摘要写入机制,只存储对话摘要而非全部记录。
论述上下文 · p56 · 关系待复核
用户的记忆库越来越大,当用户说「老样子」时,Agent 如何在成千上万条记忆中,精准找出「老样子」指的是「拿铁少冰」还是「周五下午开会」?
论述上下文 · p58 · 关系待复核
3、决定何时忘——遗忘策略
论述上下文 · p60 · 关系待复核
常见的遗忘机制包括:
论述上下文 · p62 · 关系待复核
4、隐私与安全——记忆的保险箱
这里只定位已有署名公开表达和论述上下文;未核验外部原始证据,不证明事实正确或本人重新确认了证据关系。
Agent 和 Chatbot 的关键差异在于,Chatbot 只需记「谁说了什么」,Agent 还必须记「我做过什么」——否则会在失败的工具调用上陷入死循环。
判断
出自 《深度解析Memory本质:Agent和Chatbot的差异》 · 已被 agent-needs-action-memory 取代
查看出处与限定
本人已公开表达,沿用原有公开署名,不表示本次重新确认。
论述上下文 · p82 · 关系待复核
普通 Chatbot 记的是「你说了什么,我说了什么」,但 Agent 必须记住「我做过什么」。
论述上下文 · p83 · 关系待复核
- 痛点:如果 Agent 不记得自己调用过 Google Search 且失败了,它可能会在一个死循环里不断重试。 - 解决:需要记录 (tool_name, input, output, success_flag)。 - 进阶:在任务结束后,将踩坑经验写入长期向量库。这样下次遇到类似任务,Agent 不仅记得用户说过什么,还能记得「上次怎么做才成功」。
论述上下文 · p84 · 关系待复核
2、任务级临时记忆
这里只定位已有署名公开表达和论述上下文;未核验外部原始证据,不证明事实正确或本人重新确认了证据关系。
记忆不是越长越好,而是越准越好。
判断 · 把握较大
出自 《深度解析Memory本质:Agent和Chatbot的差异》
查看出处与限定
本人已公开表达,沿用原有公开署名,不表示本次重新确认。
论述上下文 · p121 · 关系待复核
记忆不是越长越好,而是越准越好。
这里只定位已有署名公开表达和论述上下文;未核验外部原始证据,不证明事实正确或本人重新确认了证据关系。
遗忘不是系统的 Bug,而是 Feature。系统需要智能地降低过时信息的权重,没有遗忘,记忆就会变成垃圾场。
判断 · 把握较大
出自 《上下文不等于记忆:从单 Agent 到多 Agent 协作,记忆系统是关键》
查看出处与限定
本人已公开表达,沿用原有公开署名,不表示本次重新确认。
论述上下文 · p51 · 关系待复核
遗忘:至关重要的一环。遗忘不是系统的 Bug,而是 Feature——系统需要智能地降低过时信息(如去年的天气)的权重。没有遗忘,记忆就会变成垃圾场。
这里只定位已有署名公开表达和论述上下文;未核验外部原始证据,不证明事实正确或本人重新确认了证据关系。
对话记忆不等于计算状态。Agent 能在对话记录里「记得」刚做过什么,却无法继续操作刚才的计算现场——除非 Kernel 按 session 复用。
判断 · 把握较大
2026-10-27 复核说明:“除非”指文中 OpenScience 采用的做法;按 session 复用 Kernel 是维持连续计算的一种方式,不是唯一条件。原话不改。
出自 《AI For Science:垂直 Agent 的「垂直」,并不主要来自 Prompt》
查看出处与限定
本人已公开表达,沿用原有公开署名,不表示本次重新确认。
论述上下文 · p28 · 关系待复核
假如每次执行一次 Python 都启动一个全新的进程,上一轮创建的数据框、变量和依赖状态会全部消失。Agent 虽然能在对话记录里「记得」刚刚做过什么,却无法继续操作刚才的计算现场。
论述上下文 · p29 · 关系待复核
这也是一个很容易被忽略的概念区分:对话记忆不等于计算状态。
论述上下文 · p31 · 关系待复核
在技术实现上,OpenScience 的做法是,NotebookTool 和 RKernelTool 会按照 sessionID 复用长时间运行的 Python 或 R 进程。工具不只捕获最终文本,还会收集 stdout、stderr、计算结果和生成的图片。
论述上下文 · p33 · 关系待复核
不过这里要注意,运行中的 Kernel 不等于永久保存的实验环境。要实现几个月后仍能一键复现,还需要保存代码版本、依赖、随机种子、输入数据和计算环境。
这里只定位已有署名公开表达和论述上下文;未核验外部原始证据,不证明事实正确或本人重新确认了证据关系。
在我的个人知识系统中,保留判断历史与控制当前取用应分开处理:历史用于追溯变化,回答当前立场时应优先使用当前有效判断。
判断
独立发表,不依附文章
查看出处与限定
本人已公开表达,沿用原有公开署名,不表示本次重新确认。
论述上下文 · p16 · 关系待复核
已经公开的判断发生变化时,应保留原来的表述、形成时间和修订关系,让人能够追溯我为什么改变看法。Agent 回答“我现在怎么看”时,则应优先使用当前有效的判断;涉及观点演变时,再取用历史记录。
论述上下文 · p17 · 关系待复核
因此,保留历史与遗忘机制可以同时成立。旧记录可以继续存在,同时被标记为已取代、降低检索优先级,或不再进入当前任务的上下文。
论述上下文 · p18 · 关系待复核
这里讨论的是判断历史的可追溯性,不意味着所有原始材料都必须永久保留。
这里只定位已有署名公开表达和论述上下文;未核验外部原始证据,不证明事实正确或本人重新确认了证据关系。
Agent 和 Chatbot 的关键差异在于,Chatbot 只需记「谁说了什么」,Agent 还必须记「我做过什么」——不记的话,它可能在失败的工具调用上反复重试。
判断
2026-10-27 复核:原结论写“否则会在失败的工具调用上陷入死循环”,比《深度解析 Memory 本质》正文“可能会在一个死循环里不断重试”更肯定,按正文收回到“可能”。旧原话保留。
独立发表,不依附文章 · 取代了 agent-needs-behavior-memory
查看出处与限定
本人已公开表达,沿用原有公开署名,不表示本次重新确认。
论述上下文 · p82 · 关系待复核
普通 Chatbot 记的是「你说了什么,我说了什么」,但 Agent 必须记住「我做过什么」。
论述上下文 · p83 · 关系待复核
- 痛点:如果 Agent 不记得自己调用过 Google Search 且失败了,它可能会在一个死循环里不断重试。 - 解决:需要记录 (tool_name, input, output, success_flag)。 - 进阶:在任务结束后,将踩坑经验写入长期向量库。这样下次遇到类似任务,Agent 不仅记得用户说过什么,还能记得「上次怎么做才成功」。
这里只定位已有署名公开表达和论述上下文;未核验外部原始证据,不证明事实正确或本人重新确认了证据关系。
标注判断的是我的看法,基于当时的证据,可能被推翻;假设是还没有证据支撑的猜想; 没有标记的是可核实的事实。
标注已推翻的是我曾经这么认为、后来发现错了的结论。它们保留在这里不删除——想法变过这件事本身,也是这个站的内容。