反思 (Reflection)
反思(Reflection) 是一种旨在提高 Agent 准确性和鲁棒性的设计模式。它要求 Agent 在给出最终答案之前,先对自己生成的中间结果进行评估、批评和修正。
为什么需要反思?
LLM 倾向于“线性生成”,一旦开头出错,往往会一条道走到黑(Error Cascading)。人类在解决复杂问题时,会不断检查自己的步骤:“等等,这一步好像不对”。反思模式就是试图让 Agent 模拟这种元认知(Metacognition)过程。
常见的反思模式
1. Self-Correction (自我修正)
这是最简单的反思形式。
- 流程:
Generate -> Critique -> Revise - 示例: 让模型写代码,然后紧接着 Prompt 它:“这段代码有 bug 吗?如果有,请修复。”
- 应用: 很多 Coding Agent(如 OpenInterpreter)在代码执行报错后,会将错误信息喂回给 LLM,让其自我修复。
2. Reflexion 框架
Reflexion 是一个更系统化的框架,它引入了语言反馈(Verbal Reinforcement)。
- Actor: 执行任务的 Agent。
- Evaluator: 评估 Actor 输出质量的组件。
- Self-Reflection: 如果失败,Agent 会生成一段“反思文本”,分析为什么失败,并将其存入短期记忆。
- Next Attempt: 在下一次尝试中,Agent 会读取之前的反思,避免重蹈覆辙。
3. Chain of Hindsight (CoH)
利用过去的经验来指导现在的行为。通过提供一系列带有反馈的历史轨迹(“这样做好,那样做不好”),让模型学习如何优化输出。
适用场景
反思模式特别适用于:
- 代码生成: 编译错误或逻辑错误可以通过反思自动修复。
- 长文本写作: 先写草稿,再反思润色。
- 复杂推理: 数学题或逻辑题,通过“检查步骤”来提高准确率。
然而,反思也会增加 Token 消耗和延迟。对于简单任务,直接生成(Zero-shot)通常更高效;对于复杂任务,反思是提升性能的有效手段(System 2 Thinking)。