记忆不是上下文:智能体状态的实用架构

记忆不是上下文:智能体状态的实用架构
2026年8月12日工程阅读约 9 分钟

一套用于区分临时工作上下文、持久用户知识与保留原始来源文档的决策框架。

很多智能体团队都从一个看起来无害的词开始:记忆。最近一条消息被叫作记忆,保存下来的用户偏好被叫作记忆,从政策手册里检索出来的一段文字也被叫作记忆。三者都可能进入下一次模型调用,但它们的所有者、寿命、失效方式和删除规则完全不同。

当上下文、持久记忆和来源文档被设计成三个独立系统,只在检索和组装阶段相遇,架构反而更容易解释。这样划分不是为了术语整齐,而是为了答案出错时,团队能确认哪一层才是权威。

先说结论

  • 上下文是一次请求的临时工作集:最近对话、工具结果、当前计划和中间产物。
  • 记忆是应当影响未来决策的持久结论:偏好、约束、关系、结果或已经纠正的事实。
  • 文档负责保存证据:政策、手册、合同、研究、转录稿以及其他必须可检查的来源。
  • 检索会把三层材料编译进一个有预算的提示词,但不会因此把它们变成同一种数据。

先定义生命周期,再选择存储技术

向量数据库不会替你决定什么值得长期保存;知识图谱不会替你决定谁有权修正一条事实;更大的上下文窗口也不会告诉你,在删除或重建索引后哪份来源必须继续存在。这些都是生命周期问题,应该先于索引选型被回答。

层级典型内容权威来源通常寿命主要失效方式
工作上下文最近消息、工具输出、计划状态当前请求的组装过程一轮对话或一次工作流Token 膨胀、过期任务状态
持久记忆偏好、约束、决策、纠正带作用域的规范记录与历史直到被纠正、到期或删除所有权错误、召回旧事实
来源语料手册、政策、合同、长篇证据原始字节或精确来源文本由来源保留策略决定来源链丢失、无法重新提取

上下文是一份为当前请求编译的工作集

上下文存在的目的,是让模型完成眼前的请求。它可能包含最近几轮对话、一次工具响应、一段文档摘录和少量记忆。应用应当能解释每项材料为什么被放进去,也应当能在任务结束后把它丢弃。

三个实践可以让上下文保持可控:

  1. 按角色分配预算。分别为指令、当前对话、检索证据、持久约束和模型输出预留空间。
  2. 只有在原始轨迹仍可检查时才依赖摘要。紧凑的任务摘要很有价值,但它不能悄悄替代排查错误所需的原始记录。
  3. 每轮重新组装。不要无限追加;应根据新请求重新判断相关性、有效期与作用域。

长上下文窗口只能推迟这些决定,不能消除它们。旧工具结果可能和新结果冲突,早期硬约束可能被埋没,而大部分保留文字没有帮助时,成本仍会继续上升。

记忆是一条经过选择的持久结论

一条记忆应足够精炼,能改变后续决策;也应足够结构化,可以被纠正。最低限度包括内容、结构化作用域、来源、稳定身份、时间字段,以及每次重要变化的不可变历史。

作用域不是装饰。用户偏好属于该用户,智能体运行规则可能属于某个 agent,临时工作结果可能只属于某次 run。已经认证的项目或命名空间是外层安全边界,不应接受请求正文传入的未受信值。

一个实用判断:如果应用说不清一条记录归谁所有、怎样产生、怎样被替代,它就还没有建立持久记忆契约。

当应用已经知道要保存的准确内容时,应直接写入,不要再经过一次模型推理。当需要从对话中提取时,推理应成为可观察的操作,具有明确成功或失败状态。提取失败后悄悄改为保存原始聊天,会创造第二套没有写进产品契约的行为。

文档保存证据,而不是替用户建立画像

员工手册的一段话不是用户偏好,签署过的合同也不是模型推断出来的事实。长来源需要单独语料层,因为它们的权威来自被完整保留。保存原始资产或精确文本,记录校验和与身份,把 Markdown、分块、向量、实体图和摘要都当作可替换投影。

这层分离让系统可以:

  • 解析器改进后重新提取;
  • 改变分块策略而不损失来源;
  • 同时返回命中片段、所属文档和相邻证据;
  • 删除完整来源家族,而不是留下孤儿向量;
  • 证明某次回答依据的是哪个版本。

把文档中每个有用句子都转成画像记忆看似方便,却会混淆保留期限、访问控制和纠错路径。来源应保持完整,只派生产品确实需要跨任务复用的小记录。

检索是三层真正相遇的地方

一轮请求的提示词是一份编译产物。一个可落地的组装顺序是:

  1. 绑定已认证命名空间,以及请求的 user、agent 和 run 作用域;
  2. 识别当前任务,以及它允许使用哪类证据;
  3. 带着作用域和有效期过滤检索当前持久记忆;
  4. 需要外部或长篇证据时,再检索来源文档;
  5. 去除重复材料,同时保留来源标识;
  6. 有意识地排列硬约束、当前状态、证据和可选背景;
  7. 记录足以复现错误答案的检索证据,同时避免记录秘密。

最终输入对模型而言可能只是一段文本,应用仍应保留边界。纠正记忆不应改写合同;删除文档不应抹掉无关偏好;一次 run 过期,也不应删除长期运行规则。

四种失效模式会暴露被压扁的架构

所有内容都追加进聊天历史

成本不断增加,早期约束越来越难找到,一次格式错误的工具输出还可能污染之后每一轮。所有数据都没有独立生命周期,系统也无法区分“到期”和“删除”。

每个提取句子都变成记忆

存储会充满临时观察、重复内容与没有证据的结论。搜索结果表面相关,却可能召回用户从未同意长期保留的事实。

分块成为文档唯一副本

以后改进解析器和分块器时,只能从已经损失信息的内容开始。所谓引用只剩片段标签,无法回到可检查来源。

派生画像成为权威

摘要和画像有助于渐进披露,但它们可能滞后,也可能重建失败。它们应引用规范记录;刷新失败时保留上一个有效视图,而不是覆盖来源真相。

一条仍然便于排错的上线顺序

  1. 先观测当前提示词。按来源统计 token,找出重复出现却没有帮助决策的材料。
  2. 定义结构化作用域。明确产品中的 user、agent、run、project 与 document 分别代表什么所有权。
  3. 引入显式持久写入。先处理确定的偏好和约束,再增加推断式提取。
  4. 保留来源文档。先把分块与索引重建做成日常操作,再让生产答案依赖它们。
  5. 评估完整回答链路。同时检查存储状态、检索证据、最终答案、延迟和故障行为。

FishMem 在哪里划线

FishMem 把规范记忆记录与保留来源的文档设计为两个独立产品面。规范记录携带作用域、历史、时间字段与来源;文档版本保留精确来源内容,而检索分块与索引可重建。应用负责决定如何把二者放进模型的工作上下文。

这是架构选择,不代表每个应用都需要三层。短生命周期工具也许只需要上下文;个人助理可能需要上下文和带作用域记忆;客服、研究等智能体通常才需要完整三层。

延伸阅读

继续阅读