相关阅读:
注:在 CC 源码中也包含大量关于 memory 的构本设计,memory 真的构本很复杂,在工程上不亚于一套大型系统设计(这是构本交叉学科领域,而非纯编程架构,构本最是构本麻烦)。最后一篇关于 Ilya 的构本研究中,有一个“情绪算法”的构本观点也值得深思,大意是构本:情绪不仅是“感觉”,它是构本一种硬编码的、高效的构本价值函数。它能让你在漫长的构本决策链条中,提前预知某个方向是构本“好”还是“坏”,从而剪枝(pruning)搜索空间,构本不需要等到最后结果出来。构本
今天的构本大模型在单次会话里已经足够聪明。问题不在于它一时想不出来,而在于它没法把昨天学到的东西,以一种可靠、可更新、可追责的方式带到今天。
一个数据分析 Agent 在第 1 次会话中得知你偏好 Plotly[1],在第 5 次推断出你真正关注的是留存率而非 DAU,在第 20 次积累了足够信号判断你的汇报对象是一个重视 ROI 叙事的 VP。这三层理解——工具偏好、业务焦点、沟通语境——每一层都需要不同的时间尺度才能浮现。没有记忆系统,Agent 永远只能做第 1 次会话的事。
Plotly 和 Matplotlib[2] 都是 Python 里十分常见的数据可视化工具,但它们的设计取向并不一样。Matplotlib 更像经典绘图库,强调稳定、可控、学术和工程场景里的通用性;Plotly 则更偏向交互式可视化,强调图表在网页中的展示效果,以及缩放、悬停、筛选这类交互体验。
Matplotlib 的优势在于成熟、基础牢、生态深。很多论文图、报告图、静态分析图,背后默认用的就是它。它对图表元素的控制粒度很细,适合需要高度定制、追求出版质量、或者已经深度嵌入 Python 科学计算工作流的场景。缺点也很明显:默认交互能力较弱,很多时候更像是在“生成一张图”,而不是“提供一个可以探索的数据界面”。
Plotly 的优势则在于“图表本身就是界面”。它生成的图天然适合放到网页、仪表盘和演示环境中,用户可以直接悬停查看数值、缩放局部区域、切换图例,探索数据会更直观。对于商业分析、产品分析、运营看板这类需要给人看的场景,Plotly 往往比 Matplotlib 更有表现力。相应地,它也更偏展示与交互,很多时候不是替代 Matplotlib,而是服务于另一类需求。
如果一句话概括二者区别:Matplotlib 更像稳定、精细的静态绘图基础设施;Plotly 更像面向分析和展示的交互式可视化工具。
Context window 的扩展(128K、200K、1M)解决的是带宽问题,不是建模问题。把过去 50 次对话全塞进 prompt,模型面对的是一个巨大的、未经结构化的信号场,它需要同时完成“记忆检索”和“任务执行”两个正交的认知负载。benchmark 已经证实:拉到 35 个 session、300 个 turn 的尺度上,长上下文和 RAG 在时间推理、长程一致性上仍然明显落后于人类。
指一次对话轮次中的单次发言单位,用来衡量交互链条的长度;turn 越多,系统维持长期一致理解的难度越高。
所以 memory 正在从附加功能变成 Agent 架构的核心子系统——一个完整的 write–manage–read 闭环,而不是“有个存储层就算有记忆”。
谈 memory 之前,必须先说清楚它和几个容易混淆的邻居概念在职责上的区别。否则概念越讲越大,边界越来越糊。
Memory 和 State 职责不同。State 是当前 session 内的短期运行态:对话上下文、工具调用的中间结果、规划器的当前步骤。Session 结束即销毁。Memory 是跨 session 持续存在的、可影响未来决策的结构化历史。实践中二者偶有交叉——某些运行态可能被提升为长期记忆——但设计上它们解决的是不同时间尺度的问题。
Memory 和 Policy 不应等同。Policy 管的是“允许与禁止”——权限边界、安全规则、合规约束。它是系统的外部规范,通常不应该被 memory 系统动态修改。如果 Agent 的记忆能改写自己的权限规则,那不是记忆在进化,是越权。
Memory 和 Profile 是包含关系。Profile 是用户模型的一个低维、显式、便于消费的快照层——名字、角色、偏好标签。它是记忆的一个输出产物,不是记忆本身。把 profile 等同于 memory,就像把一张名片等同于你对一个人的全部理解。
一句话定义:Memory 保存的是可跨时延续并影响未来决策的结构化历史——所谓“结构化”,指的是带来源、作用域、时间权重和可修正性的历史对象,而不是“把聊天记录再存一份”。这条边界划清了,后面才能谈得有意义。
很多人把“蒸馏”和“记忆”混用,也有人走另一个极端把二者完全对立。两种理解都有偏差。
摘要、reflection、session summary——这些都是有用的技术动作,但它们更准确的身份是 memory pipeline 里管理环节的一个操作,而不是 memory 本身。就像压缩是通信系统的一步,但你不会说“压缩 = 通信”。
蒸馏真正的局限不在于它“做了压缩”,而在于它天然偏向静态结论。一条摘要能写下“用户偏好 TypeScript”,却很难保留这条偏好是如何形成的、在什么上下文下成立、最近是否正在漂移。它擅长留下结论,不擅长留下形成结论的轨迹。而对生产级 Agent 来说,轨迹往往比结论更值钱——你要的不只是“知道他喜欢什么”,而是“理解他在什么条件下会改主意”。
所以:蒸馏试图把过去变成一句话,记忆试图把过去变成一个还能继续更新的模型。蒸馏在管理链路里有它的位置,但如果一个系统做完摘要就停了,没有后续的冲突检测、信念衰减、回溯修正,那它不是在做记忆,只是在做归档。
“记忆就是记住用户偏好”——这个方向没错,但只覆盖了四分之一。面向工程实现,一种高价值的切分方式是把记忆的建模对象分成四类。这不是唯一的分类法,但它能帮助系统设计者不遗漏关键维度。
用户模型:偏好、风险偏好、沟通习惯、决策模式。用户从“抵触 TypeScript” 到“逐渐接受”再到“主动要求重写”——这个转变轨迹本身就是高价值信号。
任务模型:哪些方案被否决过,哪些结论已确认,哪些 artifact 是当前真版本,哪些承诺还没完成。很多 Agent 失败不是不懂你,而是不记得事情已经推进到了哪一步。
世界模型:操作环境:仓库结构、API 约束、系统边界、组织规则、数据新鲜度。大量“个性化错误”本质上不是没记住你,而是没记住你所在的环境已经变了。
自我模型:试过什么、哪条路径失败过、哪个工具在什么场景下不稳定、哪些推断只是暂定假设。没有这层 memory,Agent 不是在学习,只是在重复犯错。
意图不是被单独存在某个字段里的东西。它是这四层模型长期耦合后浮现出来的上层能力——就像一个跟了你三年的助理,他“懂你”不是因为背了一本偏好手册,而是因为他同时理解你的脾气、你的项目进度、你的组织环境和他自己的能力边界。
如果记忆不是一句摘要,那它到底是什么?这个问题不回答,系统就没有锚点。
若把记忆做成可计算对象,至少需要六个维度:
把这六个维度钉住,记忆就从“一堆字符串”变成了可查询、可追溯、可修正、可过期的结构化对象。后面的写入、管理、读取才有操作的基本单位。
记忆系统不是一个容器,而是三条链路的闭环:写入、管理、读取。
写入链路最容易被想成“有价值就存”。但真正做系统的人会立刻问:存储预算有限,检索预算有限,未来注意力更有限——到底什么该存?
所以记忆写入本质上是一次 decision under budget。这里的预算不只是存储空间,还包括未来的检索成本、推理时的注意力开销、以及后续的冲突管理代价。在这些约束下,写入要做的是决定:哪些信息值得获得对未来决策的影响力。
这意味着写入不能只看“这条信息有没有价值”,而要看它相对于已有记忆的边际价值。如果 Agent 已经高置信地知道用户偏好性能优先,那第四次观察到同样信号的边际价值远低于第一次。反过来,如果新信号和已有信念冲突——一个一直保守选型的用户突然要求尝试 alpha 框架——这个偏移本身就是高价值信号,值得优先写入。
行为证据通常比口头表态更值得写入预算。用户说“我不喜欢 ORM” 是一条 assertion;连续三次在你提供 ORM 方案后又手写 SQL,是可以提炼为 belief 的行为模式,且后者的 provenance 更硬。
管理链路决定了记忆系统是长成资产还是长成垃圾堆。它至少处理五件事:
传统做法是 RAG 式的语义相似度召回。在记忆场景下,这有一个根本局限:它假设相关性由表面语义决定。但真正有价值的记忆调用往往是反直觉的——用户问“帮我写缓存方案”,最相关的记忆可能不是上次讨论缓存的对话,而是三个月前提到的黑五流量问题,那条信息决定了设计约束,但在语义空间里跟“缓存”距离很远。
所以读取应该从语义相似召回,升级为任务约束驱动的检索-推断耦合。检索没有被取代,而是降级成推断过程中的一个子步骤:先由任务理解层判断“当前决策真正受什么约束”,再由检索层去找对应记忆,最后评估这些记忆在当前情境下的适用性。接口上,这意味着从 retrieve(query) 到 read(task_context, belief_graph) 的转变。
“记忆会进化”这句话容易说空。讲实了就是两个能力。
这里有一个更深的洞察:死的不是经验本身,而是那些失去了更新机制的经验。 Few-shot 示例、摘要、fine-tuned preference profile——它们并不天然低级。它们真正的问题是,一旦脱离了持续校正闭环,就从资产变成了惯性。
不谈数字分身的宏大叙事,只谈工程现实。当记忆系统足够成熟,它逼近的不是“复制你”,而是在特定任务域中近似你的判断风格与约束偏好。这个目标不需要科幻感,它需要的是上面每一层都做扎实。
回看整条链路,你会发现每一步的核心问题都是同一个词:写入决定什么信息获得对未来的影响力;管理决定什么信念继续保持有效;读取决定什么记忆真正进入当下决策;遗忘决定什么经验退出舞台。
这四个动作,没有一个是容量问题,全都是治理问题——谁被允许持续影响未来。
评测也在转向了:从“能不能 recall” 到“能不能 update、能不能 abstain、能不能 handle drift、能不能 selective forget”。
Memory 的难点从来不在容量,在治理。
Plotly:
Matplotlib: