直接结论

推理强度是一项版本化推理控制,不是跨供应商统一标准,也不是观察模型私有算法的窗口。有的 API 暴露离散 Effort,有的使用 Adaptive Thinking,有的接受软 Token 预算,还有的模型不允许关闭思考。参数名、默认值、计费、输出可见性、工具行为和可选范围都可能随模型快照变化。

生产团队应把推理强度当作实验变量。冻结任务与答案契约,比较实际支持的设置,为最终答案预留空间,校验外部结果;只有路由器超过“始终低强度”和“始终高强度”两个简单基线后,才值得上线。

“思考模式”背后的四份契约

1. 控制契约

请求可能提供 low、high 等档位、Adaptive 模式,或类似 Token 的预算。控制项可能只是软指导,不是硬算力上限;不支持的值也可能直接让请求失败。

2. 计费契约

推理工作即使不可见,也可能计入生成 Token 上限、上下文窗口和账单。请求可能在完整答案出现前耗尽输出预算,因此成本分析必须包含全部生成工作、不完整响应、重试和最终合格结果。

3. 可见性契约

API 可能不返回推理,或只返回摘要、省略/加密块、模型生成的思维链文本。这些产物彼此不等价,不应默认持久化,也不能证明内部真的执行了某种搜索、验证或政策检查。

4. 对话与工具契约

不同供应商对跨轮推理状态、签名回传、模式切换后的 Prompt Cache、工具调用之间能否继续思考有不同约束。Adapter 必须保存供应商契约,不能把它误暴露为应用层通用不变量。

当前供应商接口模式

下表描述接口家族,不是永久产品规格。

供应商模式 当前公开控制项 关键边界
OpenAI 推理模型 按模型变化的 reasoning.effort;部分模型另有 Reasoning Mode 支持档位与默认值按模型变化;Reasoning Token 占用生成输出,可能产生 Incomplete Response
Anthropic Adaptive Thinking 当前支持模型使用 thinking: {type: "adaptive"} 加 Effort 新快照已弃用或拒绝固定 budget_tokens;展示的思考可能是摘要或省略
Gemini 3 及之后 离散 thinking_level 支持档位以及能否关闭思考取决于模型
Gemini 2.5 系列 带模型特定范围和零值语义的 thinking_budget 文档将预算定义为软上限;把新版本 Level 字段用于旧模型会报错
开源权重或托管混合模型 模型或 Runtime 特定的开关、预算、Template 或 Stop Token 生成的 <think> 文本仍是模型输出,不是忠实审计轨迹

部署前必须阅读精确模型页面,并固定 Model ID、API Revision、SDK 版本、请求形状、响应字段、Usage 字段、Cache 行为和测试过的 Tool Sequence。

额外推理能做什么,不能做什么

在部分协议下,额外推理工作可能帮助模型探索候选、规划工具或解决多步骤问题,但它不能证明:

  • 结果正确或有事实依据;
  • 推理文字忠实反映因果过程;
  • 模型有权访问数据或执行工具;
  • 测试覆盖已经充分;
  • 质量会提升固定幅度;
  • 延迟和成本存在可迁移倍数。

DART 论文在特定数学与代码 Benchmark 上研究了直接回答与扩展推理之间的路由,同时指出一个重要测量伪影:单阶段对比可能因为共享生成上限截断最终答案,让推理路径看起来更差。这个结论支持预算感知的测试时算力实验设计,但不能证明 Draft Agreement 是通用生产路由器。

构建同预算评测

冻结任务单位

每个 Case 应包含:

  • 输入与授权证据;
  • 期望结果或可执行 Verifier;
  • 合法拒答与升级行为;
  • 工具和副作用政策;
  • 最大答案与墙钟预算;
  • 业务影响与切片标签。

不能把一个“难度”标签当作真值。短问题可能依赖最新证据,长问题也可能只是确定性转换。

比较完整策略

至少运行:

  1. 最低可用推理强度;
  2. 默认强度;
  3. 更高强度;
  4. 简单政策路由器;
  5. 只有前四项不足时,才加入学习式或多次调用路由器。

每个策略都要有足够空间输出最终答案,否则应把截断记录为独立结果。工具权限、检索、Prompt、Timeout 和评测器保持一致。若高强度方案使用了另一个模型快照,应明确它是“模型 + 强度”的复合变化。

测量用户真正收到的结果

指标 价值
任务成功率 关注最终结果,不看理由长度
Verifier 误放/误拒 错误 Judge 会颠倒决策
不完整响应率 推理可能耗尽输出预算
p50/p95/p99 延迟 长尾决定交互可靠性
总生成与计费单位 可见文本会低估真实工作
Tool Call 与重试 推理可能放大外部操作
单个可验证任务成本 统一质量与开销
拒答与升级质量 对无证据和高风险案例关键

指标必须按任务切片报告。平均值可能掩盖这样的路由器:它在简单任务上省钱,却把高影响切片送进能力不足的模式。

安全路由架构

flowchart LR A["任务契约"] --> B["确定性资格检查"] B --> C["选择供应商支持的强度"] C --> D["模型 + 有界工具"] D --> E["独立 Verifier"] E --> F{"是否验收"} F -->|"是"| G["返回结果"] F -->|"否,可重试"| H["一次有界升级"] F -->|"否,高影响"| I["人工复核或拒绝"] H --> D

路由器应使用在目标工作负载上验证过的执行前或执行中信号。Prompt 长度、关键词、模型自信和可见推理长度都只是弱代理,除非已经校准。

使用一次有界升级,不要做无限循环。发生模糊超时后,应先对账 Tool 状态再重试。不能因为高强度响应没有返回,就重复付款、部署、发消息或删除。

Provider Adapter 要求

供应商无关请求可以描述意图:

text
质量档位:economical | balanced | thorough
硬输出上限
Deadline
Tool Policy
必需证据
Fallback Policy

Adapter 将意图映射到供应商真实支持的 API;映射不存在时必须拒绝,不能静默换成另一种模式。

每条 Trace 至少记录:

  • Provider、Endpoint、Model Snapshot、SDK 与 API Revision;
  • 抽象档位和实际映射参数;
  • 可用时的 Input、Cached、Output 与 Reasoning Usage;
  • Stop Reason、Incomplete Details、Tool Call、Retry 与延迟;
  • Answer Verifier 结果和最终路由。

没有明确目的与保留策略时,不记录原始秘密、不受限 Prompt、私有 Tool Result 或 Reasoning Block。

可运行的 Go 路由器

下面的标准库示例为一个任务类别选择已经实测的模式。它先执行质量、不完整响应和延迟门禁,再最小化单个可验证任务成本。记录是模拟 Fixture。

go
package main

import (
	"fmt"
	"sort"
)

type ModeResult struct {
	Name                string
	TaskSuccess         float64
	FalseAcceptRate     float64
	IncompleteRate      float64
	P95LatencyMS        int
	CostPerVerifiedTask float64
}

type Gate struct {
	MinTaskSuccess     float64
	MaxFalseAcceptRate float64
	MaxIncompleteRate  float64
	MaxP95LatencyMS    int
}

func passes(result ModeResult, gate Gate) bool {
	return result.TaskSuccess >= gate.MinTaskSuccess &&
		result.FalseAcceptRate <= gate.MaxFalseAcceptRate &&
		result.IncompleteRate <= gate.MaxIncompleteRate &&
		result.P95LatencyMS <= gate.MaxP95LatencyMS
}

func main() {
	gate := Gate{
		MinTaskSuccess:     0.88,
		MaxFalseAcceptRate: 0.01,
		MaxIncompleteRate:  0.02,
		MaxP95LatencyMS:    2500,
	}
	results := []ModeResult{
		{Name: "low", TaskSuccess: 0.84, FalseAcceptRate: 0.008, IncompleteRate: 0.002, P95LatencyMS: 650, CostPerVerifiedTask: 0.010},
		{Name: "medium", TaskSuccess: 0.90, FalseAcceptRate: 0.007, IncompleteRate: 0.006, P95LatencyMS: 1300, CostPerVerifiedTask: 0.017},
		{Name: "high", TaskSuccess: 0.92, FalseAcceptRate: 0.006, IncompleteRate: 0.031, P95LatencyMS: 3100, CostPerVerifiedTask: 0.034},
	}

	eligible := make([]ModeResult, 0, len(results))
	for _, result := range results {
		if passes(result, gate) {
			eligible = append(eligible, result)
		}
	}
	if len(eligible) == 0 {
		fmt.Println("route=review")
		return
	}

	sort.Slice(eligible, func(i, j int) bool {
		return eligible[i].CostPerVerifiedTask < eligible[j].CostPerVerifiedTask
	})
	fmt.Printf("route=%s cost_per_verified_task=%.3f\n",
		eligible[0].Name,
		eligible[0].CostPerVerifiedTask,
	)
}

预期输出:

text
route=medium cost_per_verified_task=0.017

这个选择只对 Fixture 所代表的任务类别和政策有效。模型、Prompt、工具集、检索、输出上限或评测器变化后都要重跑实验。

常见失败模式

把高强度当作质量标记

更高强度可能改善一个切片,又损害另一个切片。保留低强度基线,用 Case 级成对分析定位究竟哪些失败发生了变化。

不检查共享的推理与答案上限

请求可能在输出必需答案前耗尽额度。监控 Incomplete Reason,并按照供应商契约为答案预留空间。

无条件相信第二个模型

LLM-as-a-Judge可能与候选共享偏差、偏好长答案,或被不可信内容操纵。应使用人工标签校准,Pairwise 测试随机化顺序,并保留确定性或可执行检查。

按表面形式路由

“出现数学符号就高强度”“Prompt 短就低强度”会漏掉困难事实、安全与工具任务。应按已经评测的任务契约与业务风险路由。

把推理文字当特权证据

可见理由可能不完整或不忠实。Anthropic 的推理忠实度研究显示,在其测试条件下,模型可能不在口头理由中提及真正影响答案的 Hint。审计应聚焦输入、来源、Tool Call、政策检查和实际副作用。

常见问题

推理强度等于 Temperature 吗?

不等于。Effort 控制供应商特定推理工作,Temperature 影响支持该参数的 API 的采样。部分推理模型版本会限制采样参数,不能假设二者独立且都可用。

可以关闭思考吗?

取决于模型。有些接口支持 Disabled 或 Minimal,有些强制推理,只能降低强度。不支持的组合可能直接报错。

Reasoning Token 会占用上下文吗?

它们通常计入生成输出与模型上下文会计,但精确语义取决于供应商。应检查部署模型返回的 Usage 与 Incomplete 字段。

路由器应该使用模型置信度吗?

只有在同任务、同版本的标注结果上校准后才可以作为信号。口头置信度与 Token 概率都不自动等于正确概率。

最安全的默认值是什么?

供应商默认值只能作为实验起点。生产默认值应该是通过任务质量、风险、延迟和恢复门禁后,成本最低的模式。

一手资料