反思(Reflection) | Agentic Design Patterns | 智能体设计模式

内容纲要

一、核心定义

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

可视化示意图

自我反思

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

生产者和评论者

图 2:反思设计模式之生产者和评论者智能体

关键机制

执行 → 评估/剖析 → 反思/优化 → 迭代(可选)

单智能体自我反思:
生成输出 → 自我评估 → 改进 → 满意则结束,否则继续

双智能体模式(更有效):
生产者智能体 → 生成初稿
    ↓
评论者智能体 → 提出改进建议
    ↓
生产者智能体 → 根据建议改进
    ↓
循环直到满足标准

二、为什么需要反思?

无反思的问题 反思模式的优势
初始输出质量不稳定 迭代优化,逐步提高质量
错误无法自动修复 识别并修正错误
缺乏自我意识 具备元认知能力
一次生成即最终结果 持续改进直到满意

核心思想:引入反馈循环,让智能体不断审视和改进自己的输出。

关键创新:生产者-评论者分离

  • 避免认知偏见:智能体自查容易「自欺欺人」
  • 更客观评价:独立评论者以全新视角审视
  • 专业化分工:生产者专注创作,评论者专注评审

三、典型应用场景

1. 创意写作与内容生成

用户需求 → 生成草稿 → 评估流畅度/语气/清晰度 → 重写 → 循环直到高质量

实例:博客文章撰写,营销文案优化。
价值:产出更精致、更有效的内容。

2. 代码生成与调试

任务描述 → 写初始代码 → 运行测试/静态分析 → 识别错误 → 修复代码 → 循环

实例:Python 函数生成,边界情况处理。
价值:生成更健壮、功能完整的代码。

3. 复杂问题解决

逻辑谜题 → 提出步骤 → 评估是否接近解 → 发现矛盾则回退 → 尝试新步骤

实例:多步推理,策略游戏。
价值:增强在复杂问题空间中的导航能力。

4. 摘要与信息综合

长文档 → 生成初步摘要 → 对比原文要点 → 补充遗漏信息 → 最终摘要

实例:研究论文总结,会议记录提炼。
价值:创建更准确、更全面的摘要。

5. 规划与策略

目标 → 制定计划 → 模拟执行/评估可行性 → 修订计划 → 最终方案

实例:项目计划,任务分解。
价值:制定更有效、更现实的计划。

6. 对话智能体

用户输入 → 生成回复 → 回顾对话历史 → 确保连贯性 → 优化回复

实例:客户支持聊天机器人。
价值:实现更自然、更有效的对话。


四、生产者-评论者模式

核心架构

角色 职责 提示词示例
生产者 (Producer) 生成初始输出,专注创作 "你是内容创作专家,撰写..."
评论者 (Critic) 评估输出,提出改进建议 "你是高级软件工程师,审查代码..."

为什么分离角色?

  1. 避免认知偏见:自己审查自己容易忽略问题
  2. 全新视角:评论者以客观角度审视
  3. 专业化:各司其职,效果更好
  4. 结构化反馈:评论者提供清晰的改进方向

停止条件

常见策略:

  • 评论者判断「完美」(<code>CODE_IS_PERFECT</code>)
  • 达到最大迭代次数 (如 3-5 次)
  • 改进幅度低于阈值
  • 用户满意度达标

五、设计原则

何时使用反思?

黄金法则:当输出质量、准确性比速度和成本更重要时。

适用信号

  1. 输出质量直接影响业务价值
  2. 需要高准确性(如代码、事实核查)
  3. 任务复杂,难以一次完成
  4. 需要符合多个约束条件

实现要点

  1. 明确评估标准:准确性、完整性、风格、合规性等
  2. 结构化反馈:用列表、评分等明确指出问题
  3. 迭代控制:设置最大迭代次数防止无限循环
  4. 状态管理:保存每轮输出和反馈供后续参考

权衡考虑

优势

  • ✅ 显著提高输出质量
  • ✅ 自动识别和修复错误
  • ✅ 适应复杂约束条件
  • ✅ 展现元认知能力

成本

  • ❌ 每轮迭代增加 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 个版本,评论者选最佳。结合并行化模式提升效率。


十、参考资源

官方文档

学术论文

代码示例

  • 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>

滚动至顶部