系统提示词为他人调优的备选模型
你的可靠性仪表盘显示为 99.95% 。但你的支持收件箱却在诉说另一番景象。每周有那么两次,每次持续 10 到 20 分钟,极少数用户会遇到一个说话风格完全像另一家公司的产品版本。拒绝响应读起来很奇怪。一个原本总是渲染为整洁双栏卡片的结构化字段,现在变成了一个塞满了项目符号的段落。语气从“冷静的专家”变成了“热情的助手”。没有人会为此提交工单——他们只会直接关闭标签页,稍后再试。
你的供应商宕机了。故障转移生效了。延迟保持在 SLO 之下。错误预算没有变动。然而,用户在那个窗口期获得的体验,并不是你真正发布的那款产品。
大多数团队在采用多供应商架构时所持的心智模型是:系统提示词(System Prompt)是可移植的——它是一份与“能力出众的模型”这一抽象概念达成的协议,任何理解 LLM 方言的模型都能读懂。这种模型是错误的。系统提示词是一个经过调优的产物(Artifact)。它是针对特定模型的偏好、拒绝语法、格式习惯和指令遵循偏差进行调优的。当故障转移发生时,你并不是将同样的合同交给一个对等的签约方,而是将一份用主模型(Primary Model)的习语编写的合同,交给了一个阅读习惯完全不同却依然强行签字的模型。
提示词是调优后的产物,而非规范
回顾一下过去六个月对生产环境系统提示词的修改。几乎每一行都可以追溯到特定模型发生的特定事件。围绕工具清单的 XML 包装之所以存在,是因为 Claude 在有此类标签时能更干净地解析结构化输入—— <tools> 代码块的存在是因为 Anthropic 在 XML 分隔的示例上进行了训练,模型已经将这种包装内化为一种结构性提示。那句“如果用户询问价格,请委婉拒绝并引导他们访问销售页面”之所以这样表述,是因为之前的表述方式泄露了律师不希望泄露的答案。关于输出格式的那两个段落之所以在那儿,是因为模型偶尔会在代码块的代码块里返回 JSON ,而目前提示词中的表述是唯一能稳定阻止这种情况发生的。
这些修改没有一个是随意的。每一行都是一个微小的合同条款,通过解决特定模型上的特定失败模式来赚回它所占用的 Token 。最终形成的提示词之所以在主模型上表现出色,是因为它是针对主模型的行为,逐行雕琢出来的。
这是大家在接受“多模型网关”这种说法时,从未考虑过的代价。抽象层实现了调用的可移植性,但它并没有让提示词也具备可移植性。提示词是那个耗费了六个月进行调优的部分,而且一旦备选模型不再是主模型的忠实克隆,你就必须从头开始重新调优。
