尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Agent 规划与推理:让AI从应激反应到主动思考
Agent 规划与推理让 AI 从应激反应到主动思考工具是 Agent 的手记忆是 Agent 的存储规划是 Agent 的大脑。没有规划能力的 Agent只能做应激反应。前言为什么 Agent 需要规划没有规划的 Agent用户帮我写一个数据分析报告 Agent 直接开始写写到一半发现需要数据 → 搜索数据 → 发现有数据但格式不对 → 重新处理 → 效率极低有规划的 Agent用户帮我写一个数据分析报告 Agent 先规划 1. 明确数据源和格式 2. 获取数据 3. 数据清洗 4. 数据分析 5. 生成报告 → 按顺序执行效率高出错少规划 把复杂任务拆解成可管理的子任务。一、任务分解1.1 任务分解方法classTaskDecomposer:任务分解defdecompose(self,task,max_subtasks5):promptf 任务{task}请将这个任务分解成{max_subtasks}个以内的子任务。 每个子任务应该 - 可独立执行 - 有明确的输入和输出 - 有明确的完成标准 输出格式JSON [ {{ id: 1, name: 子任务名称, description: 子任务描述, dependencies: [], # 依赖的子任务 ID tools_needed: [], # 需要的工具 success_criteria: 完成标准 }} ] returnllm(prompt)1.2 任务依赖图classTaskDAG:任务依赖图DAGdef__init__(self,tasks):self.taskstasks self.dagself._build_dag(tasks)def_build_dag(self,tasks):构建有向无环图dag{t[id]:{task:t,deps:t.get(dependencies,[])}fortintasks}returndagdefget_execution_order(self):拓扑排序获取执行顺序visitedset()order[]defdfs(task_id):iftask_idinvisited:returnvisited.add(task_id)fordepinself.dag[task_id][deps]:dfs(dep)order.append(task_id)fortask_idinself.dag:dfs(task_id)return[self.dag[tid][task]fortidinorder]defget_parallel_tasks(self):获取可以并行执行的任务orderself.get_execution_order()batches[]current_batch[]completedset()fortaskinorder:depsset(task.get(dependencies,[]))ifdeps.issubset(completed):current_batch.append(task)else:ifcurrent_batch:batches.append(current_batch)completed.update(t[id]fortincurrent_batch)current_batch[task]ifcurrent_batch:batches.append(current_batch)returnbatches二、计划生成与执行2.1 计划生成classPlanner:Agent 规划器def__init__(self,llm,tools):self.llmllm self.toolstoolsdefplan(self,task,contextNone):生成执行计划promptf 任务{task}可用工具{list(self.tools.keys())}上下文{context}请生成一个详细的执行计划 1. 任务分解成多个步骤 2. 每个步骤指定使用的工具 3. 步骤之间的依赖关系 4. 预期输出 计划 plan_textself.llm.generate(prompt)returnself._parse_plan(plan_text)defvalidate_plan(self,plan):验证计划的可行性forstepinplan:toolstep.get(tool)iftoolandtoolnotinself.tools:returnFalse,f步骤{step[id]}需要工具{tool}但不可用returnTrue,计划可行2.2 计划执行classPlanExecutor:计划执行器def__init__(self,planner,tools,max_retries2):self.plannerplanner self.toolstools self.max_retriesmax_retriesdefexecute(self,task):# 1. 生成计划planself.planner.plan(task)# 2. 验证计划valid,messageself.planner.validate_plan(plan)ifnotvalid:return{status:error,message:message}# 3. 获取执行顺序dagTaskDAG(plan)batchesdag.get_parallel_tasks()# 4. 按批次执行results{}forbatchinbatches:batch_resultsself._execute_batch(batch,results)results.update(batch_results)# 5. 动态调整ifself._needs_replan(task,plan,results):planself.planner.plan(task,contextresults)batchesdag.get_parallel_tasks()# 6. 汇总结果returnself._summarize_results(task,results)def_execute_batch(self,batch,previous_results):执行一批并行任务batch_results{}forstepinbatch:# 准备参数paramsself._prepare_params(step,previous_results)# 执行forattemptinrange(self.max_retries):try:resultself.tools[step[tool]](**params)batch_results[step[id]]resultbreakexceptExceptionase:ifattemptself.max_retries-1:batch_results[step[id]]{error:str(e)}returnbatch_results三、动态重规划3.1 什么时候需要重规划classReplanDetector:重规划检测defcheck(self,task,plan,results):triggers[]# 1. 工具调用失败forstep_id,resultinresults.items():iferrorinresult:triggers.append(f步骤{step_id}失败)# 2. 结果不符合预期forstep_id,resultinresults.items():ifnotself._check_expectation(plan,step_id,result):triggers.append(f步骤{step_id}结果不符合预期)# 3. 环境变化ifself._environment_changed():triggers.append(环境发生变化)# 4. 用户干预ifself._user_intervened():triggers.append(用户干预)returntriggers3.2 动态调整defdynamic_replan(task,plan,results,triggers): 根据触发条件动态调整计划 # 1. 分析失败原因analysisanalyze_failures(triggers,results)# 2. 生成修正方案revisedllm.generate(f 原始任务{task}原始计划{plan}执行结果{results}失败原因{analysis}请提供修正方案 1. 哪些步骤需要重做 2. 哪些步骤可以跳过 3. 需要新增哪些步骤 )returnrevised四、推理与规划的结合4.1 推理驱动的规划classReasoningPlanner:基于推理的规划defplan_with_reasoning(self,task):# 1. 推理任务本质reasoningself.llm.generate(f 任务{task}分析 1. 这个任务的本质是什么 2. 成功的关键是什么 3. 可能遇到的困难是什么 4. 已知信息有哪些 5. 需要获取什么信息 )# 2. 基于推理生成计划planself.llm.generate(f 基于以上分析请生成执行计划 推理{reasoning})returnplan4.2 规划中的推理检查点defplan_with_checkpoints(task):在规划中设置推理检查点planplanner.plan(task)forstepinplan:# 在执行前先推理reasoningllm.generate(f 当前步骤{step}上下文{context}推理 1. 这个步骤的目标是什么 2. 预期输出是什么 3. 如果出错备选方案是什么 )# 执行resultexecute(step)# 执行后验证verificationllm.generate(f 推理{reasoning}实际结果{result}验证 1. 结果是否符合预期 2. 如果不符合原因是什么 )ifverification[status]unexpected:plandynamic_replan(plan,step,result)五、规划的局限性5.1 过度规划问题花太多时间规划实际执行很少 表现生成了 20 步计划但只执行了 3 步 解决方案 - 限制规划步数最多 5-10 步 - 采用渐进式规划先规划前几步后面边做边规划 - 设置规划超时5.2 不切实际的规划问题规划了无法执行的步骤 表现假设了不存在的工具、不可用的数据 解决方案 - 规划前验证工具的可用性 - 规划时考虑实际情况数据可用性、时间限制 - 执行时验证每一步的可行性5.3 规划与执行脱节问题计划很好但执行时发现现实不一样 表现搜索不到预期的数据、工具返回错误 解决方案 - 动态重规划机制 - 执行结果反馈到规划 - 允许人工干预六、2026 年规划技术趋势6.1 分层规划高层规划抽象→ 中层规划具体→ 底层规划执行高层写一个数据分析报告 中层获取数据 → 分析数据 → 生成报告 底层search_web → extract_data → analyze → format6.2 学习型规划Agent 从历史规划中学习完成 100 个任务后Agent 学会 - 类似的任务通常需要哪些步骤 - 哪些步骤容易失败 - 哪些工具组合最有效6.3 规划即代码规划不再是自然语言而是代码plan { type: sequential, steps: [ {tool: search, params: {...}}, {tool: analyze, params: {...}}, ], fallback: {tool: ask_user, params: {...}}, }6.4 渐进式规划成为主流渐进式规划Progressive Planning - 不一次性生成完整计划 - 先规划前 2-3 步执行后再规划下一步 - 类似人类的走一步看一步策略 - 优势减少规划浪费快速响应变化 代表实践 - LangGraph 的 StateGraph支持动态状态更新和条件分支 - Claude Code 的 ReAct 循环Thought → Action → Observation - OpenClaw 的 Subagent 架构主Agent规划子Agent执行总结能力说明实现方式任务分解把复杂任务拆成子任务LLM 分解 DAG计划生成生成执行步骤LLM 规划计划执行按顺序/并行执行执行器动态重规划根据执行结果调整触发条件检测推理增强在规划中融入推理推理检查点规划让 Agent 从应激反应进化到主动思考。下一篇文章我们将深入Agent 安全与治理。思考题你的 Agent 现在有规划能力吗如果没有什么场景下最需要规划动态重规划在什么场景下特别重要什么场景下不需要如果规划步骤超过 10 步你会怎么处理上一篇[32] 工具系统与 MCP 协议下一篇[34] Agent 安全与治理
RELATED

相关推荐

LLM 服务网关的性能优化:连接池、批量推理与请求合并的工程方案

LLM 服务网关的性能优化:连接池、批量推理与请求合并的工程方案

LLM 服务网关的性能优化:连接池、批量推理与请求合并的工程方案 一、$2300 一个月的 API 账单是怎么来的 一个面向开发者的 AI 编程助手,月均调用 GPT-4 API 约 120 万次。最初的实现是每个用户的每次请求直接新建一个 HTTP 连接调用 OpenAI API。这导致…

📅 2026/11/2 11:48:57
可研 PPT 被甲方夸了,其实就靠这几步

可研 PPT 被甲方夸了,其实就靠这几步

一份靠谱的可研报告PPT怎么做?从大纲搭建、内容精简到图表美化,分享实操避坑经验,帮你把枯燥的项目数据讲出逻辑。 可研 PPT 这种东西,做过的人都知道有多折磨。密密麻麻的 Word 报告要浓缩成几十页幻灯片,还要让领导…

📅 2026/9/15 13:14:28
参赛实测|以企业项目落地为例!聊聊AI赋能Java开发的真实体验

参赛实测|以企业项目落地为例!聊聊AI赋能Java开发的真实体验

做技术博主、深耕后端开发这么多年,我一直有个很直观的感受:企业级Java项目开发,难的从来不是写代码,而是整体架构规范、业务闭环落地、工程标准化。很多新手甚至初级工程师,能写CRUD,但很难独立搭建一套合…

📅 2026/10/4 23:08:59
MORE NEWS

更多资讯

📰

S7-200 PLC在游泳池水处理系统中的节能优化方案

1. 项目概述:基于S7-200 PLC的游泳池水处理系统去年夏天给本地游泳馆做自动化改造时,发现传统继电器控制的水处理系统故障率高、能耗浪费严重。用西门子S7-200 PLC配合组态王重新设计后,不仅实现了自动反冲洗、药剂投加等核心功能&#xff0c…

📰

软件测试金字塔与自动化实践指南

1. 项目概述在软件开发领域,测试环节常常被新手开发者忽视,却又是决定产品质量的关键环节。我见过太多团队在项目后期被测试问题拖累,不得不加班加点修复本该早期发现的缺陷。测试不是简单的"点一点按钮",而是一门需要系…

📰

VC6.0调用jsoncpp实现UTF-8/GBK双模中文JSON解析

简介:本资源是一套专为VC6.0开发环境深度适配的JSONCPP全功能调用案例,面向嵌入式、工控及遗留系统维护等需兼容老旧开发平台的C工程师,解决在VC6.0中解析含中文JSON数据时普遍存在的乱码、编译失败与API调用异常等核心痛点。压缩包共72个文件…

📰

期货波动怎么看?平均真实波幅(ATR)和历史波动率怎么选?

想看期货波动,平均真实波幅(ATR)和历史波动率(HV)都能提供信息,却不宜拿两个数直接比较谁大谁小。你若关心一段行情通常跨过多少报价距离,与关心收盘价格的比例变化有多分散,实际上是…

📰

GNG生长神经气:无监督拓扑建模与在线流形学习

1. 这不是又一个“神经网络”噱头:GNG到底在解决什么真问题?你可能已经看过太多标题带“神经网络”的论文,点进去发现不过是把经典算法套个新壳,加点ReLU、Dropout、BatchNorm就敢叫“深度改进”。但GNG——Growing Neural Gas Ne…

📰

STM32F103C8T6最小系统原理图深度解析:电源、复位、时钟与SWD设计本质

简介:本资源为STM32F103C8T6最小系统板的完整原理图PDF文件,面向嵌入式初学者、电子设计爱好者及单片机课程实践者,解决核心硬件电路搭建与理解难题。图纸涵盖电源管理(含ME6211 3.3V稳压、多级去耦电容)、复位电路&am…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬