📖 定义
Reflexion(反思模式)是一种Agent循环变体,在ReAct的"思考→行动→观察"基础上,增加了一个显式的自我批判(Self-Critique)步骤。批判结果被追加到上下文中,作为下一次尝试的指导。
来源:Shinn et al., "Reflexion: Language Agents with Verbal Reinforcement Learning", NeurIPS 2023
🎭 通俗比喻
想象你在解一道数学题。普通Agent就像一个学生写完答案直接交卷。而Reflexion模式呢?每写一步,都停下来自问:"这步对吗?有没有更简单的方法?"把反思记在草稿纸上,下一步就避开刚才的错误。
就像周星驰电影里的桥段——不是直接打怪,而是打完一回合,回头看录像分析:"哎,这招姿势不对,下回改!"
就像周星驰电影里的桥段——不是直接打怪,而是打完一回合,回头看录像分析:"哎,这招姿势不对,下回改!"
⚙️ 原理与流程
标准ReAct循环:观察 → 思考 → 行动 → 观察...
Reflexion循环:观察 → 思考 → 行动 → 观察 → 批判 → 反思追加 → 继续循环
# Reflexion循环伪代码
def reflexion_loop(task, max_steps=50):
context = [task]
reflections = []
for step in range(max_steps):
# 标准ReAct步骤
thought = model.generate_thought(context)
action = model.generate_action(thought)
observation = execute_tool(action)
# 🔄 关键:反思步骤
critique = model.generate_critique(
context + [thought, action, observation]
)
# 将反思追加到上下文
reflection_text = f"反思:{critique}"
reflections.append(reflection_text)
context.append(reflection_text)
if is_task_complete(observation):
break
return final_answer, reflections
🎯 OpenClaw实战应用
在OpenClaw中,Reflexion可以通过以下方式实现:
# OpenClaw Reflexion Skill 示例
name: reflexion_coder
description: 使用反思模式改进代码生成质量
steps:
- name: initial_generation
action: llm
prompt: |
根据需求生成代码:{{user_request}}
- name: self_critique
action: llm
prompt: |
请批判以下代码,指出潜在问题:
1. 逻辑错误
2. 边界情况未处理
3. 性能隐患
4. 代码风格问题
代码:
{{initial_generation.output}}
- name: improved_generation
action: llm
prompt: |
基于反思改进代码:
原代码:{{initial_generation.output}}
批判:{{self_critique.output}}
生成改进后的代码:
📊 优缺点分析
✅ 优点
- 减少重复失败(30-50%错误率下降)
- 对编码、数学推理任务效果显著
- 无需额外训练,仅靠提示工程实现
- 反思记录可持久化,用于后续改进
⚠️ 代价
- 每步增加~1次额外模型调用
- 延迟增加30-50%
- Token消耗增加
- 过度反思可能导致自我怀疑
🔗 相关术语
📚 延伸阅读
- 原论文:Reflexion: Language Agents with Verbal Reinforcement Learning
- Anthropic "Building Effective Agents" - 对Agent模式的系统总结
- LangGraph reflexion实现示例