任务分解实战:让 Agent 自动生成子任务列表
一、为什么 Agent 需要“任务分解”?
前面我们已经实现了:
- ReAct Agent
- Tool Calling
- LangGraph Workflow
- 手写 ReAct Graph
但是你会发现一个非常严重的问题:
ReAct 的核心短板
ReAct 非常适合:
短链路任务
例如:
- 查询天气
- 调用搜索
- 简单计算
- 一次性 Tool 调用
因为它的模式本质上是:
Thought
→ Action
→ Observation
→ 下一轮决策
它是一种:
边想边做
的机制。
这在简单任务里非常有效。
但问题是:
二、复杂任务下,ReAct 会开始失控
例如用户问:
请帮我研究一下:
2026 年 AI Agent 行业的发展趋势,
并重点分析:
1. OpenAI
2. Anthropic
3. Google
4. 国内 Agent 创业公司
最后生成一份总结报告。
你会发现:
普通 ReAct Agent 很容易出现:
典型问题1:任务遗漏
Agent 可能:
- 只研究了 OpenAI
- 忘记 Anthropic
- 没做最终总结
因为:
它没有全局任务视图
典型问题2:上下文混乱
随着 Tool 调用越来越多:
messages 会越来越长
导致:
- 推理质量下降
- Tool 选择错误
- 开始跑偏
典型问题3:无法控制执行顺序
例如:
应该先调研
再总结
最后输出
但 ReAct 可能:
研究到一半直接输出结论
因为:
ReAct 没有“计划层”
三、Planning Agent 的核心思想
Planning Agent 的核心升级:
先规划
再执行
也就是:
Plan-and-Execute
架构会变成:
用户请求
↓
Planner
↓
生成任务列表
↓
Executor
↓
逐个执行任务
↓
汇总结果
这其实非常像:
项目经理 + 执行团队
四、任务分解(Task Decomposition)是什么?
所谓:
任务分解
本质上就是:
把复杂任务拆成多个可执行的小任务
例如:
用户请求:
分析 AI Agent 行业
Planner 会自动拆成:
1. 调研 OpenAI Agent 战略
2. 调研 Anthropic Agent 战略
3. 调研 Google Agent 战略
4. 调研中国 Agent 创业公司
5. 汇总行业趋势
6. 生成最终报告
这就是:
Task List
也是 Planning Agent 的核心。
五、为什么“任务分解”是 Agent 工程化核心?
这是很多人忽略的一点。
真正的大型 Agent 系统:
核心不是 Prompt
而是 Workflow Control
任务分解的本质其实是:
Workflow Planning
也就是:
工作流规划
这是整个 Agent Engineering 的核心能力。
六、任务分解的三种常见模式
在生产环境里,常见有三种:
1. 静态任务分解
例如:
[
"搜索资料",
"总结内容",
"生成报告"
]
特点:
- 固定流程
- 最稳定
- 最容易调试
缺点:
不够智能
2. LLM 动态任务分解(最常见)
让模型自己生成:
task list
例如:
[
"研究 OpenAI",
"研究 Anthropic",
"总结行业趋势"
]
这是目前主流方案。
因为:
灵活性最高
3. 动态重规划(Re-Planning)
执行过程中:
发现任务不够
于是:
重新生成任务
例如:
执行到一半发现:
缺少中国市场数据
于是 Planner 自动新增:
调研中国 AI Agent 创业公司
这是高级 Planning Agent 的核心能力。
后面我们会专门讲。
七、任务分解 Prompt 设计(非常重要)
很多人做 Planning Agent 最大的问题:
Planner 输出不稳定
例如:
今天输出:
1. 搜索
2. 总结
明天输出:
先看看情况再说
原因很简单:
Prompt 不够工程化
八、工程级 Planner Prompt
下面是一个生产环境里更稳定的 Planner Prompt。
Planner Prompt
PLANNER_PROMPT = """
你是一个专业的任务规划 Agent。
你的职责:
1. 将复杂任务拆解成多个子任务
2. 每个子任务必须:
- 清晰
- 可执行
- 原子化
3. 子任务之间应该有合理顺序
4. 不要输出解释
5. 只输出 JSON
输出格式:
[
{
"id": 1,
"task": "搜索 OpenAI Agent 战略"
},
{
"id": 2,
"task": "总结 OpenAI Agent 产品方向"
}
]
"""
九、为什么“只输出 JSON”非常重要?
因为:
Planning 的本质是 Workflow Control
不是聊天。
如果 Planner 输出:
好的,我来帮你分析。
1. OpenAI
2. Anthropic
你会发现:
json.loads()
直接炸掉。
所以:
Planner 必须结构化输出
这是生产环境的关键。
十、Task State 设计(核心)
接下来进入:
LangGraph 工程化核心
我们需要设计:
Planning State
十一、Planning Agent 的 State 结构
from typing import TypedDict, List
class AgentState(TypedDict):
user_input: str
tasks: List[str]
current_task: str
completed_tasks: List[str]
final_answer: str
十二、为什么 Planning Agent 必须强化 State?
因为:
Planning Agent 已经不是“聊天机器人”了
而是:
工作流系统
所以:
State = Workflow Runtime
这是整个 LangGraph 的核心思想。
十三、Task Queue 思想(极其重要)
注意这里:
tasks: List[str]
其实本质上就是:
任务队列(Task Queue)
例如:
[
"研究 OpenAI",
"研究 Anthropic",
"生成总结"
]
Executor 每次:
取一个任务
→ 执行
→ 标记完成
→ 继续下一个
这就是:
Queue-based Agent Architecture
这是很多高级 Agent 系统的核心。
十四、第一个任务分解 Agent(完整代码)
下面开始实现:
Planner + Executor
安装依赖
pip install langgraph langchain openai
完整代码
import json
from typing import TypedDict, List
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph
from langgraph.graph import START, END
llm = ChatOpenAI(
model="gpt-4o-mini",
temperature=0
)
PLANNER_PROMPT = """
你是一个专业任务规划助手。
请将用户任务拆解成多个子任务。
要求:
1. 子任务必须清晰
2. 子任务必须可执行
3. 按执行顺序排列
4. 只输出 JSON
输出格式:
[
{
"task": "任务1"
}
]
"""
class AgentState(TypedDict):
user_input: str
tasks: List[str]
current_task: str
completed_tasks: List[str]
final_answer: str
# =========================
# Planner Node
# =========================
def planner_node(state: AgentState):
user_input = state["user_input"]
prompt = f"""
{PLANNER_PROMPT}
用户任务:
{user_input}
"""
response = llm.invoke(prompt)
tasks_json = json.loads(response.content)
tasks = [item["task"] for item in tasks_json]
print("\n========== Planner ==========")
print(tasks)
return {
"tasks": tasks,
"completed_tasks": []
}
# =========================
# Executor Node
# =========================
def executor_node(state: AgentState):
tasks = state["tasks"]
completed_tasks = state["completed_tasks"]
if not tasks:
return {
"final_answer": "所有任务执行完成"
}
current_task = tasks[0]
print("\n========== Executor ==========")
print(f"当前任务: {current_task}")
# 模拟执行
result = f"已完成: {current_task}"
completed_tasks.append(result)
remaining_tasks = tasks[1:]
return {
"tasks": remaining_tasks,
"current_task": current_task,
"completed_tasks": completed_tasks
}
# =========================
# Router
# =========================
def route_after_executor(state: AgentState):
if len(state["tasks"]) == 0:
return "end"
return "continue"
# =========================
# Build Graph
# =========================
builder = StateGraph(AgentState)
builder.add_node("planner", planner_node)
builder.add_node("executor", executor_node)
builder.add_edge(START, "planner")
builder.add_edge("planner", "executor")
builder.add_conditional_edges(
"executor",
route_after_executor,
{
"continue": "executor",
"end": END
}
)
graph = builder.compile()
# =========================
# Run
# =========================
result = graph.invoke({
"user_input": "研究 2026 AI Agent 行业趋势并生成总结"
})
print("\n========== Final ==========")
print(result)
十五、这个 Agent 的运行流程
整个执行过程:
START
↓
Planner
↓
生成 tasks
↓
Executor
↓
取第一个 task
↓
执行
↓
更新 tasks
↓
继续循环
↓
END
这已经不是:
聊天系统
而是:
工作流引擎
了。
十六、Graph 架构图
┌──────────────┐
│ START │
└──────┬───────┘
│
▼
┌──────────────┐
│ Planner │
└──────┬───────┘
│
▼
┌──────────────┐
│ Executor │
└──────┬───────┘
│
┌──────────┴──────────┐
│ │
▼ ▼
还有任务? 无任务
│ │
▼ ▼
Executor END
十七、这里最重要的工程思想
很多人看到这里:
会觉得:
不就是循环执行吗?
但实际上:
这里已经进入:
Agent Runtime
领域了。
因为:
Planner 负责决策
Executor 负责执行
Graph 负责调度
State 负责状态管理
这已经是:
完整的 Agent Workflow System
了。
十八、复杂研究任务示例(非常典型)
例如用户输入:
请研究:
1. AI Agent 行业趋势
2. OpenAI Agent 产品
3. Anthropic MCP
4. Google Gemini Agent
5. 国内创业公司
最后生成报告
Planner 可能输出:
[
{
"task": "调研 AI Agent 行业趋势"
},
{
"task": "分析 OpenAI Agent 产品布局"
},
{
"task": "研究 Anthropic MCP 生态"
},
{
"task": "分析 Google Gemini Agent 能力"
},
{
"task": "调研中国 AI Agent 创业公司"
},
{
"task": "生成最终总结报告"
}
]
这已经非常接近:
真正的研究型 Agent
了。
十九、多步骤数据处理案例
任务分解并不只是“研究任务”。
在企业里还有大量:
数据处理型 Agent
例如:
分析销售数据并生成周报
Planner 可能拆成:
1. 加载销售数据
2. 清洗异常值
3. 统计销售趋势
4. 分析 TOP 商品
5. 生成图表
6. 输出报告
这其实已经非常像:
Airflow / Dagster
这种 Workflow 系统。
所以:
Agent Engineering
≈ AI Workflow Engineering
这是非常重要的认知升级。
二十、Planner 最大的坑:任务粒度
这是生产环境里非常容易翻车的地方。
例如:
Planner 输出:
研究 AI
这就太大了。
Executor 根本无法执行。
二十一、正确的任务粒度
正确应该是:
1. 搜索 OpenAI Agent 产品
2. 总结 OpenAI Agent 能力
3. 搜索 Anthropic MCP
4. 总结 MCP 特点
也就是:
任务必须原子化
这是 Planner Prompt 的核心。
二十二、生产环境里的 Planner 最佳实践
1. 强制 JSON 输出
一定要:
结构化输出
否则系统极不稳定。
2. 限制任务数量
否则 Planner 会:
无限拆任务
例如:
最多 10 个任务
3. 限制任务粒度
避免:
研究 AI
这种超大任务。
4. Planner 和 Executor 解耦
这是最关键的一点。
不要:
一个 Node 既规划又执行
否则:
系统会越来越不可控
二十三、为什么 LangGraph 特别适合 Planning Agent?
因为:
Planning Agent 本质是状态机
而 LangGraph 最大优势就是:
Graph + State + Conditional Edge
这刚好就是:
Workflow Runtime
的核心。
二十四、Planning Agent 与 ReAct 的本质区别
ReAct
特点:
边想边做
适合:
- 简单任务
- Tool 调用
- 实时交互
Planning Agent
特点:
先规划
再执行
适合:
- 长任务
- 多步骤任务
- 研究任务
- 数据处理
- 企业 Workflow
二十五、真正的大型 Agent 都在强化 Planning
2025~2026 的一个非常明显趋势:
Agent 正在从 Chat 走向 Workflow
例如:
- OpenAI Deep Research
- Manus
- Devin
- Claude Research
它们共同特点:
都有 Planning Layer
因为:
没有 Planning
Agent 无法处理长链路复杂任务
二十六、下一篇会继续升级什么?
下一篇我们会继续进入:
动态重规划(Re-Planning)
也就是:
执行过程中自动调整任务
例如:
发现信息不足
Agent 自动:
新增任务
这会真正进入:
高级 Planning Agent
领域。
二十七、本章总结
这一章非常关键。
因为我们第一次真正进入了:
Workflow-based Agent
阶段。
核心认知升级:
1. ReAct 不适合复杂长任务
因为:
没有全局规划能力
2. Planning Agent = 先规划再执行
核心:
Planner + Executor
3. Task Decomposition 是核心能力
本质:
Workflow Planning
4. LangGraph 非常适合 Planning
因为:
Planning 本质就是状态机
5. Agent 正在从 ChatBot 走向 Workflow Engine
这是 2026 Agent Engineering 的核心趋势。
下一章预告
28. 动态重规划(Re-Planning)
我们会真正开始进入:
高级 Planning Agent
包括:
- 动态新增任务
- Executor 失败重试
- Plan 修正
- Reflection
- Self-Correction
- 自适应 Workflow
这是:
真正高级 Agent 系统
的开始。
更多推荐




所有评论(0)