第 10 章 — 长时任务记忆
LLM Primer IV: Designing AI Cognition with MCP 章节走读的第十篇。问题不再是 "塞得下多少",而是 "记什么、忘什么";今天已经出货的七位数上下文窗口,把那堵墙推后一个小时,而不是推掉。
这一章为什么存在
一个跑 30 秒的 agent 可以把它需要的所有东西都装在 prompt 里。一个跑 3 小时的不行。它在第一个小时做的事,跟它在第三个小时做的事一起放,肯定塞不下,而记什么、忘什么这个问题就成了中心工程问题。上下文窗口不再是一份要管的预算;它是一片必须持续对照更深的存储来刷新的工作面。这一章讲的是记忆的架构 — 即时推理用的短期记忆、跨会话持久的长期记忆、把两者连起来的压缩和外化技巧。
10.1 短期记忆:窗口、scratchpad、ReAct
短期记忆就是当前上下文窗口里那部分内容,不用外部查询就能拿到。最简单的策略是 滑动窗口:把 system prompt 和工具描述钉在顶上,把最近 N 轮钉在底下,中间的全丢。在相关上下文都是近的时它能用,而这对短对话成立,对几乎其他所有情况都不成立。故障模式很干净 — 一轮丢了就是丢了 — agent 会在窗口第一次填满的可预测时点,显眼地忘掉用户的指令。
下一层是 scratchpad,一块模型有意写入的结构化上下文。内部 scratchpad 把中间推理在循环里带下去;外部 scratchpad 通过工具调用把笔记写进一个存起来的缓冲区,未来的上下文从那里注入。给 scratchpad 经典形态的那个模式是 ReAct — Reason and Act — 2022 年 Yao 等人提出。循环交替走思考、动作、观察,直到模型决定有答案了。这个结构把推理外化成显式的文本物件,模型能回头参考;它给 agent 循环一个可见的记忆操作脚手架:想法能被总结、动作能被去重、观察能被压缩。没用 ReAct 或近亲的 agent 倾向于把推理和动作纠缠在一起,状态不透明。
实践里的补充是 Reflexion,加一个显式的反思步骤,模型评估自己近期的动作,把一份批评写进 scratchpad 给下一次尝试用。现代 agent 框架把两者揉进一个可配置循环里,反思由失败信号触发,而不是每轮都触发。
10.2 长期记忆:情景与语义
短期记忆结束的地方,长期记忆开始。认知科学里 情景(具体事件)和 语义(一般事实)记忆的区分,在 agent 身上证明有用。情景记忆是具体过去交互的记录;语义记忆是从那里蒸馏下来的、活下来的知识 — 这个用户偏好公制单位、这个项目的部署命令是 make ship、这个 API 返回看起来像成功的错误。
当前实践里,情景记忆几乎总是一个向量数据库。每个过去交互被嵌入、带元数据存起来,在查询时按语义相似度取出。这就是 RAG 用在 agent 自己的过去上,而不是用在文档语料上,工程 — 切块、嵌入选择、检索评估 — 大体跟第三卷讲的一样。
语义记忆没那么标准化。两种主流衬底是结构化键值存储和知识图谱。键值存储简单、快、好检视;图谱支持像 "用户当前在工作的项目的部署命令是什么" 这种多跳查询,但需要维护和查询语言。多数生产 agent 从键值起步,只在查询真的需要 join 时才升级到图。很多永远不升。
更新策略是大多数团队踩坑的地方。从一段对话里抽出的事实不一定在一般意义上为真。把每个断言都提升进语义记忆的天真策略会产出一个自相矛盾的损坏存储。沉淀下来的纪律是按上下文加权断言、给事实带时间戳和出处版本、对高风险领域通过显式用户确认来门控更新。一种以 MemGPT 等名字出现的模式是给 agent 显式的记忆管理工具,让模型自己决定存什么、取什么、忘什么。赢面是模型常常知道一些 "哪些记忆重要" 的事,这些事任何基于规则的抽取都抓不到。代价是模型也会搞错,一个由模型策展的记忆存储需要防止失控生长的护栏。
10.3 扛过上下文上限:压缩与结构化笔记
就算情景和语义记忆都到位,agent 当前会话还是会撞窗口。最常见的补救是 基于摘要的压缩:上下文接近窗口 60% 到 80% 时,后台步骤把更早的轮次总结,替换它们。故障模式是 摘要漂移(大意活下来但后面证明重要的具体事实丢了)和 递归平滑(每次总结一个总结,累计损失严重)。补救是用结构化摘要 prompt 保住命名实体、决定、未解问题,可能的话从原文而不是更早的摘要来摘。
工具结果清理在几轮之后把绝大部分工具返回踢掉,换成简短笔记如 "查了 users 表,返回 47 行,找到 user 12345"。结构化笔记要求 agent 维护一份权威笔记文件,记当前目标、已完成步骤、剩余步骤、未解问题 — 被当成事实源,而不是 transcript。外化把产出的物件移到文件系统或数据库,上下文里只留引用。统一的原则是上下文窗口是给 活的 工作用的,不是给 归档 用的。窗口大了反而让外部存储更重要,不是更不重要,因为它让会话更长,外化架构有更多时间要么活、要么死。
第 10 章接下去会怎么走
第 9、10 章一起合上第四部分,给了两套互补的心智模型:上下文是单次调用里的有限预算,记忆是跨会话选择性记住的架构。两章都没处理的是 对抗 压力。每一次记忆写入都是一个攻击者可以投毒的地方。每一次工具调用都是一个攻击者可以截获的地方。每一份取出的记忆都是一个攻击者可以注入指令的地方,而 agent 会把它当成自己的想法。前两章的架构是为正确性和效率设计的,不是为对抗下生存。
明天 — 第 11 章:攻击面与协议漏洞。Confused Deputy、Token Passthrough、Session Hijacking、Capability Escalation、Unauthenticated Sampling,以及让上下文投毒这么难修的隐式信任传播。