#让模型学会回退:LLM Search Trace / Backtracking 研究脉络综述
这篇文章专门展开上一文里的“路线 D”:backtracking / search trace training。核心问题是:
LLM 的长推理到底应该怎样学习“试错、检查、回退、换分支、停止”?错误轨迹有没有训练价值?如果有,什么样的错误才有价值?
一句话结论:
错误本身没有价值;有价值的是可诊断、可恢复、能暴露搜索结构的错误。回退本身也没有价值;有价值的是知道为什么回退、回退到哪里、换什么策略、以及什么时候不要继续浪费 test-time compute。
更人话一点:
不是让模型学会说“等等,我错了”,而是让模型学会:我现在这一步为什么错、错在哪里、这个局面还能不能救、该退回哪个分叉点、换哪条路、以及什么时候应该直接放弃重采样。
这条线和 reasoning SFT 的 off-policy 问题非常紧密。很多强模型 CoT 里都有“反思”“检查”“回退”文本,但直接 SFT 这些文本不一定让 student 学会搜索,反而可能只学到一种漂亮但空洞的反思腔调。
#1. 先把概念说清楚:reflection、search、backtracking 不是一回事
这几个词经常混在一起,但研究上最好分开:
| 概念 | 人话解释 | 关键问题 |
|---|---|---|
| Reflection / self-correction | 模型对自己刚才的答案或步骤做检查和修改 | 检查是否有新信息或可靠反馈支撑? |
| Verification | 用规则、verifier、工具、测试、环境反馈判断某步或某个答案是否正确 | verifier 是否可靠,反馈粒度够不够? |
| Search | 同时或顺序探索多个候选路径 | 搜索空间怎么表示,怎么扩展,怎么剪枝? |
| Backtracking | 发现当前路径不行后,回到早前节点换分支 | 回退点在哪里,错误是否可恢复? |
| Test-time compute allocation | 在推理时决定花多少计算、用在哪种策略上 | 简单题别过度思考,难题别太早停止 |
一个常见误区是把“模型输出了反思文本”当成“模型具备了反思能力”。但事实上,LLM 可以生成很像反思的话,却没有真正获得新证据,也没有改变错误决策。
因此这条研究线的核心不是“让 CoT 更长”,而是:把推理过程组织成可评估、可分叉、可回滚、可停止的计算过程。
#2. 第一阶段:CoT 把中间计算显性化,但还不是搜索
#2.1 Chain-of-Thought:语言 scratchpad 的出现
Chain-of-Thought Prompting(arXiv:2201.11903)和 Zero-shot CoT(arXiv:2205.11916)让大家看到:模型在回答前写出中间步骤,复杂推理会显著变好。
它解决的问题是:标准 next-token generation 太像“直接报答案”,没有显式中间计算空间。CoT 给模型一个语言 scratchpad,让它可以把中间变量、子问题、推导步骤写出来。
但 CoT 的局限也很明显:
- 它通常还是一条线性路径;
- 一旦前面走错,后面可能继续错下去;
- 它不天然包含搜索、分支、剪枝、回退;
- CoT 文本也未必忠实反映模型内部真正因果计算。
所以 CoT 是 search trace 的基础,但不是 search trace 本身。
#2.2 Self-Consistency:先不回退,先多采样
Self-Consistency(arXiv:2203.11171)提出一个很重要的想法:复杂问题往往有多条推理路径通向同一个答案,所以不要只贪心生成一条 CoT,而是采样多条路径再投票。
这其实是 test-time search 的早期形式,只不过它是并行独立采样,不是单条轨迹内部的顺序回退。
它的重要启发是:
多想不一定等于一条链想更久;也可以是多条链并行探索。
这会在后面 “To Backtrack or Not to Backtrack” 中成为一个关键对照:在固定 compute 下,顺序 backtracking 不一定比 best-of-N parallel sampling 更好。
#3. 第二阶段:verifier / process reward 让“检查”有了外部锚点
#3.1 Training Verifiers:生成器之外还需要裁判
Training Verifiers to Solve Math Word Problems(arXiv:2110.14168)提出:生成很多候选答案,再训练 verifier 选择正确答案。这个工作比 CoT 更早,但对后来的 reasoning search 很关键。
它说明:LLM 推理不一定要完全靠 generator 自己一次性成功。可以把系统拆成:
生成候选路径 -> verifier 评估 -> 选择更好路径
这就把 reasoning 从“单次生成”变成了“生成 + 评价”的组合系统。
#3.2 Let's Verify Step by Step:final answer reward 太粗,中间步骤也要评估
Let's Verify Step by Step(arXiv:2305.20050)进一步推进到 process supervision:不仅判断最终答案,还给每个中间推理步骤打标签。论文在 MATH 上发现 process supervision 可以显著优于只看 final outcome 的监督,并发布 PRM800K。
这对 backtracking 非常关键。因为回退需要知道:
- 哪一步开始错?
- 这个错误是否会污染后续?
- 应该从哪里重新开始?
如果只有 final answer wrong,模型最多知道“整条路错了”;如果有 process feedback,才可能知道“第 4 步错了,应该回到第 3 步换分支”。
这也是为什么我说:可诊断的错误才有价值。
#4. 第三阶段:ReAct / Reflexion / ToT 把搜索外部化
#4.1 ReAct:reasoning 和 acting 交替,反馈来自环境
ReAct(arXiv:2210.03629)把 reasoning trace 和 action trace 交织起来:模型一边想,一边调用工具或环境获取 observation。
这和纯 CoT 的关键区别是:模型不是在脑内自言自语,而是在和外部世界交互。外部 observation 可以纠错。
对于 LLM Agent 来说,这一点非常重要:agent 的错误不是只发生在文字里,而是发生在 tool call、文件修改、网页操作、代码执行中。回退也不是“重新说一句”,而是要回滚状态、修正操作、重新规划。
#4.2 Reflexion / Self-Refine:反思循环的早期形态
Reflexion(arXiv:2303.11366)提出 language agent 可以在试错后,把反馈写成 verbal reflection 存进 memory,下次尝试时使用。Self-Refine(arXiv:2303.17651)则是生成、反馈、修改的循环。
这类方法展示了 reflection 的潜力,但也埋下一个问题:如果 feedback 本身不可靠,或者没有外部信息,reflection 可能只是更长、更自信的文本。
#4.3 Tree of Thoughts:显式分支、评估、回溯
Tree of Thoughts(arXiv:2305.10601)更接近经典搜索:把 “thought” 当作中间节点,对多个 thought 分支进行扩展、评估、lookahead 和 backtracking。
它解决了 CoT 的一个核心限制:线性 left-to-right generation 不能很好处理需要探索和全局选择的问题。
但 ToT 主要是 inference-time framework:它告诉我们可以外部组织搜索,却还没有回答更深的问题:模型能否通过训练,把搜索/回退策略内化为自己的能力?
这正是后面 Stream of Search 和 Self-Backtracking 要回答的问题。
#5. 一个重要反例:没有外部反馈的“自我纠错”并不可靠
Large Language Models Cannot Self-Correct Reasoning Yet(arXiv:2310.01798)是这条线里必须认真看的反例。它指出,在没有外部反馈时,LLM 的 intrinsic self-correction 并不可靠,有时甚至会把正确答案改错。
这篇工作的意义不是说 reflection 永远没用,而是提醒我们:
reflection 的有效性来自反馈结构,不来自“反思”这个词本身。
例如:
- 如果模型调用编译器得到报错,再修改代码,这是有反馈的 reflection;
- 如果模型用 verifier 发现第 3 步不成立,再回退,这是有锚点的 reflection;
- 如果模型只是生成“让我重新检查一下”,但没有新证据,它可能只是在生成更像自我纠错的文本。
Chain-of-Verification(arXiv:2309.11495)也说明了类似点:把验证拆成明确问题,并让模型独立回答这些 verification questions,能降低 hallucination。也就是说,反思要变可靠,最好被结构化成可检查的子任务。
#6. 第四阶段:test-time compute 成为新的 scaling axis
2024 年之后,一个更大的框架出现了:推理能力不只是模型参数和训练 token 的函数,也是 test-time compute allocation 的函数。
#6.1 Large Language Monkeys:多采样可以按 compute 扩展覆盖率
Large Language Monkeys(arXiv:2407.21787)研究 repeated sampling。它发现,在 coding、formal proofs 等可自动验证任务上,采样很多候选解会显著提高 coverage。例如 SWE-bench Lite 中,DeepSeek-Coder-V2-Instruct 从单样本 15.9% 提升到 250 samples 下 56%。
这说明一个重要事实:
很多时候模型不是完全不会,而是一次采样没采到。
所以,backtracking 不是唯一的 test-time scaling。并行采样 + verifier 也是强基线。
#6.2 Scaling LLM Test-Time Compute Optimally:关键是怎么花预算
Scaling LLM Test-Time Compute Optimally(arXiv:2408.03314)把问题说得更系统:固定 inference compute 下,到底应该用搜索、PRM-guided selection,还是 adaptive distribution update?
这对 backtracking 的启发是:
回退只是花 test-time compute 的一种方式。它必须和并行采样、verifier reranking、工具调用、latent compute 等策略比较。
#6.3 Overthinking:不是所有题都值得长思考
Do NOT Think That Much for 2+3=?(arXiv:2412.21187)指出 o1-like 长思考模型会 overthinking:简单题也花大量 tokens,收益很小甚至有害。
因此,真正成熟的 reasoning 系统不应该只有“会回退”,还应该会:
- 判断题目难度;
- 决定是否需要长 CoT;
- 决定是顺序搜索还是并行采样;
- 决定什么时候停止;
- 避免在低价值路径上继续浪费 token。
这把 backtracking 问题上升为推理预算控制问题。
#7. 第五阶段:Search Trace Training —— 把搜索过程本身变成训练数据
现在进入这条线最核心的部分:如果 search/backtracking 有价值,能不能把搜索过程直接训练进模型?
#7.1 STaR:从正确 rationale 中自举
STaR(arXiv:2203.14465)可以看作 search trace training 的早期亲戚。它不是显式搜索树,但它把“模型自己生成 rationale、筛选正确结果、再训练自己”变成闭环。
它的关键贡献是:模型可以从自己生成的数据中提升 reasoning,但前提是有可靠筛选信号。
这也对应一个基本原则:self-training 不是从虚无中产生能力,而是在 feedback / answer / verifier 的锚点下放大已有能力。
#7.2 Quiet-STaR:把 thinking 扩展到任意文本
Quiet-STaR(arXiv:2403.09629)把 STaR 从 QA rationale 推广到任意文本:模型在每个 token 前生成 hidden rationale 来预测未来文本。
它说明 reasoning 不一定只发生在显式问答里;语言建模本身也可能需要隐式推理。
不过对于 backtracking 来说,Quiet-STaR 更像是“让模型学会先想再说”,还不是“学会搜索和回退”。真正把搜索树序列化成语言的是 Stream of Search。
#7.3 Stream of Search:让模型看到 fruitful mistakes
Stream of Search(arXiv:2404.03683)是这条线的代表工作。它的出发点非常直接:
Language models are rarely shown fruitful mistakes while training.
模型训练数据里通常只有最终正确解,或者最优路径。这样模型很难学到:如果某条路走不通,该怎样识别、剪枝、回退、换分支。
SoS 的做法是把搜索树探索过程 flatten 成一个语言序列:生成节点、探索、剪枝、backtrack、goal check。它在 Countdown 任务上用 heuristic solvers 生成 search streams,然后预训练 transformer。结果显示,相比只训练 optimal search trajectory,SoS pretraining 的 search accuracy 提升约 25%。
这个工作的核心价值是:
它把“错误路径”从噪声变成结构化教材。
但注意,不是所有错误都被无脑加入训练。SoS 中有价值的是“搜索过程里的错误”:它们有上下文、有剪枝信号、有回退动作、有最终目标检查。也就是说,它们是可诊断、可恢复、能暴露搜索结构的错误。
#7.4 SoS 留下的新问题
SoS 也留下几个问题:
- 任务依赖强:Countdown 这种符号搜索任务很适合生成 search trace,但开放域 agent/code 任务如何生成高质量 search trace?
- 搜索语言是否泛化:模型学到的是抽象搜索控制,还是某个 solver 的固定风格?
- trace 长度成本:完整搜索过程很长,训练和推理都昂贵。
- 错误质量控制:哪些错误是 fruitful mistakes,哪些只是垃圾路径?
这些问题引出了后面的 backtracking debate。
#8. 第六阶段:Backtracking Debate —— 回退不是万能的
#8.1 Self-Backtracking:让模型学会何时、何处回退
Self-Backtracking(arXiv:2502.04404)明确提出:有效 reasoning 需要 internalize search process,而 backtracking 是传统搜索算法里的关键操作。它希望模型在训练和推理中都能自主决定 when and where to backtrack。
论文报告相对 optimal-path SFT 有超过 40% 的提升。它的重要性在于:
- 不只是给模型看正确路径;
- 而是教模型处理走错后的恢复;
- 把“慢思考”中的搜索过程转化成更可内化的策略。
但这类工作容易被误读成“backtracking 越多越好”。后续研究正好反驳了这一点。
#8.2 To Backtrack or Not to Backtrack:顺序回退 vs 并行采样
To Backtrack or Not to Backtrack(arXiv:2504.07052)提出了一个非常关键的问题:
固定 compute 下,顺序 backtracking 真的比 parallel best-of-N 更好吗?
它在 Countdown 和 Sudoku 上比较后发现:
- Countdown 中,sequential search/backtracking 反而不如 direct + best-of-N;
- Sudoku 中,backtracking 更有帮助。
这说明 backtracking 的收益强烈依赖任务结构。
论文还指出两个导致 backtracking 退化的因素:
- 固定 search trace 训练会把模型锁进 suboptimal strategy;
- 显式 CoT supervision 可能抑制模型的 implicit reasoning。
这个结论对 reasoning SFT 很重要。它说明:直接 SFT 一套 teacher backtracking trace,可能不是教会模型搜索,而是把模型绑到 teacher 的固定搜索风格上。
#8.3 How Much Backtracking is Enough:回退量也要按任务调节
How Much Backtracking is Enough?(arXiv:2505.24273)进一步系统分析 SFT 和 RL 在八类 reasoning tasks 上的关系。它关注的问题是:backtracking 到底贡献多少?多少 backtracking 合适?
它的结论可以概括为:
- 短 CoT SFT warm-up 对 RL 有一定帮助;
- 任务越难,简单 SFT 的帮助越有限;
- 最优 backtracking 数量随任务而变:浅层任务可能不需要,Countdown 需要少量,Sudoku / 深约束任务需要更多;
- RL 可能学到的是结构化搜索模式,而不只是正确 CoT 内容。
所以 backtracking 的正确定位应该是:
它不是普适能力按钮,而是某些任务结构下的 test-time compute strategy。
#9. 与 RLVR / R1 的关系:RL 可能让搜索行为自然涌现
DeepSeek-R1(arXiv:2501.12948)显示,通过 verifiable reward 的 RL,模型可以涌现 self-reflection、verification、dynamic strategy adaptation 等 long reasoning pattern。
这和 search trace SFT 有一个重要对比:
| 路线 | 训练信号 | 优点 | 风险 |
|---|---|---|---|
| Search trace SFT | 人工/solver/teacher 生成的搜索过程 | dense、可直接教搜索格式 | off-policy、固定策略、表面模仿 |
| RLVR | student rollout + 可验证 reward | on-policy、能发现新策略 | reward 稀疏、探索难、credit assignment 难 |
| Search trace + RL | trace warm-up + reward refinement | 兼顾 cold start 和 on-policy | 如何平衡 imitation / exploration 仍未解决 |
这也解释了为什么 LUFFY 那条线和 backtracking 线会汇合:
- 如果直接 SFT teacher backtracking trace,可能 off-policy;
- 如果纯 RL,弱模型可能探索不到有效回退策略;
- 更合理的是让 trace 提供 guidance / warm-up,让 RL 或 verifier 在 student 自己的状态分布上选择性强化。
#10. Latent reasoning:也许不是所有搜索都应该写成可见 CoT
Scaling up Test-Time Compute with Latent Reasoning(arXiv:2502.05171)提出用 recurrent depth 在 latent space 中扩展 test-time compute,而不是生成更多可见 tokens。
这对 search/backtracking 有一个很深的启发:
可见 CoT 方便监督、审计和教学,但不一定是最高效或最忠实的 reasoning 载体。
有些搜索控制可能应该显式写出来,例如:
- tool call;
- 关键分支选择;
- 回退点;
- verifier 结果;
- 最终可审计的推理依据。
但有些局部探索、模式匹配、隐式剪枝,也许更适合在 latent space 中完成。
未来可能不是 visible CoT vs latent reasoning 二选一,而是混合架构:
latent compute 负责快速局部搜索与状态压缩;
visible trace 负责关键决策、外部工具、可审计回退;
verifier / reward 负责校准是否继续思考。
#11. 技术 taxonomy:什么样的错误轨迹值得训练?
现在回到最核心的问题:错误轨迹到底有没有价值?
我认为可以按下面几类区分。
| 错误类型 | 是否值得训练 | 原因 |
|---|---|---|
| 随机胡说型错误 | 不值得 | 没有结构,不能暴露可学习策略 |
| 最终错但中间有局部正确结构 | 可能值得 | 可用于学习部分 subgoal 或局部启发式 |
| 可诊断错误 | 值得 | 能定位 earliest wrong step,适合 process supervision |
| 可恢复错误 | 很值得 | 能教模型如何 backtrack / repair |
| 能暴露搜索边界的错误 | 很值得 | 让模型学会哪些分支该剪枝 |
| 高质量失败案例 | 值得 | 对 agent/code 任务尤其重要,可教 debugging |
| 不可恢复 off-manifold 错误 | 通常不值得继续 | 应该 reset / resample,而不是继续 SFT 后续 token |
换句话说,训练数据不应该只是:
正确答案 trajectory
也不应该粗暴加入:
所有失败 trajectory
更好的格式应该是:
尝试路径 -> 诊断信号 -> 回退点 -> 替代分支 -> 验证结果 -> 停止条件
这才是真正有教学意义的 search trace。
#12. 和 reasoning SFT off-policy 问题的关系
现在可以更清楚地解释,为什么直接 SFT teacher reflection/backtracking trace 有问题。
teacher 的回退发生在 teacher 自己的状态分布上。teacher 在第 8 步说“等等,我们应该回到第 4 步”,这是因为 teacher 的前 1-7 步形成了某个局面。
student 推理时可能第 3 步就偏了。此时 teacher trace 中第 8 步的回退动作,对 student 当前局面未必有意义。
所以直接 SFT 会产生三种风险:
- 表面反思化:student 学会说“wait, let's reconsider”,但不知道为什么;
- 错误回退点:student 模仿 teacher 的回退位置,但自己的错误发生在别处;
- 策略锁死:student 被 teacher 固定 search trace 锁住,失去并行采样、隐式推理或其他有效策略。
因此更合理的做法是:
- 让 student 先 rollout 自己的 reasoning;
- 用 verifier / process reward / teacher critique 标注 student 自己的错误;
- 只在可诊断、可恢复的状态上训练 backtracking;
- 对不可恢复状态 reset 或重新采样;
- 对正确但不同于 teacher 的路径保留,而不是用 KL 拉回 teacher。
这和 OPD / LUFFY 的思想完全一致:训练应该发生在 student-visited states 上,而不是纯 teacher trajectory 上。
#13. 对 LLM Agent / Code Agent 的启发
这条线对 LLM Agent 和 Code Agent 比数学题更重要。
数学题的 search trace 主要在文字空间里;code agent 的 search trace 包含:
- 修改哪个文件;
- 运行哪个测试;
- 看到什么报错;
- 判断错误来自实现、依赖还是测试理解;
- 回滚哪段 patch;
- 保留哪个局部修改;
- 换哪种 debugging strategy。
这天然就是 search / backtracking / repair 问题。
一个好的 code agent 训练轨迹,不应该只是成功 patch 的最终 diff,也不应该只是强模型完整操作录像,而应该包含:
初始假设 -> 操作 -> 测试反馈 -> 错误诊断 -> patch 回滚/局部保留 -> 新假设 -> 再测试 -> 最终通过
这就是“可诊断、可恢复、能暴露搜索结构”的错误轨迹。
#13.1 一个值得研究的方向:Agent Search Trace Dataset
可以考虑构建一种 agent search trace 数据格式:
| 字段 | 说明 |
|---|---|
| state | 当前 repo / browser / environment 状态摘要 |
| action | tool call、edit、test、search、read file 等动作 |
| observation | 编译器、测试、网页、环境返回 |
| diagnosis | 当前失败原因的结构化判断 |
| rollback target | 如果需要回退,回到哪个状态或撤销哪个 patch |
| alternative branch | 下一条尝试路径 |
| verifier result | test pass/fail、reward、judge score |
| keep/drop decision | 哪些中间修改保留,哪些丢弃 |
这类数据比“最终答案 SFT”更接近真实 agent 能力形成。
#13.2 另一个方向:Repairability-Aware Agent RL
在 agent rollout 中,不是所有错误都应该继续优化。有些错误还能救,有些已经把环境带坏了。
因此 reward / critic 可以显式预测:
- 当前状态是否可恢复;
- 最早错误动作在哪里;
- 回退成本是多少;
- 是否应该继续局部修复,还是 reset;
- 是否应该切换为 parallel sampling / best-of-N。
这会把 backtracking 从“输出一个回退文本”变成真正的 agent 控制能力。
#14. 当前研究现状总结
#14.1 已经比较清楚的共识
第一,长 CoT 不是能力本身。
长 CoT 是 test-time compute 的一种载体。它可以承载搜索、验证、反思,也可以只是冗长废话。
第二,反思需要反馈锚点。
没有新信息的 self-correction 不可靠;有 verifier、工具、环境、process reward 的 reflection 才更可能有效。
第三,backtracking 是任务依赖的。
Sudoku 这类深约束搜索任务需要回退;Countdown 这类任务在固定 compute 下可能并行采样更强;简单题则应该避免 overthinking。
第四,search trace 的价值取决于错误质量。
fruitful mistakes、recoverable failures、diagnosable wrong turns 有价值;随机错误和不可恢复 off-manifold 状态不该被无脑 SFT。
第五,SFT 和 RL 应该组合,而不是对立。
SFT 可以提供 search warm-up;RL / verifier / OPD 可以把训练拉回 student 自己状态分布,避免固定 trace 模仿。
#14.2 仍然没解决的问题
- 如何自动生成高质量 search traces?
- 数学和符号任务可以用 solver;code/agent/open-world task 更难。
- 如何判断一个错误是否 recoverable?
- 需要 earliest-error detection、state value、repair cost、future success probability。
- 如何避免固定 trace 锁死策略?
- 需要多样 search traces、productive divergence 保留、RL refinement。
- 如何在 parallel sampling 和 sequential backtracking 间路由?
- 这本质是 test-time compute controller。
- 哪些推理应该可见,哪些应该 latent?
- 可见 trace 便于监督和审计;latent compute 更高效但难解释。
- agent 环境中的 rollback 如何定义?
- 文件系统、网页状态、工具副作用、长期 memory 都使回退更复杂。
#15. 我认为最值得做的研究机会
结合 LLM Agent、code intelligence、model-based RL、latent reasoning,我觉得这条线后面最值得做的不是“再发明一个反思 prompt”,而是以下几个方向。
#15.1 Repairability-Aware Search Trace Learning
核心问题:给定 student 当前推理状态,判断这个错误是否还能救。
训练策略:
- 可恢复错误:训练 critique + backtrack + alternative branch;
- 不可恢复错误:训练 reset / resample / abandon;
- 正确但低效路径:训练 budget-aware shortening;
- 正确且不同于 teacher 的路径:保留 productive divergence。
#15.2 Decision-Sufficient Backtracking
不要监督全部 CoT token,只监督关键决策点:
- 是否继续;
- 是否验证;
- 是否回退;
- 回退到哪里;
- 换哪个分支;
- 是否调用工具;
- 是否停止。
这和 decision-sufficient OPD / latent reasoning 很自然地连接起来。
#15.3 Model-Based Backtracking for Agents
让模型学习一个“任务状态转移模型”或“结果预测器”:如果我继续这条路,未来成功概率如何?如果回退到某点,成本多少?
这就是 model-based RL 在 LLM Agent 中的自然落点:不是只预测下一个 token,而是预测 action 对任务状态、错误可恢复性、最终成功率的影响。
#15.4 Search Trace Compression
完整 search trace 太长。需要把它压缩成:
关键错误 -> 诊断 -> 回退点 -> 新策略 -> 验证结果
而不是保留每个无意义中间 token。这可以连接到 latent-space reasoning 和通用上下文压缩器。
#15.5 Agent Rollback Benchmark
构建专门评估 agent 是否会回退的 benchmark,而不是只看最终成功率。例如:
- 给 agent 一个带陷阱的 repo;
- 初始线索会诱导错误 patch;
- 测试反馈暴露真正 bug;
- 评估 agent 是否能撤销错误 patch、保留有用修改、换正确路径。
这比普通 SWE-bench 更直接测试 search/backtracking 能力。
#16. 代表工作速查表
| 阶段 | 工作 | 链接 | 核心意义 |
|---|---|---|---|
| CoT scratchpad | Chain-of-Thought Prompting | https://arxiv.org/abs/2201.11903 | 让中间推理显性化 |
| Zero-shot CoT | Large Language Models are Zero-Shot Reasoners | https://arxiv.org/abs/2205.11916 | 简单触发语也能诱导 step-by-step |
| 多路径采样 | Self-Consistency | https://arxiv.org/abs/2203.11171 | 并行采样多条 reasoning paths 再投票 |
| verifier | Training Verifiers | https://arxiv.org/abs/2110.14168 | generator + verifier 组合 |
| process reward | Let's Verify Step by Step | https://arxiv.org/abs/2305.20050 | 中间步骤监督 |
| agent feedback | ReAct | https://arxiv.org/abs/2210.03629 | reasoning + acting + observation |
| reflection loop | Reflexion | https://arxiv.org/abs/2303.11366 | verbal reflection memory |
| iterative revision | Self-Refine | https://arxiv.org/abs/2303.17651 | generate-feedback-revise |
| search framework | Tree of Thoughts | https://arxiv.org/abs/2305.10601 | thought-level tree search / backtracking |
| self-correction limit | LLMs Cannot Self-Correct Reasoning Yet | https://arxiv.org/abs/2310.01798 | 无外部反馈的自我纠错不可靠 |
| verification planning | Chain-of-Verification | https://arxiv.org/abs/2309.11495 | 把反思拆成验证问题 |
| repeated sampling | Large Language Monkeys | https://arxiv.org/abs/2407.21787 | inference compute scaling |
| compute allocation | Scaling Test-Time Compute Optimally | https://arxiv.org/abs/2408.03314 | 固定预算下选择搜索/PRM/更新策略 |
| overthinking | Do NOT Think That Much for 2+3=? | https://arxiv.org/abs/2412.21187 | 简单题不该长思考 |
| self-training | STaR | https://arxiv.org/abs/2203.14465 | rationale self-bootstrap |
| hidden thinking | Quiet-STaR | https://arxiv.org/abs/2403.09629 | 任意文本中的 tokenwise rationale |
| search trace | Stream of Search | https://arxiv.org/abs/2404.03683 | 把搜索树 flatten 成语言训练 |
| autonomous backtracking | Self-Backtracking | https://arxiv.org/abs/2502.04404 | 学会何时何处回退 |
| backtracking debate | To Backtrack or Not to Backtrack | https://arxiv.org/abs/2504.07052 | 回退 vs best-of-N,任务依赖 |
| SFT+RL interplay | How Much Backtracking is Enough? | https://arxiv.org/abs/2505.24273 | 不同任务需要不同回退量 |
| RL reasoning | DeepSeek-R1 | https://arxiv.org/abs/2501.12948 | RL 涌现 reflection / verification |
| latent compute | Scaling up Test-Time Compute with Latent Reasoning | https://arxiv.org/abs/2502.05171 | 用 recurrent latent depth 扩展推理计算 |
#17. 最后一段判断
如果说 CoT 让模型学会“把思考写出来”,那么 search trace / backtracking 这条线真正想解决的是:
模型能不能把思考组织成可探索、可评估、可回滚、可停止的过程?
目前的研究状态还远没有收敛。我们已经知道:
- 多采样和 verifier 很强;
- 无反馈 self-correction 不可靠;
- 搜索轨迹里的 fruitful mistakes 有训练价值;
- backtracking 对某些任务有帮助,但不是万能;
- SFT search trace 容易 off-policy 和策略锁死;
- RL 可以让搜索行为涌现,但探索和 credit assignment 很难。
所以,这条线接下来的关键不是让模型生成更多“反思文本”,而是建立一种更精细的训练范式:
student 自己探索 -> 识别错误类型 -> 判断可恢复性 -> 选择回退/重采样/继续 -> 用 verifier/RL 校准 -> 压缩成可泛化的决策策略
对 LLM Agent 来说,这可能就是从“会调用工具”走向“会调试自己、会撤销错误、会管理长期任务”的关键一步。真正的 agent 不是永远不犯错,而是犯错后知道哪里错、能不能救、怎么救、什么时候停止。