多模型一致性:当你的流水线中的连续 LLM 调用相互矛盾时
你的摘要步骤判断出客户投诉是关于账单的。你的提取步骤提取出了“订阅层级:Pro”。你的生成步骤写了一封跟进邮件,提到了他们的“Enterprise 方案”。三次 LLM 调用,一个流水线,一个完全错误的输出 —— 而且整个过程中没有触发任何错误。
这就是多模型一致性失效:复合 AI 系统的无声杀手。它看起来不像是一个异常。它不会触发你的错误率 SLO。它只是自信地向用户发布错误的内容。
你的摘要步骤判断出客户投诉是关于账单的。你的提取步骤提取出了“订阅层级:Pro”。你的生成步骤写了一封跟进邮件,提到了他们的“Enterprise 方案”。三次 LLM 调用,一个流水线,一个完全错误的输出 —— 而且整个过程中没有触发任何错误。
这就是多模型一致性失效:复合 AI 系统的无声杀手。它看起来不像是一个异常。它不会触发你的错误率 SLO。它只是自信地向用户发布错误的内容。
大多数 LLM 工程经验 —— 缓存提示词、调整温度、控制 token 预算 —— 都假设输入是文本、输出也是文本。一旦加入图像、PDF 或音频,这些经验几乎全部失效。预处理方式不同,故障模式不同,成本模型也不同。而你为文本流水线构建的评估套件,根本发现不了新出现的问题。
企业知识中约有 50% 存储在非文本格式中:PDF、幻灯片、扫描表单、产品图像。当团队尝试处理这些数据时,他们会发现,引入多模态不仅仅是增加一种模态 —— 而是增加了一个全新的工程复杂度层面。
告警在凌晨 2:47 响起。面向客户的聊天助手正为一半的付费用户返回 429 错误。工程师们在仪表板中忙乱寻找,试图找到那天下午发布的 Bug。他们一无所获 —— 代码没问题。真正的罪魁祸首是另一个团队在当晚启动的批量摘要任务,它共享了同一个供应商 API 密钥,耗尽了该账户接下来四小时的每分钟 Token 预算。没有人拥有这个共享密钥,也没有人负责这个限制。
这就是“喧闹邻居”(noisy-neighbor)问题。与经典的 API 配额事故不同,它在 LLM 系统中表现出一种独特的残酷性。一个达到速率上限的 REST 端点会迅速失败并进行重试;而 LLM 的“每分钟 Token”(TPM)桶是根据请求内容非对称消耗的。因此,一个生成 8K Token 的功能可能会使一个进行低成本 200 Token 分类调用的功能陷入饥饿,而这一切在请求计数图表中甚至都不会显现。流量在你所测量的维度上并不“喧闹”。
大多数团队发现这一点的方式正如上文提到的团队:一个无关团队的任务与付费用户的会话发生冲突,而两者唯一的共同点只是环境变量中的一个字符串。
你的组织有一份隐私政策。它用合理的措辞描述了用户数据的谨慎处理、保留限制以及对 GDPR 和 HIPAA 的合规。但它几乎肯定没有说明:在任何策略控制生效之前,用户的姓名、电子邮件地址或病史是否以明文形式传输给了托管的 LLM API。
这个缺口——你能指出的隐私政策与你实际能证明的隐私保证之间的距离——正是大多数生产 LLM 系统悄然失守的地方。研究显示,提交给 ChatGPT 和 Copilot 等工具的提示词中,约有 8.5% 包含敏感信息,包括 PII、凭据和内部文件引用。在企业环境中,用户将邮件、客户数据和支持工单粘贴到 AI 辅助工作流程中,这一比例几乎肯定更高。
问题不在于开发者粗心大意。而在于 LLM 提示层从未被设计为数据处理边界。它从上游系统——用户输入、RAG 检索、智能体上下文——继承内容,却不执行治理整个技术栈其他部分的数据分类规则。
有一家公司每位用户每月收费 50 英镑。其 AI 功能消耗了 30 英镑的 API 费用。这意味着在支付任何一笔退款或处理任何一个流失席位之前,剩下的 20 英镑还要覆盖主机、支持和利润。他们打造了用户喜爱的产品,发展到数千名订阅者,却在不知不觉中构建了一个客户越多、亏损越多的商业模式。
这并非关于坏主意的警示故事,而是关于定价架构的警示故事——这套架构从一个下一个用户边际成本几乎为零的世界照搬而来。当你的产品需要调用语言模型时,那个世界已不再完全适用。
传统 SaaS 毛利率为 70–90%。以 AI 为核心的公司报告的数字是 50–60%——差距主要由一行成本解释:推理。当 Token 占据销售成本的 20–40% 时,标准 SaaS 打法就会失效。
上个季度,一家中型AI初创公司的系统提示词中落地了一个单行变更。这个差异看起来无害:一位工程师收紧了关于响应长度的指令。审查者在两分钟内批准了它,就像批准一个变量重命名一样。48小时内,支持工单激增。模型开始在复杂查询的句子中间截断答案,而旧措辞几个月来默默处理的边界情况现在都失败了。原来的指令不仅控制着长度——它隐式地锚定了模型关于何时一个主题已经完成的判断。没有人捕捉到这一点,没有人去寻找它。
这就是当今提示词审查的核心问题:我们正在将代码审查的直觉应用于一个这些直觉大多数是错误的媒介。代码审查之所以有效,是因为被审查的工件是确定性的,语义可以从语法中恢复。提示词两者都不是。它的含义分布在模型的权重、训练数据以及推理时运行的随机采样中。你在屏幕上看到的差异只是你正在批准的变更的一小部分。
当你的 LLM 功能上线后,监控面板可能会追踪准确率、延迟和错误率。但几乎可以肯定,它不会追踪方差——即同一个提示每次输出差异有多大。这个盲区,正是生产环境 AI 功能悄然崩溃的地方。
方差决定了你的产品是让用户感觉可信赖还是喜怒无常。一个在评估套件中得分 88% 的功能,如果 40% 的时候返回两句话、60% 的时候输出十个段落,其对用户信任的侵蚀速度,会比一个得分 80% 但表现一致的功能快得多。只优化准确率的团队,解决的是可靠性问题的错误一半。
提示熵预算正是填补这一空白的概念:一种结构化的方法,用于衡量、预算和控制模型在相同输入下的输出分布——就像你在 SLO 框架中对待 p99 延迟或错误预算一样。
大多数团队在采用推理模型时都会做同一件事:把现有的系统提示词复制过去,指向 o1 或带扩展思考的 Claude Sonnet,然后期待模型升级完成剩余工作。基准测试分数上去了,生产准确率却原地踏步——甚至下滑。问题不在模型,而在于提示词的思维模型从未改变。
推理模型的工作方式与指令跟随模型截然不同。那些能从 GPT-4o 榨取性能的策略——精心设计的系统提示词、精选的 few-shot 示例、明确的"逐步思考"指令——都是为另一种推理架构设计的。把这些策略用在推理模型上,恰恰会限制那些让这类模型具有价值的核心能力。
本文是一份实用指南,聚焦于真正重要的差异以及切实有效的调整方法。
你会通过一张截图发现它。
客户会把它发出来,记者会引用它,或者团队里的某个人会在晚上 11 点在 Slack 上给你发个链接。你的 AI 系统言之凿凿地给出了错误的答案 —— 错到滑稽,或者错到可能伤及他人 —— 而且现在已经公开了。
大多数工程团队花费数月时间强化他们的 AI 流水线以防这一时刻的到来,却发现他们从未计划过一旦这一时刻到来该怎么办。他们知道如何迭代评估(evals)和调整提示词(prompts)。他们不知道该由谁来发布回复推文,该回复应该说些什么,或者如何区分是一次性的倒霉样本,还是已经在生产环境中运行了数周的潜在故障模式。
这就是针对那一刻的应对指南。
大多数团队在保护 RAG 应用时,把精力放错了地方。他们验证用户输入、清洗查询语句、实施访问频率限制、添加输出过滤器。这些措施固然必要——但没有一项能阻止 RAG 系统中最关键的那类攻击。
大多数团队在调优 RAG 系统时关注两个杠杆:分块策略和嵌入模型选择。当检索质量下降时,他们重新分块;当召回率数据不好看时,他们升级嵌入模型。这两步都合理——但它们在优化流水线的中间环节,却让最高杠杆点一直没有触及。
用户的查询几乎从来不是向量检索的理想形式。它简短、口语化、模糊,或者假设了索引中并不存在的上下文。无论你的嵌入有多好,如果你用一个表述糟糕的查询来搜索,检索结果就会很差。解决方法不在下游——而是在查询命中向量索引之前对其进行变换。
向生产环境中的 RAG 系统提一个你的语料库无法回答的问题,看看会发生什么。它很少会说“我没有那方面的信息”。相反,它会检索出五个排名最高的片段——由于没有更好的匹配项,这五个片段其实是五个最不糟糕的无关内容——然后将它们交给模型,并配上类似“请使用以下上下文回答用户的问题”的提示词。模型在被训练为要乐于助人的同时,手中握着与主题有几分相似的文本,于是产生了一个自信的回答。这个答案的错误在架构上是不可见的:检索成功了,生成也成功了,每个片段都在检索到的文档中有据可查,但用户却被误导了。
这就是检索空洞问题。它不是任何单一层级的 bug。它是一个流水线的涌现行为,该流水线将 “top-k” 视为一种契约,却从不询问 top-k 的质量如何。ICLR 2025 上发表的一项关于“充分上下文”(sufficient context)的研究量化了这一影响:当 Gemma 获得充分的上下文时,其在事实性问答上的幻觉率约为 10%。当它收到的上下文不足时——即检索到的文档实际上并不包含答案——该比率会飙升至 66%。向描述不足的查询中添加检索到的文档会让模型错得更自信,而不是更少。