智能体Agent的经典构建方式:ReAct、Plan-and-Solve和Reflection

更新日期: 2025-12-02 阅读: 13 标签: Agent

react:思考与行动结合

ReAct由Shunyu Yao在2022年提出,核心思想是模仿人类解决问题的过程,将推理和行动明确结合起来,形成"思考-行动-观察"的循环。

在ReAct出现之前,主要方法分两类:一类是"纯思考"型,比如思维链,能引导模型进行复杂推理,但无法与外部交互,容易产生错误信息;另一类是"纯行动"型,模型直接输出要执行的动作,但缺少规划和纠正错误的能力。

ReAct巧妙之处在于认识到思考和行动是互相促进的。思考指导行动,行动结果又反过来修正思考。为此,ReAct通过特定的提示方式来引导模型,让每一步输出都遵循固定模式:

思考 (Thought):
这是智能体的"内心想法"。它会分析当前情况、分解任务、制定下一步计划,或者反思上一步结果。

行动 (Action):
这是智能体决定采取的具体动作,通常是调用外部工具,比如Search['华为最新款手机']。

观察 (Observation):
这是执行行动后从外部工具返回的结果,比如搜索结果的摘要或api的返回值。

适用场景:

  1. 需要外部知识的任务:查询实时信息(天气、新闻、股价)、搜索专业领域知识

  2. 需要精确计算的任务:把数学问题交给计算器工具,避免大语言模型的计算错误

  3. 需要与API交互的任务:操作数据库、调用服务API完成特定功能

代码示例:

class ReActAgent:
    def __init__(self):
        self.memory = []
    
    def react_cycle(self, query):
        # 思考阶段
        thought = self.think(query)
        self.memory.append(f"Thought: {thought}")
        
        # 行动阶段
        action = self.decide_action(thought)
        self.memory.append(f"Action: {action}")
        
        # 观察阶段
        observation = self.execute_action(action)
        self.memory.append(f"Observation: {observation}")
        
        # 继续循环直到完成
        return thought, action, observation
    
    def think(self, query):
        # 实现思考逻辑
        return f"我需要先搜索关于{query}的最新信息"
    
    def decide_action(self, thought):
        if "搜索" in thought:
            return f"Search[{thought.split('搜索')[-1]}]"
        return "思考下一步"
    
    def execute_action(self, action):
        # 模拟执行动作
        return "搜索结果:相关数据..."


Plan-and-Solve:先规划后执行

Plan-and-Solve,顾名思义,这种模式将任务处理明确分为两个阶段:先规划,后执行。核心目的是解决思维链在处理多步骤、复杂问题时容易"跑偏"的问题。与ReAct将思考和行动融合在每一步不同,Plan-and-Solve将整个流程分成两个核心阶段:

规划阶段 (Planning Phase):
首先,智能体接收用户的完整问题。第一个任务不是直接去解决问题或调用工具,而是将问题分解,制定出清晰、分步骤的行动计划。

执行阶段 (Solving Phase):
获得完整计划后,智能体进入执行阶段。它会严格按照计划中的步骤,逐一执行。每一步的执行都可能是一次独立的大语言模型调用,或者是对上一步结果的加工处理,直到计划中所有步骤都完成,最终得出答案。

适用场景:

  1. 多步数学应用题:需要先列出计算步骤,再逐一求解

  2. 需要整合多个信息源的报告撰写:需要先规划好报告结构,再逐一填充内容

  3. 代码生成任务:需要先构思好函数、类和模块的结构,再逐一实现

代码示例:

class PlanAndSolveAgent:
    def __init__(self):
        self.plan = []
        self.solution = ""
    
    def process(self, problem):
        # 规划阶段
        self.create_plan(problem)
        print("规划完成:", self.plan)
        
        # 执行阶段
        for step in self.plan:
            result = self.execute_step(step)
            self.solution += f"\n步骤{step}: {result}"
        
        return self.solution
    
    def create_plan(self, problem):
        # 根据问题类型创建计划
        if "数学题" in problem:
            self.plan = [
                "分析问题类型",
                "列出已知条件", 
                "制定解题步骤",
                "逐步计算",
                "验证答案"
            ]
        elif "写报告" in problem:
            self.plan = [
                "确定报告结构",
                "收集相关资料",
                "撰写引言部分",
                "撰写主体内容",
                "撰写结论部分",
                "检查修改"
            ]
    
    def execute_step(self, step_description):
        # 执行单个步骤
        if step_description == "分析问题类型":
            return "这是一个代数应用题"
        elif step_description == "列出已知条件":
            return "已知:速度、时间、距离"
        # ... 其他步骤执行逻辑
        return "步骤执行完成"


Reflection:自我反思优化

Reflection机制的核心思想是为智能体引入事后自我校正的循环,让它能像人类一样,检查自己的工作,发现不足,并进行迭代优化。核心工作流程可以概括为三步循环:执行 → 反思 → 优化。

执行 (Execution):
首先,智能体用熟悉的方法(如ReAct或Plan-and-Solve)尝试完成任务,生成初步的解决方案或行动轨迹。可以看作是"初稿"。

反思 (Reflection):
接着,智能体进入反思阶段。它会调用一个独立的、或者有特殊提示的大语言模型实例,扮演"评审员"角色。这个"评审员"会检查第一步生成的"初稿",从多个角度评估:

  • 事实错误:是否有与常识或已知事实不符的内容?

  • 逻辑漏洞:推理过程是否有不连贯或矛盾的地方?

  • 效率问题:是否有更直接、更简洁的方法来完成任务?

  • 遗漏信息:是否忽略了问题的某些关键约束或方面?

根据评估,生成结构化的反馈,指出具体问题和改进建议。

优化 (Refinement):
最后,智能体将"初稿"和"反馈"作为新的上下文,再次调用大语言模型,要求它根据反馈内容修正初稿,生成更完善的"修订稿"。

Reflection机制是典型的"用成本换质量"策略。非常适合对最终结果的质量、准确性和可靠性有极高要求,且对任务完成的实时性要求相对宽松的场景。

适用场景:

  1. 生成关键的业务代码或技术报告

  2. 科学研究中的复杂逻辑推演

  3. 需要深度分析和规划的决策支持系统

代码示例:

class ReflectionAgent:
    def __init__(self):
        self.drafts = []
        self.feedbacks = []
        self.final_results = []
    
    def execute_with_reflection(self, task):
        # 第一轮:执行
        draft = self.execute_task(task)
        self.drafts.append(draft)
        
        # 最多进行3轮反思优化
        for i in range(3):
            print(f"第{i+1}轮反思优化...")
            
            # 反思:检查初稿
            feedback = self.reflect_on_draft(draft)
            self.feedbacks.append(feedback)
            
            # 优化:根据反馈改进
            refined_draft = self.refine_draft(draft, feedback)
            
            # 检查是否还需要继续优化
            if self.is_good_enough(refined_draft, feedback):
                self.final_results.append(refined_draft)
                return refined_draft
            
            draft = refined_draft
        
        return draft
    
    def execute_task(self, task):
        # 初始执行逻辑
        return f"初始解决方案:{task}"
    
    def reflect_on_draft(self, draft):
        # 反思逻辑:检查问题
        issues = []
        
        if "错误" in draft:
            issues.append("发现事实错误")
        if "逻辑矛盾" in draft:
            issues.append("发现逻辑漏洞")
        if "效率低下" in draft:
            issues.append("可以优化效率")
        
        return f"反馈:需要改进的问题:{', '.join(issues)}"
    
    def refine_draft(self, draft, feedback):
        # 根据反馈优化
        return f"优化后的方案:基于反馈{feedback}改进了{draft}"
    
    def is_good_enough(self, draft, feedback):
        # 判断是否达到质量要求
        return "没有发现问题" in feedback or "问题已解决" in draft


实际应用示例:综合使用三种模式

class IntelligentAssistant:
    def __init__(self):
        self.react_agent = ReActAgent()
        self.plan_agent = PlanAndSolveAgent()
        self.reflect_agent = ReflectionAgent()
    
    def solve_complex_problem(self, problem):
        print(f"处理问题:{problem}")
        
        # 根据问题复杂度选择方法
        if self.is_simple_query(problem):
            # 简单问题用ReAct
            result = self.react_agent.react_cycle(problem)
            print("使用ReAct模式")
        elif self.is_structured_problem(problem):
            # 结构化问题用Plan-and-Solve
            result = self.plan_agent.process(problem)
            print("使用Plan-and-Solve模式")
        else:
            # 复杂重要问题用Reflection
            result = self.reflect_agent.execute_with_reflection(problem)
            print("使用Reflection模式")
        
        # 最后用Reflection检查所有结果
        final_result = self.reflect_agent.refine_draft(
            str(result), 
            "最终检查:确保结果准确完整"
        )
        
        return final_result
    
    def is_simple_query(self, problem):
        # 判断是否简单查询
        simple_keywords = ["搜索", "查询", "查找", "什么是"]
        return any(keyword in problem for keyword in simple_keywords)
    
    def is_structured_problem(self, problem):
        # 判断是否结构化问题
        structured_keywords = ["步骤", "计划", "方案", "计算", "编程"]
        return any(keyword in problem for keyword in structured_keywords)


选择建议

  1. 简单交互任务:用ReAct模式

    • 实时查询

    • 简单信息获取

    • 快速响应场景

  2. 结构化任务:用Plan-and-Solve模式

    • 项目规划

    • 代码生成

    • 报告撰写

  3. 高质量要求任务:用Reflection模式

    • 重要文档编写

    • 关键代码审查

    • 复杂问题求解

  4. 混合使用:根据任务类型灵活组合

    • 先用Plan-and-Solve制定计划

    • 用ReAct执行具体步骤

    • 用Reflection检查和优化结果


总结

三种智能体构建方式各有特点,适用于不同场景:

  • ReAct:适合需要与外部交互的实时任务

  • Plan-and-Solve:适合结构化的复杂任务

  • Reflection:适合对质量要求极高的关键任务

理解这些模式的特点和适用场景,能帮助你设计出更智能、更可靠的AI应用系统。在实际开发中,可以根据具体需求选择合适的模式,或者组合使用多种模式,达到最佳效果。

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/13258

Cursor 编辑代码功能的核心原理:Agent 如何高效工作?

像 Cursor、Copilot 这类 AI 编程助手正快速成为程序员的好帮手。很多人可能觉得它们内部非常复杂,其实核心思路很直接。为了实现高效运行,开发团队的重点往往在:保证流程稳定可控和优化性能以节省宝贵的上下文空间。

AgentKit与n8n对比:现代工作流自动化工具深度解析

工作流自动化是现代数字化基础设施的核心。无论是优化内部流程、集成第三方平台,还是减少人工操作,对灵活可靠的自动化需求已经成为基本要求,而不是奢侈品。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!