第 6 章 · 自测题库
自测:三层梯度题库
前五章建立了 Reflexion 的词汇表(01)、机制原理(02)、可运行循环(03)、失败模式(04)与综合选型(05)。这一章把这些拆成可单独作答的题目——题干区只放题,所有参考答案锁在文末一个折叠块里。先合上前面的章节作答,再展开核对。
本章你将检验的 schema
- 概念层:能否复述 Actor / Evaluator / Self-Reflection、trajectory、episodic memory、Ω 滑动窗、verbal reinforcement 的定义
- 原理层:能否解释为何语言能替代权重更新、reward 怎么分任务来源、反思与重试的消融差异、Reflexion 与备选方案的分界轴
- 判别层:能否对一个具体场景判断该不该上 Reflexion、该选 Reflexion 还是 Self-Refine、某失败现象的根因落在哪个组件
作答前的提醒
能顺畅读完前五章,不等于能在合上文档后答出这些题。如果出现「这题我好像见过」「这道我扫一眼就跳过」「我直接展开答案对一下就行」这几种念头,正是检索没有发生的信号——那种「我读得很顺」的流畅感会冒充掌握。每题先在纸上写下答案再展开核对。
6.0怎么用这套题
题目按难度分三层,由下往上对应不同的认知动作,也对应不同的章节。底层考回忆(recall)——定义记住没有;中层考理解(understand)——机制说得通没有;顶层考判别(discriminate)——换个场景还分得清没有。下图是这套题与教程章节的映射。
动手画一遍
在做下面的题之前,先合上整篇教程,凭记忆在纸上画出 Reflexion 的三组件循环:Actor → trajectory → Evaluator → reward → Self-Reflection → reflective text → episodic memory → 回到 Actor。标出哪一段是短期记忆(trial 内重置)、哪一段是长期记忆(跨 trial 保留、Ω 滑动窗),并在外圈写一句话注明「LLM 权重在整个过程中冻结」。画不出来的那一环,就是后面最该重点核对的考点。
6.1概念层 · 回忆(对应 01)
每题一问,答案在文末折叠块的「概念层」分组。先写下答案,再核对。
- 用一句话说出 Actor 是什么;它内部是不是一个为 Reflexion 新训练的模型?
提示:01 章 §Actor - Evaluator 的输入是什么、输出是什么?
提示:01 章 §Evaluator - Self-Reflection 把哪两样东西作为输入,产出什么形态的输出?
提示:01 章 §Self-Reflection - trajectory(轨迹)在 Reflexion 里对应短期记忆还是长期记忆?它在每个 trial 之间会被保留还是被重置?
提示:01 章 §trajectory(短期记忆) - episodic memory(情景记忆)里存的是什么内容?它对应短期记忆还是长期记忆?
提示:01 章 §episodic memory(长期记忆) - 记忆的 Ω 滑动窗口是用来做什么的?论文里 Ω 的取值范围是多少?它是不是一个 vector database?
提示:01 章 §episodic memory(Ω=1-3 滑动窗口) - verbal reinforcement(语言强化)一句话指的是什么范式——它靠什么「强化」agent?
提示:01 章 §verbal-rl - 一个完整的 trial(试验 / 回合)包含哪三个步骤,按什么顺序?
提示:01 章 §trio(三组件循环)
6.2原理层 · 理解(对应 02)
这一层不再问「是什么」,问「为什么这样设计、代价是什么」。答案在文末折叠块的「原理层」分组。
- 标量 reward(比如 pass/fail)为什么无法指导 Actor 改进?用 credit assignment 这个词解释,自然语言反思补上了标量缺的哪种信息?
提示:02 章 §credit-assignment - Reflexion 全程不更新权重,那 trial 与 trial 之间究竟是什么发生了变化、使下一次表现更好?换句话说,这里的「policy(策略)」具体是什么?
提示:02 章 §why-language - 下一个 trial 开始时,上一轮的反思文本是怎么影响 Actor 的?是通过梯度回传,还是别的途径?
提示:02 章 §memory-injection - 推理任务(HotPotQA)、决策任务(AlfWorld)、编程任务(HumanEval)三类任务的 Evaluator 各用什么来打分?是不是都用 LLM 当裁判?
提示:02 章 §reward-source - 论文的消融实验:把上一次 trajectory 原样塞回上下文(episodic-memory-only / blind retry),和「反思引导的 refinement」相比,效果差多少?这说明真正起作用的是哪一步?
提示:02 章 §ablation(反思≠重试) - 说出 Reflexion 与 ReAct 的分界轴:哪一个跨尝试学习、哪一个不跨?Reflexion 把 ReAct 摆在什么位置?
提示:02 章 §alternatives - HumanEval 上 Reflexion 拿到 pass@1 = 91%,而它的 base 模型(GPT-4)本身就有 80%。这个数字组合反驳了一种什么样的误解?
提示:02 章 §why-language(结合 index 现状) - 反思文本按论文设计是用第一人称写的(「我把边界算错了,下次先判断 n 是否为偶数」)。这是作者在正文里说话,还是被展示的程序内容?为什么这样区分很重要?
提示:02 章 §memory-injection
6.3应用判别层 · 判别(综合 03+04+05)
这一层给场景、不给术语,要你拍板。每题先决定「用 / 不用 / 用哪个」,再写一句根因。答案在文末折叠块的「判别层」分组。
- 场景判别(有无可靠 Evaluator)。团队想给一个「开放式创意文案生成」加 Reflexion,但没有任何客观的对错判据,只能让另一个 LLM 凭感觉打分。该不该上 Reflexion?一句话说出关键约束。
提示:04 章 §evaluator-dependency - 场景判别(初始正确率高低)。某分类任务模型单次回答已有约 85% 准确率,有人提议「再加一轮反思冲一冲」。依据 RA 阈值的结论,这样做更可能提升还是损害准确率?阈值大概在哪个区间才值得反思?
提示:04 章 §task-fit(RA 阈值 <20-30%) - 选型判别(Reflexion vs Self-Refine)。需求是「同一个 session 内、对单个输出做一次自评自改,不需要外部 reward、也不跨多次尝试积累记忆」。该选 Reflexion 还是 Self-Refine?说出区分这两者的那条轴。
提示:05 章 §decisions / 02 §alternatives - 根因判别(失败落在哪个组件)。编程任务里,错误的代码被提前判定通过并提交了,再也没机会反思修正(对应论文 MBPP 那次唯一失利)。这个失败的根因落在 Actor、Evaluator、还是 Memory?为什么假阳性比假阴性致命?
提示:04 章 §evaluator-dependency - 根因判别(收敛失败)。把 Reflexion 用在 WebShop 这类需要大量探索、解空间很宽的任务上,反思到第 4 轮就进入平台期、始终追不上纯 ReAct。这暴露了 Reflexion 适用边界的哪一条?根因更偏向「探索宽度」还是「跨时间纠错」?
提示:04 章 §convergence / §task-fit - 能力前提判别。有人把 Reflexion 套在一个很弱的小模型(如 starchat-beta)上,发现加了反思后分数和不加几乎一样。这说明自我纠错是模型的什么性质?换强模型还是改循环更可能见效?
提示:04 章 §convergence / index 现状速览
6.4参考答案(全部折叠在此)
三层题目的参考答案统一收在下面这一个折叠块里,按层分组。先把三层题都答完,再一次性展开核对——答错的题回到对应章节的 anchor 重读,比直接看答案更有效。
展开全部参考答案(概念层 8 + 原理层 8 + 判别层 6)
概念层(对应 01)
- Actor 是生成 text + action 的 LLM 策略;它内部就是 CoT 或 ReAct,不是为 Reflexion 新训练的模型——权重直接复用,只是被套进反思循环里。
- Evaluator 的输入是一条 trajectory(轨迹),输出是 reward(一个标量分数,或 pass/fail)。
- Self-Reflection 的输入是 reward + 这次的 trajectory,输出是自然语言写的教训(reflective text / 反思文本)——把「失败」翻译成「哪一步错了、下次怎么改」。
- trajectory 对应短期记忆;它是单次尝试的完整 action/observation 序列,每个 trial 之间被重置(下一次重新生成,不累积)。
- episodic memory 里存的是跨 trial 累积的反思文本(reflective text)buffer;它对应长期记忆。
- Ω 滑动窗口是为适配上下文长度限制而设的「容量上限」——只保留最近 Ω 条反思。论文里 Ω = 1–3(AlfWorld 用 3、programming 用 1)。它不是 vector database(向量库 / SQL 被论文列为 future work)。
- verbal reinforcement 指用语言反馈、而非梯度更新来「强化」agent 的范式——靠把自然语言教训读进上下文来改进,而不是 backprop。
- 一个 trial = 生成(Actor 产出 trajectory)→ 评估(Evaluator 打 reward)→ 反思(Self-Reflection 产出反思文本并写入 memory),按此顺序,索引 t 递增。
原理层(对应 02)
- 标量 reward 只说「你失败了(或成功了)」,无法做 credit assignment——无法定位是哪一步动作出了错、也无法说该怎么改。自然语言反思补上的正是这种带定位、高维的纠错信息:它能推断「action a_i 导致后续出错,应改成 a'_i」,这是标量甚至向量 reward 都表达不了的。
- trial 之间唯一变化的是上下文里的文本(episodic memory 里那段反思),权重始终冻结。所以这里的 policy(策略)= agent 的记忆文本 + 选定的 LLM;「学习」发生在 context window 里,策略就是记忆里那段文字,而非模型参数。
- 下一个 trial 开始时,Actor 把 episodic memory 里的反思文本拼进 prompt(in-context conditioning)来影响生成——不是梯度回传,是把教训当作上下文读进去。
- 不是都用 LLM 裁判:推理(HotPotQA)用 exact-match 对 ground-truth 答案;决策(AlfWorld)用手写启发式(如同一动作重复 >3 次、或动作数 >30 判失败)或 LLM 二分类;编程(HumanEval)用自生成的单元测试(≤6 条,AST 过滤掉语法无效的)。
- 盲目把上次 trajectory 塞回去明显更弱——论文里 blind refinement 52% < 不 refine 的 60%;而「反思引导的 refinement」比「只给历史轨迹(episodic-memory-only)」再 +8% 绝对值。真正起作用的是反思那一步做的 credit assignment,不是把历史塞回去本身。
- 分界轴是「是否跨尝试学习」:ReAct 是单条轨迹内交错 reason+act+observe,不跨尝试;Reflexion 跨 trial 累积反思。Reflexion 把 ReAct 当作 Actor,在外面再套「评估 → 反思 → 重试」一层。
- 反驳了「Reflexion 是弱模型救星」这种误解——它是给已经很强的模型(GPT-4,80%)再加约 11 个点(到 91%)。配合弱模型(starchat-beta)反思 = baseline 这一点:自我纠错是更强模型的涌现能力,不是给弱模型托底的。
- 那是被展示的程序内容 / 被引用的材料(reflection 样本),不是作者在正文里说话。区分很重要:正文 prose 必须第三人称(主语是系统、读者或行为),第一人称只允许出现在 reflection 样本、被展示的输出、或读者动作邀请里——否则会把「程序产出的第一人称」误当成「作者口吻」。
判别层(综合 03+04+05)
- 不该上(或风险很高)。关键约束:没有可靠的外部验证信号(测试 / 环境 reward / oracle),Reflexion 就会退化甚至变差——它依赖一个能判对错的 Evaluator。纯靠 LLM 凭感觉打分的开放创意任务缺这个判据,反思容易在错误方向上自我强化。
- 更可能损害。RA 阈值的结论是:反思只在初始正确率 < 20–30% 时净获益;用在本来就高置信的答案上反而有害(论文里 HotpotQA 80.3 → 76.2)。85% 远高于阈值,「再冲一冲」更可能把对的改错(correct→incorrect 翻转)。
- 选 Self-Refine。区分轴:有无外部 reward、是否跨 trial、是否持久化记忆。Self-Refine 是同一 session 内自评自改一个输出、无外部 reward、不跨尝试、不持久化记忆;需求正好如此。Reflexion 的额外机件(Evaluator 的外部 reward + 跨 trial 的 episodic memory)在这里用不上。
- 根因在 Evaluator。这是 reward 源错了,不是反思错了——自生成测试有 16.3% 假阳性(HumanEval 仅 1.4%),把错代码误判通过。假阳性比假阴性致命的原因是非对称:假阴性还能继续反思(可恢复),假阳性会提前提交错误答案、循环就此终止(不可恢复)。
- 暴露了「任务契合度」边界。根因偏向探索宽度不足:WebShop 需要大量探索 / 多样性,而 Reflexion 探索的是「时间」(跨 trial 纠错),不是「宽度」(一次尝试内铺开分支,那是 Tree of Thoughts 的强项)。靠跨时间纠错补不上探索宽度的缺口,所以追不上 ReAct。
- 说明自我纠错是更强模型的涌现能力。弱模型加反思 ≈ 不加(starchat-beta 0.26 = baseline 0.26)。换强模型比改循环更可能见效——循环结构没问题,是 Actor 本身还没具备「能读懂教训并据此改写」的能力。
刚好够不着的挑战
把这套题反过来出
挑判别层里你答得最有把握的一题,改一个条件让答案翻转:例如第 2 题把初始正确率从 85% 改到 15%,第 1 题把「无客观判据」改成「有现成单元测试」。写出新场景下的结论,并指出究竟是哪一个变量(有无可靠 Evaluator / 初始正确率 / 是否跨 trial)翻转了决策。能自己造出「临界翻转点」,才算真的把适用边界握在手里,而不只是记住了结论。
Further reading
- Shinn et al. 2023, Reflexion: Language Agents with Verbal Reinforcement Learning — arxiv.org/abs/2303.11366(所有概念层 / 原理层题目的一手出处)
- Huang et al. 2024, LLMs Cannot Self-Correct Reasoning Yet — arxiv.org/abs/2310.01798(判别层「无 oracle 就崩」的依据)
- When Hindsight is Not 20/20(RA 阈值) — arxiv.org/abs/2404.09129(判别层第 2 题)
- Prompt Engineering Guide · Reflexion — promptingguide.ai/techniques/reflexion