跳到主要内容

推理模型:原理、API 与产品实践

问题

推理模型和普通生成模型有什么工程差异?如何设置推理预算、设计 Prompt、处理推理摘要、工具调用、延迟、成本和前端体验?

面试速答版

推理模型通过更多测试时计算处理复杂问题,适合代码、数学、规划和多约束决策。使用时抓住五点:

  1. Prompt 保持简单直接,通常不需要“请一步一步思考”。
  2. 用 reasoning effort/budget 控制质量、延迟和成本。
  3. 原始隐藏思维链通常不会提供;API 可能返回摘要或可见 reasoning block。
  4. 让工具、测试、检索和规则验证结果,不把“想得久”当作正确证明。
  5. 前端展示等待、取消和推理摘要,但不伪造进度,也不泄露敏感内部内容。

一、推理模型解决什么问题

普通低延迟模型适合改写、分类、抽取和简单问答;推理模型更适合:

  • 多文件代码修改和复杂 Debug。
  • 数学、约束求解、计划与决策比较。
  • 需要多次工具调用的任务。
  • 长上下文中需要整合多个证据的任务。

不适合默认把所有请求都路由到最强推理档:简单任务可能更慢、更贵,且不会自动解决知识缺失或权限问题。

二、不要混淆四种“推理”

概念含义是否应展示
Hidden reasoning模型内部计算过程通常不可用,也不作为产品依赖
Reasoning summary供应商生成的简化摘要可选展示,标明是摘要
Visible reasoning block某些模型返回的可见内容块按供应商政策处理
Explanation面向用户的结论依据和证据应简洁、可验证

reasoning_content 不是所有 Provider 的通用字段。OpenAI Responses API 不提供原始隐藏 reasoning token;可请求的是推理摘要。统一服务层应该规范化内容块,而不是在前端按模型名猜字段。

types/reasoning-result.ts
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 或自适应推理等方式。不要在前端写死枚举;由服务端返回模型能力:

types/model-capabilities.ts
interface ReasoningCapabilities {
supported: boolean;
effortLevels?: string[];
supportsSummary: boolean;
supportsTemperature: boolean;
maxOutputTokens?: number;
}

interface ReasoningPolicy {
simple: 'low';
standard: 'medium';
complex: 'high';
}

路由规则需要通过评测获得,例如:

  • 抽取/格式转换:非推理或最低档。
  • 常规代码解释:标准档。
  • 架构权衡、安全审查:高档,但设费用和时间上限。
  • 高风险答案:无论档位都需要确定性验证或人工复核。

五、工具调用

推理模型擅长规划工具,但仍可能:调用错误工具、传错参数、重复写入、陷入循环或被工具结果注入。

lib/reasoning-agent-policy.ts
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 示例

lib/openai-reasoning.ts
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: 如何衡量推理模型的价值?

答案:比较每个成功任务的质量、延迟、重试、工具步骤和成本,而不是只看某个公开推理榜单。

相关链接