长期记忆
存取、更新、遗忘、冲突和证据治理
沿着对象与状态理解本章
记忆必须回答两个时间问题:事实什么时候生效,系统什么时候知道。下图用超时配置30秒变20秒追踪来源、有效时间和过期,避免把旧知识以熟悉的口吻重复出来。
下方图解的固定输入在“输入与适用条件”中声明。它用于解释本章机制,不与本章其他独立例子的数值暗中接续。
长期记忆不是永远正确的小纸条
新事实出现后,旧记忆怎样更新而不毁掉历史?
记忆要同时回答:这条信息说的是什么范围、何时有效、系统何时得知、依据在哪里。最新写入的记录不一定描述最新生效的事实。保留时间和来源,才能既回答当前问题,也准确解释过去。
输入与适用条件:独立配置案例;月份只用于展示时间顺序,不涉及真实产品当前参数。30秒与20秒属于不同有效期。
1 / 5 · 1月1日 生效
窄屏可左右滑动图形,或点击“放大图形”。文字解释紧随图后。
配置超时30秒
保留作用域与来源默认静止。用“下一步”看完解释再继续;播放到最后一步自动停止。键盘聚焦播放器后,可用左右键逐步查看、空格播放/暂停。图中颜色辅助区分,含义同时用文字注明。
为什么需要
跨会话复用有效知识,减少重复查找和重复错误。
怎样实现
保存范围、来源与两个时间;使用前核验;过期、冲突与撤销显式处理。
可能的代价与误解
把一次模型猜测写成通用规则,会在后续检索中放大错误。
如何判断是否做对
同时测试当前查询、历史查询、错误范围查询和来源已失效查询。
CoALA:记忆与行动的结构
CoALA提供分析语言Agent的认知架构视角,连接记忆、决策和动作。它不是所有Agent都复制人类认知的证明,也不是安装后自动获得长期智能的组件。工作、情景、语义与程序性记忆承担不同责任。[S111]
当前测试日志是任务证据,已验证路径规范是带版本的项目知识,多次适用的排查方法才可能成为经验。不能把一次猜测直接升级成永久规则。
分层存储与有限窗口
MemGPT借鉴分层存储思路管理上下文换入换出。“虚拟上下文”依赖外部存储和调度,不意味着一次模型调用能处理无限内容。Checkpoint保存线程执行状态,长期Store保存跨任务信息;选择内存实现也不会自动得到进程重启后的持久化。[S112][S113][S114]
原创分层:小而稳定的规则常驻,当前任务保留状态,完整历史外置。容易变化的事实可能更适合实时查询,而非写进静态记忆。
什么值得写入
先判断未来可复用、证据是否充分、重新获得是否昂贵。可轻易从代码读取的事实不必都复制;高成本调查结论可以保存,但需范围、来源与失效条件。
{"subject":"path-normalization","scope":"build-v3",
"claim":"使用仓库相对路径匹配exclude",
"evidence":["doc:build-v3","test:relative-paths"],
"status":"verified","invalidated_by":"matching-contract-change"}
这是原创结构,不要求建设复杂数据库。用户偏好、项目事实、模型建议应分开。新经验可以先候选、后验证,避免模型自我认证。
怎样取回有效记忆
仅按相似度可能取回旧版本,仅按最近时间可能漏稳定规则。可先按项目、版本和权限过滤,再检索并验证来源。返回结论时连同条件和证据,让模型判断是否适用。
Generative Agents研究记忆与反思在模拟角色中的作用;A-MEM研究关联组织;Mem0研究抽取维护。它们任务不同,不能把某个记忆Benchmark分数直接当代码任务收益。[S115][S118][S119]
更新、冲突与遗忘
新信息可能修正旧事实、缩小范围或使规则失效,不一定新增一条。不同版本的相反结论不能强行合成模糊摘要。五份源自同一次生成的总结也不是五个独立来源。
危险循环是错误结论写入→再次检索→把重复当验证。应保持来源、状态和独立证据。失效规则退出活跃检索,重要历史可留审计;保留存储与默认注入是两个维度。授权或隐私要求可能需要真正删除。
记忆评测
LongMemEval和LoCoMo把长期互动记忆变成可测任务,但对话问答不等于工程不再犯错。原创实验比较无记忆、静态规则、按需证据记忆,覆盖旧规则仍适用、版本变更、同名不同项目、证据缺失。[S116][S117]
同时计入写入和维护成本。每次总结大量内容却从不复用,可能不值得。一个简单文件中的精确约束,反而可能比复杂系统有效。
与压缩的关系
压缩服务当前长任务,长期记忆服务未来任务。摘要可以成为候选,但临时假设和失败路线不能无筛选永久保存。记忆存得下不等于取对,更不等于用对。
自检:有向量数据库就有记忆?只是底座,还缺写入、检索、有效性与使用。记忆越多越聪明?不一定,重复、过期和错误会增加干扰。
逐项中文讲义
保留拓展阅读目录编号与A/B/C优先级;每项包括机制解释、边界与原创练习。
A9.1 · 语言Agent的认知架构
对应资料:CoALA
CoALA把语言Agent的记忆、动作与决策过程放在统一认知架构视角下。分类用于分析与设计,不是声称机器完整复制人类心智。
工作记忆、情景记忆、语义记忆和程序性记忆具有不同生命周期。任务临时假设不应未经验证就变成永久方法。
记忆如何进入决策而不直接替代环境
输入与条件。上次经验说测试用pytest,当前项目可能已更改。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1检索记忆 | 提供候选执行方法 | 节省盲搜。 |
| 2观察环境 | 读当前测试配置 | 核对是否仍适用。 |
| 3动作 | 按当前事实运行 | 记忆是辅助而非不可更改指令。 |
把过程连起来。认知架构的组件要通过信息流相连,不能只画分类图。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:将测试日志、用户偏好、版本约定和可复用排查步骤分别归类,并说明需要什么证据才能保存。
完成标准是让存取规则符合信息用途,而不是为了分类完整给每个项目增加复杂数据库。
拓展阅读目录事实依据 [S111] · 练习与工程推导为本书独立编写。
A9.2 · 分层记忆与上下文换入换出
对应资料:MemGPT
MemGPT借鉴分层存储思想,通过管理上下文内外的信息应对有限窗口。外部存储与换入换出并没有让单次模型调用获得无限物理上下文。
取回需要索引、权限和有效引用;外置后不能仅靠模型“应该记得”来恢复细节。层间移动也有调用与延迟成本。
换出的是正文,当前任务还要留索引
输入与条件。长日志L占5000单位,当前只需错误摘要和日志路径。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1换出 | 完整L放外部文件 | 当前窗口不保留全文。 |
| 2索引 | 记录错误范围420—450及任务状态 | 知道何时从哪里取。 |
| 3换入 | 需要核对前因时补读该范围 | 不要把“外面有”当成“当前已知”。 |
把过程连起来。外存扩展可取信息容量,但不让模型同时读取所有内容。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:把一个长任务分为常驻目标、当前状态和完整历史,设计什么时候取回哪一层。测试引用失效时如何诚实报告。
不要把分层记忆等同于无损压缩。长期可恢复性需要原始证据和状态治理共同支持。
拓展阅读目录事实依据 [S112] · 练习与工程推导为本书独立编写。
A9.3 · 长期记忆的类型与命名空间
对应资料:LangChain Long-Term Memory
长期记忆可通过命名空间和存储接口组织跨任务信息。存储API提供底座,写什么、何时取、是否仍有效仍由应用设计决定。
用户、项目和版本范围需要隔离。语义相似但属于另一项目的条目可能造成错误,甚至泄露信息。
命名空间避免跨用户记忆混用
输入与条件。用户u1偏好英文,u2偏好中文。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1写入 | 分别绑定用户范围 | 不存成全局唯一language。 |
| 2查询u2 | 只取u2授权记录 | 得到中文。 |
| 3共享规则 | 项目要求代码注释英文 | 再按任务范围处理,不靠全局覆盖。 |
把过程连起来。记忆组织首先要保证身份与适用范围。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:为两个项目保存相反的路径约定,在检索前按作用域过滤,再判断内容相关性。
完成标准是证明记忆被正确用于新任务,而不是只证明可以写入和查询一条记录。
拓展阅读目录事实依据 [S113] · 练习与工程推导为本书独立编写。
A9.4 · 会话状态与长期Store
对应资料:LangGraph Memory
LangGraph的会话检查点与长期Store承担不同职责。前者帮助恢复当前线程状态,后者支持跨线程组织信息;具体持久化能力取决于所用实现。
进程内存实现不等于重启后仍保存。检查点中的计划也不代表外部动作一定完成,需要与环境状态核对。
会话检查点与长期Store保存不同生命周期
输入与条件。任务正在第3步,项目长期事实为“测试命令pytest”。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1检查点 | 保存步骤3、未完成调用和当前版本 | 用于本任务恢复。 |
| 2长期Store | 保存测试命令及来源 | 可被未来任务检索。 |
| 3结束任务 | 检查点可归档 | 不必把每一步执行状态永久当经验。 |
把过程连起来。不同生命周期不意味着必须用不同产品,但语义必须分清。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:在工具执行后、结果记录前模拟中断,设计恢复时先查询事实而非直接重试的流程。
不要因为两种数据都能存入数据库,就把任务恢复与长期经验治理合成一个不区分状态的对象。
拓展阅读目录事实依据 [S114] · 练习与工程推导为本书独立编写。
B9.5 · 记忆流、反思与计划
对应资料:Generative Agents
Generative Agents研究记忆流、检索、反思和计划如何支持模拟角色行为。它提供记忆组织思路,但模拟行为的评测不等于软件工程可靠性评测。
反思可以形成更高层概括,也可能把具体事件错误泛化。生成的总结仍需要来源与适用条件。
反思把事件归纳成经验时要避免过度泛化
输入与条件。三次下午构建慢,都发生在大日志任务。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1事件 | 分别记录时间、负载和日志量 | 不是只记“下午慢”。 |
| 2候选规律 | 大日志可能相关 | 仍是待验证假设。 |
| 3检验 | 上午大日志与下午小日志对照 | 区分时间因素与负载因素。 |
把过程连起来。记忆反思可产生假设,不能靠共现直接升级为因果规则。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:从三次不同失败中总结共同经验,检查是否真的共享原因,还是只有表面词语相似。
完成标准是区分事件、概括和已验证方法,不把模型写出的“经验”自动当成事实。
拓展阅读目录事实依据 [S115] · 练习与工程推导为本书独立编写。
A9.6 · 长期互动记忆评测
对应资料:LongMemEval
LongMemEval把长期交互中的信息保留、更新与使用转成可评测任务。能存很多历史不代表能在正确时刻取出正确版本。
长期记忆测试应包含多次会话、时间变化、冲突信息以及不应作答的情况。只测简单事实复述会高估可靠性。
旧偏好更新后要回答新值
输入与条件。第1次说偏好英文,第20次明确改为中文。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1时间排序 | 找到明确更新而非重复提及 | 新偏好适用当前。 |
| 2问题 | “现在偏好什么语言” | 回答中文。 |
| 3历史问题 | “第1次说什么” | 仍可回答英文,不删除历史事实。 |
把过程连起来。记忆评测需要区分当前事实与历史回忆。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:先给旧地址,再明确更新地址,之后询问当前地址与历史地址,分别检查时间语义。
代码任务还需进一步测试记忆是否减少重复错误。对话基准成绩不能直接替代实际工程验证。
拓展阅读目录事实依据 [S116] · 练习与工程推导为本书独立编写。
B9.7 · 超长会话中的记忆能力
对应资料:LoCoMo
LoCoMo关注很长对话跨度中的记忆与关联能力。长时间跨度会带来实体、事件和时间关系的复杂性,不只是输入字数更多。
摘要可能保留人物与主题,却丢失先后顺序或条件。评价需要检查关系,而不是只搜索关键词是否出现。
超长会话不能只测试复制一句话
输入与条件。会话1说项目A属于甲,会话8说甲换到项目B,问题问当前负责人。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1跨段关联 | 需要识别人和项目变化 | 不只匹配最近同名词。 |
| 2时序 | 区分过去与现在 | 错误时间会给过期答案。 |
| 3证据 | 返回支持当前关系的记录 | 无法确定时保持缺口。 |
把过程连起来。长期记忆难点包括关联、更新与时间,而不是单纯长度。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:构造三个阶段的计划变化,问最终计划、某时点计划和变化原因,分别需要哪些证据。
完成标准是区分长期关系理解与单条信息查找,避免用一次找回成功概括全部记忆能力。
拓展阅读目录事实依据 [S117] · 练习与工程推导为本书独立编写。
B9.8 · 动态关联的记忆组织
对应资料:A-MEM
A-MEM探索动态组织、链接与更新记忆,使新信息可以与已有内容形成关联。关联结构可能帮助检索,也可能因错误链接传播误判。
链接应保留依据,不能仅凭模型觉得相似就当作事实关系。新记忆还可能修正旧条目,而非无限追加。
自动连边也可能连错记忆
输入与条件。记忆A提“缓存失效”,B提“权限缓存”,两者领域不同。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1相似候选 | 关键词相同 | 可以提出关联。 |
| 2校验边 | A属构建缓存,B属身份授权 | 不应当作同一修复经验。 |
| 3维护 | 链接带关系类型和来源 | 未来可撤销,不永久传播错误。 |
把过程连起来。关联记忆增加可达性,也增加误关联成本。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:把同名但不同项目的错误与同项目不同版本的错误分别连接,说明哪些关系可用、哪些需保留区别。
完成标准是判断动态组织带来的任务收益与维护成本,而不是以链接数量证明系统更聪明。
拓展阅读目录事实依据 [S118] · 练习与工程推导为本书独立编写。
B9.9 · 记忆提取与更新流水线
对应资料:Mem0
Mem0研究记忆抽取、维护与规模化使用。自动提取可以减少手工记录,但决定什么值得长期保存仍然是有误差的判断。
事实、偏好、临时计划和模型建议应区别处理。错误结论反复被取回,可能形成自我强化,而非新的独立证据。
记忆更新流水线逐项核对
输入与条件。旧记录生产超时5,新消息声称“应该改成7”,尚未执行。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1提取 | 这是建议而非既成事实 | 标proposed。 |
| 2合并 | 不能直接覆盖当前有效5 | 保留事实与计划差别。 |
| 3确认 | 工具读回实际7后 | 才以版本与时间更新。 |
把过程连起来。自动提取必须保留语气、状态与证据,不只抽数字。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:给定含明确偏好、临时安排和未证实猜测的对话,设计不同写入状态,并检查后续更新。
不要只看存储效率或某个基准分数。应计算提取成本、错误使用率、删除能力和实际新任务收益。
拓展阅读目录事实依据 [S119] · 练习与工程推导为本书独立编写。
C9.10 · 图结构与全局问题检索
对应资料:GraphRAG
GraphRAG利用图结构与摘要支持更全局的内容关联和查询。它可以帮助跨文档组织信息,但实体提取、关系建立和社区摘要都可能产生误差。
图中的边不是天然真实因果关系。共现、引用、时间先后与因果必须区分,必要时回到原始证据。
图检索回答跨文档关系
输入与条件。文档1说模块A依赖B,文档2说B在版本v8修改了接口。
| 步骤与对象 | 内部动作 | 中间结果 / 新状态 |
|---|---|---|
| 1建关系 | A→依赖→B,B→变更→v8 | 边带来源。 |
| 2查询 | “A为什么受v8影响” | 沿关系找到候选解释。 |
| 3验证 | 检查A实际调用了哪个接口 | 图连通不自动证明运行故障。 |
把过程连起来。图适合关系导航,结论仍需与目标路径的证据绑定。
边界与反例。本表是独立教学构造,用来解释该研究主题的一个局部机制,不是原论文实验或产品实测;完整方法与适用条件仍需结合本节正文。
依据与适用范围:[DERIVE]。示例输入和场景由本书明确设定。
原创练习:把三个模块及依赖文档建立小图,分别回答“有哪些关联”和“为什么失败”,说明第二个问题需要更强证据。
精确符号查找未必值得使用图检索。更新成本和来源追溯同样应进入架构决策。
拓展阅读目录事实依据 [S120] · 练习与工程推导为本书独立编写。