第 25 课:规划与反思

上一课我们把「知道什么」交给了记忆与检索;但一个长任务光有知识还不够——规划该怎么做、反思到底值不值?这一课从「一步错、步步错」的错误累积讲起,把计划—执行—反思三件套、分解粒度、树搜索式分解(Tree of Thoughts)与语言化反思(Reflexion)一路算清,最后回到最关键的边界:反思什么时候会白转、甚至有害。它上承第 24 课《记忆与 RAG 工程化》(RAG 即「检索增强生成」),下启第 26 课《多智能体与协议》。

🎯 学完这 6 步你将能够:
① 用 p^N 算出长任务的失败率:p=0.95 时 10 步全对仅 0.599、20 步只剩 0.359,先规划能把 10 步抬到 0.904
② 用 b^d 估分解方案的搜索代价(3³=27、5³=125、5⁴=625),并说清「每步可独立验证」才是粒度下限
③ 用 Tree of Thoughts 的 4%→74% 与 Reflexion 的 80%→91% 两个数字,说清结构化探索与语言化反思各自的收益与代价
🗺 本节推理链(6 步逻辑递进:从「为什么会错」到「反思何时该停」)
1要让 Agent(即「会自己规划、调工具完成任务」的智能体)跑完一个长任务,这就要求先承认一个约束:每步正确率是连乘的 p^N,一处错写进 context(即「模型每一步能看到的全部文字」)就会被后续继承。长任务要先规划。
↓
2既然「长任务要先规划」,所以要把「想」和「做」分开——这就要求循环里有计划—执行—反思三步:执行产生真实观察、反思把教训写回 context,否则只会在同一个坑里重复。三件套要闭环。
↓
3既然「三件套要闭环」,于是计划「拆到多细」成了关键旋钮——这就要求在「分支数 b、深度 d」的搜索空间 b^d 与 tokens(即「模型处理的文字最小单位」)成本之间取舍:拆太粗等于没拆、拆太细则节点爆炸。分解粒度要算清。
↓
4既然「分解粒度要算清」,而粒度取舍就是在「每层几个候选(b)」与「往下几层(d)」之间定——这就要求在每一步真的把候选列出来、评估后再往下走:把推理展开成一棵树,每个节点是一个中间想法,写进 context 后可以评估、可以回溯(Tree of Thoughts,即「把思路展开成树再搜索」)。先分支再选路。
↓
5既然「先分支再选路」,所以选完还得看结果——这就要求把失败写成语言反馈、下一轮带着它重试(Reflexion,即「用文字写自我反思再重试」),于是同样的 context 会被反思改写,否则错了也不长记性。反思要能改策略。
↓
6既然「反思要能改策略」,这就要求给它设边界:没有新信息、只改同一处、只认同自己时,反思会空转,反而多烧 tokens——所以反思要先问「这一轮比上一轮多了什么新信息」。反思要防空转。
任务规划错误累积分解粒度Tree of ThoughtsReflexion反思失效
1
长任务为什么会「一步错、步步错」?
提示:把步数和单步正确率摆出来,想想「每步都对才算对」时,成功率会怎么随步数变。
▾
知识背景
ReAct(即「先想一步、再调一次工具拿回观察结果」的交替循环,Yao 等,arXiv:2210.03629,ICLR 2023)证明「边想边做 + 外部观察」能纠正单步错误;但步数一长,错误会被后面每一步继承。Plan-and-Solve(Wang 等,arXiv:2305.04091)提出先规划再执行:把计划显式写出来,再逐步求解——这正是「规划」作为一个独立环节的起点。

一个 Agent 要跑完长任务,为什么常常「一步错、步步错」?

因为长任务要求每一步都对,成功率是每步正确率的连乘(p^N);更糟的是,一处错误一旦写进 context(即「模型每一步能看到的全部文字」),后面每一步都会带着它继续推理。就像没有图纸就盖楼:砌错一堵承重墙,上面所有楼层都得拆掉重来。所以先把「错从哪来、规划值多少」算清楚。

🧮 第一笔账:步数如何放大失败
Step 1:步数一多,成功率就掉
任务步数 N全对成功率 p^N(p=0.95)至少错一步
5 步0.95⁵ ≈ 0.774约 23%
10 步0.95¹⁰ ≈ 0.599约 40%
20 步0.95²⁰ ≈ 0.359约 64%
算术:单步 95% 看着很高,但 10 步只剩 0.599、20 步只剩 0.359——错误是乘性累积的,步数越多次方越低。
Step 2:先规划能把曲线抬回来
做法单步正确率10 步全对
不规划,直接做0.950.95¹⁰ ≈ 0.599
先花 1 步做计划,再执行0.990.99¹⁰ ≈ 0.904
算术:先花一步把每步正确率从 0.95 抬到 0.99(0.99 为示意取值,用于演示杠杆方向,非某模型实测),10 步全对从 0.599 升到 0.904(+0.306)。代价只是多 1 次调用(11 步里的 1 步,约 9%)——用 9% 的成本换 0.306 的成功率,这就是规划的价值。
Step 3:错误会被后续步骤继承
项数值
总步数10
出错位置第 3 步
被影响的后续步数10 − 3 = 7 步
算术:第 3 步出错,后面 7 步都要带着这个错误推理。这不是「扣一步的分」,而是把错误写进 context、让后续全在错的前提上工作——所以「尽早发现并纠错」比「最后重来」便宜得多。
🎯 关键认知

长任务的第一原则是先想再做:规划不是装饰,而是把每步正确率抬上来的杠杆;而错误一旦写进 context 就会被后续继承。记住这个量级——规划花 1 步,救回的是整条链的成功率。

AI 助教
👋 对「长任务为什么容易崩」有疑问?比如「10 步任务大概多少成功率」「规划到底能抬多少」?

说出你的任务步数与单步正确率,我帮你用 p^N 估一遍。
2
把其中一环拿掉,循环会退化成什么?
提示:从「缺了它,下一轮会不会重复上一轮的错」入手,逐个想三件套里每一个拿掉之后会怎样。
▾
知识背景
ReAct(即「先想一步、再调一次工具拿回观察结果」的交替循环,Yao 等,arXiv:2210.03629,ICLR 2023)给了「执行—观察」这一环;Plan-and-Solve(Wang 等,arXiv:2305.04091)补上「先出计划」这一环;两者合起来还不够——失败之后要么改策略、要么原地重来,这一步就是反思。三件套的判据不是「三个角色」,而是「三个动作必须闭环」。

上一张卡片说明长任务要先规划。但「有计划」还不够——计划会错、执行会失败,所以为什么还要有反思这一环?

因为三步缺任何一步,循环都会退化成「重复劳动」:没有计划就没有方向,没有执行就只剩空想,没有反思就会在同一个坑里反复摔。就像考完试整理错题本:不改脑子,只改下一次的答题策略。所以先看清三件套的分工,再算它值多少。

🧮 第二笔账:三件套的分工与一轮闭环的账
Step 1:三件套各管什么、缺了会怎样
组件做什么缺了会怎样
Plan 计划把任务拆成可执行步骤执行没有方向
Act 执行调用工具、拿到观察只剩空想,世界不变
Reflect 反思评估结果、把教训写回 context同一个错反复犯
三件套不是三个角色,而是三个必须闭环的动作——计划给方向、执行产生真实反馈、反思把反馈转成下一轮的经验。
Step 2:一轮闭环的调用账
环节调用次数(以 5 步任务为例)
计划1
执行5
反思1
合计1 + 5 + 1 = 7 次
算术:同样一个 5 步任务,不反思是 1 + 5 = 6 次调用,加了反思是 7 次,多约 17%(1 ÷ 6,示意)。
Step 3:缺反思会重复劳动
情形3 轮里的执行步数
无反思,每轮重试 5 步5 × 3 = 15 步,错误照旧
有反思,第 2 轮换策略5 × 2 = 10 步,第 3 轮不再重试
算术(示意):同样失败 3 轮,无反思累计 15 步仍在原地;有反思第 2 轮就换了策略,省下约 5 步(15 − 10)。反思的价值在「换策略」,不在「多试一次」。
🎯 关键认知

三件套的判据是「闭环」:没有执行的反思是空想,没有反思的循环是重复。缺哪一环,循环都会退化成白转圈——所以要算清每一环的调用账,也要算清缺一环的浪费账。

AI 助教
👋 对计划—执行—反思有疑问?比如「反思要不要写进提示」「反思几次比较合适」?

说一下你的任务与失败模式,我帮你设计这个闭环。
3
计划该拆到多细——拆得更细,会带来什么?
提示:每多一个分支、多一层深度,可能路径会怎么变?再想 token 成本会跟着怎么变。
▾
知识背景
分解粒度是规划里最容易拍脑袋的一环。Tree of Thoughts(ToT,即「把推理展开成树、每个节点可评估可回溯」的方法,Yao 等,arXiv:2305.10601,NeurIPS 2023)给出明确的设计原则:一个「思考」(thought)太小,模型评估不了;太大,搜索空间又会爆炸——粒度就是在这两者之间取舍。

上一张卡片把三件套讲清楚了,其中「计划」这一步要把任务拆开。那——拆得更细,会带来什么?

因为拆得越细、分支越多,可能路径按「分支数 b 的深度 d 次方」(b^d)爆炸,tokens(即「模型处理的文字最小单位」)成本跟着涨;拆得太粗,又等于没拆、计划里没有可执行的信息。就像导航:只给「去上海」没用,给「每个路口怎么打方向盘」又太啰嗦。所以先算清搜索空间,再定粒度。

🧮 第三笔账:分解粒度的搜索代价
Step 1:路径数随分支与深度爆炸
分支数 b深度 d可能路径 b^d
333³ = 27
434³ = 64
535³ = 125
545⁴ = 625
算术:分支从 3 升到 5、深度不变,路径从 27 涨到 125(约 4.6 倍);深度再加一层就到 625(再 ×5)。每多一个候选、多一层搜索,成本都是乘性的。
Step 2:粗拆、适中、细拆的对照
粒度步数问题
太粗2–3 步计划本身没信息量
适中5–9 步每步可独立验证
太细20 步以上节点爆炸、context 塞满
判定(示意):下限是「每一步都能被独立验证」(否则错了也不知道),上限是「路径数与 token 成本可承受」;5–9 步往往是较实用的区间,但步数服从「可验证」,不是反过来。
Step 3:拆细的 token 账单(示意)
方案每步 token总 token
拆成 10 步2,00020,000
拆成 20 步2,00040,000
算术(示意):同样内容拆成 20 步,进模型的 token 是 10 步的 40,000 ÷ 20,000 = 2 倍,而成功率未必跟着涨——这就是「拆得越细 ≠ 做得越好」。
🎯 关键认知

分解粒度的判据是「每一步能否被独立验证」:可验证是下限,成本是上限。拆得越细,路径数按 b^d 涨、token 也跟着涨——粒度要算清,不是越细越好。

AI 助教
👋 对分解粒度有疑问?比如「任务该拆成几步」「分支数怎么定」?

说一下你的任务步数与分支习惯,我帮你判断粒度是否划算。
4
一条链写到一半才发现开头就错了——若手上有几种方案,你能做什么?
提示:想一下「一条链写到一半才发现开头就错了」的场景——如果手上有几种方案,你能做点什么?
▾
知识背景
Tree of Thoughts(ToT,即「把推理展开成树、每个节点是一个中间想法、可评估可回溯」的方法,Yao 等,arXiv:2305.10601,NeurIPS 2023):在 Game of 24(用 4 个数字凑出 24 的算术题)上,GPT-4 用链式思维(CoT,即「把推理写成一条线」)只解出 4%,ToT 解出 74%。

上一张卡片说分解粒度要算清;而让模型自己「先展开几条候选再挑」,正是把粒度落到搜索上的做法。为什么「先想几个方案再选」比「一条路走到黑」好?

因为一条链是从左到右写下去的,开头错了后面再对也白搭;树搜索允许模型在中间停下、评估这一步有没有希望、没希望就回溯。就像写方案:先列 3 个提纲,比闷头写 30 页更容易发现「这个大方向不对」。所以先看搜索空间,再算它值多少 token。

🧮 第四笔账:树搜索的收益与代价
Step 1:同一道 Game of 24,不同做法的成功率
方法Game of 24 成功率
CoT(单链)4%
ToT(b = 1,每步只展开 1 条)45%
ToT(b = 5,每步留 5 条)74%
算术:从 4% 到 74% 是 +70 个百分点;即使只展开 1 条(b=1),也从 4% 升到 45%——注意 b=1 仍然是 ToT(每个中间步都会做「评估」,只是每步只保留 1 条候选),所以这 45% 主要说明「允许模型评估中间想法」这一步本身贡献很大,而不只是「展开条数变多」。
Step 2:树搜索一次要评估多少候选
项数值
分支数 b5
搜索步数 T3
被评估的中间想法(量级)b × T = 5 × 3 = 15
算术(示意,按论文 b=5、T=3 的配置量级):一次解题最多要评估约 15 个中间想法,而单链 CoT 只往 context 里写 1 条——收益来自「多生成 + 评估 + 回溯」。
Step 3:用 token 换正确率
方法相对推理次数成功率
CoT1×4%
ToT(b = 5)明显更高(多次前向)74%
算术:正确率涨了 74 ÷ 4 ≈ 18.5 倍,但要付出多次前向的 token 成本——树搜索是用 token 换正确率,先想清楚愿意付多少。
🎯 关键认知

树搜索的有效性来自「结构化的探索」:允许模型在中间评估、回溯,而不是一条链走到黑。ToT 的 4%→74% 是真的,但它用 token 换来的——愿不愿付账,决定了该不该把推理拆成树。

AI 助教
👋 对树搜索式分解有疑问?比如「什么时候该上树搜索」「它比多次采样强在哪」?

说一下你的任务能不能评估中间结果,我帮你判断值不值得展开成树。
5
反思(Reflexion)为什么能提升成绩?它又贵在哪?
提示:想一下「不改模型参数、只把失败总结成一句话写下来」会发生什么——第二轮它带着什么重试?
▾
知识背景
Reflexion(Shinn 等,arXiv:2303.11366,NeurIPS 2023)不更新权重,而是把失败总结成语言反馈(即「用文字当强化信号」)写进情节记忆,下一轮带着再试。它在 HumanEval(一个代码生成基准)上把 pass@1(一次通过率)从 GPT-4 的 80% 提到 91%。

上一张卡片讲了「先分支再选路」,而选完之后还得看结果。反思为什么能把成绩抬上去?它又贵在哪?

因为反思把「这次错在哪、下次怎么改」写成一句话,放进下一轮的 context,等于不改权重就换了一次策略。就像导航发现前方堵车后,改用一句「绕开那段路」重新规划,而不是原路再开一遍。所以先看收益数字,再算它的账单。

🧮 第五笔账:反思的收益与账单
Step 1:反思带来多少提升
方法HumanEval pass@1
GPT-4 单次80%
Reflexion(带语言反馈重试)91%
差值91 − 80 = 11 个百分点
算术:11 个百分点对应相对提升 91 ÷ 80 − 1 ≈ 13.75%,靠的不是微调——只动上下文、不动权重。
Step 2:反思的账单
项数值
最多试错轮数(示意:本课假设,论文按任务设不同预算)5
每轮新增1 次反思 + 1 次重试
反思长期保留滑动窗口最近 3–5 条(示意)
算术(示意):最多 5 轮试错,每轮都多付「一次反思 + 一次重试」;把反思全留会让历史撑爆 context,所以用最近 3–5 条的窗口控制占用。
Step 3:收益能不能盖过成本
项计算
失败率(GPT-4)100% − 80% = 20%
失败率(Reflexion)100% − 91% = 9%
失败率降到9 ÷ 20 = 0.45(少了约一半失败)
算术:80% → 91% 意味着失败率从 20% 降到 9%,即失败少了约一半。值不值,取决于这半个失败率对你的任务值多少 token。
🎯 关键认知

反思是一种「便宜」的强化学习:只动上下文、不动权重。它用 +11 个百分点(80%→91%)证明了价值,但要清楚账单是「多轮试错 + 反思文本本身占上下文」。

AI 助教
👋 对 Reflexion 有疑问?比如「反思文本怎么写才有用」「它到底贵在哪」?

说一下你的任务有没有明确成败信号,我帮你判断反思值不值得上。
6
反思什么时候没用甚至有害?
提示:想一下「没有任何新信息时,让模型再想一遍」会发生什么——它会变对,还是只换个说法?
▾
知识背景
反思不是万灵药。Huang 等(arXiv:2310.01798,ICLR 2024)发现:没有外部反馈时,模型「自查自纠」(intrinsic self-correction,即「不靠外部信号、只凭自己判断对错」)会让推理成绩下降,而且调用越多越差——它无法可靠判断自己的推理对不对。Self-Refine(Madaan 等,arXiv:2303.17651,NeurIPS 2023)在有明确评价信号时平均提升约 20%,也印证了「有没有外部信号」是分水岭。

上一张卡片看到反思能涨分,但它的前提是「反思真的带来新信息」。反思什么时候没用,甚至有害?

因为当模型自己判断不了对错、又没有外部信号时,反思只会自我确认或反复改同一处——空转还多烧 tokens。就像考试时趴桌上反复检查同一道题:不改草稿,只把卷面抄得更工整。所以先算清空转的账,再定反思该停在哪。

直觉上更自然的做法是让模型自查自纠、不加任何外部信号;Huang 等的实测显示这条路会掉分——调用从 1 次加到 5 次,GSM8K 正确率反而从 95.5 降到 89.0。所以反思的前提不是「多想几遍」,而是「这一轮多了什么新信息」。

🧮 第六笔账:反思失效的三种模式与代价
Step 1:无外部信号时,自纠会让成绩下降
设置(论文报告)调用次数GSM8K 正确率
GPT-4 标准提示195.5
自纠第 1 轮391.5
自纠第 2 轮589.0
算术:调用从 1 次加到 5 次,GSM8K 反而从 95.5 降到 89.0(−6.5)——数据来自该论文 Table 3(arXiv:2310.01798)。没有外部信号时,多反思不是更准,而是更差。
Step 2:三种失效模式
模式机制后果
自我确认模型认定自己没错可能把对的改成错的
反复改同一处没有新信息,只换措辞答案不变、白烧 token
空转无终止条件地重试调用越多越差
判定(定性):这三种模式的共同点是「没有新信息进来」——反思若不能引入外部信号或新观察,只是把同一段文字重新生成一遍。
Step 3:空转的账(示意)
情形调用次数
不反思,1 次作答1
反思 3 轮,答案不变1 + 3 = 4 次
浪费多出的 3 次(约 3 ÷ 4 = 75%)
算术(示意):空转 3 轮后答案没变,等于多付 4 次里的 3 次调用(约 75%)却零收益——所以反思必须有「无进展即停」的终止条件。
🎯 关键认知

本课收口:反思的价值不在「多想几遍」,而在「引入新信息、换掉旧策略」。没有外部信号、只改同一处的反思是空转——判断反思有没有用,先问「这一轮比上一轮多了什么新信息」。下一课我们把视线从「单个 Agent 怎么想」移到「多个 Agent 怎么协作」,讲多智能体与协议。

AI 助教
👋 对反思的失效模式有疑问?比如「怎么判断反思在空转」「什么时候该停」?

说一下你的反思循环与成败信号,我帮你判断它是在改策略还是在白转。