推理模型:原理、API 与产品实践
问题
推理模型和普通生成模型有什么工程差异?如何设置推理预算、设计 Prompt、处理推理摘要、工具调用、延迟、成本和前端体验?
推理模型通过更多测试时计算处理复杂问题,适合代码、数学、规划和多约束决策。使用时抓住五点:
- Prompt 保持简单直接,通常不需要“请一步一步思考”。
- 用 reasoning effort/budget 控制质量、延迟和成本。
- 原始隐藏思维链通常不会提供;API 可能返回摘要或可见 reasoning block。
- 让工具、测试、检索和规则验证结果,不把“想得久”当作正确证明。
- 前端展示等待、取消和推理摘要,但不伪造进度,也不泄露敏感内部内容。
一、推理模型解决什么问题
普通低延迟模型适合改写、分类、抽取和简单问答;推理模型更适合:
- 多文件代码修改和复杂 Debug。
- 数学、约束求解、计划与决策比较。
- 需要多次工具调用的任务。
- 长上下文中需要整合多个证据的任务。
不适合默认把所有请求都路由到最强推理档:简单任务可能更慢、更贵,且不会自动解决知识缺失或权限问题。
二、不要混淆四种“推理”
| 概念 | 含义 | 是否应展示 |
|---|---|---|
| Hidden reasoning | 模型内部计算过程 | 通常不可用,也不作为产品依赖 |
| Reasoning summary | 供应商生成的简化摘要 | 可选展示,标明是摘要 |
| Visible reasoning block | 某些模型返回的可见内容块 | 按供应商政策处理 |
| Explanation | 面向用户的结论依据和证据 | 应简洁、可验证 |
reasoning_content 不是所有 Provider 的通用字段。OpenAI Responses API 不提供原始隐藏 reasoning token;可请求的是推理摘要。统一服务层应该规范化内容块,而不是在前端按模型名猜字段。
interface ReasoningResult {
answer: string;
summary?: string;
usage: {
inputTokens: number;
outputTokens: number;
reasoningTokens?: number;
};
finishReason: string;
}
三、Prompt 设计
推荐写法
目标:找出这个并发 Bug 的根因并给出最小修复。
输入:代码、错误日志、复现步骤。
要求:
1. 先给一句话根因;
2. 引用支持结论的代码位置和日志;
3. 给出最小改动;
4. 列出验证命令;
5. 信息不足时明确需要什么,不要猜。
不推荐写法
你必须一步一步展示全部思维过程,至少思考 20 步,绝不能跳步。
原因:
- 推理模型本来就会内部推理,额外指令可能浪费输出。
- 更长的可见解释不代表更正确。
- 可能诱导模型暴露不必要的敏感上下文。
- 产品真正需要的是证据、验证方法和最终结果。
Few-shot 仍然有用,但优先用于定义任务边界、输出格式和边界案例,而不是展示冗长“内心独白”。
四、Reasoning Effort 与预算
不同 Provider 使用 effort、budget tokens 或自适应推理等方式。不要在前端写死枚举;由服务端返回模型能力:
interface ReasoningCapabilities {
supported: boolean;
effortLevels?: string[];
supportsSummary: boolean;
supportsTemperature: boolean;
maxOutputTokens?: number;
}
interface ReasoningPolicy {
simple: 'low';
standard: 'medium';
complex: 'high';
}
路由规则需要通过评测获得,例如:
- 抽取/格式转换:非推理或最低档。
- 常规代码解释:标准档。
- 架构权衡、安全审查:高档,但设费用和时间上限。
- 高风险答案:无论档位都需要确定性验证或人工复核。
五、工具调用
推理模型擅长规划工具,但仍可能:调用错误工具、传错参数、重复写入、陷入循环或被工具结果注入。
interface AgentBudget {
maxSteps: number;
maxToolCalls: number;
maxWallTimeMs: number;
maxCostUsd: number;
}
const budget: AgentBudget = {
maxSteps: 8,
maxToolCalls: 6,
maxWallTimeMs: 90_000,
maxCostUsd: 2,
};
工具服务必须独立鉴权、校验和限时。模型说“用户已经同意”不是确认凭据;高风险动作需要绑定用户、资源和参数的短期 approval token。
六、Responses API 示例
import OpenAI from 'openai';
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
const response = await client.responses.create({
model: process.env.OPENAI_REASONING_MODEL!,
input: '比较事件溯源与传统 CRUD 在订单系统中的取舍。',
reasoning: {
effort: 'medium',
summary: 'auto',
},
store: false,
});
console.log(response.output_text);
console.log(response.usage?.output_tokens_details?.reasoning_tokens);
字段和值以当前模型能力为准。旧模型、不同接口和不同 Provider 的参数可能不一致。
七、流式与前端体验
状态机
type ReasoningUIState =
| 'submitted'
| 'analyzing'
| 'tool-running'
| 'answer-streaming'
| 'completed'
| 'aborted'
| 'failed';
体验原则:
- 首块等待期间显示真实状态,不伪造“37%”。
- 有工具时展示工具名、目标和可取消状态。
- 推理摘要默认折叠,文案写“推理摘要”,不写“完整思维链”。
- 用户取消要传播到模型和工具,消息标为
aborted。 - 超长任务可以转后台任务,提供状态与通知,不无限保持浏览器连接。
八、成本与性能
推理请求的总成本可能包含输入、缓存输入、可见输出和不可见 reasoning token。关键指标:
- TTFT/首个可用事件,不只是首个文本 token。
- 总任务时间与用户等待时间。
- reasoning tokens、工具步骤和重试。
- 每个成功任务成本,而不是每次调用成本。
- 不同 effort 档位的质量增益曲线。
如果高档 effort 只提升少量质量却显著增加成本,应缩小使用范围;如果低档导致更多重试,总成本反而可能更高。
九、评估方法
| 任务 | 优先验证方式 |
|---|---|
| 代码修改 | 测试、类型检查、静态分析、Diff 约束 |
| 数学计算 | 计算器或程序执行 |
| RAG 问答 | 检索召回、引用支持、忠实度 |
| 工具 Agent | 最终状态、工具轨迹、权限和幂等 |
| 架构建议 | Rubric、专家 pairwise、约束覆盖 |
对同一数据集比较非推理、不同 effort 和工具增强方案。不要只用 Judge 评价“看起来是否有道理”。
十、常见误区
- 推理时间越长越正确。
- reasoning summary 就是原始思维链。
- 低 Temperature 可以解决幻觉。
- 推理模型不需要 RAG 或工具。
- 最强推理模型适合所有简单任务。
- UI 必须实时展示模型所有“思考”。
- 只限制输出 token,不限制工具循环和总费用。
常见面试问题
Q1: 推理模型和普通模型最大的区别是什么?
答案:推理模型愿意使用更多测试时计算解决复杂任务,通常质量、延迟和成本都更高。工程上需要额外预算、状态、评估和路由。
Q2: 为什么不推荐普遍使用“请一步一步思考”?
答案:现代推理模型会内部推理;强制公开步骤可能增加噪声和成本。应请求结论、证据和验证方法,并用 effort 控制计算预算。
Q3: OpenAI 会返回完整思维链吗?
答案:不会把原始隐藏 reasoning tokens 作为标准输出;可以返回模型生成的推理摘要。前端不能把 reasoning_content 当作 OpenAI 通用字段。
Q4: reasoning effort 如何选择?
答案:通过任务切片评测质量、延迟和成本。简单任务低档,复杂推理高档;高风险任务无论档位都要验证和审批。
Q5: 推理 token 是否计费?
答案:许多供应商会将其纳入输出或单独 usage 明细,但规则依模型变化。成本系统必须读取真实 usage 和当前价格配置。
Q6: 推理阶段很久没有文本,前端怎么办?
答案:展示“正在分析”和取消能力;有工具就显示真实工具状态。不要用假的百分比,也不要靠打字动画掩盖超时。
Q7: 如何验证推理模型的代码答案?
答案:运行测试、类型检查、Lint 和安全扫描,检查 Diff 范围。模型解释只是辅助证据,不能替代执行结果。
Q8: 推理模型还需要 RAG 吗?
答案:需要。推理能力不能提供模型不知道的最新或私有事实;外部知识应通过检索或工具提供。
Q9: 为什么 Agent 要限制最大步骤?
答案:防止重复调用、死循环、成本攻击和长时间占用资源。还需限制总时间、工具数、费用和重试。
Q10: 推理摘要适合直接展示吗?
答案:可选、默认折叠并标明是摘要;先检查敏感信息和供应商政策。用户更需要结论、来源与可验证依据。
Q11: 什么时候不该使用推理模型?
答案:简单分类、抽取、改写、低延迟高并发任务,或结果能被确定性代码直接得到时,轻量模型/规则通常更合适。
Q12: 如何衡量推理模型的价值?
答案:比较每个成功任务的质量、延迟、重试、工具步骤和成本,而不是只看某个公开推理榜单。