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

Agent系列(三):Plan-and-Solve——先想清楚,再动手

ReAct 在哪里会撞墙?上一篇我们说 ReAct 的贪心策略——每一步只看当前状态,决定下一个行动。大多数情况下这很好用,但有一类任务会让它步履蹒跚。想象你要 Agent 完成这个任务:搜索 Python、Java、Go 三种语言的发布年份,按时间从早到晚排序,然后计算 Python 和 Go 相差多少年。用 ReAct 执行,可能的轨迹:Action: web_search("Python发布年份") Action: web_search("Java发布年份") Action: web_search("Go发布年份") Action: calculator("...") (有时候会多走几步,甚至重复搜索)这并不离谱,但有一个潜在问题:ReAct 在行动之前没有"全局规划"。它不知道任务总共需要多少步,不知道哪一步依赖哪一步,也不知道当前走到哪里了。每一步都是"当前最优解",不是"整体最优路径"。对于有明确依赖关系的多步任务,这就像不看地图边走边问路——能到,但弯路不少。Plan-and-Solve的思路是:先用 LLM 制定完整的行动计划,然后按计划逐步执行。Plan-and-Solve 的两阶段架构这个范式来自 2023 年的论文 Plan-and-Solve Prompting,核心思想分两步:Phase 1 — Plan(规划):让 LLM 以上帝视角分析整个任务,输出一个有序的步骤列表。这一阶段不执行任何操作,只是"想清楚怎么做"。Phase 2 — Solve(执行):按照计划,逐步执行每个步骤。每步可以调用工具,上一步的结果会注入到下一步的上下文里。加上生产环境必备的容错机制,完整的架构是:任务 │ ▼ [Plan 节点] ← LLM 生成 3-7 步计划(不执行,只规划) │ ▼ [Execute 节点] ← 执行当前步骤(内嵌 ReAct,可调工具) │ ├─ 步骤失败? ─→ [Replan 节点] ← 根据已完成进度重新规划剩余步骤 │ │ │ └──────────────┐ │ ▼ ├─ 还有步骤? ─→ 回到 Execute Execute(继续) │ └─ 全部完成? ─→ [Finalize 节点] ← 输出最终答案 │ ▼ END和 ReAct 的关键区别:ReAct 是一个无边界的循环,Plan-and-Solve 是一个有终点的序列。用 LangGraph 实现:State + GraphLangGraph 是实现这个架构的理想工具——它把 Agent 建模成一个状态机(StateGraph),状态在节点之间流转。状态设计fromtypingimportTypedDictclassPlanSolveState(TypedDict):task:str# 用户原始任务plan:list[str]# 当前计划(步骤列表)completed_steps:list[str]# 已完成步骤(含结果摘要)current_step_index:int# 当前执行到第几步(0-based)step_result:str# 本步骤的执行结果replan_count:int# 已重新规划的次数final_answer:str# 最终答案状态是整个图的"血液"——所有节点都从这里读取输入,向这里写入输出。设计好状态,架构就成功了一半。Plan 节点defplan_node(state:PlanSolveState)-dict:messages=[SystemMessage(content=PLANNER_SYSTEM),# 规划专家 promptHumanMessage(content=f"任务:{state['task']}"),]response=llm.invoke(messages)plan=parse_plan(response.content)# 解析 "1. xxx\n2. xxx" 格式return{"plan":plan,"current_step_index"
http://www.zskr.cn/news/1365821.html

相关文章:

  • 7步构建专业中文排版系统:Source Han Serif CN 完整配置与优化指南
  • GitHub中文化插件:3分钟搞定GitHub界面翻译的终极解决方案
  • 基于C#实现即时通讯工具的示例代码
  • Legacy iOS Kit:终极指南 - 如何降级、越狱和恢复旧款iOS设备
  • CTF MISC终极解决方案:如何用PuzzleSolver快速破解各类密码挑战
  • 5分钟掌握鸣潮优化工具:完整简单的免费方案快速提升游戏性能体验
  • 影刀RPA跨境店群运营架构:Python高并发协同与Chromium多账号环境隔离实战
  • 影刀RPA跨境店群运营架构:Python高并发协同与Chromium指纹环境隔离实战
  • 终于让我找到了小红书流量密码!点赞34,收藏14,我却被封号了:小红书最狠的封号逻辑,根本不看图
  • GetQzonehistory:三步永久保存QQ空间记忆的免费数据迁移工具
  • AnySearch实战指南:AI搜索基础设施如何打通80%不可见互联网
  • 相对论GPS修正指南:每天10公里漂移的38微秒秘密
  • 鸣潮智能辅助工具:终极游戏自动化解决方案
  • 中国车牌生成器:5分钟快速创建逼真车牌图像的终极指南
  • C#中实现值相等(Value Equality)的详细步骤
  • LoRA微调实战2026:从零到生产的完整工程指南
  • 高效音频解密利器:qmc-decoder深度解析与应用指南
  • 30+平台一键文档下载:告别繁琐流程,实现“所见即所得“的自由
  • Legacy iOS Kit终极指南:5个核心技巧实现旧款iOS设备高效降级与越狱
  • 如何用SMUDebugTool完全掌控你的AMD Ryzen处理器:新手终极指南
  • Ubuntu 22.04上从零安装UCSF DOCK 6.11:手把手解决依赖与编译的那些坑
  • K210开发板固件烧录终极指南:kflash_gui完全使用手册
  • 统信UOS服务器SSL证书配置全攻略:服务端链路与浏览器NSS信任同步
  • 猫抓浏览器扩展:新手必学的在线视频下载终极指南
  • 如何快速解密QQ音乐QMC文件:终极跨平台音频转换指南
  • 终极指南:如何使用qmc-decoder快速解密QQ音乐加密音频文件
  • runc符号链接挂载漏洞导致容器逃逸的原理与实战防护
  • 微信小程序逆向:基于Frida Hook WeChatAppHost.dll解密wxapkg
  • Postman 401错误排查:Bearer Token认证填法与工程化实践
  • Android APP通信协议逆向:AES+Base64+Protobuf加密还原实战