本文介绍了AI Agent的设计模式Plan-and-Solve该模式通过“先规划后执行”的方式让AI将复杂任务拆解为可执行的步骤按计划完成提高任务成功率和效率。与ReAct模式“边想边做”不同Plan-and-Solve更适用于复杂任务通过Planner生成计划Solver执行计划并可动态调整。文章还提供了代码实现和实用技巧帮助程序员更好地理解和应用Plan-and-Solve模式。今天我们来学习AI Agent 的设计模式 —— Plan-and-Solve计划与执行一句话核心Plan-and-Solve就是先想清楚再做——让 AI 把复杂任务拆解成一步步可执行的计划然后按部就班地执行不再像无头苍蝇一样乱撞。说实话这招特别对我们程序员的胃口。你想啊我们接到一个大需求第一反应是什么肯定是先拆需求、列任务清单、排优先级对吧Plan-and-Solve 就是让 AI 也按这个套路来工作。之前学 ReAct 的时候AI 是边想边做走一步看一步。这种方式对付简单问题还行但遇到复杂任务就容易跑偏——做着做着忘了最初的目标或者在某个子任务里死循环出不来。Plan-and-Solve 的思路完全不同它让 AI先停下来好好规划把整个任务的路线图画清楚然后再开工。就像盖房子要先有设计图纸打仗要先有作战计划。它的核心价值在于把复杂问题化整为零提高任务完成的成功率和效率。是什么还是老规矩先来看图说话Plan-and-Solve 工作原理从图里可以看出来Plan-and-Solve 有两个核心角色•Planner规划者负责把复杂任务拆成一步一步的小任务生成完整的执行计划•Solver执行者按照计划一步步完成任务如果某步失败了还可以调整计划整个流程是这样的接收任务用户给 AI 一个复杂目标比如帮我策划一场生日派对生成计划Planner 分析任务输出计划清单• 确定派对主题和预算• 确定时间和地点• 列出邀请名单• 准备食物和饮料• 布置场地执行计划Solver 依次执行每一步完成后再进入下一步输出结果所有步骤执行完毕给出最终结果举个我之前折腾的例子我想让 AI 帮我写一份周报。如果用 ReAct它可能会想到什么写什么最后发现漏了项目 A又回头补结构乱七八糟。用 Plan-and-Solve 就不一样了Planner 先规划回顾本周完成的任务查 Jira/Tapd整理下周计划汇总遇到的问题生成周报文档然后 Solver 按这个计划执行每一步都清清楚楚最后输出的周报结构完整、逻辑清晰。说白了Plan-and-Solve 就是给 AI 装了个项目经理的角色不再让它瞎忙乎。怎么做下面看代码实现。核心架构Plan-and-Solve 的实现思路很清晰就是两个阶段class PlanAndSolveAgent: def __init__(self, llm): self.llm llm def run(self, task): # 第一阶段Planning规划 plan self.planner.generate_plan(task) # 第二阶段Solving执行 results [] for step in plan: result self.solver.execute(step) results.append(result) # 如果某步失败可以重新规划 if not result.success: plan self.replan(task, plan, step, results) # 整合所有结果 return self.aggregate_results(results)关键点在于•计划要可执行每一步应该是明确的动作•支持动态调整如果某步卡住了要能重新规划•结果可整合最后要能把各步结果组合成完整答案实战代码来看一个完整的实现import jsonfrom typing import List, Dict, Any, Optionalfrom dataclasses import dataclassfrom openai import OpenAIclient OpenAI()dataclassclass PlanStep: 计划步骤 step_number: int # 步骤编号 description: str # 步骤描述 tool: Optional[str] # 需要使用的工具可选 expected_output: str # 期望输出dataclassclass StepResult: 步骤执行结果 step_number: int success: bool output: str error: Optional[str] Noneclass PlanAndSolveAgent: def __init__(self): self.client client self.tools self._get_available_tools() def _get_available_tools(self) - Dict[str, Any]: 定义可用的工具 return { search_web: { description: 搜索网络信息, parameters: {query: 搜索关键词} }, read_file: { description: 读取文件内容, parameters: {file_path: 文件路径} }, write_file: { description: 写入文件内容, parameters: {file_path: 文件路径, content: 内容} }, calculator: { description: 进行数学计算, parameters: {expression: 数学表达式} } } def planner(self, task: str) - List[PlanStep]: 规划阶段生成执行计划 tools_desc \n.join([ f- {name}: {info[description]} for name, info in self.tools.items() ]) prompt f请为以下任务制定详细的执行计划任务{task}可用工具{tools_desc}请分析这个任务将其拆解为多个可执行的步骤。每个步骤应该1. 有明确的编号和描述2. 标明需要使用的工具如果需要3. 说明期望的输出是什么返回 JSON 数组格式[ {{ step_number: 1, description: 步骤描述, tool: 工具名称或null, expected_output: 期望的输出 }}] response self.client.chat.completions.create( modelgpt-4, messages[{role: user, content: prompt}] ) content response.choices[0].message.content # 提取 JSON if json in content: content content.split(json)[1].split()[0] elif in content: content content.split()[1].split()[0] plan_data json.loads(content) return [ PlanStep( step_numberp[step_number], descriptionp[description], toolp.get(tool), expected_outputp[expected_output] ) for p in plan_data ] def execute_step(self, step: PlanStep) - StepResult: 执行单个步骤 print(f 执行步骤 {step.step_number}: {step.description}) try: # 模拟工具调用实际应用中会调用真实工具 if step.tool search_web: result self._mock_search_web(step.description) elif step.tool read_file: result self._mock_read_file(step.description) elif step.tool calculator: result self._mock_calculator(step.description) else: # 无工具调用直接让 LLM 处理 result self._llm_process(step.description) print(f ✅ 完成: {result[:50]}... if len(result) 50 else f ✅ 完成: {result}) return StepResult( step_numberstep.step_number, successTrue, outputresult ) except Exception as e: print(f ❌ 失败: {str(e)}) return StepResult( step_numberstep.step_number, successFalse, output, errorstr(e) ) def _mock_search_web(self, query: str) - str: 模拟网络搜索 # 这里实际应该调用搜索引擎 API return f搜索结果关于{query}的相关信息... def _mock_read_file(self, description: str) - str: 模拟读取文件 return f文件内容{description} 对应的文件数据... def _mock_calculator(self, expression: str) - str: 模拟计算 return f计算结果42 def _llm_process(self, description: str) - str: 使用 LLM 处理步骤 response self.client.chat.completions.create( modelgpt-4, messages[{role: user, content: description}] ) return response.choices[0].message.content def replanner(self, task: str, failed_step: PlanStep, previous_results: List[StepResult]) - List[PlanStep]: 重新规划当某步失败时调整计划 completed_steps [r.step_number for r in previous_results if r.success] prompt f任务执行过程中步骤 {failed_step.step_number} 失败了。原任务{task}失败的步骤{failed_step.description}已完成的步骤{completed_steps}请重新规划剩余步骤避开导致失败的问题。返回 JSON 数组格式从步骤 {failed_step.step_number} 开始。 response self.client.chat.completions.create( modelgpt-4, messages[{role: user, content: prompt}] ) content response.choices[0].message.content # 提取 JSON if json in content: content content.split(json)[1].split()[0] elif in content: content content.split()[1].split()[0] plan_data json.loads(content) return [ PlanStep( step_numberp[step_number], descriptionp[description], toolp.get(tool), expected_outputp[expected_output] ) for p in plan_data ] def aggregate_results(self, task: str, results: List[StepResult]) - str: 整合所有步骤的结果 successful_results [r for r in results if r.success] results_text \n\n.join([ f步骤 {r.step_number}:\n{r.output} for r in successful_results ]) prompt f请根据以下各步骤的执行结果整合生成最终回答。原始任务{task}各步骤结果{results_text}请生成一个完整、连贯的最终答案。 response self.client.chat.completions.create( modelgpt-4, messages[{role: user, content: prompt}] ) return response.choices[0].message.content def run(self, task: str, max_retries: int 2) - str: 运行完整流程 print(f\n 任务{task}) print( * 60) # Stage 1: 规划 print(\n Stage 1: 生成计划...) plan self.planner(task) print(f\n生成 {len(plan)} 个步骤) for step in plan: tool_info f [{step.tool}] if step.tool else print(f {step.step_number}. {step.description}{tool_info}) # Stage 2: 执行 print(\n Stage 2: 执行计划...) results [] retry_count 0 i 0 while i len(plan): step plan[i] result self.execute_step(step) results.append(result) if not result.success: if retry_count max_retries: print(f\n 重新规划第 {retry_count 1} 次...) new_plan self.replanner(task, step, results) # 替换剩余的计划 plan plan[:i] new_plan retry_count 1 else: print(f\n⚠️ 步骤 {step.step_number} 多次重试后仍失败继续执行后续步骤) i 1 # Stage 3: 整合结果 print(\n Stage 3: 整合结果...) final_result self.aggregate_results(task, results) # 统计信息 success_count sum(1 for r in results if r.success) print(f\n✅ 完成: {success_count}/{len(results)} 个步骤成功) return final_result# 测试 Plan-and-Solve Agentagent PlanAndSolveAgent()# 示例任务研究一个主题并写报告task 研究 Python 异步编程列出其主要特性和使用场景result agent.run(task)print(\n * 60)print( 最终结果)print(result)# 更复杂的任务示例print(\n\n * 60)task2 帮我制定一个学习计划在3个月内掌握机器学习基础result2 agent.run(task2)print(\n 最终结果)print(result2)运行这段代码你会看到 AI 如何先规划把复杂任务拆解成明确的步骤清单再执行按步骤一个个完成动态调整如果某步失败会重新规划继续执行整合输出把所有步骤结果组合成完整答案几个实用技巧•计划粒度要合适太粗容易遗漏细节太细会增加开销一般 3-7 步比较合适•给计划留余地在 replanner 里处理失败情况别一条路走到黑•工具描述要清晰Planner 需要根据工具描述来决定用什么工具•结果整合很重要最后一步要把各步骤结果有机组合别简单拼接❄️ 冷知识Plan-and-Solve 论文背景这个模式来自 2023 年 Wang 等人发表的论文《Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models》最初是为了提升大模型的数学推理能力。与 Chain-of-Thought 的关系Plan-and-Solve 可以看作是 CoT思维链的升级版——CoT 是边想边说Plan-and-Solve 是先想后做前者适合简单推理后者适合复杂任务。可以嵌套使用Planner 生成的子任务如果仍然很复杂可以再用一次 Plan-and-Solve形成层级化的计划结构。人类也用这招项目管理里的 WBS工作分解结构、敏捷开发的 Sprint Planning本质上都是 Plan-and-Solve 的思维。不是万能药对于需要大量探索、试错、创造性思考的任务比如写小说、设计新产品Plan-and-Solve 可能过于死板ReAct 的边想边做反而更合适。那么如何学习大模型 AI 对于刚入门大模型的小白或是想转型/进阶的程序员来说最头疼的就是找不到系统、全面的学习资源要么零散不成体系要么收费高昂白白浪费时间走弯路。今天就给大家精心整理了一份全面且免费的AI大模型学习资源包覆盖从入门到实战、从理论到面试的全流程所有资料均已整理完毕免费分享给各位核心包含AI大模型全套系统化学习路线图小白可直接照做、精品学习书籍电子文档、干货视频教程、可直接上手的实战项目源码、2026大厂面试真题题库一站式解决你的学习痛点不用再到处搜集拼凑扫码免费领取全部内容1、大模型系统化学习路线学习大模型方向比努力更重要很多小白入门就陷入“盲目看视频、乱刷资料”的误区最后越学越懵。这里给大家整理的这份学习路线是结合2026年大模型行业趋势和新手学习规律设计的最科学、最系统从零基础到精通每一步都有明确指引帮你节省80%的无效学习时间少走弯路、高效进阶。2、大模型学习书籍文档理论是实战的根基尤其是对于程序员来说想要真正吃透大模型原理离不开优质的书籍和文档支撑。本次整理的书籍和电子文档均由大模型领域顶尖专家、大厂技术大咖撰写涵盖基础入门、核心原理、进阶技巧等内容语言通俗易懂既有理论深度又贴合实战场景小白能看懂程序员能进阶为后续实战和面试打下坚实基础。3、AI大模型最新行业报告无论是小白了解行业、规划学习方向还是程序员转型、拓展业务边界都需要紧跟行业趋势。本次整理的2026最新大模型行业报告针对互联网、金融、医疗、工业等多个主流行业系统调研了大模型的应用现状、发展趋势、现存问题及潜在机会帮你清晰了解哪些行业更适合大模型落地哪些技术方向值得重点深耕避免盲目学习精准对接行业需求。值得一提的是报告还包含了多模态、AI Agent等前沿方向的发展分析助力大家把握技术风口。4、大模型项目实战配套源码对于程序员和想落地能力的小白来说“光说不练假把式”只有动手实战才能真正巩固所学知识将理论转化为实际能力。本次整理的实战项目涵盖基础应用、进阶开发、多场景落地等类型每个项目都附带完整源码和详细教程从简单的ChatPDF搭建到复杂的RAG系统开发、大模型部署难度由浅入深小白可逐步上手程序员可直接参考优化既能练手提升技术又能丰富简历为求职和职业发展加分。5、大模型大厂面试真题2026年大模型面试已从单纯考察原理转向侧重技术落地和业务结合的综合考察很多程序员和新手因为缺乏针对性准备明明技术不错却在面试中失利。为此我精心整理了各大厂最新大模型面试真题题库涵盖基础原理、Prompt工程、RAG系统、模型微调、部署优化等核心考点不仅有真题还附带详细解题思路和行业踩坑经验帮你精准把握面试重点提前做好准备面试时从容应对、游刃有余。6、四阶段精细化学习规划附时间节点可直接照做结合上述资源给大家整理了一份可直接落地的四阶段学习规划总时长约2个月小白可循序渐进程序员可根据自身基础调整节奏高效掌握大模型核心能力快速实现从“入门”到“能落地、能面试”的跨越。第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容3、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】