跳到主要内容

提示词所有权问题:当所有团队都将提示词视为配置时会发生什么

· 阅读需 10 分钟
Tian Pan
Software Engineer

对系统提示词(system prompt)的一个单词修改在生产环境中运行了 21 天,期间没有人发现它误分类了数千份抵押贷款文件。估算的损失:340,000 美元的操作效率低下和 SLA 违约成本。没有人能说出是谁做的改动,什么时候改的,或者为什么要改。提示词存放在一个环境变量中,有三个团队拥有写入权限,而且没有人认为自己有责任对其进行审核。

这就是提示词所有权(prompt ownership)问题。随着 LLM 驱动的功能在企业中激增,提示词已成为技术栈中影响最深远、但治理最薄弱的资产。它们控制模型行为、塑造用户体验、执行安全约束并定义业务逻辑——然而,大多数团队管理提示词的严谨程度甚至不如修改一次 CSS。

提示词并非配置

根本原因在于一种类别错误。团队将提示词归类为配置——环境变量、JSON 块、仪表板设置——而不是行为规范。这种区分至关重要。

配置控制的是参数:超时、特性标志(feature flags)、连接字符串。更改配置会改变软件在明确定义的边界内如何运行。而提示词控制的是系统做什么。对系统提示词的一处词汇修改可能会改变模型的人格(persona)、改变其拒绝边界、破坏下游的 JSON 解析,或者引入任何测试套件都无法捕捉到的全新故障模式。

然而,因为提示词看起来像字符串,它们就被当作字符串处理。它们最终进入了没有版本历史的环境变量、没有访问控制的管理面板,以及没有变更追踪的 Notion 文档中。组织的后果是显而易见的:没有人拥有它们,每个人都在编辑它们,而当出现故障时,取证线索早已中断。

上述抵押贷款事故并非个例。在多智能体部署中,一种常见的失败模式是智能体之间的提示词失调——验证智能体(verifier agent)拒绝了有用的输出,因为在没有人审核的“细微措辞优化”之后,它的评判标准偏离了规划智能体(planner agent)的预期。

三大治理失效

提示词所有权在三个维度上崩溃,每个维度都需要不同的解决方案。

1. 缺乏版本历史

代码有 Git。基础设施有 Terraform 状态。提示词则有……两周前的一个 Slack 对话记录,其中有人说“我微调了系统提示词,看起来现在效果更好了”。

没有版本控制,团队就失去了回答基本运营问题的能力:改了什么?什么时候改的?之前的行为是怎样的?我们可以回滚吗?LLM 输出的非确定性使这种情况比听起来更糟。当代码崩溃时,你会得到堆栈跟踪(stack traces)。当提示词质量下降时,你会得到细微恶化的输出,这些输出在被人发现质量偏差之前,已经在数天内产生了复合影响。

实际影响是:工程师在调试生产问题时,要花数小时重建变更过程。他们手动比较输出,猜测特定事故发生时运行的是哪个版本,最后往往因为没有人能自信地确定上一个已知的正常版本而不得不从头重写提示词。

2. 缺乏明确的所有者

提示词涉及的利益相关者比传统代码更多。工程师编写初始版本,产品经理优化语气,领域专家添加约束,合规团队要求设置护栏,法律团队标记特定措辞。每个人都有正当的理由进行编辑,但没有人认为自己是所有者。

这创造了所谓的“配置公地”——一个每个人都在使用但没有人维护的共享资源。预料之中的结果是,变更在缺乏协调的情况下不断堆积。一个团队收紧了系统提示词以减少幻觉。另一个团队为了提高另一个功能的创意性而放宽了它。第三个团队添加了安全指令,却与第一个团队的变更相冲突。孤立来看,每一次修改都有道理。合在一起,它们创造出的提示词对任何目标都没有很好的服务。

这种组织性失败并不是因为人们粗心大意,而是因为责任模型未定义。代码有 CODEOWNERS 文件。基础设施有具有明确团队所有权的 Terraform 模块。而在大多数组织中,提示词没有任何等效的机制。

3. 缺乏审核门禁

在成熟的工程组织中,代码变更在进入生产环境之前要经过拉取请求(pull requests)、自动化测试和同行评审。而在大多数组织中,提示词变更直接从某个人的本地编辑器发往生产环境。

这并非夸张。对 AI 工程团队的调查一致发现,大多数组织缺乏提示词修改的正式审核流程。团队对待代码部署和提示词部署的方式之间存在着惊人的差距——尤其是考虑到提示词变更的影响力往往比代码变更更大。

审核门禁的缺失意味着变更在未经利益相关者验证、未经回归测试的情况下就发布了,并且没有任何机制来捕捉跨团队的依赖性故障——当一个共享的系统提示词同时服务于多个功能时,这种故障是不可避免的。

跨团队依赖:无声的杀手

最危险的故障模式是团队之间不可见的依赖关系,这些团队共享 Prompt 或相互依赖彼此的 Prompt 输出。

考虑一个典型的场景:团队 A 负责面向客户的聊天机器人。团队 B 负责路由客户请求的分类流水线。两者都共享一个定义公司 AI 人设(Persona)的基础系统 Prompt。团队 C 作为 “AI 平台” 的一部分维护这个共享 Prompt。

当团队 C 为了实现一个合理的优化目标而将人设 Prompt 更新为 “更简洁” 时,他们无意中改变了团队 B 所依赖的分类输出。团队 B 的路由准确率从 94% 下降到 87%。团队 A 的聊天机器人开始给出较短的回答,导致用户评分下降。团队 B 和团队 A 都没有做任何更改。他们的评估(Evals)依然通过,因为这些评估是孤立地测试各自的 Prompt,而不是针对整个组合系统。

这在 Prompt 领域相当于一次破坏性的 API 变更,不同之处在于,这里没有 API 契约,没有语义化版本(Semantic Versioning),没有弃用通知,也没有能捕获这种错误的集成测试。

这个问题会随着组织规模的扩大而加剧。每个增加 Prompt 的团队都会产生潜在的依赖关系。每一个未被明确追踪的依赖,都会成为一种无法预防、只能在事后发现的故障模式。

轻量级治理模型

解决 Prompt 所有权问题并不需要构建复杂的平台。它需要应用工程团队已经理解的模式,并针对 Prompt 管理的特定挑战进行调整。

Prompt 契约

像定义 API 契约一样,为共享 Prompt 定义明确的接口。一份 Prompt 契约应规定:

  • 输出 Schema:Prompt 预期生成的输出格式
  • 行为不变性:下游消费者所依赖的行为准则
  • 利益相关者:必须批准变更的人员
  • 评估套件:部署前必须通过的测试集

当团队 C 想要更新共享的人设 Prompt 时,契约会明确告知他们哪些团队会受到影响,以及哪些测试必须通过。这让突发的生产事故转变为一次有计划、有协调的变更。

变更评审

以对待代码变更的严谨态度来对待 Prompt 变更。这意味着:

  • Prompt 存储在版本控制系统中,而不是仪表板或环境变量中
  • 变更通过 Pull Request(PR)进行,并指定评审人
  • 每次变更都包含 为什么 变更的描述,而不只是变更了什么
  • 在合并之前,针对修改后的 Prompt 运行自动化评估

核心见解在于,Prompt 评审所需的专业知识与代码评审不同。资深工程师可能不是评审 Prompt 变更的最佳人选——理解预期行为的领域专家或产品经理往往能发现工程师忽略的问题。类似于 CODEOWNERS 的权限指派应该反映这一现实。

预发环境

Prompt 需要与代码相同的发布流水线:开发、预发(Staging)、生产。在预发环境中未能通过评估的 Prompt 版本不能进入生产环境。

这也是许多团队跌倒的地方。他们为应用程序代码构建了预发环境,但在预发代码中运行生产环境的 Prompt,反之亦然。Prompt 版本必须与部署绑定(Pin),就像绑定依赖版本一样。当你部署到预发环境时,应带有特定的 Prompt 版本;当你推向生产时,这些完全相同的 Prompt 版本也随之迁移。

将回滚作为一等公民操作

即时回滚是不容商榷的。当 Prompt 变更导致行为退化时,恢复时间应以秒计,而非以小时计。这意味着:

  • 每个部署的 Prompt 版本都以不可变的方式存储
  • 回滚只需更改指针,而不是重建之前的版本
  • 回滚会触发相同的评估套件,以确认恢复的版本行为仍符合预期
  • 配置监控警报,以检测 Prompt 回归(Regression)引起的质量下降模式

“Prompt 即代码” 的真实含义

业界正在趋向于一个原则:将 Prompt 视为受管理的软件构件,而不是配置字符串。这并不意味着 Prompt 必须硬编码在源文件中,而是意味着它们必须拥有与代码相同的生命周期保证。

版本历史。清晰的所有权。强制评审。自动化测试。阶段性部署。即时回滚。审计追踪。

能够做到这一点的组织将获得复利优势。他们迭代更快,因为可以自信地更改 Prompt。他们调试更快,因为可以将任何输出追溯到生成它的精确 Prompt 版本。他们协作更好,因为跨团队依赖是明确且经过测试的。

而做不到这一点的组织将继续以惨痛的方式发现他们的 Prompt 所有权问题:通过没人能解释的生产事故,通过没人记得做过的变更,通过没人负责的 Prompt。

那个 34 万美元的抵押贷款事件并非个案。在一个单字即可改变一切的系统中,将行为规范视为简单配置,这是必然的结果。解决方案不是一个新的工具,而是决定对这个最重要的构件应用工程纪律。

References:Let's stay in touch and Follow me for more thoughts and updates