Skip to content

不确定性的约束结构

概率性输出是约束条件

概率性输出是 LLM 的本质属性。第一章从数学层面说明了这一点:每一步生成都是条件概率分布上的采样,概率性写在机制里。

工程师面对概率性输出的本能反应是"怎么消除它"。这个方向错了。概率性输出是自回归生成机制的固有属性,工程上能做的是管理它。该问的是:不确定性消除不了,怎么在它之上建出可靠的系统。

所以架构的设计重心是容忍错误,而非追求每次调用都正确。LLM 的输出需要被解析、验证,验证不通过则重试或降级。流程返回的不只是结果,还要带上过程的元数据——尝试了几次、是否触发了降级——不确定性环境里,"结果怎么来的"和"结果是什么"一样重要。

两个核心约束参数

不确定性可以被形式化为两个参数:单次调用可靠性(即使是最好的 prompt + 最好的模型,单次调用也有失败概率)和输出一致性(同一输入的多次调用,输出的一致性程度)。这两个参数把问题说清楚了,好的架构就是在这些约束里找最优解。

两个基本规律:

串联衰减。 多步串联的系统,每一步都在拿自己的可靠性打折。步骤越多,折扣越狠。五步串联、每步 95% 可靠性,系统可靠性就只剩 77%。十步降到 60%。这是概率论对架构的硬约束,和 prompt 写得好不好无关。

冗余对冲。 同一个调用独立跑多次,只要有一次成功就算成功。单次可靠性越高,需要的冗余次数越少;单次可靠性越低,冗余的边际收益越大。

由此可得一个架构启示:与其死磕单次调用的完美,不如用冗余调用凑出同样的可靠性——往往更经济、更可预测。单次调用的完美是困难的,但冗余调用的数学是简单的。

不确定性预算

系统能容忍的不确定性是有限的。一个内部文档搜索工具的不确定性预算很高——偶尔返回不太相关的结果,用户可以接受。一个自动交易系统的不确定性预算接近于零。

预算分配的逻辑来自串联衰减:系统能容忍的总失败率是固定的,步骤越多,每步分到的失败率预算越少,对单步可靠性的要求越苛刻。

一个容易忽略的权衡:增加系统中 LLM 调用的步骤数本身就在消耗不确定性预算。一个 10 步的 Agent 流水线,即使每步可靠性 98%,系统级可靠性也只有 82%。应对办法在架构层面——减少步骤数,能合并的调用就合并。

防御性架构模式

不确定性既然是约束条件,就有对应的架构模式。

验证-重试。 LLM 的输出经过结构化验证(类型检查、schema 校验、业务规则校验),不通过则重试。前提是 LLM 的失败在统计上近似独立,重试有望得到不同的结果。用 Pydantic 做输出验证是最直接的实现:定义期望的输出结构,解析失败自动触发重试,重试次数设上限。

降级链。 系统按方案质量从高到低排列一组策略:先尝试 LLM 生成,失败则退到提取式方法,再失败则退到确定性的兜底方案(如直接截断)。最后一级策略必须永不失败。这个模式的本质是:接受质量上的可控退让,换取可用性上的确定性。

多数投票。 对同一输入进行多次 LLM 调用,取多数一致的结果。适用于输出是离散类别的场景(分类、判断、选择)。核心假设是正确输出是高概率事件,错误输出是低概率且分散的——多次采样取众数可以提高可靠性。这个假设在分类任务中通常成立,在生成任务中通常不成立(因为"正确"的生成不唯一)。

三种模式的成本结构不同。重试用延迟换可靠性——最坏情况下延迟是重试次数的倍数,但期望成本增加有限(大多数时候第一次就成功了)。多数投票用成本换可靠性——调用次数固定翻倍,但如果并行执行,延迟不增加。选择哪种模式取决于系统的核心约束是成本还是延迟。

简单架构的风险优势

架构选择还有一个容易被忽略的维度:方差。复杂架构的上限往往更高,但方差也大得多。一个单次 LLM 调用加 Pydantic 验证的方案,最差情况下可能只是降级处理;一个三步 Agent 加 RAG 加多模型集成的方案,最差情况可能是级联失败、长时间不可用。上限高但波动大,不一定比稳定的中等结果更好——同样的期望收益,波动越大,实际表现越不可预测。在大多数生产场景下,稳定的中等结果比高波动的高上限更有价值。

持续校准

不确定性管理还涉及时间维度:判断应该随着新证据持续更新。

更新的关键在于证据的信息量。一百个样本的盲测结果应该大幅改变你的判断;"上线后暂时没人投诉"对判断的影响应该很小。一条强负面证据可以推翻之前多条正面证据积累的信心——比如发现一类特殊格式的输入全部处理失败,足以推翻之前"十个样本中九个正确"给你的信心。

好的判断是逐步修正的。每条证据的分量取决于它的信息量。整个过程中判断始终在校准。

约束显式化之后

把不确定性的约束量化之后,工程设计反而更灵活了。

验证层和降级策略保障了系统的可靠性,prompt 够用就行。模型偶尔失误,架构会处理。架构的有效性不绑定特定模型——模型换了,架构照样成立。

对 LLM 工程而言,真正可控的变量是:系统架构、验证逻辑、降级策略、监控体系。可靠性来自包裹 LLM 的那层工程结构,工程努力应该集中在这里。