跳转到主要内容

无法回滚的功能开关:提示词

阅读需 1 分钟Tian PanTian Pan

你对生产系统的每一次更改都遵循某种纪律。代码在 feature flag 后发布,灰度测试(canary)到 1% 的流量,当仪表盘变红时可以一键回滚。Schema 迁移是分阶段且可逆的。即使是 CSS 的微调也要经过人工阅读的 pull request。然而 Prompt 却并非如此。有人在文本框中编辑一段文字,点击保存,你产品的行为就会立即对所有用户发生改变——没有灰度测试,没有经过审查的 diff,也没有真正能让你回到先前状态的回滚按钮。

令人不安的是,这并非粗心的团队所导致的疏忽,而是工具链产生的默认结果。Prompt 被归类为“配置(configuration)”,因为它们是存在于编译后的二进制文件之外的字符串,而配置一直以来被认为是可以快速更改且无需完整发布周期的东西。但 Prompt 并不是配置。它是一个用英语编写的程序,由一个你无法控制的非确定性解释器编译,其行为你只能通过统计学来观察。将它视为配置值,是导致一整类生产事故的范畴错误(category error)。

最明显的公开案例是 2025 年 4 月的 ChatGPT 谄媚(sycophancy)事件。OpenAI 发布了 GPT-4o 更新——这一变更包含了旨在倾向于短期用户反馈的 system prompt 调优——随后模型开始对用户进行虚伪的吹捧。这一变更同时推送给了超过 1.8 亿用户。耗时大约三天时间才被察觉、决策并回滚。这是一个拥有世界级基础设施的团队,而该变更依然逃脱了即使是极小的代码变更也会默认遵循的纪律。教训不在于“OpenAI 太粗心”,而在于 Prompt 和模型的变更在结构上豁免于发布的严谨性,除非你特意去堵上这个豁免。

为什么 Prompt 能逃脱所有其他事物都遵循的纪律

这种逃脱的发生有一个合情合理的理由:Prompt 需要一个独立于应用程序部署的生命周期。将 Prompt 提取到配置文件或 Prompt 管理服务中的核心目的,就是让你无需重新构建和重新部署应用即可更改产品行为。这种解耦确实非常有用。修复边缘场景的 Prompt 微调不应该需要一个完整的 CI/CD 周期。

但这种解耦在消除部署延迟的同时,也将发布原语一并抛弃了。当你为了更快地迭代而将 Prompt 移出代码库时,通常也会将其移出版本控制、代码审查、分阶段发布和回滚按钮的管辖范围。你保留了速度,却丢掉了安全性,而且并没有人决定做这笔交易——它仅仅是因为字符串刚好存放的位置而产生的副作用。

结果是你得到了两个类别中最糟糕的部分。Prompt 的表现像代码:一个小小的改动就可能改变所有交互的输出质量,破坏预期特定格式的下游解析器,或者引入安全性倒退。但它却像配置一样被管理:就地编辑,通常直接在生产环境中操作,周围漂浮着多个未记录的版本,且没有清晰的记录说明哪一个版本正在承载流量。故障模式是代码级的,控制手段却是配置级的。

非确定性编译器问题

这就是为什么 Prompt 比普通代码更糟糕,而不仅仅是等同。当你更改一行 Python 代码时,编译器是确定性的。相同的源码产生相同的字节码,代码审查可以从 diff 推断出行为。你读到 if x > 5 变成了 if x >= 5,你确切地知道发生了什么变化。

Prompt 的 diff 则完全不同。将“简洁(be concise)”改为“简短且直接(be brief and direct)”,你无法推断出行为上的增量。模型就是编译器,它是非确定性的,从措辞到行为的映射是经验性的——你必须运行它才能发现结果。这就是为什么只有文本 diff 的 Prompt pull request 对于审查来说几乎毫无用处。审查者被要求在查看措辞变化的同时批准行为变化,却没有任何原则性的方法将两者联系起来。

解决了这个问题的团队会将评估(evaluation)结果附加到 diff 上。Pull request 不仅携带更改后的文本,还携带评估分数——在黄金数据集(golden set)上的通过率、LLM-as-judge 的质量增量、针对已知困难案例的回归测试。审查者根据衡量的行为来批准或阻止,而不是看新的措辞读起来是否顺口。这是唯一有意义的 Prompt 审查形式,因为它是唯一能弥合页面上的变化与生产环境中变化之间差距的方法。

会员专享

余下内容仅对会员开放。

会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。

  • 完整文章,包含未公开存档的部分
  • 可落地的工作框架,附带权衡与决策依据
  • 新文章抢先看,先于公开发布

随时取消 · 一次订阅,畅读全部

参考资料

保持联系,关注我获取更多内容

阅读需 11 分钟

AI 功能依赖图:当提示词修改成为静默破坏性变更时

提示词修改对每一个消耗其输出的下游功能来说都是一项破坏性变更。清单、实时语料库契约测试和漂移警报,是团队在下一次故障替他们画出 AI 依赖图之前,主动绘制该图谱的方法。

insider
ai-engineering
阅读需 11 分钟

那些被你的提示词工程师转变为生产环境 Few-Shot 示例的评估集

当提示词工程师将精心挑选的评估示例重新用作 Few-shot 演示时,一种团队级的数据泄漏正潜伏在指标不断攀升的评估仪表盘背后。本文将探讨为什么这种污染是隐形的,真正的独立性究竟需要什么,以及谁必须被赋予说“不”的权力。

insider
ai-engineering
阅读需 10 分钟

一次导致所有运行中 Agent 任务失效的 Prompt 热重载故障

在晚上 11:46 进行了一次正常的 Prompt 推送,一分钟后却出现了由于幻觉导致的退款 —— 深度解析为什么在 Agent 运行期间,Prompt 注册表需要将会话视为契约而非缓存。

insider
ai-agents
阅读需 9 分钟

故障复盘:根本原因竟是一个无人负责的提示词

一次生产事故追溯到了几周前修改的一个系统提示词(Prompt),由于当时没有 PR、没有审核人、也没有负责人。本文探讨了为什么提示词总是能绕过变更管理,以及如何在不降低迭代速度的前提下,将它们重新纳入审核流程。

insider
prompt-engineering
阅读需 9 分钟

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

对系统提示词进行四个字的修改,就可能破坏那些固定了旧措辞的解析器、裁判和链式代理。提示词是拥有沉默消费者的 API —— 保持其稳定性的纪律与 REST 端点弃用的流程非常相似。

insider
prompt-engineering