)
反思模式Reflection在前几章中我们已经探讨了基础的智能体模式链式执行Chaining、路径选择Routing和并行化Parallelization。这些模式让智能体能够更高效、更灵活地完成复杂任务。然而即使拥有复杂的工作流智能体的初始输出或计划也可能并不理想、准确或完整。这时反思Reflection模式就发挥了作用。反思模式指的是智能体对自身的工作、输出或内部状态进行评估并利用评估结果来提升性能或优化响应。这是一种自我纠错或自我改进机制使智能体能够根据反馈、内部批判或与目标标准的对比反复优化输出或调整策略。反思有时也可以由专门负责分析初始智能体输出的独立智能体来实现。与简单的链式传递或路径选择不同反思引入了反馈循环。智能体不仅仅生成输出还会审视该输出或生成过程识别潜在问题或改进空间并据此生成更优版本或调整后续行为。核心思想生成 → 评估 → 优化 → 再评估循环迭代直到满意。典型流程执行智能体完成任务或生成初始输出评估/批判Agent通常通过另一次 LLM 调用或规则集分析上一步结果检查事实准确性、连贯性、风格、完整性、是否遵循指令等反思/优化根据批判结果智能体决定如何改进可能生成优化后的输出、调整参数甚至修改整体计划迭代可选但常见优化后的输出或调整后的方案再次执行反思过程可重复直到达到满意结果或满足终止条件┌──────────────────────────┐ ↓ │ 输入 → [生产者生成] → [批评者评估] → 通过? ─→ 否 → [优化] │ ↓ 是 最终输出生产者-批评者模型一种高效的反思实现方式是将流程分为两个逻辑角色生产者Producer和批评者Critic即生成者-批评者或生产者-审阅者模型。虽然单一智能体可以自我反思但采用两个专门智能体或两次 LLM 调用分别使用不同系统提示通常能获得更客观、更结构化的结果。生产者智能体负责任务的初步执行专注于内容生成如编写代码、撰写博客或制定计划。它根据初始提示生成第一版输出。批评者智能体专门评估生产者生成的输出拥有不同的指令和角色设定如你是一名资深软件工程师、“你是一名严谨的事实核查员”。批评者根据特定标准如事实准确性、代码质量、风格要求、完整性等分析生产者的工作发现问题、提出改进建议并给出结构化反馈。这种分工能有效避免智能体自我评审时的认知偏差。批评者以全新视角专注于发现错误和改进空间其反馈再传递给生产者指导其生成更优版本。下方 LangChain 和 ADK 的代码示例均采用了双智能体模型LangChain 示例通过reflector_prompt创建批评者角色ADK 示例则明确定义了生产者和审阅者智能体。实现反思通常需要在智能体工作流中引入反馈循环可通过代码中的迭代循环或支持状态管理和条件跳转的框架实现。虽然单步评估和优化可在 LangChain/LangGraph、ADK 或 Crew.AI 链中实现真正的迭代反思则需要更复杂的编排。反思模式对于构建能够输出高质量结果、处理复杂任务、具备一定自我意识和适应性的智能体至关重要。它让智能体不仅仅是执行指令更具备高级问题解决和内容生成能力。与其他模式的协同反思与目标设定和监控见第 8 章的结合值得关注。目标为智能体自我评估提供最终标准监控则跟踪其进展。在实际应用中反思常作为纠错引擎利用监控反馈分析偏差并调整策略。这种协同让智能体从被动执行者转变为主动适应目标的系统。反思与对话记忆见第 6 章当 LLM 具备对话记忆时反思效果显著提升。对话历史为评估阶段提供关键上下文使智能体不仅能孤立地评估输出还能结合过往互动、用户反馈和目标变化进行判断。智能体能从过去的批判中学习避免重复错误。没有记忆时每次反思都是独立事件有记忆时反思成为累积过程每轮迭代都在前一轮基础上进步实现更智能、具备上下文感知的优化。实践应用与场景反思模式适用于对输出质量、准确性或复杂约束要求较高的场景1. 创意写作与内容生成优化生成的文本、故事、诗歌或营销文案。应用场景智能体撰写博客文章反思过程生成初稿批判其流畅度、语气和清晰度然后根据批判重写。重复直到达到质量标准优势产出更精致、更有效的内容2. 代码生成与调试编写代码、发现错误并修复。应用场景智能体编写 Python 函数反思过程编写初始代码运行测试或静态分析发现错误或低效之处然后根据发现修改代码优势生成更健壮、功能更完善的代码3. 复杂问题求解在多步推理任务中评估中间步骤或方案。应用场景智能体解逻辑谜题反思过程提出一步方案评估是否更接近解决方案或引入矛盾如有问题则回溯或选择其他步骤优势提升智能体在复杂问题空间中的导航能力4. 摘要与信息整合优化摘要的准确性、完整性和简洁性。应用场景智能体总结长文档反思过程生成初步摘要与原文关键点对比优化摘要以补充遗漏信息或提升准确性优势生成更准确、全面的摘要5. 规划与策略制定评估方案并发现潜在缺陷或改进点。应用场景智能体制定达成目标的行动计划反思过程生成计划模拟执行或根据约束评估可行性依据评估结果修订计划优势制定更有效、现实的方案6. 对话智能体回顾对话历史保持上下文、纠正误解或提升响应质量。应用场景客服聊天机器人反思过程用户回复后回顾对话历史和上一条消息确保连贯性并准确回应用户最新输入优势实现更自然、更有效的对话反思为智能体系统增加了元认知层使其能从自身输出和过程学习带来更智能、可靠、高质量的结果。代码示例示例 1LangChain 实现importosfromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.messagesimportSystemMessage,HumanMessage# --- 配置 ---# 从 .env 文件加载环境变量用于 OPENAI_API_KEYload_dotenv()# 检查 API key 是否设置ifnotos.getenv(OPENAI_API_KEY):raiseValueError(OPENAI_API_KEY 未在 .env 文件中找到请添加。)# 初始化 Chat LLM使用 gpt-4o-mini低温度保证输出确定性llmChatOpenAI(modelgpt-4o-mini,temperature0.1)defrun_reflection_loop(): 演示多步 AI 反思循环逐步优化 Python 函数。 # --- 核心任务 ---task_prompt 你的任务是创建一个名为 calculate_factorial 的 Python 函数。 该函数需满足以下要求 1. 只接受一个整数参数 n。 2. 计算其阶乘n!。 3. 包含清晰的 docstring说明函数功能。 4. 处理边界情况0 的阶乘为 1。 5. 处理无效输入若输入为负数则抛出 ValueError。 # --- 反思循环 ---max_iterations3current_code# 构建对话历史为每步提供上下文message_history[HumanMessage(contenttask_prompt)]foriinrange(max_iterations):print(\n*25f 反思循环第{i1}次迭代 *25)# --- 1. 生成/优化阶段 ---# 首次迭代为生成后续为优化ifi0:print(\n 阶段 1生成初始代码...)# 首条消息为任务提示responsellm.invoke(message_history)current_coderesponse.contentelse:print(\n 阶段 1根据批判优化代码...)# 消息历史包含任务、上次代码和批判# 指示模型应用批判意见优化代码message_history.append(HumanMessage(content请根据批判意见优化代码。))responsellm.invoke(message_history)current_coderesponse.contentprint(\n--- 生成代码第 str(i1) 版---\ncurrent_code)message_history.append(response)# 将生成代码加入历史# --- 2. 反思阶段 ---print(\n 阶段 2对生成代码进行反思...)# 为批判者 Agent 创建专用提示# 要求模型以资深代码审查员身份批判代码reflector_prompt[SystemMessage(content 你是一名资深软件工程师精通 Python。 你的职责是对提供的 Python 代码进行细致代码审查。 请根据原始任务要求严格评估代码。 检查是否有 bug、风格问题、遗漏边界情况及其他可改进之处。 若代码完美且满足所有要求仅回复 CODE_IS_PERFECT。 否则请以项目符号列表形式给出批判意见。 ),HumanMessage(contentf原始任务\n{task_prompt}\n\n待审查代码\n{current_code})]critique_responsellm.invoke(reflector_prompt)critiquecritique_response.content# --- 3. 停止条件 ---ifCODE_IS_PERFECTincritique:print(\n--- 批判 ---\n未发现进一步批判代码已达要求。)breakprint(\n--- 批判 ---\ncritique)# 将批判意见加入历史供下轮优化使用message_history.append(HumanMessage(contentf上次代码批判意见\n{critique}))print(\n*30 最终结果 *30)print(\n反思流程优化后的最终代码\n)print(current_code)if__name____main__:run_reflection_loop()完整的迭代反思过程需要状态管理和循环执行机制。虽然图式框架如 LangGraph 或自定义过程代码可原生支持这些机制单步反思循环可通过 LCELLangChain Expression Language组合语法高效演示。示例使用 LangChain OpenAI GPT-4o-mini迭代生成并优化一个计算阶乘的 Python 函数任务提示 → [生成初始代码] → [资深工程师批判] → 通过? → 否 → [根据批判优化] → [再次批判] → ... ↓ 是 输出最终代码生成/优化阶段首次迭代根据任务提示生成代码后续迭代根据批判意见优化代码反思阶段以资深软件工程师角色批判代码若无问题则回复CODE_IS_PERFECT否则以项目符号列出问题停止条件代码被认定完美或达到最大迭代次数默认 3 次对话历史每步都维护完整的消息历史确保生成和反思阶段有完整上下文代码首先完成环境配置、API key 加载和语言模型初始化低温度保证输出专注。run_reflection_loop函数负责迭代优化流程。批判角色同样由语言模型扮演但系统提示不同以资深工程师身份针对原始任务要求批判生成代码。循环直到代码被认定为完美或达到最大迭代次数。示例 2Google ADK 实现fromgoogle.adk.agentsimportSequentialAgent,LlmAgent GEMINI_MODELgemini-2.0-flash# 第一个 Agent 生成初稿generatorLlmAgent(nameDraftWriter,modelGEMINI_MODEL,description根据主题生成初稿内容。,instruction写一段简短、信息丰富的主题段落。,output_keydraft_text# 输出保存到此状态键)# 第二个 Agent 批判初稿reviewerLlmAgent(nameFactChecker,modelGEMINI_MODEL,description审查文本的事实准确性并给出结构化批判。,instruction 你是一名严谨的事实核查员。 1. 阅读状态键 draft_text 中的文本。 2. 仔细核查所有事实性表述。 3. 最终输出必须为包含两个键的字典 - status字符串ACCURATE 或 INACCURATE。 - reasoning字符串清晰解释你的判断若有问题需具体说明。 ,output_keyreview_output# 结构化字典保存到此)# SequentialAgent 保证 generator 先运行reviewer 后运行review_pipelineSequentialAgent(nameWriteAndReview_Pipeline,sub_agents[generator,reviewer])# 执行流程# 1. generator 运行 - 输出段落保存到 state[draft_text]。# 2. reviewer 运行 - 读取 state[draft_text]输出字典保存到 state[review_output]。使用 Google ADK 实现生成者-批评者结构一部分Generator生成初始结果另一部分Critic提供批判性反馈。[DraftWriter 生成初稿] → state[draft_text] → [FactChecker 事实核查] → state[review_output]DraftWriter生成者根据主题生成段落输出保存到draft_textFactChecker批评者读取draft_text核查事实准确性输出包含statusACCURATE/INACCURATE和reasoning的结构化字典保存到review_outputSequentialAgent管理执行顺序确保先生成后批判注意ADK 还可用LoopAgent实现循环反思将生成-批判过程自动重复直到满足条件。关键要点反思模式的核心优势是能迭代自我纠错和优化输出显著提升质量、准确性和复杂指令的遵循度包含执行、评估/批判和优化的反馈循环适用于高质量、准确或复杂输出任务强大的实现方式是生产者-批评者模型独立智能体评估初始输出分工提升客观性和结构化反馈但需权衡延迟和计算成本增加以及模型上下文窗口溢出或 API 限流风险完整迭代反思需有状态工作流如 LangGraph单步反思可在 LangChain 用 LCEL 实现输出批判和优化Google ADK 可通过顺序工作流实现反思一智能体输出由另一智能体批判支持后续优化该模式让智能体具备自我纠错和持续性能提升能力局限性延迟与成本迭代过程每次优化都需新的 LLM 调用导致成本和延迟增加不适合对时效性要求高的场景内存消耗每次迭代都会扩展对话历史包括初始输出、批判和后续优化内容可能超出上下文窗口过度优化反复迭代可能导致过拟合于批评者的偏好偏离原始目标总结反思模式为智能体工作流提供了关键的自我纠错机制实现了超越单次执行的迭代优化。其核心是建立一个循环系统生成输出按特定标准评估再利用评估结果生成优化版本。评估可由智能体自评也可由独立批评者智能体完成这是该模式中的重要架构选择。完整的多步反思过程需要健壮的状态管理架构但其核心原理可通过单次生成-批判-优化循环高效演示。作为控制结构反思可与其他基础模式结合构建更健壮、功能更复杂的智能体系统。