跳到主要内容

规范翻译税:当规范、提示词和评估发生漂移时

· 阅读需 12 分钟
Tian Pan
Software Engineer

一名 PM 用英文写了一份功能规范 (feature spec)。一名工程师将其翻译成带有惯用 LLM 模式的系统提示词 (system prompt) —— 思维链 (CoT) 脚手架、输出格式强制,以及一些涵盖规范中从未提到的失败模式的避险条款。一位评估 (eval) 作者打开同一份规范,冷读一遍,并根据自己的理解编写 JSON 测试用例。三周后,这三个产物各不相同,没人能说清楚一个回归到底是提示词的 bug、规范与实现的差异,还是从第一天就写错的评估。

这就是规范翻译税 (specification translation tax)。传统软件也有这种问题 —— PRD 与代码之间、代码与测试之间的差距 —— 但编译器和类型系统缩小了这种差距。AI 功能没有这种兜底保障。提示词是系统实际阅读的文档。评估是没人签署的合同。规范是没人执行的意图描述。每一项都是将同一意图翻译成不同的媒介,如果没有双向的一致性,行为就会通过那个最容易编辑的产物泄露进来。

三个产物,三个编辑者,没有权威源

结构性问题在于所有权。提示词处于产品意图、法律解释和技术执行的交汇点 —— 现有的角色中没有一个能自然地拥有它们。PM 拥有规范,因为是他们写的。工程师拥有提示词,因为是他们发布的。评估作者 —— 有时是第三个人,有时是戴着不同帽子的同一个工程师 —— 拥有测试套件,因为是他们构建了框架。他们中没有人真正拥有这三者之间的 共识 (agreement)

在健康的传统系统中,规范描述意图,代码实现意图,测试验证实现。流程是单向的:规范 → 代码 → 测试。当测试失败时,你会先看代码,因为规范很少是开始调试行为的有意义的起点。审阅者通过阅读与关联工单的差异 (diff) 来发现 PR 中的规范/代码偏离。

在 LLM 功能中,关系是三角形且循环的。提示词编码了规范未指定的行为(因为避险条款在提示词工程中浮现)。评估验证了提示词并未真正承诺的行为(因为评估作者将他们对规范的理解投射到了测试用例上)。规范描述了提示词和评估都未反映的意图(因为在提示词和评估演进时,规范从未更新)。这三者都是动态文档。没有一个是权威的。当它们不一致时,没有编译器报错 —— 只有未来没人能归因的回归。

我最近交流过的一个团队描述了正是这种失败:在一次提示词编辑后,一个评估开始失败,事后分析花了三天时间,因为团队必须从头开始重新推导 预期 行为是什么 —— 规范是 18 个月前的,提示词已经吸收了打了几十个零散的补丁。修复方案不是代码更改,而是一次会议。

偏离是如何积累的

提示词比规范偏离得更快,因为它们的编辑成本更低。工程师注意到模型在下游解析器预期纯文本时返回了 markdown —— 他们在系统提示词中加入了“仅以纯文本响应”。更改发布了。规范没有提到输出格式,因为最初的 PM 没考虑到。评估没有发现这一变化,因为测试用例是在模型仍返回 markdown 时构建的,且评估在比较前对格式进行了归一化。六个月后,一名新工程师看到“仅以纯文本响应”这一行,认为它是多余的指令并将其删除。下游解析器在生产环境中崩溃。这是谁的错?

评估的偏离方向相反 —— 它们更难编辑,因此往往编码了对正确性的 理解。当行为发生变化(有意的)时,评估被更新以匹配新行为,但断言通常是被放宽而不是重写 —— “回复应提到用户名”变成了“回复应与用户相关”,因为评估作者找到了让失败测试通过的快速方法。合同被无声地削弱了。规范、提示词和评估现在描述的是三种不同的东西,而评估描述的是最宽松的那种。

规范偏离最慢,因为上线后没人读。规范是在行为存在之前编写的产物。一旦功能发布,在大多数团队的工作模式中,规范的任务就完成了。PM 转向下一个功能。工程师再也不会打开它。评估作者在构建测试用例时参考过一次,之后再也没看过。规范钙化成了遗留文档,关于功能 应该 做什么的权威理解迁移成了团队内部的零散知识 —— 通常存在于发布该功能的工程师脑中,而他通常会在 18 个月内离开团队。

规范鸿沟 (The Gulf of Specification) —— 即我们希望 LLM 做什么与我们的提示词实际指示它做什么之间的差距 —— 存在于这条链条的每一步,每一次翻译都在扩大它。未详细说明的提示词迫使模型猜测意图,这导致输出不一致,进而导致评估试图编码模型碰巧做的任何事情,这便成了新的事实规范。系统会向最容易查询的产物优化,而那几乎永远不会是 PM 写的文档。

以规范作为唯一事实来源的真正要求

规范驱动开发(Spec-driven development)作为一种趋势,其诊断是正确的:规范必须是唯一事实来源,而不是代码。但仅仅移动事实来源并没有帮助,除非其他产物是从这个权威来源“生成”或“对照检查”的。如果规范存在于一份单独的文档中,以不同的频率进行编辑,且与 Prompt 和 Eval 之间没有强制的一致性,那么它只是另一种会产生漂移的翻译。

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