ReAct由Shunyu Yao在2022年提出,核心思想是模仿人类解决问题的过程,将推理和行动明确结合起来,形成”思考-行动-观察”的循环。
在ReAct出现之前,主要方法分两类:一类是”纯思考”型,比如思维链,能引导模型进行复杂推理,但无法与外部交互,容易产生错误信息;另一类是”纯行动”型,模型直接输出要执行的动作,但缺少规划和纠正错误的能力。
ReAct巧妙之处在于认识到思考和行动是互相促进的。思考指导行动,行动结果又反过来修正思考。为此,ReAct通过特定的提示方式来引导模型,让每一步输出都遵循固定模式:
思考 Agent 智能体 (Thought):
这是智能体的”内心想法”。它会分析当前情况、分解任务、制定下一步计划,或者反思上一步结果。
行动 (Action):
这是智能体决定采取的具体动作,通常是调用外部工具,比如Search[‘华为最新款手机’]。
观察 (Observation):
这是执行行动后从外部工具返回的结果,比如搜索结果的摘要或api的返回值。
- 需要外部知识的任务:查询实时信息(天气、新闻、股价)、搜索专业领域知识
- 需要精确计算的任务:把数学问题交给计算器工具,避免大语言模型的计算错误
- 需要与API交互的任务:操作数据库、调用服务API完成特定功能
Plan-and-Solve,顾名思义,这种模式将任务处理明确分为两个阶段:先规划,后执行。核心目的是解决思维链在处理多步骤、复杂问题时容易”跑偏”的问题。与ReAct将思考和行动融合在每一步不同,Plan-and-Solve将整个流程分成两个核心阶段:
规划阶段 (Planning Phase):
首先,智能体接收用户的完整问题。第一个任务不是直接去解决问题或调用工具,而是将问题分解,制定出清晰、分步骤的行动计划。
执行阶段 (Solving Phase):
获得完整计划后,智能体进入执行阶段。它会严格按照计划中的步骤,逐一执行。每一步的执行都可能是一次独立的大语言模型调用,或者是对上一步结果的加工处理,直到计划中所有步骤都完成,最终得出答案。
- 多步数学应用题:需要先列出计算步骤,再逐一求解
- 需要整合多个信息源的报告撰写:需要先规划好报告结构,再逐一填充内容
- 代码生成任务:需要先构思好函数、类和模块的结构,再逐一实现
Reflection机制的核心思想是为智能体引入事后自我校正的循环,让它能像人类一样,检查自己的工作,发现不足,并进行迭代优化。核心工作流程可以概括为三步循环:执行 → 反思 → 优化。
执行 (Execution):
首先,智能体用熟悉的方法(如ReAct或Plan-and-Solve)尝试完成任务,生成初步的解决方案或行动轨迹。可以看作是”初稿”。
反思 (Reflection):
接着,智能体进入反思阶段。它会调用一个独立的、或者有特殊提示的大语言模型实例,扮演”评审员”角色。这个”评审员”会检查第一步生成的”初稿”,从多个角度评估:
- 事实错误:是否有与常识或已知事实不符的内容?
- 逻辑漏洞:推理过程是否有不连贯或矛盾的地方?
- 效率问题:是否有更直接、更简洁的方法来完成任务?
- 遗漏信息:是否忽略了问题的某些关键约束或方面?
根据评估,生成结构化的反馈,指出具体问题和改进建议。
优化 (Refinement):
最后,智能体将”初稿”和”反馈”作为新的上下文,再次调用大语言模型,要求它根据反馈内容修正初稿,生成更完善的”修订稿”。
Reflection机制是典型的”用成本换质量”策略。非常适合对最终结果的质量、准确性和可靠性有极高要求,且对任务完成的实时性要求相对宽松的场景。
- 生成关键的业务代码或技术报告
- 科学研究中的复杂逻辑推演
- 需要深度分析和规划的决策支持系统
- 简单交互任务:用ReAct模式
- 实时查询
- 简单信息获取
- 快速响应场景
- 结构化任务:用Plan-and-Solve模式
- 项目规划
- 代码生成
- 报告撰写
- 高质量要求任务:用Reflection模式
- 重要文档编写
- 关键代码审查
- 复杂问题求解
- 混合使用:根据任务类型灵活组合
- 先用Plan-and-Solve制定计划
- 用ReAct执行具体步骤
- 用Reflection检查和优化结果
三种智能体构建方式各有特点,适用于不同场景:
- ReAct:适合需要与外部交互的实时任务
- Plan-and-Solve:适合结构化的复杂任务
- Reflection:适合对质量要求极高的关键任务
理解这些模式的特点和适用场景,能帮助你设计出更智能、更可靠的AI应用系统。在实际开发中,可以根据具体需求选择合适的模式,或者组合使用多种模式,达到最佳效果。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!
链接: https://fly63.com/article/detial/13258
发布者:Ai探索者,转载请注明出处:https://javaforall.net/235797.html原文链接:https://javaforall.net
