Agent02:任务规划

理解 Agent 的任务规划能力,包括目标拆解、步骤生成、执行反馈和计划修正,让 Agent 能够处理复杂的多步骤任务。

字数 1714 阅读时长 ≈ 5 分钟 2026-7-15 2026-7-27
Agent02:任务规划

任务规划是 Agent 的核心能力之一,它让 Agent 能够将复杂的目标分解为可执行的步骤,并根据执行反馈动态调整计划。理解任务规划的机制,才能构建能够处理复杂任务的 Agent 系统。

任务规划的基本原理

什么是任务规划

任务规划是指 Agent 根据用户的目标,自动生成执行计划并动态调整的能力:

组件说明示例
目标用户想要达成的结果”帮我订一张去北京的机票”
计划达成目标的步骤序列查航班 → 选座位 → 支付 → 出票
执行按计划执行每个步骤调用航班查询 API
反馈执行结果的信息API 返回的航班列表
修正根据反馈调整计划航班售罄,换其他航班

任务规划的流程

用户目标 → 目标分析 → 计划生成 → 步骤执行 → 结果反馈 → 计划修正 → 完成目标

任务规划的价值

场景说明价值
复杂任务需要多步骤完成的任务自动拆解,无需人工干预
动态环境执行过程中条件变化自适应调整计划
长时任务需要长时间执行的任务保持任务状态,逐步推进
多工具任务需要调用多个工具的任务合理编排工具调用顺序

目标拆解

目标拆解的原则

原则说明示例
可执行性每个子目标都可以独立执行”查询航班”是可执行的
完整性所有子目标组合起来能达成总目标包含查询、选择、支付、出票
独立性子目标之间尽量独立查询航班不依赖选座位
顺序性子目标之间有合理的顺序先查询再选择

目标拆解方法

def decompose_goal(goal):
    """目标拆解"""
    # 使用模型进行目标拆解
    prompt = f"""
    将以下目标拆解为可执行的子目标:
    目标:{goal}
    
    请输出子目标列表,每个子目标一行,格式为:序号. 子目标描述
    """
    
    response = openai.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )
    
    # 解析子目标
    sub_goals = []
    for line in response.choices[0].message.content.split('\n'):
        line = line.strip()
        if line and '.' in line:
            parts = line.split('.', 1)
            if len(parts) == 2:
                sub_goals.append(parts[1].strip())
    
    return sub_goals

目标拆解示例

原始目标拆解后的子目标
帮我订一张去北京的机票1. 查询去北京的航班
2. 选择合适的航班
3. 填写乘客信息
4. 完成支付
5. 获取电子机票
生成一份销售周报1. 查询本周销售数据
2. 计算销售总额
3. 分析销售趋势
4. 生成周报图表
5. 撰写周报文案
部署一个 Web 应用1. 打包应用代码
2. 配置服务器环境
3. 上传应用包
4. 启动应用服务
5. 验证服务可用性

步骤生成

步骤生成的要素

要素说明示例
步骤描述明确的执行动作”调用航班查询 API”
前置条件执行该步骤需要满足的条件”已获取用户出发城市”
工具选择需要调用的工具”search_flights”
参数准备工具调用所需的参数{“from_city”: “上海”, “to_city”: “北京”}
预期结果期望的执行结果返回航班列表

步骤生成实现

class StepGenerator:
    def __init__(self, tools):
        self.tools = tools
    
    def generate_steps(self, sub_goals):
        """根据子目标生成执行步骤"""
        steps = []
        
        for i, sub_goal in enumerate(sub_goals):
            prompt = f"""
            为以下子目标生成执行步骤:
            子目标:{sub_goal}
            
            可用工具:{json.dumps(self.tools, indent=2)}
            
            请输出步骤详情,格式为 JSON:
            {{
                "step": "{i+1}",
                "description": "步骤描述",
                "tool": "工具名称或None",
                "arguments": {{工具参数}}
            }}
            """
            
            response = openai.chat.completions.create(
                model="gpt-4",
                messages=[{"role": "user", "content": prompt}]
            )
            
            try:
                step = json.loads(response.choices[0].message.content)
                steps.append(step)
            except json.JSONDecodeError:
                # 如果解析失败,创建一个默认步骤
                steps.append({
                    "step": i+1,
                    "description": sub_goal,
                    "tool": None,
                    "arguments": {}
                })
        
        return steps

步骤生成策略

策略说明适用场景
贪心策略每次选择最优的下一步简单任务
深度优先完整生成所有步骤再执行确定性任务
动态规划考虑多种可能性并选择最优路径复杂任务
层次规划先制定高层计划,再细化执行大型任务

执行反馈

执行反馈的类型

类型说明示例
成功步骤执行成功API 返回正确结果
失败步骤执行失败API 返回错误
部分成功步骤部分完成返回部分数据
超时步骤执行超时API 响应超时
异常发生异常情况网络错误

执行反馈处理

class ExecutionFeedback:
    def __init__(self):
        self.feedback_history = []
    
    def record_feedback(self, step, result, status):
        """记录执行反馈"""
        feedback = {
            "step": step,
            "timestamp": datetime.now().isoformat(),
            "result": result,
            "status": status
        }
        self.feedback_history.append(feedback)
        return feedback
    
    def analyze_feedback(self):
        """分析执行反馈"""
        success_count = sum(1 for f in self.feedback_history if f["status"] == "success")
        fail_count = sum(1 for f in self.feedback_history if f["status"] == "fail")
        
        return {
            "total_steps": len(self.feedback_history),
            "success_rate": success_count / len(self.feedback_history) if self.feedback_history else 0,
            "fail_count": fail_count,
            "last_feedback": self.feedback_history[-1] if self.feedback_history else None
        }

反馈驱动的学习

学习方式说明实现方式
即时修正根据当前反馈调整下一步动态规划
历史学习从历史执行中学习经验记录成功/失败案例
模型微调使用反馈数据微调模型监督学习
规则优化根据反馈优化规则调整参数和阈值

计划修正

计划修正的触发条件

条件说明示例
执行失败步骤执行失败API 返回错误
结果不符合预期执行结果与预期不符查询结果为空
环境变化外部环境发生变化航班价格变动
用户干预用户修改了目标用户改变出行日期
超时执行时间过长超过预期时间

计划修正策略

class PlanCorrector:
    def __init__(self):
        self.strategies = {
            "retry": self.retry_strategy,
            "skip": self.skip_strategy,
            "replace": self.replace_strategy,
            "backtrack": self.backtrack_strategy,
            "abort": self.abort_strategy
        }
    
    def correct_plan(self, current_plan, feedback):
        """根据反馈修正计划"""
        status = feedback["status"]
        
        if status == "success":
            return current_plan, "继续执行"
        
        # 根据状态选择修正策略
        if status == "fail":
            return self.strategies["retry"](current_plan, feedback)
        elif status == "timeout":
            return self.strategies["replace"](current_plan, feedback)
        elif status == "partial":
            return self.strategies["skip"](current_plan, feedback)
        
        return current_plan, "无法修正"
    
    def retry_strategy(self, plan, feedback):
        """重试策略"""
        current_step = feedback["step"]
        plan["steps"][current_step-1]["retry_count"] = plan["steps"][current_step-1].get("retry_count", 0) + 1
        
        if plan["steps"][current_step-1]["retry_count"] < 3:
            return plan, "重试当前步骤"
        else:
            return self.replace_strategy(plan, feedback)
    
    def replace_strategy(self, plan, feedback):
        """替换策略"""
        current_step = feedback["step"]
        # 生成替代步骤
        alternative_step = self.generate_alternative_step(plan["steps"][current_step-1])
        plan["steps"][current_step-1] = alternative_step
        
        return plan, "替换为替代步骤"
    
    def backtrack_strategy(self, plan, feedback):
        """回溯策略"""
        current_step = feedback["step"]
        # 回溯到上一个步骤
        plan["current_step"] = max(1, current_step - 1)
        
        return plan, "回溯到上一步骤"

计划修正模式

模式说明适用场景
重试重新执行当前步骤临时错误
跳过跳过当前步骤非关键步骤失败
替换用替代步骤替换当前步骤无法执行
回溯返回上一步重新规划路径选择错误
中止终止任务无法完成目标

任务规划的常见问题

问题1:目标拆解不完整

表现:遗漏了关键步骤

解决方案

  • 提供目标拆解的示例
  • 使用更强大的模型进行拆解
  • 添加人工审核环节

问题2:步骤顺序不合理

表现:步骤之间顺序错误

解决方案

  • 优化步骤生成的提示词
  • 添加步骤依赖关系检查
  • 使用规划算法优化顺序

问题3:计划过于僵化

表现:无法适应执行过程中的变化

解决方案

  • 实现动态规划能力
  • 添加计划修正机制
  • 设计灵活的执行策略

问题4:执行反馈缺失

表现:无法获取执行结果的反馈

解决方案

  • 完善工具的返回值设计
  • 添加执行日志记录
  • 实现反馈分析机制

任务规划的最佳实践

任务规划流程

1. 目标理解
   - 分析用户目标
   - 识别关键约束
   - 确定成功标准

2. 目标拆解
   - 将目标分解为子目标
   - 检查子目标的可执行性
   - 确定子目标顺序

3. 步骤生成
   - 为每个子目标生成执行步骤
   - 选择合适的工具
   - 准备工具参数

4. 计划执行
   - 按步骤执行
   - 记录执行反馈
   - 处理异常情况

5. 计划修正
   - 分析执行反馈
   - 选择修正策略
   - 更新执行计划

6. 结果总结
   - 汇总执行结果
   - 生成最终报告
   - 提供完成确认

评估指标

指标定义目标值
目标达成率成功完成目标的比例> 85%
计划执行率按计划执行的步骤比例> 90%
修正次数平均每次任务的修正次数< 2
执行效率完成任务的平均时间根据任务类型

工具选择建议

工具说明适用场景
LangChain提供链式调用和计划能力通用 Agent 开发
LlamaIndex提供索引和查询能力RAG + Agent
AutoGPT提供自主规划和执行能力复杂任务自动化
CrewAI提供多 Agent 协作能力多 Agent 场景

项目判断清单

  • 任务需要多步骤 → 实现目标拆解
  • 需要动态调整计划 → 实现计划修正机制
  • 需要调用多个工具 → 设计步骤生成策略
  • 需要处理异常情况 → 添加执行反馈和重试
  • 需要长期任务支持 → 实现状态持久化
  • 需要复杂决策 → 使用规划算法
  • 需要用户干预 → 添加人工确认节点
  • 需要监控 → 记录任务执行日志和指标