跳到主要内容

无法回滚的回滚:提示词、工具和记忆必须同步版本化,否则满盘皆输

· 阅读需 13 分钟
Tian Pan
Software Engineer

故障频道里传来消息,说新的提示词正在幻觉退款金额,所以你做了一个显而易见的决定:将生产环境标签重新指向到上周的提示词版本。三十秒,无需重新部署,教科书级的回滚。结果 Agent 表现得反而更糟。上周的提示词引用了一个名为 lookup_order 的工具,但平台团队在周二将其重命名为 orders.search。记忆库中充满了由新提示词格式生成的偏好摘要,而旧提示词会将这些内容误读为用户指令。你并没有回滚 Agent,而是制造了一个“奇美拉”——三分之一是上周的,三分之二是今天的——并在从未测试过该组合的情况下将其推向了生产环境。

这是任何人的运维手册中都没有涵盖的失败模式:Agent 的部署不是一个单一的构建产物,而是一个三元组——提示词版本、工具契约、以及累积的记忆状态。回滚其中一个维度,而让另外两个维度保持现状,并不能恢复之前的状态。它创造了一个从未存在过、从未通过评估、且不属于任何团队值班范畴的新状态。

提示词注册表供应商告诉每个人,回滚应该是“配置变更,而非重新部署”——重新指向标签,几秒钟搞定。这个建议是正确的,但也是危险且不完整的。对于系统中真正无状态的那个维度,它是正确的。它的不完整在于,它暗示了另外两个维度也会随之变动。但事实并非如此。

Agent 部署是一个三元组,而非单一构建产物

让我们拆解一下究竟是什么决定了 Agent 在生产环境中的行为:

  • 提示词——系统提示词、少样本示例、输出格式指令。通常由 AI 或产品团队所有,在提示词注册表中进行版本化,并通过标签部署。
  • 工具契约——Agent 能看到的每个工具名称、参数模式(schema)以及描述字符串。通常由平台或后端团队所有,与后端服务一起部署。在 MCP 的世界里,其中一些工具甚至由你公司以外的团队完全拥有。
  • 记忆状态——检索到的摘要、学到的偏好、向量数据库内容、之前运行的草稿记录。由所有人也由无人所有。与另外两个维度不同,它是累积的,而非部署的。

这三个维度以三种不同的节奏,通过三个不同的流水线,由三个不同的负责人发布。提示词每天都在变化。工具模式随着服务部署每周变化。记忆在每一次对话中持续变化。

你的评估在发布前认可的行为是特定组合的属性:提示词 v41、周二的工具快照、当天下午的记忆状态。模型版本可以说是第四个维度——锁定 claude-sonnet-4-6-20250514 而不是使用别名也很重要,原因相同——但三元组是你的组织自身会发生变动的部分,因此也是协作失败的重灾区。

当告警响起,有人回滚“Agent”时,他们实际上回滚的是他们的团队所属的那个维度。这就是陷阱所在。

单维度回滚是如何失败的

隐蔽之处在于,每种不匹配的配对失败的方式都不同,且都没有明显的报错。

旧提示词,新工具。回滚后的提示词按其认知的名称和形式引用工具。如果工具被重命名,Agent 要么找不到它,要么——更糟的是——选择一个听起来最接近的替代方案并自信地调用。

而且重命名还是“简单”的情况,因为工具契约的断裂方式是模式对比(schema diffing)永远无法捕捉到的。工具的描述字符串也是契约的一部分:改变 search 的描述措辞,即使代码未变,你也改变了模型选择它的概率。还有逻辑漂移——模式在字节级别上完全一致,但上周进行模糊匹配的工具这周变成了精确匹配,而回滚后的提示词重试策略是针对旧行为调优的。REST API 会通过 400 错误大声报错。而工具契约则是无声地断裂,表现为给出一个略微错误的答案。

新提示词,旧工具。这是镜像问题,常见于平台团队回退了一个不稳定的服务,而提示词保持当前版本时。提示词的少样本示例展示了针对已不存在的参数的调用。Agent 模仿这些示例,报错,然后在重试中耗尽其循环预算——或者无声地退化为根据自身权重回答,而不是调用工具。

无论哪种提示词,配上错误时代的记忆。这是最微妙的一种。由提示词 v42 编写的记忆——其摘要格式、缩写、对字段含义的隐含假设——被检索到提示词 v41 的上下文。旧提示词从未建立过新记忆所依赖的约定,因此检索到的内容往好里说是噪音,往坏里说则是指令注入。没有任何报错。Agent 的表现只是超出了任何版本的评估范围。

现在想想谁来调试这个。提示词团队使用当前提示词配合当前工具进行复现:一切正常。平台团队回放工具调用:全部有效。记忆基础设施团队检查存储:没有损坏。每个团队的维度在隔离状态下都是健康的。失败仅存在于这种配对中,这意味着它不存在于任何人的测试环境中,也无法在任何人的笔记本电脑上复现。三个绿色的仪表盘,一个坏掉的 Agent。

记忆是无法回滚的那条腿

提示词(Prompt)和工具模式(Tool schemas)至少是可逆的 —— 它们是无状态的产物,指向旧版本确实能恢复原状。记忆则本质不同,数据库从业者几十年前就明白了个中缘由:状态只会向前移动。数据库的“回滚”实际上是向后一个恰好与过去相似的状态“向前滚动”(roll forward)。宣传支持回滚的迁移工具处理的是模式(Schema)的反转;而数据本身 —— 比如有损的类型更改、两列合并为一列 —— 如果没有备份,是无法“去迁移”的,只能进行补偿。

智能体(Agent)记忆是一个卫生习惯更差的数据库。在运行错误版本的窗口期内,它不仅是在响应中表现不佳 —— 它还在执行写入。错误的偏好摘要、被污染的向量条目、记录了错误提示词得出的结论的草稿记录。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates