跳到主要内容

提示词弃用合约:为什么措辞清理是一项破坏性更新

· 阅读需 11 分钟
Tian Pan
Software Engineer

系统提示词(system prompt)上一个四个词的修改——用 "respond using clean JSON"(使用干净的 JSON 响应)替换 "output strictly valid JSON"(输出严格有效的 JSON)——在评估(eval)中一度没有引起任何波动。它在周四发布,却在周五凌晨 4 点被回滚,因为结构化输出的错误率从 0.3% 飙升到了 11%。提示词并没有变糟。它只是变得“不同”了,而下游解析器在无人察觉的情况下,已经固化(pinned)在了 "strictly valid" 这个词组上。

这是大多数提示词工程(prompt-engineering)团队尚未建立工具来应对的失效模式:提示词被视为作者拥有的文本,而实际上它是与作者从未见过的消费者之间的一份合约。这些消费者中,有些是逐字引用原句的其他提示词;有些是 JSON 模式(JSON schema)字段锚定在特定形容词上的工具描述;有些是其评分标准(rubrics)要求裁判(judge)检查“严格有效格式”的评估(evals);还有一些是解析器——最脆弱的一类——其正则表达式是根据模型输出的精确前导语(preamble)进行校准的。

一次“小小的措辞清理”会悄无声息地破坏解析器、导致裁判校准偏移,并使数周的评估运行失效。这些失败都不会在 PR(拉取请求)中显示出来,而是在一周后作为“偏移”(drift)出现在仪表盘上。

提示词有消费者,且消费者已被固化

当你发布一个 REST 端点时,消费者是“大声”的。他们会编写集成测试,如果你更改了某个字段,他们会出现在你的错误日志中,如果你将 userID 重命名为 user_id,他们不出一小时就会提交一个 Jira 工单。而当你发布一个提示词时,消费者是沉默的——而且他们的数量比你想象的要多。

梳理一个典型的 AI 功能并数数看:

  • 其他引用你的提示词。 一个检索感知的系统提示词说“遵循规划器使用的格式”,这依赖于规划器格式的稳定性;一个聊天模式提示词逐字粘贴智能体的指令,这依赖于智能体措辞的稳定性。这些引用通常是不可见的——在集成时通过复制粘贴完成,而非链接。
  • 工具描述。 函数调用工具的自然语言描述(“当用户想要按助手被指示的措辞方式查找订单时调用此工具”)继承了系统提示词的假设。修改系统提示词的词汇,工具描述现在描述的就是模型不再产生的行为了。
  • 评估和裁判标准。 一个评分标准为“模型是否在严格有效的 JSON 信封中响应”的 LLM-as-judge 裁判,已经针对数千个过去的输出进行了校准。将系统提示词改为 "clean parseable JSON",模型输出的内容相同,但由于锚定在 "strictly valid" 这个词组上,裁判开始将其标记为模棱两可。校准偏移(Calibration drift)是基于裁判评估的已知失败,而提示词修改是其最可靠的诱因之一。
  • 解析器。 正则提取器、JSON 形状验证器和思维链提取器都依赖于稳定的前导语。将 "Sure, here's the response:" 替换为 "Here you go:",对作者来说是一个字符的差异,而对消费者来说则是解析失败。
  • 链式智能体。 当智能体 A 的输出是智能体 B 的输入时,第二个智能体的提示词已经过调整,以期望从第一个智能体那里获得特定的形状。对智能体 A 进行的“润色”变成了智能体 B 的回归(regression),且由于评估是按智能体进行的,没人能发现这一点。

每一个这样的消费者都是你在不经意间交付的一份合约。措辞就是 API。措辞就是下一个系统要解析、评分或引用的内容。

为什么“评估通过”不代表可以安全发布

大多数团队发布时的直觉——“如果评估套件全绿,那么提示词更改就是安全的”——是错误的,而且在事故发生之前很难察觉。

评估针对的是输出(output),而消费者固化的是措辞(wording)。这两者是不同的层面。

提示词更改可以使评估集上的输出分布保持基本不变(因此得分不变),但同时又改变了表面形式,足以导致下游解析器停止匹配。裁判看到的答案仍然正确;解析器看到的文本却无法再从中提取字段。评估报告显示绿色,而生产环境则报告来自消费服务的 4xx 错误峰值。

这与不破坏 API 行为(behavior)、仅破坏其接口(interface)的向后不兼容 API 更改的形式相同。REST 团队绝不会将 created_at 重命名为 creationTime 并称之为补丁发布(patch release)。而提示词团队每周都在发布类似的东西,并称之为“小小的清理”。

解决方法不是更大规模的评估,而是意识到提示词有两份合约:一份是评估可以衡量的行为合约,另一份是评估无法衡量的措辞合约。两者都需要进行版本管理。

提示词弃用合约长什么样

直接借用 API 管理规范:

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