当前位置: 首页 > news >正文

Agentic Design Patterns-模式4:反思(Reflection)的代码实现

目录

1. 概述

2. 价值

3. 关键技术

4. 代码实现

5. 核心组件说明

5.1 ReflectionState(状态管理类)

5.2 ProducerAgent(生产者智能体)

5.3 CriticAgent(批评者智能体)

5.4 ReflectionOrchestrator(编排器)

6. 使用场景

7. 优势与局限

优势:

局限:

8. 最佳实践

9. 拓展方向

10. 总结


1. 概述

反思模式指的是智能体对自身的工作、输出或内部状态进行评估,并利用评估结果来提升性能或优化响应。它是一种自我纠错或自我改进机制,使智能体能够根据反馈、内部批判或与目标标准的对比,持续优化输出或调整策略。反思有时也可以由专门负责分析初始智能体输出的独立智能体来实现。

与简单的链式传递或路径选择不同,反思引入了反馈循环。智能体不只生成输出,还会审视该输出(或生成过程),识别潜在问题或改进空间,并据此生成优化版本或调整后续行为。一种高效的反思实现方式是将流程分为两个逻辑角色,生产者(Producer)和批评者(Critic),其典型流程包括执行——评估/批判——反思/优化——迭代。

图1:反思设计模式(自我反思)

图2:反思设计模式(批判者Agent)

2. 价值

反思为智能体系统增加了元认知层,使其能从自身输出和过程学习,带来更智能、可靠、高质量的结果。反思模式的核心优势是能迭代自我纠错和优化输出,显著提升质量、准确性和复杂指令的遵循度。

3. 关键技术

反思模式为智能体工作流提供了关键的自我纠错机制,实现了超越单次执行的迭代优化。其核心是建立一个循环:系统生成输出,按特定标准评估,再利用评估结果生成优化版本。评估可由智能体自评,也可由独立批评者智能体完成。

完整的多步反思过程需要健壮的状态管理架构,其核心原理可通过单次生成‑批判优化循环高效演示,作为控制结构,反思可与其他基础模式结合,构建更健壮、功能更复杂的智能体系统。

4. 代码实现

以下是一个完整的反思(Reflection)模式Python程序示例,包含生产者(Producer)和批评者(Critic)两个逻辑角色,实现了执行-评估-优化-迭代的循环机制:

import json from typing import Dict, Any, List, Optional from dataclasses import dataclass, asdict # 导入模型客户端 from model_factory import get_model_client client = get_model_client() MODEL = "gpt-4o" @dataclass class ReflectionState: """反思过程的状态管理""" iteration: int = 1 current_output: str = "" critique: str = "" is_satisfactory: bool = False history: List[Dict[str, str]] = None def __post_init__(self): if self.history is None: self.history = [] def add_to_history(self, output: str, critique: str = ""): """将当前步骤加入历史记录""" self.history.append({ "iteration": self.iteration, "output": output, "critique": critique }) def to_dict(self) -> Dict[str, Any]: return asdict(self) class ProducerAgent: """生产者智能体 - 负责生成初始输出""" @staticmethod def generate_response(task_description: str, previous_critique: str = "") -> str: """生成任务响应""" system_prompt = """你是一个专业的内容生产者。根据用户的任务描述生成高质量的输出。 如果提供了之前的批评意见,请基于这些意见改进你的输出。""" if previous_critique: user_prompt = f"""任务:{task_description} 之前的批评意见:{previous_critique} 请根据上述批评意见,生成改进后的响应。确保解决所有指出的问题。""" else: user_prompt = f"""任务:{task_description} 请为上述任务生成高质量的响应。""" messages = [ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt} ] try: response = client.chat.completions.create( model=MODEL, messages=messages, stream=False ) return response.choices[0].message.content except Exception as e: print(f"生产者生成失败: {e}") return "生成失败,请重试。" class CriticAgent: """批评者智能体 - 负责评估和提出改进意见""" def __init__(self, evaluation_criteria: Optional[List[str]] = None): self.evaluation_criteria = evaluation_criteria or [ "准确性和事实正确性", "逻辑连贯性和结构", "完整性和深度", "清晰度和可读性", "与任务要求的符合度" ] def critique_output(self, task_description: str, output: str) -> Dict[str, Any]: """批评输出并提供改进建议""" criteria_str = "\n".join([f"{i+1}. {criterion}" for i, criterion in enumerate(self.evaluation_criteria)]) system_prompt = """你是一个严格的批评者。请仔细评估提供的输出,并根据评估标准提出具体的改进建议。 你的批评应该具体、建设性,并提供明确的改进方向。""" user_prompt = f"""任务描述:{task_description} 待评估的输出: {output} 评估标准: {criteria_str} 请按以下格式提供反馈: 1. 总体评分(1-10分) 2. 主要优点 3. 存在的问题和不足 4. 具体的改进建议 5. 是否需要进一步优化(是/否)""" messages = [ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt} ] try: response = client.chat.completions.create( model=MODEL, messages=messages, stream=False ) critique_text = response.choices[0].message.content # 解析是否需要进一步优化 needs_improvement = self._check_needs_improvement(critique_text) return { "critique": critique_text, "needs_improvement": needs_improvement, "raw_output": output } except Exception as e: print(f"批评者评估失败: {e}") return { "critique": "评估失败", "needs_improvement": False, "raw_output": output } def _check_needs_improvement(self, critique_text: str) -> bool: """检查是否需要进一步改进""" if "是" in critique_text and "是否需要进一步优化" in critique_text: return True return False class ReflectionOrchestrator: """反思流程编排器 - 协调生产者和批评者""" def __init__(self, max_iterations: int = 3): self.producer = ProducerAgent() self.critic = CriticAgent() self.max_iterations = max_iterations def execute(self, task_description: str) -> Dict[str, Any]: """执行反思流程""" state = ReflectionState() for iteration in range(1, self.max_iterations + 1): state.iteration = iteration # 生产者生成输出 output = self.producer.generate_response( task_description, state.critique if iteration > 1 else "" ) state.current_output = output # 批评者评估输出 critique_result = self.critic.critique_output(task_description, output) state.critique = critique_result["critique"] # 记录历史 state.add_to_history(output, state.critique) # 检查是否满足要求 if not critique_result["needs_improvement"]: state.is_satisfactory = True break return state.to_dict() # 使用示例 if __name__ == "__main__": orchestrator = ReflectionOrchestrator(max_iterations=3) result = orchestrator.execute("写一篇关于人工智能伦理的文章") print(f"最终输出: {result['current_output']}") print(f"迭代次数: {result['iteration']}") print(f"是否满意: {result['is_satisfactory']}")

5. 核心组件说明

5.1 ReflectionState(状态管理类)

状态管理类负责跟踪整个反思过程的状态,包括:

  • 当前迭代次数
  • 当前输出内容
  • 批评意见
  • 是否满足要求
  • 历史记录

5.2 ProducerAgent(生产者智能体)

生产者智能体负责:

  • 根据任务描述生成初始输出
  • 根据批评意见改进输出
  • 处理生成过程中的异常

5.3 CriticAgent(批评者智能体)

批评者智能体负责:

  • 评估输出质量
  • 提供具体的改进建议
  • 判断是否需要进一步优化

5.4 ReflectionOrchestrator(编排器)

编排器负责:

  • 协调生产者和批评者的工作
  • 管理迭代流程
  • 控制终止条件

6. 使用场景

反思模式适用于以下场景:

  1. 内容创作:文章写作、代码生成等需要多次迭代改进的任务
  2. 问题求解:复杂问题的分步求解和验证
  3. 决策制定:需要多角度分析和验证的决策过程
  4. 质量保证:对输出质量有高要求的场景

7. 优势与局限

优势:

  • 自动化迭代改进过程
  • 提供系统化的质量评估
  • 支持多轮优化直到满足要求
  • 可追溯的改进历史

局限:

  • 需要额外的API调用,成本较高
  • 迭代次数可能较多,耗时较长
  • 评估标准需要精心设计
  • 可能陷入局部最优

8. 最佳实践

  1. 设置合理的最大迭代次数:避免无限循环
  2. 设计明确的评估标准:确保批评有据可依
  3. 保存历史记录:便于分析和调试
  4. 处理异常情况:确保系统稳定性
  5. 优化提示词:提高生产和批评的质量

9. 拓展方向

  1. 多批评者模式:引入多个不同视角的批评者
  2. 自适应迭代:根据任务复杂度动态调整迭代次数
  3. 并行反思:同时进行多个方向的反思和改进
  4. 学习型反思:从历史数据中学习改进策略

10. 总结

反思模式通过引入反馈循环,使智能体系统能够自我评估和改进,显著提升了输出质量。该模式的核心在于建立生产者-批评者的协作机制,通过迭代优化达到满意的结果。在实际应用中,需要根据具体场景调整评估标准和迭代策略,以平衡质量和效率。

参照书籍《Agentic Design Patterns》的基本概念和观点。

http://www.jsqmd.com/news/852285/

相关文章:

  • 无王无帝定乾坤,来自田间第一人:第一大道耀古今
  • 如何快速掌握Pixi包管理:面向开发者的完整环境管理指南
  • 中文BERT-wwm情感分析实践:从95%到95.8%准确率的完整优化指南
  • 猫抓浏览器扩展:3分钟快速掌握网页资源嗅探终极技巧
  • 新手入门教程使用python在五分钟内完成taotoken大模型api的首次调用
  • 初创团队如何利用Taotoken Token Plan套餐控制AI实验成本
  • 2026亲测PanDownload解析百度网盘不限速下载:我用它拉满宽带的亲测教程
  • 别再死记硬背了!用这6个真实Java代码片段,5分钟搞懂UML类图关系
  • 电信信号处理利器:5分钟快速上手SpanDSP开源库完全指南
  • 从BERT微调失败到F1值跃升至0.91:DeepSeek垂直搜索在电子元器件BOM检索中的12小时攻坚实录
  • 无王无帝定乾坤,来自田间第一人:圣心出世安九州
  • 3种终极方案:在浏览器中解锁加密音乐文件的完整指南
  • 墙壁墙面桥梁建筑墙体裂缝宽度裂缝等级识别分割数据集labelme格式2996张3类别
  • CAD新手别再用直线硬画了!用PL命令的‘A’和‘R’快速搞定带半径的圆弧多段线
  • 2026低代码实测榜:6大主流平台功能+性价比PK,谁最值得选?
  • 沐曦股份 × 文心合作伙伴赛道Meetup 上海站|邀你共探国产算力优化实战
  • SAP FI新版本福音:不用开发,用OB28搞定会计凭证必填字段(附GS01建集避坑)
  • 5分钟掌握RePKG:壁纸引擎资源提取与纹理转换的终极指南
  • 论文初稿一键生成!精选6款AI写论文工具,知网万方查重低至6%!
  • HowToCook烹饪指南:程序员也能轻松掌握的5分钟快速部署方案
  • DeepSeek代码冗余黑洞曝光:如何用3行脚本+1个YAML配置,5分钟定位97%的DRY违规?
  • 从游戏画面Bug到图形学原理:一次深度测试失败的排查与透视矫正插值的深度理解
  • A 股回测中的复权与 Point-in-Time 偏差:一次数据泄露的工程复盘
  • 云南楚雄:专项整治立案19起查扣违禁产品数千件
  • 无王无帝定乾坤,来自田间第一人 铁哥携标踏前路
  • 2026惠州市惠阳区黄金回收铂金回收白银回收深度实测 五大正规门店横屏 报价透明 免费上门才是真靠谱 - 亦辰小黄鸭
  • 3步掌握碧蓝航线自动化:解放双手的智能游戏伴侣终极指南
  • 【独家首发】Midjourney团队计划功能技术白皮书核心节选:基于127万条API调用日志反推的权限粒度模型
  • AES128加密实战:用C语言写一个加密函数,并集成到你的STM32项目里
  • 无王无帝定乾坤,来自田间第一人:大道传世润众生