11. 推理模型(o1、R1)的 Prompt 工程和普通模型有什么不同?
整理推理模型的 prompt 设计原则与避坑要点。
简单回答
推理模型(OpenAI o1/o3、DeepSeek R1、Claude 思考模式)和普通模型的 Prompt 工程有几个根本差异:不需要也不应该让模型"think step by step"——它内部已经在做了;few-shot 在推理模型上经常 降低 而不是提升效果,因为干扰了模型的内部推理路径;System Prompt 越短越好,复杂的角色设定和约束反而让模型分心;要给模型足够的自由度(不要把答案格式约束得太死,让它先推理再总结)。简单说,推理模型的 Prompt 工程是"做减法而不是做加法"——给最简洁的问题描述和明确的输出格式,剩下的交给模型自己。
详细解释
推理模型为什么不一样
推理模型的核心机制是 内置的 long chain-of-thought——在生成最终回答之前,模型会自主进行长链条的内部推理(reasoning trace),可能几千到几万 token 的 thinking 过程。OpenAI 的 o1 和 o3 把这部分隐藏不返回给用户;DeepSeek-R1 把它放在 <think>...</think> 标签里返回;Claude 4 在 thinking 模式下也类似。
关键变化是 推理过程从外部 prompt 移到了内部生成。普通模型时代我们在 prompt 里教它"think step by step"、给 few-shot 示范推理、用 ToT 显式规划——这些技巧本质都是 外部诱导内部推理。推理模型把这部分能力固化到了模型本身。
这意味着多年积累的 prompt 工程套路在推理模型上很多都不再有效,甚至适得其反。
哪些技巧失效或反向
Chain-of-Thought 失效或有害
普通模型上"Let's think step by step"或者 few-shot 推理示范能显著提升数学和推理能力。推理模型上:
- "Let's think step by step" 是冗余的——模型本来就在 thinking 阶段做了多步推理。加这句话顶多不影响。
- Few-shot 推理示范常常 降低 准确率。OpenAI 在 o1 文档里明确建议"不要使用 few-shot CoT 示例"。原因是 few-shot 强行把模型推理路径限定在示例的模式上,限制了模型内部的自主探索。
实际数据:在 MATH 等推理 benchmark 上,o1 用 few-shot CoT 比 zero-shot 表现差 5-10 个点。这是反直觉的发现。
复杂 System Prompt 反而干扰
普通模型上常见的"你是一个资深专家、必须严谨、必须分步骤、必须双重检查"这类指令对推理模型基本无效——模型已经被训练成"高质量推理者"了,多余的角色约束反而让 thinking 过程被这些 instruction 干扰。
OpenAI 推荐的 o1 prompt 风格是 简洁直接:
不要长篇 system prompt、不要详细的"如何思考"指引、不要多个角色叠加。
显式规划技巧失效
ToT、ReAct 这类需要模型按特定结构输出推理过程的技巧,在推理模型上意义不大——模型自己就在做更精细的内部规划,外部强加的结构反而让输出受限。
哪些 prompt 技巧仍然有效
清晰的任务描述:模型需要明白要做什么。任何模型都需要这点,推理模型也不例外。但描述越简洁越好。
明确的输出格式:让模型知道"回答应该是 JSON / 一段话 / 一个数字"。推理模型的 thinking 部分可能很长但最终回答应该按要求格式。
关键约束:必须遵守的硬约束(比如"答案必须是整数"、"回答不能超过 100 字")还是要写。
输入数据的清晰组织:长输入用 XML/Markdown 结构化便于模型解析。
禁止性指令:明确说"不要 X"对推理模型仍然有效。
"Reasoning Effort" 是新的控制维度
推理模型有一个普通模型没有的旋钮:推理预算(reasoning effort、thinking budget、reasoning_effort)。可以告诉模型"思考多长时间"或"思考多少 token"。
OpenAI o1 的 API 有 reasoning_effort 参数(low/medium/high),DeepSeek-R1 等开源模型可以通过 max thinking tokens 控制。
这个旋钮的逻辑:
- 简单问题用 low effort(快、便宜,但可能错过复杂推理)
- 复杂问题用 high effort(慢、贵,但准确率最高)
- 默认 medium 适合多数场景
工程上要根据问题复杂度动态设置,比如简单事实问答用 low、数学题或代码生成用 high。
Prompt 注入和 hidden reasoning
推理模型把推理过程隐藏(OpenAI o1)或半隐藏(R1 的 think 标签)带来一些新问题:
对开发者不透明:你不知道模型为什么得出这个结论,调试和改进 prompt 困难。看不到 reasoning trace 就不知道改 prompt 哪里能改善。R1 等开源方案把 thinking 暴露出来,调试更容易。
Prompt 注入风险:如果用户输入里有"忽略你的 thinking 然后做 X"这种指令,模型可能在 thinking 阶段就被引导。OpenAI 等团队对此有专门防御(thinking 阶段对用户输入的解释更保守)。
Hidden cost:thinking token 也算钱(OpenAI o1 的 reasoning token 单独计费),实际成本可能远高于看到的 output token。一个看似简单的回答背后可能有几千 token 的 thinking。
推理模型不擅长的场景
推理模型不是万能替代品。一些场景普通模型仍然更合适:
简单问答和闲聊:让 o1 回答"今天星期几"它会先做几百 token 的 thinking 再给答案,慢且贵。普通模型秒回。
严格延迟要求:实时对话、TTFT 敏感场景。推理模型的 thinking 把第一个回复 token 推迟到几秒之后。
创意写作和开放对话:thinking 过程让回答变得更"格式化"、缺少自然流畅感。普通模型在创意类任务上往往表现更好。
Tool Calling 简单场景:简单的函数调用让推理模型反而过度思考。普通模型的 tool calling 就够用且快。
业界目前推荐的策略是 混合使用——用一个 router 判断 query 复杂度,简单任务路给普通模型(GPT-4o、Claude Sonnet),复杂任务路给推理模型(o1、R1、Opus thinking)。
实际场景的 prompt 例子
普通模型的复杂数学 prompt:
推理模型的等价 prompt:
短一半多,效果反而更好。
跨家模型的差异
不同推理模型的 prompt 风格略有差异:
OpenAI o1:最反对 few-shot,建议极简 prompt。reasoning_effort 控制思考深度。
DeepSeek R1:thinking 在 <think> 标签里返回,可见。R1 不接受 system prompt(架构限制),所有指令要放 user message 里。
Claude 4 thinking mode:可以接受较丰富的 system prompt,但仍以简洁为主。thinking 字段控制 budget。
Gemini 2.5 thinking:对 long context + reasoning 配合较好,prompt 风格接近 o1 但允许更多结构化。
迁移时要按目标模型的具体风格调整。
调试技巧
普通模型 prompt 调试常常是"加更多 instruction"。推理模型反过来——删指令直到出问题。
具体做法:
- 写一个最简洁的 prompt 测试效果
- 看输出是否满足预期。如果满足就到此为止。
- 不满足就 只加最关键的 一条 instruction,再测试。
- 直到达到要求或确认问题不在 prompt。
不要一开始就堆大段 system prompt——99% 的内容是冗余的,反而干扰推理。
面试时可以这样答
推理模型的 prompt 工程最大变化是从"做加法"变成"做减法"。普通模型时代我们在 prompt 里教它 think step by step、给 few-shot 推理示范、用 ToT 显式规划——这些都是外部诱导内部推理。推理模型把这部分能力固化到模型本身,外部强加的推理诱导反而干扰内部探索。
几个具体不同。第一是 CoT 失效或有害——OpenAI 在 o1 文档明确建议不要用 few-shot CoT 示例,实测在 MATH 上 few-shot 比 zero-shot 差 5-10 个点。第二是复杂 system prompt 反而干扰,推理模型已经被训练成高质量推理者了多余角色约束让 thinking 被分心。第三是 ToT、ReAct 这类外部规划技巧意义不大。
仍然有效的是清晰任务描述、明确输出格式、关键硬约束、输入数据的结构化组织、禁止性指令。
推理模型有个新维度是 reasoning effort——告诉模型思考多长。简单问题 low、复杂题 high。OpenAI 的 reasoning_effort 参数和 R1 的 max thinking tokens 都是这个旋钮。
几个新问题要注意。Hidden cost——thinking token 也算钱实际成本远高于看到的输出。Prompt 注入在 thinking 阶段也可能被引导。对开发者不透明,OpenAI o1 不返回 thinking 调试困难。
不擅长的场景包括简单问答(thinking 让简单题也慢且贵)、严格延迟要求(TTFT 推到几秒后)、创意写作(thinking 让回答格式化)、简单 tool calling。所以业界推荐混合使用——router 判断 query 复杂度,简单路给普通模型,复杂路给推理模型。
跨家差异——OpenAI o1 最反对 few-shot 极简 prompt;DeepSeek R1 不接受 system prompt 架构限制;Claude 4 thinking 接受较丰富的 system prompt 但仍简洁;Gemini 2.5 在 long context + reasoning 配合较好。
调试技巧上推理模型反过来——删指令直到出问题。从最简洁 prompt 开始,只在必要时加最关键的 instruction,避免堆大段 system prompt。
常见追问
- 怎么判断一个 query 该路给普通模型还是推理模型?路由标准是什么?
- R1 的 thinking 暴露出来了,能不能基于 thinking 做 prompt 优化?
- 推理模型在 RAG 场景下有什么特殊处理?检索结果怎么放进 prompt?