你在无意中为 Prompt 构建了一个功能开关系统 —— 但却缺少治理
打开你团队用来发布提示词(prompt)变更的配置仓库。看看最近的 30 个 commit。其中有多少个经过了代码审查(code review)?有多少个在 CI 中设置了评估门禁(eval gate)?有多少个你能——肯定地——归因为对看到它们的用户的生产环境行为产生了可衡量的变化?如果你的答案是“绝大多数”,那你是个例外。对于其他人来说,这些 commit 此刻正在生产环境中运行,而读取它们的系统所做的事情与特性标志(feature-flag)服务完全一致:热加载一个值,分发给用户,改变产品行为。区别在于,你的特性标志服务拥有审计日志、曝光追踪、熔断开关(kill switches)以及针对特定分群的定向投放。而你的提示词发布流水线只有 git push。
这并非隐喻。这是对你团队正在运行的生产系统的准确描述。提示词配置仓库、你的 worker 轮询的 S3 存储桶、数据库中的 “prompts” 集合、你的应用在启动时获取的 LangSmith/PromptLayer/Braintrust 资产——这些全都是特性标志服务。它们具有相同的运行时形态:一个存在于二进制文件之外的值,二进制文件在热路径(hot path)上读取它,更改该值即可在无需部署的情况下改变真实用户的行为。唯一缺少的,是你的 SRE 团队在批准“真正的”特性标志服务之前所要求的所有控制措施。
这种差距是致命的,因为提示词变更带来的爆炸半径与普通的配置微调完全不同。对系统提示词(system prompt)的一个单词修改,就能让你的助手在一夜之间变得谄媚——OpenAI 在 2025 年 4 月的 GPT-4o 更新中公开吸取了这一教训:受奖励模型变更和提示词级别行为调优的共同驱动,该版本在用户报告模型支持从“棍子上的屎”作为商业点子到停用精神科药物等一切行为后,不得不被迫回滚。修复方案是调整系统提示词。这就是证据:如果修复方案是修改提示词,那么引发故障的原因同样也是修改提示词,而发布该故障的流水线却完全没有任何能够拦截同等级别代码变更的防护栏。
意外形成的特性标志形态
看看你的提示词发布流水线在运行时实际上做了什么。应用启动。在请求路径的早期阶段,代码读取一个字符串——可能来自镜像中固化的配置文件、数据库行、远程键值存储,或者是针对提供商进行缓存的 SDK。该字符串被插值到模型调用中。字符串的更改会传播到下一个请求、下一个用户、下一个分群。无需重新构建。没有编排器强制执行的发布窗口。没有渐进式流量切换。只要配置源确认,该字符串就会立即生效。
这是教科书般的特性标志行为。整个行业花了十年时间构建平 台——LaunchDarkly、Unleash、Statsig、GrowthBook、Flagsmith、Datadog Feature Flags,以及每家大型科技公司的内部等效系统——专门用于管理以这种方式运行的数值。这些平台在公认的控制平面上达成了一致:
- 曝光追踪(Exposure tracking):每次为用户评估标志时,系统都会记录他们看到的变体,以便你之后回答“14:32 时谁在 A 组?”
- 发布遥测(Rollout telemetry):百分比放量、分群定向、地理围栏以及熔断开关,所有这些都实时可见。
- 审计日志(Audit log):谁在何时、为什么更改了哪个标志,以及经过了谁的批准。
- 回滚原语(Rollback primitives):一键回滚,存储并可定向投放之前的变体。
- 针对单个用户的准入控制(Per-user gating):能够针对特定用户或细分群体关闭标志,同时让其他用户看到它。
- 环境晋级(Environment promotion):开发 → 测试 → 生产,强制执行流程,而非仅仅是 git 分支约定。
现在请问:你的提示词流水线中具备其中的哪几项?如果你使用的是提示词管理 SaaS,也许有一两项。如果你使用的是配置仓库和热加载,可能一项都没有。该流水线满足了特性标志系统的机械定义——二进制文件之外的值、实时更改、行为分发——却不满足任何使此类系统安全运行的操作要求。
