Agent 推理模式 · 第 04 章 · 前沿(截至 2026-06-03)

推理模型时代:CoT 从 prompt 到权重

前三章的模式都是你手写的 prompt 或外挂脚手架。这一章讲一件改了游戏规则的事:2024 年起,CoT 被直接训进了模型权重。从此「在推理时多想」不再靠你写 exemplar 去诱发,而是模型出厂自带的行为;推理期算力换可靠性,从一句洞察变成一条被发表、被训练进去的 scaling 定律。

本章定位:前沿 · 把「推理期算力」从「手写 prompt」推进到「训练进权重的行为」 | 时间锚:2024-09 → 2026-06 | 代码状态:示例为讲解用伪代码,标注"未本地验证"

本章四个判断 · 读完要能脱稿讲

  • CoT 从「你写的 prompt」变成「用 RL 训练出来的行为」——同一段串行推理,过去靠 exemplar 诱发,现在被优化进权重。
  • test-time / inference-time scaling 是一条新 scaling 轴:正确率随「思考 token」上升,与预训练规模正交。
  • 在推理模型上手写 few-shot CoT 反而掉分——已训练的内部链和你塞进去的显式例子相撞。
  • 哪些模式留下、哪些退场:CoT 进权重、ReAct 留作编排、ToT 类外部搜索价值收缩;模式如今活在框架的显式图里,不在 prompt 里。

§4.1CoT 从 prompt 到权重

用 RL 训练出一条长的内部 CoT:模型在给出答案前,先自行生成一大段内部推理——这段链没人手写,是权重里长出来的。

为什么这是分水岭

第 1 章把 CoT 解释成「给固定深度的模型补串行计算步」:一次前向传播的深度是定死的,多写出来的中间 token 等于多借了几层串行算力。但在前三章里,这段中间 token 始终由你负责诱发——写 "let's think step by step",或塞几个 few-shot exemplar 当样板。推理模型(reasoning model,指出厂就会先想一长段再答的模型)把这件事接管了:同一套串行推理,改由 RL 直接优化进权重,触发它不再需要你写任何样板。

一年内的时间线:手写技巧 → 训练目标

把节点按月份排开,变化的速度本身就是论点。每一个都带具体日期:

CoT 进权重 · 一年时间线 手写技巧(2024-09 前) → 训练目标(2024-09 起) 时间 → o1-preview 2024-09-12 o1 完整版 2024-12-05 DeepSeek-R1 2025-01 · GRPO o3-mini 2025-01-31 Claude 3.7 扩展思考 2025-02-25 · 预算 128K Gemini 2.5 thinking 2025-03 · Deep Think o3 / o4-mini 2025-04-16
图 4.1从 OpenAI o1-preview 到 o3、Gemini Deep Think,跨度不足一年。 注意:一件事——CoT 在这条轴上从「你手写的技巧」变成了「厂商训练的目标」,朱红节点都是把推理直接写进权重的型号。

逐个钉死日期与机制:

  • OpenAI o1-preview(2024-09-12),完整版 o1(2024-12-05):第一个公开把「长内部 CoT」作为卖点的模型——答题前先想一长段,思考过程对用户隐藏,只放出摘要。
  • DeepSeek-R1(2025-01,arXiv 2501.12948):用 GRPO(Group Relative Policy Optimization,一种不带 critic 网络的强化学习,靠一组采样答案彼此比较算优势,省掉了单独训一个价值模型)做 RL。配套的 R1-Zero 给出更硬的结论:推理能力可以从纯 RL、不做 SFT(监督微调)中涌现——不喂任何人工写的推理范例,模型也能自己长出 CoT。这是把「CoT 是训练出来的行为」从直觉变成可复现实验的一篇。
  • o3-mini(2025-01-31)、o3 / o4-mini(2025-04-16):推理模型从旗舰下沉到更便宜、更快的档位,并带可调的「推理强度」档(low / medium / high)。
  • Claude 3.7 Sonnet 扩展思考(extended thinking,2025-02-25):把「想多久」做成一个可设的预算——thinking token 预算可拉到 128K,且思考内容对开发者可见。这一步把 test-time compute 直接变成一个 API 旋钮。
  • Gemini 2.5 thinking(2025-03),Deep Think 正式 GA(2025-08):第三家主流厂商把「先想再答」做成默认形态。
机制深一层 · 回指第 1 章

第 1 章的命题是:CoT 给固定深度的模型补上了串行计算步——中间 token 是「借来的算力层」。本章只改了一件事:这段串行推理现在被 RL 直接优化进权重。模型在 RL 里反复试不同长度、不同走法的思考链,最终把「遇到难题就先展开一长段推理」固化成一种条件反射。所以推理模型不需要你写 exemplar 去诱发链条——诱发器已经在权重里了。第 1 章解释的是为什么多写 token 有用,本章解释的是这套机制怎么从 prompt 搬进了训练目标。

预判一下

R1-Zero 证明「纯 RL、无 SFT 也能涌现推理」。如果推理链能从纯 RL 里自己长出来,那训练时给模型的奖励信号最低限度需要是什么?(提示:RL 要能区分「这次想对了」和「想错了」。)

展开(先停 10 秒)

最低限度只需要一个可自动判定对错的最终答案——数学题对不对、代码过不过测试、答案是否命中标准解。有了这种可验证的 reward,RL 就能把「导向正确答案的思考走法」加权、把「导向错误的」压低,链条本身无须人工标注。这也解释了为什么早期推理模型在数学、代码这类有客观对错的领域最先突飞猛进:那里的 reward 信号最干净。开放式写作这类没有唯一正解的任务,reward 难定,推理训练的收益也更含糊。

§4.2test-time / inference-time scaling:新 scaling 轴

正确率随「思考 token」增加而上升,是一条与预训练规模正交的新 scaling 轴——多想,可以买。

这一节把一句洞察变成一条定律

第 1 章把「推理期算力换可靠性」当作贯穿全教程的视角抛出来。2024–2025 这条视角被正式做成了可测量的 scaling 关系:固定模型权重不动,只增加推理时允许花的算力(让它想更久、采更多样、搜更宽),正确率单调爬升。这条曲线和「把模型练得更大」那条正交——它是另一根可以独立往上推的轴。

横轴 · 思考 token / 推理算力(对数尺度,越右越多) 纵轴 · 正确率 单次前向传播(不额外花算力) 多想 = 更准 这段增益是可买的 趋平:边际收益递减 与预训练规模正交的新轴 练更大 ⟂ 想更久,可分别上推
图 4.2权重不动,只加推理时的思考算力,正确率沿这条曲线往上爬,到后段趋平。 注意:一件事——「多想 = 更准」不再是经验之谈,而是一条可测量、可购买、且独立于「把模型练大」的 scaling 轴。

这条轴有三层值得讲清的含义:

  • 它是可买的:同一个模型,给它更高的思考预算,就能解之前解不动的题。Claude 3.7 的 128K thinking 预算、o3 的 low/medium/high 档,都是把这根轴做成了开发者能拨的旋钮——为难题多付 token,为简单题省 token。
  • 它会趋平:曲线尾部边际收益递减,且 token 是真金白银的成本与延迟。无脑拉满预算不是免费的;§4.3 会讲到,对足够简单的任务,多想甚至有害。
  • 它正交于预训练:把模型练得更大、和让模型想得更久,是两件可以分别投入的事。这就是为什么 2024 年后业界把「test-time scaling」与「pre-training scaling」并列成两根轴——这正是第 1 章那句「推理期算力换可靠性」被发表、被训练进去的版本。
预判一下

图 4.2 的曲线尾部趋平。如果一个客服 agent 的任务有 80% 是「查订单状态」这类一步就能答的简单问句,把推理预算从 medium 拉到 high,整体正确率与成本会怎么变?

展开

整体正确率几乎不动、成本和延迟显著上涨。简单问句本就落在曲线已经趋平的那一段——它们一步就对,多给的思考 token 买不到额外正确率,只是白烧。更糟的是 §4.3 要讲的 overthinking:拉高预算后,模型对「查订单」这种琐事也展开冗长推理,反而更慢、偶尔还把简单答案想拐了。正确做法是按问句难度分流预算,而不是一刀切拉满。

§4.3还要不要手写 CoT / ReAct?(面试高频)

对推理模型,手写 few-shot CoT 多余、甚至反噬;但工具编排、成本控制、可审计输出这些场景里,手写模式仍是应用架构。

为什么这题面试常考

2022 式直觉是「加了 CoT / ReAct 一定更好」。这个直觉在推理模型上翻车了,而很多人没更新。2025 中到 2026 的共识是:对已经把推理训进权重的模型,你再手写 few-shot CoT,等于在它训练好的内部链外面又硬塞一套显式样板,两者相撞。下面分「该退场」和「仍要手写」两面,各给证据。

证据:在推理模型上,手写 few-shot CoT 会掉分

  • 5-shot 反而更差:给 o1-preview 套 5 个 few-shot CoT exemplar,正确率低于极简(zero-shot / 直给)prompt。OpenAI 与 PromptHub 等指南据此明确建议:推理模型上别堆 few-shot,最少的指令往往最好。
  • 显式样板与内部链冲突:模型已有一套训练好的推理走法,你塞进去的 exemplar 把它往另一条(人写的)路上拽,两套链打架,结果不如让它自己走。
  • 简单任务上 overthink:在 <3 步就能答的简单任务上,推理模型容易把问题想复杂(overthinking),反而不如普通(非推理)模型又快又对。
  • 感知 / 隐式规律任务上 CoT 拉低正确率:在某些靠直觉模式识别、而非显式推导的任务上,强行展开 CoT 会损害前沿模型——有研究测到 o1-preview 在某个语法分类任务上因显式推理掉了约 −36%。把本该一眼看出的规律硬拆成步骤,反而把对的直觉推翻了。

但这些场景里,手写模式仍然重要

「手写 CoT 退场」不等于「前三章白学」。模式没死,只是搬了家。四类场景仍需要你手写:

  1. 非推理模型:GPT-4o 级、以及更小/本地的模型,没把推理训进权重,仍明显受益于显式 CoT 和 few-shot。第 1 章的技巧对它们照样管用。
  2. 工具编排:ReAct / ReWOO 这类「推理↔行动↔观察」的循环,是应用架构,哪怕每一步的内核换成推理模型,外层的工具往返循环还是你来搭。这正是第 2 章 ReAct 接地的去向——它从「prompt 模板」升格成了「编排骨架」。
  3. 成本 / 延迟控制:ReWOO 式「先一次性规划好全部步骤、再批量执行」能减少模型往返、压低 token 与延迟,在预算敏感的系统里仍有价值。
  4. 结构化 / 可审计输出:当你需要每一步都留下可检查、可回放的痕迹(合规、调试、人工复核),显式的步骤化编排比一段藏在权重里的内部链更可控。
你的模型自己 会推理吗? 是(o1/o3/R1) zero-shot 直给 最少指令、别堆 few-shot CoT + 外挂工具编排(ReAct/ReWOO) + 按难度分配思考预算 简单任务调低、防 overthink 否(4o 级 / 小 / 本地) 仍要手写 CoT / few-shot 显式 step-by-step 样板 + Self-Consistency 投票补稳 + 第 1 章那套技巧照旧管用 工具编排两侧都要手搭
图 4.3一刀切问到底:模型自己会不会推理,决定你该撤掉还是保留手写 CoT。 注意:一件事——「会推理」那侧只撤掉诱发推理的样板(few-shot CoT),工具编排循环在两侧都保留,它属于应用架构、不属于 prompt。
一句话记牢

CoT 作为手写 prompt 在退场,作为模型架构在称王。退场的是「用 exemplar 诱发推理」这件事;称王的是「推理本身」,它进了权重。

把这一节放进规划视角会更立体:推理模型如何吸收规划、test-time compute 如何替代一部分外部规划结构,是同一现象在「控制流」轴上的版本,详见 agent-planning · 前沿。工具往返那一步具体怎么落成真实的 tool_use 调用,见 tool-use。

预判一下

同事把一个跑在 GPT-4o 上、带 5-shot CoT exemplar 的 prompt,原样换成 o3 调用,发现某些题正确率不升反降。在不改任务的前提下,第一个该动的是什么?

展开

先删掉那 5 个 few-shot CoT exemplar,改成 zero-shot 直给、最少指令。掉分的典型原因正是 §4.3 的头条证据:显式样板和 o3 训练好的内部链相撞。4o 需要样板来诱发推理,o3 不需要——把为 4o 写的诱发器留在 o3 上,是在帮倒忙。删完若仍不稳,再考虑按难度调推理档、或对简单题分流到更轻的模型防 overthink,而不是把样板加回去。

§4.4框架把模式表达成显式图

模式如今活在编排层、不在 prompt 里:LangGraph 把模式建成状态机,ReAct / Reflexion / plan-execute 变成「图的形状」。

模式搬家的最后一站

§4.3 说工具编排循环留了下来。它留在哪?留在框架里。当推理本身进了权重,前三章那些模式不再以 prompt 模板的形态存在,而是以控制流图的形态存在:节点是一步、边是步与步之间的跳转、共享 state 在节点间流动。LangGraph 是这一形态的代表。

具体到 LangGraph 怎么把模式建成显式图:

  • 节点 = 步骤:每个节点是一段可执行单元(调一次模型、调一次工具、做一次评估)。
  • 条件边在带类型的共享 state 上跳转:边不是写死的顺序,而是读当前 state 决定下一步去哪——这就是 ReAct 的「想完看 observation 再决定下一步」落成代码的样子。
  • checkpoint 保住中途失败:state 可在每一步落盘,中途崩了能从断点续跑,不必从头再来。
  • 模式 = 图的形状:ReAct 是一个带条件回边的循环;plan-execute 是先 fork 出多步、再 join 汇总;Reflexion 是「失败→反思写入记忆→带记忆重试」的跨回合回路;复杂流程拆成子图。同一张图就把第 2 章的 ReAct、Reflexion 和 plan-execute 都表达了。
react_as_graph.py python
# 讲解用伪代码,未本地验证。
# 把 ReAct「推理→行动→观察」循环表达成一张显式状态图(LangGraph 风格)。
# 内核可以是推理模型;外层这张图——节点、条件边、state——是你手搭的编排,
# 不在 prompt 里。这正是 §4.3「ReAct 留作编排」的代码形态。

from typing import TypedDict, Literal

class State(TypedDict):          # 带类型的共享 state,在节点间流动
    question: str
    scratch: list[str]           # 累积的 thought / observation
    answer: str | None

def reason(state: State) -> State:
    # 调用(内核可换成推理模型):产出下一步是调工具还是直接收尾
    step = llm_decide_next(state["question"], state["scratch"])
    state["scratch"].append(step.thought)
    state["_route"] = step.kind   # "act" 或 "finish"
    state["_pending_tool"] = step.tool_call
    return state

def act(state: State) -> State:
    obs = run_tool(state["_pending_tool"])      # 接地:真实工具的真实返回
    state["scratch"].append(f"observation: {obs}")
    return state

def route(state: State) -> Literal["act", "finish"]:
    return state["_route"]        # 条件边:读 state 决定下一步去哪

# graph:reason → (条件边) → act → 回到 reason,直到 finish
graph = StateGraph(State)
graph.add_node("reason", reason)
graph.add_node("act", act)
graph.set_entry_point("reason")
graph.add_conditional_edges("reason", route, {"act": "act", "finish": "__end__"})
graph.add_edge("act", "reason")          # 这条回边 = ReAct 的循环
app = graph.compile(checkpointer=...)    # checkpoint:中途失败可从断点续跑
框架变迁 · 带日期

LangChain 1.0(2025-10) 弃用了旧的 create_react_agent,改为 create_agent + middleware:把 ReAct 这类循环做成可插拔的中间件层,进一步坐实「模式活在编排层、不在 prompt 里」。这与 agent-planning · 前沿 记的框架弃用是同一桩事。

预判一下

同样把模式表达成图,为什么 ReAct 的图里一定有一条「act → reason」的回边,而 plan-execute 的图里主干却更接近一条「先 fork 多步、再 join」的无回边结构?

展开

因为两者的接地时机不同。ReAct 是交错式接地——每行动一步、拿到一个真实 observation,就得回去重新推理「下一步基于这个新事实该怎么走」,所以必须有回边把 observation 喂回 reason。plan-execute 是前置式规划——先一次性把步骤排好,再批量执行,执行阶段不依赖「看一步改一步」,主干自然是 fork/join 而非循环。回边的有无,正是第 2 章「交错 vs 前置」之分落在图结构上的痕迹。

§回看前三章:每个模式的命运

本章不推翻前三章,而是给它们各自的去向盖章。把三章的核心模式放进推理模型时代,命运各不相同:

前三章模式在推理模型时代的去向
来自模式 / 论点在推理模型时代的命运
第 1 章 CoT=给固定深度模型补「串行计算深度」 进权重。同一段串行推理被 RL 训进权重;机制不变,触发方式从「你写 exemplar」变成「模型自带」。手写 few-shot CoT 在推理模型上退场。
第 2 章 ReAct=把每步推理钉在外部 observation 上(接地) 留作编排。接地这件事权重补不了——内部链再长也不接触外部世界。ReAct 从 prompt 模板升格成框架里的编排骨架(图的循环)。
第 3 章 ToT / 外部树搜索=在外面显式生成-评估-回溯 价值收缩。模型内部自己就在搜(长链里隐式地试不同走法、回溯),外挂一层显式树搜索的边际收益变小;通用规划器场景已降级,留给少数需要可控、可审计搜索的场合。

一句话收口这张表:能被一段内部链替代的,进了权重(CoT、ToT 式内部搜索);不能被替代的,留在了外面(接地、工具往返、真正的并行)。这条分界线,就是判断「某个手写模式在推理模型上还活不活」的通用判据。

§本章 self-check

先合上教程,把答案写在纸上或编辑器里。写完再点开对照——直接点开等于把这一节再读一遍。

  1. 用一句话说清:从 o1(2024-09)到 DeepSeek-R1(2025-01),CoT 在「谁来负责诱发那段中间推理」这件事上发生了什么变化?R1-Zero 又额外证明了什么?
  2. test-time scaling 为什么被称作「与预训练规模正交的新轴」?这根轴尾部「趋平」对一个 80% 是简单问句的客服 agent 意味着什么实操结论?
  3. 给出一条证据说明「在推理模型上手写 few-shot CoT 会掉分」,并说清其机制(为什么样板和内部链会相撞)。
  4. (设计层)你要做一个用 o3 的客服 agent:需要查订单系统、发起退款、并对每一步留可审计痕迹。前三章你学过 CoT few-shot、Self-Consistency、ReAct、Plan-and-Execute、ToT。哪些保留为手写模式、哪些去掉交给权重?逐个说明理由。
答案(先做完再展开)
  1. 诱发者从你变成了模型自己:o1 起,那段中间推理由 RL 训进权重、出厂自带,不再靠你写 "step by step" 或 few-shot exemplar 去诱发。R1-Zero 额外证明:推理链能从纯 RL、无 SFT中涌现——不喂任何人工推理范例,模型也能自己长出 CoT。
  2. 因为「把模型练更大(预训练)」和「让模型想更久(推理时)」是两件可分别独立投入的事,固定权重只加推理算力,正确率也单调上升,所以是两根正交的轴。尾部趋平的实操结论:简单问句落在曲线已平的那段,拉高思考预算买不到正确率、只增成本与延迟,还会触发 overthink——应按难度分流预算,而非一刀切拉满。
  3. 证据:给 o1-preview 套 5-shot CoT,正确率低于极简 prompt(另:o1-preview 在某语法分类任务上因显式 CoT 掉约 −36%)。机制:模型已有一套训练好的内部推理走法,你塞进去的显式 exemplar 把它往人写的另一条路上拽,两套链相撞,结果不如让它自己走。
  4. 保留:ReAct(工具编排)——查订单 / 发退款是真实工具往返,必须外层手搭循环来接地,权重补不了;Plan-and-Execute / 显式步骤化——「每步留可审计痕迹」要的就是结构化、可回放的步骤,比藏在权重里的内部链可控。去掉:手写 few-shot CoT——o3 自带推理,样板只会相撞掉分,改 zero-shot 直给;Self-Consistency——成本高、且 o3 内部已在做隐式搜索,一般不必再外挂多采样投票(除非个别高价值难题);ToT 外部树搜索——模型内部已隐式搜,外挂通用树搜索边际收益小,去掉。一句话判据:接地 / 可审计 / 真并行的留外面,纯推理的交权重。
进阶挑战 · 刚好够不着

设计一个实验,验证 few-shot CoT 在某推理模型上是否真的掉分

别只引用「o1-preview 5-shot 更差」这个结论,自己设计一个能复现或证伪它的实验。至少写清:(1) 选哪个推理模型、对照哪个非推理模型;(2) 任务集怎么选——要覆盖「简单(<3 步)」「多步推理」「感知 / 隐式规律」三类,为什么这三类缺一不可;(3) 三个对照臂(zero-shot 直给 / 3-shot CoT / 5-shot CoT)怎么控制变量;(4) 用什么指标、怎么判定「掉分」在统计上成立而非噪声;(5) 你预期在哪一类任务上掉分最狠,为什么。

提示(卡住再展开)

关键设计点:任务集必须按难度分层报告,否则简单任务的 overthrink 掉分会和感知任务的 CoT 掉分混在一起、互相掩盖——这正是为什么三类缺一不可。控制变量上,三臂之间只动「few-shot 例子的数量与是否含显式推理」,task、温度、推理预算档全部锁死。判定「掉分」要跑足样本量并配显著性检验(如配对比较 + 置信区间),避免把采样噪声当效应。预期掉分最狠处:感知 / 隐式规律类——因为这类任务本该靠一眼识别的直觉,强行展开 CoT 会把对的直觉推翻(对应正文 −36% 那类现象),比单纯 overthinking 更伤。