一、核心定义
反思(Reflection):智能体评估自己的工作、输出或内部状态,并利用评估结果改进性能和优化响应的机制。这是一种自我纠正或自我改进的形式。
可视化示意图:

图 1:反思设计模式之自我反思

图 2:反思设计模式之生产者和评论者智能体
关键机制:
执行 → 评估/剖析 → 反思/优化 → 迭代(可选)
单智能体自我反思:
生成输出 → 自我评估 → 改进 → 满意则结束,否则继续
双智能体模式(更有效):
生产者智能体 → 生成初稿
↓
评论者智能体 → 提出改进建议
↓
生产者智能体 → 根据建议改进
↓
循环直到满足标准
二、为什么需要反思?
| 无反思的问题 | 反思模式的优势 |
|---|---|
| 初始输出质量不稳定 | 迭代优化,逐步提高质量 |
| 错误无法自动修复 | 识别并修正错误 |
| 缺乏自我意识 | 具备元认知能力 |
| 一次生成即最终结果 | 持续改进直到满意 |
核心思想:引入反馈循环,让智能体不断审视和改进自己的输出。
关键创新:生产者-评论者分离
- 避免认知偏见:智能体自查容易「自欺欺人」
- 更客观评价:独立评论者以全新视角审视
- 专业化分工:生产者专注创作,评论者专注评审
三、典型应用场景
1. 创意写作与内容生成
用户需求 → 生成草稿 → 评估流畅度/语气/清晰度 → 重写 → 循环直到高质量
实例:博客文章撰写,营销文案优化。
价值:产出更精致、更有效的内容。
2. 代码生成与调试
任务描述 → 写初始代码 → 运行测试/静态分析 → 识别错误 → 修复代码 → 循环
实例:Python 函数生成,边界情况处理。
价值:生成更健壮、功能完整的代码。
3. 复杂问题解决
逻辑谜题 → 提出步骤 → 评估是否接近解 → 发现矛盾则回退 → 尝试新步骤
实例:多步推理,策略游戏。
价值:增强在复杂问题空间中的导航能力。
4. 摘要与信息综合
长文档 → 生成初步摘要 → 对比原文要点 → 补充遗漏信息 → 最终摘要
实例:研究论文总结,会议记录提炼。
价值:创建更准确、更全面的摘要。
5. 规划与策略
目标 → 制定计划 → 模拟执行/评估可行性 → 修订计划 → 最终方案
实例:项目计划,任务分解。
价值:制定更有效、更现实的计划。
6. 对话智能体
用户输入 → 生成回复 → 回顾对话历史 → 确保连贯性 → 优化回复
实例:客户支持聊天机器人。
价值:实现更自然、更有效的对话。
四、生产者-评论者模式
核心架构
| 角色 | 职责 | 提示词示例 |
|---|---|---|
| 生产者 (Producer) | 生成初始输出,专注创作 | "你是内容创作专家,撰写..." |
| 评论者 (Critic) | 评估输出,提出改进建议 | "你是高级软件工程师,审查代码..." |
为什么分离角色?
- 避免认知偏见:自己审查自己容易忽略问题
- 全新视角:评论者以客观角度审视
- 专业化:各司其职,效果更好
- 结构化反馈:评论者提供清晰的改进方向
停止条件
常见策略:
- 评论者判断「完美」(<code>CODE_IS_PERFECT</code>)
- 达到最大迭代次数 (如 3-5 次)
- 改进幅度低于阈值
- 用户满意度达标
五、设计原则
何时使用反思?
黄金法则:当输出质量、准确性比速度和成本更重要时。
适用信号:
- 输出质量直接影响业务价值
- 需要高准确性(如代码、事实核查)
- 任务复杂,难以一次完成
- 需要符合多个约束条件
实现要点
- 明确评估标准:准确性、完整性、风格、合规性等
- 结构化反馈:用列表、评分等明确指出问题
- 迭代控制:设置最大迭代次数防止无限循环
- 状态管理:保存每轮输出和反馈供后续参考
权衡考虑
优势:
- ✅ 显著提高输出质量
- ✅ 自动识别和修复错误
- ✅ 适应复杂约束条件
- ✅ 展现元认知能力
成本:
- ❌ 每轮迭代增加 API 调用成本
- ❌ 延迟增加(多轮调用)
- ❌ 上下文占用更多(历史累积)
- ❌ 可能超出上下文窗口限制
六、与其他模式的协同
| 模式组合 | 协同效果 |
|---|---|
| 反思 + 记忆 (第8章) | 对话历史提供上下文,避免重复错误 |
| 反思 + 目标监控 (第11章) | 目标是评估基准,监控跟踪进度 |
| 反思 + 提示链 | 在链的关键步骤加入反思环节 |
| 反思 + 并行化 | 并行生成多个版本,反思选最佳 |
关键洞察:
- 有记忆:反思成为累积学习过程
- 无记忆:每次反思都是独立事件
七、主流框架对比
| 框架 | 反思实现方式 | 适用场景 |
|---|---|---|
| LangChain/LCEL | 显式构建生成-评审-改进循环 | 单轮反思或自定义循环逻辑 |
| LangGraph | 基于状态图的迭代反思循环 | 复杂多步骤反思,需要状态管理 |
| Google ADK | SequentialAgent串联生产者和评论者 | 双智能体协作反思 |
代码示例位置:
- LangChain 实现:<code>codes/Chapter-04-Reflection-LangChain-Example.py</code>
- Google ADK 实现:<code>codes/Chapter-04-Reflection-ADK-Example.py</code>
关键区别:
- LangChain:手动构建循环,灵活度高
- LangGraph:状态图天然支持反思循环
- ADK:通过 SequentialAgent 自动协调流程
八、关键概念速查
| 概念 | 定义 |
|---|---|
| 反思 (Reflection) | 智能体评估并改进自己输出的过程 |
| 生产者 (Producer) | 负责生成初始输出的智能体 |
| 评论者 (Critic) | 负责评估输出并提出改进建议的智能体 |
| 反馈循环 (Feedback Loop) | 执行→评估→改进→再执行的循环 |
| 自我反思 (Self-Reflection) | 单个智能体自我评估和改进 |
| 元认知 (Meta-Cognition) | 对自己思考过程的思考 |
| 迭代优化 (Iterative Refinement) | 通过多轮改进提升质量 |
九、常见问题
Q1:反思会增加多少成本?
每轮反思需要 2 次 API 调用(评估+改进)。3 轮迭代 = 6 次调用 = 6倍成本。需要权衡质量提升与成本增加。
Q2:如何设置停止条件?
建议:1) 评论者判断满意;2) 最大 3-5 轮迭代;3) 改进幅度 < 阈值。避免无限循环。
Q3:单智能体自我反思 vs 双智能体模式?
双智能体更客观,避免认知偏见。单智能体成本低但效果稍差。推荐用双智能体。
Q4:反思适合所有任务吗?
不。简单任务(如分类、短回答)不需要。适合复杂、高质量要求的任务(如代码、长文)。
Q5:如何避免超出上下文窗口?
1) 限制迭代次数;2) 只保留关键反馈,删除冗余历史;3) 使用支持长上下文的模型。
Q6:能否并行反思多个版本?
可以。并行生成 N 个版本,评论者选最佳。结合并行化模式提升效率。
十、参考资源
官方文档
学术论文
- Training Language Models to Self-Correct via Reinforcement Learning - https://arxiv.org/abs/2409.12917
代码示例
- LangChain 实现:<code>codes/Chapter-04-Reflection-LangChain-Example.py</code>
- Google ADK 实现:<code>codes/Chapter-04-Reflection-ADK-Example.py</code>
扩展阅读
- 原文章节:<code>10-Chapter-04-Reflection.md</code>