反思 (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)。