想象你是一大家子的“旅行总导演”:奶奶想看草原,孩子想玩水,你只有七天假期和一张预算表。如果你一拍脑袋直接订机票,大概率会乱成一锅粥——但如果你先画出“目的地候选清单”,把行程拆成“订交通、订住宿、排景点、备物资”几大块,再按“先订机票才能订酒店”的顺序一步步推进,最后给每个家人分配任务……这趟旅行就能有条不紊地落地。 大语言模型驱动的 Agent 也一样:面对一个宏大目标时,它不能一步蹦到终点,而是要先在“脑子里”把这个目标拆成可执行的小任务、排好先后顺序、想清楚哪些能并行、哪些必须等前置结果——这就是 Agent 工作流里的 任务规划(Task Planning)。它像一个“思维路线图”,决定了 Agent 是高效靠谱的旅行管家,还是一头乱撞的无头苍蝇。

岗位关联

任务规划是 Agent 工作流的“大脑中枢”,掌握它,你就能让 AI 从“单点问答”升级为“自主完成复杂项目”,这是 AI 工程落地中区分初级与高级从业者的核心分水岭。

目录
  1. 可视化演示
  2. 任务规划概述
  3. 任务分解策略
  4. 依赖关系调度
  5. 规划执行闭环
  6. 优化并行策略
  7. 端到端项目实战
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

演示Agent将复杂目标分解为可执行子任务、以DAG表示依赖关系、并对子任务状态机进行实时监控与重规划。

本节配有交互动效(进入视口后自动加载,约 3KB)。

目标分解框架 目标到操作到计划 逐层细化子任务 目标→操作→计划 GOP框架逐层分解

任务规划概述

旅行总导演拿到“七天带全家玩好”这个模糊愿望时,第一反应不是订机票,而是先画一张「梦想地图」:草原、水乐园、博物馆……把这些愿望摊开,再想“要达成这些,我们需要做什么”。任务规划之于 Agent,就像这张旅行地图——它是把模糊目标变成一串清晰行动的过程。

在 Agent 工作流里,任务规划指:给定一个高层目标,Agent 将其拆解为若干子任务,并明确每个子任务的输入、输出与执行顺序。规划器的输入是用户的自然语言目标(如“帮我策划一次团建”),输出是一棵“任务树”——根节点是总目标,子节点是拆解出的步骤。树中的每个节点都代表一个可调度的任务单元,任务树就是 Agent 后续执行的总蓝图。

T=⟨V,E⟩,V={v0,v1,…,vn},E={(vi,vj)∣vi 先于 vj}\mathcal{T} = \langle V, E \rangle, \quad V=\{v_0, v_1, \dots, v_n\}, \quad E=\{(v_i, v_j) \mid v_i \text{ 先于 } v_j\}

1. 任务节点集合:$V=\{v_0, v_1, \dots, v_n\}$ 表示把总目标切成的 $n+1$ 个任务块,$v_0$ 通常是根目标本身。

2. 依赖边集合:$E=\{(v_i, v_j)\}$ 中每条边表示“$v_i$ 必须在 $v_j$ 之前完成”,这是任务先后顺序的数学表达。

3. 有向图结构:$\mathcal{T} = \langle V, E \rangle$ 说明任务规划的结果不是一维清单,而是有层次、有依赖的图结构,这正是它比普通待办清单强大的原因。

回到旅行比喻:如果这张任务树画得好,你的七天假期每半天都知道去哪儿、干什么;如果画得潦草,到了当地只能原地打转。任务规划就是 Agent 的“思维地图”,决定了它后续所有行动的确定性。

任务分解策略

画完地图,接下来要决定“细到什么程度”。住酒店这一件事,你可以直接写“订酒店”一个大任务,也可以拆成“比价 → 下单 → 确认订单”三步。对 Agent 来说,任务分解的粒度是个关键平衡。

任务分解策略的核心原则是:拆到“原子任务”——即 Agent 无需再思考“怎么做”就能直接执行的最小步骤。判断标准是:如果一个任务还需要一次完整的规划才能执行,它就还没拆到位;如果拆得过碎(比如“移动鼠标到输入框”),则会产生大量调度开销。实践中,粒度的把握取决于任务复杂度:复杂任务多拆几层,简单任务一层到底。

Task(v)={⋃c∈children(v)Task(c),if v is complexAction(v),if v is atomic\text{Task}(v) = \begin{cases} \bigcup_{c \in \text{children}(v)} \text{Task}(c), & \text{if } v \text{ is complex} \\ \text{Action}(v), & \text{if } v \text{ is atomic} \end{cases}

1. 复杂任务拆分:$\text{Task}(v) = \bigcup_{c \in \text{children}(v)} \text{Task}(c)$ 说明只要 $v$ 还能再拆,就递归地把它所有子任务的集合作为它的完整定义。

2. 原子任务映射:$\text{Action}(v)$ 表示当任务不可再分时,它就直接对应一个可调用的工具或动作(如“调用订酒店 API”)。

3. 递归拆解逻辑:整个公式是一个递归定义,它保证了任务规划最终一定收敛到叶子层的可执行动作,不会出现“任务套任务”的死循环。

旅行中你不需要告诉孩子“先抬左脚再抬右脚”,但需要告诉他“去把行李清单打勾”——这就是原子任务的粒度。好的 Agent 任务规划,既不会把“旅行”直接丢给执行器,也不会手把手管到像素级,而是给出“刚好不用再想”的步骤。

依赖关系调度

任务树画好了,接下来排队。旅行中“先订机票才能订酒店”是硬约束;而“买零食”和“订门票”则互不相干。任务规划必须识别这些关系,把树状结构转化为可执行序列。

依赖关系分为两类:先决依赖(A 必须在 B 前)与并行独立(A、B 互不等待)。在数学上,我们用有向无环图(DAG)描述这些关系,并通过拓扑排序生成一个满足所有依赖的执行序列。拓扑排序保证:对于每条边 $(v_i, v_j)$,$v_i$ 一定排在 $v_j$ 前面。有环则说明规划出现死锁(A 等 B,B 等 A),必须重新规划。

Order(V)=TopoSort(G),∀(vi,vj)∈E:pos(vi)<pos(vj)\text{Order}(V) = \text{TopoSort}(G), \quad \forall (v_i, v_j) \in E: \text{pos}(v_i) < \text{pos}(v_j)

1. 拓扑排序:$\text{TopoSort}(G)$ 输入依赖图 $G$,输出一个任务序列,算法上常用 Kahn 或 DFS 实现。

2. 约束条件:$\text{pos}(v_i) < \text{pos}(v_j)$ 表示排序完成后 $v_i$ 的位置必须在 $v_j$ 之前,这是拓扑序定义的数学写法。

3. 可行域:满足所有约束的序列可能不止一个,比如“买零食”和“订门票”谁先谁后都合法。

旅行中你绝不会在没订到酒店之前就把行李寄到目的地——依赖关系就是这条“不能违抗的先后顺序”。而识别出哪些事可以“爸妈同时分头做”,也正是任务规划提升效率的秘密武器。

规划执行闭环

地图画好、顺序排好,这只是行程单。真正让旅行发生的是“按行程单行动并在意外中调整”。Agent 工作流里,规划(Planning)与执行(Execution)构成闭环:任务树生成后由工作流引擎逐步执行,每个任务的结果反馈给规划器,遇到失败或偏差时进行重规划。

这一机制的关键在于失败处理。当某个任务执行失败(比如订机票 API 超时),规划器有两种选择:重试(同一任务换个参数再来)或重规划(放弃原方案,生成替代路径)。成熟的 Agent 框架通常先重试 1-2 次,若仍失败则触发重规划。此外,部分新信息只在执行中浮现(比如用户临时改需求),这同样需要动态更新任务树。

Plant+1=Revise(Plant,Feedback(Execute(Plant)))\text{Plan}_{t+1} = \text{Revise}(\text{Plan}_t, \text{Feedback}(\text{Execute}(\text{Plan}_t)))

1. 执行反馈:$\text{Execute}(\text{Plan}_t)$ 代表引擎执行当前计划并产生结果与状态。

2. 反馈输入:$\text{Feedback}(\cdot)$ 把执行结果转化为规划器的输入信息,如“失败原因”或“新约束”。

3. 计划修订:$\text{Revise}(\cdot)$ 基于反馈调整任务树,增删任务、调整顺序或修改参数,得到下一版计划 $\text{Plan}_{t+1}$。

旅行中突然下雨,你不会硬着头皮去草原,而是快速打开手机查室内备选方案——这就是“反馈驱动重规划”。一个不会重规划的 Agent 就像按死板行程走的旅行团,一次意外就全盘崩溃。

优化并行策略

当任务树里有多个互不依赖的“分支”,聪明的主厨会同时开两个灶眼炒菜——这就是并行执行。但并行不是免费的:并发太多会抢占资源、互相等待,所以需要合理的优化策略。

常见的优化手段包括:并行度控制(限制同时执行的任务数)、缓存复用(相同的子任务只算一次,结果缓存供后续任务读取)、资源配额(不同优先级的任务获得不同的计算资源)、成本控制(对调用了大模型的子任务设置预算上限,避免烧钱)。在成本敏感的生产环境中,一个“省钱规划器”会优先复用缓存结果,而非每次都调用昂贵的大模型 API。

CostTotal=∑iCost(vi)−∑jSaved(cachej),s.t.Parallel(va,vb)≤Rmax⁡\text{CostTotal} = \sum_{i} \text{Cost}(v_i) - \sum_{j} \text{Saved}(\text{cache}_j), \quad \text{s.t.} \quad \text{Parallel}(v_a, v_b) \le R_{\max}

1. 任务成本累加:$\sum_{i} \text{Cost}(v_i)$ 是每个子任务消耗的成本(API 调用、计算时间等)的总和。

2. 缓存节省:$\sum_{j} \text{Saved}(\text{cache}_j)$ 是命中的缓存结果节省掉的开销,直接减少总成本。

3. 并行约束:$\text{Parallel}(v_a, v_b) \le R_{\max}$ 把并行执行的任务对数限制在资源上限内,防止“灶眼太多烧了厨房”。

旅行中你不会同时让全家五口人都去订酒店——一个人订就够了,其他人去排景点才是高效分配。任务规划里的“并行”就像指挥多人协作,关键不是“所有人一起动”,而是“该动的人动,不该动的人待命”。

端到端项目实战

把这个“旅行总导演”的方法放回真实的 AI 工程项目:假设你接到一个需求——“做一个自动写行业研究报告的多 Agent 系统”。任务规划在其中扮演什么角色?

第一步,需求拆解:总目标“生成行业研究报告”被拆为“收集数据 → 分析数据 → 撰写报告 → 审核发布”四个一级子任务。第二步,多 Agent 协作:每个子任务分配一个专职 Agent(数据采集员、分析师、撰稿人、审核官),它们各司其职。第三步,任务树落地:工作流引擎按依赖关系调度四个 Agent,数据采集完成后通知分析师启动分析,同时审核官进入待命状态。第四步,复盘迭代:系统上线后发现采集阶段常失败,于是规划器在采集任务下增加“重试策略”和“备用数据源”两个子节点。

Report=Review∘Write∘Analyze∘Collect(Query)\text{Report} = \text{Review} \circ \text{Write} \circ \text{Analyze} \circ \text{Collect}(\text{Query})

1. 阶段链式复合:$\text{Collect}(\text{Query})$ 是流水线入口,负责收集原始资料。

2. 逐级加工:$\text{Analyze}$ 接收采集结果做分析,$\text{Write}$ 基于分析写报告,形成逐级依赖。

3. 最终审查:$\text{Review}$ 是质量关卡,审核不通过会触发重规划回到前序阶段,形成反馈闭环。

这个真实项目就像一场精心筹备的家庭旅行:需求是“玩好”,规划是地图,Agent 是各司其职的家人,反馈闭环是随时调整的应变力。掌握了任务规划,你就掌握了让一群 AI 协作者井然有序的“导演手艺”——这才是 Agent 从玩具走向生产力的关键一步。

AI 应用场景

智能客服工单自动分派系统

阶段:任务规划 + 多 Agent 协同

解决的问题:传统客服系统只能把工单按关键词简单路由,无法理解复杂诉求。例如用户说“我发货地址填错了但包裹已经发出”,系统不知道应该先查物流状态、再评估是否可拦截,最后走改址流程。AI 任务规划将这条完整路径拆解为可执行子任务序列,再分派给不同 Agent 执行。

具体案例:某电商平台接入任务规划后,用户提交工单时,规划器先将“处理改址”拆成“查询物流状态 → 判断可拦截性 → 执行改址/拦截 → 通知用户”四个子任务,并判断“拦截”与“改址”互斥只能二选一。当物流状态查询返回“已签收”,规划器自动触发重规划,改为“建立补偿工单 → 转人工客服”。工单处理时长从 2 小时缩短到 15 分钟。

数据 Pipeline 自动化运维

阶段:任务依赖调度 + 失败重试

解决的问题:数据工程师手动编写 ETL 时需要反复处理“上游表未就绪、下游任务空跑”的依赖地狱。任务规划把整条数据链路视为任务树,自动识别“必须先抽取、再清洗、最后加载”的依赖约束,并在任务失败时自动重试或跳过。

具体案例:某金融公司的日终清算 Pipeline 包含 40 个任务节点。引入任务规划后,引擎每天早上自动生成当天的任务树:若“清算数据抽取”因上游系统延迟而失败,规划器先重试 2 次,仍失败则自动将后续“风险计算”任务切换为“基于昨日快照计算”的降级方案,并通知值班人员。清算流程从“人工盯盘救火”变成“自动降级 + 告警”。

多角色内容生产 Agent 团队

阶段:任务分解 + 多 Agent 角色分配

解决的问题:单个 LLM 直接写长文往往结构松散、前后矛盾。任务规划把“写一篇行业分析报告”分解为“资料搜集 Agent → 数据可视化 Agent → 撰稿 Agent → 校对 Agent”的流水线,每个 Agent 专注单项任务。

具体案例:一家初创公司用任务规划搭建“研报流水线”:规划器先向“资料搜集 Agent”下发关键词清单,等待其返回 20 篇参考文献;随后并行触发“数据可视化 Agent”生成图表和“撰稿 Agent”起草正文;最后“校对 Agent”统一风格并检查引用格式。整个流程产出万字报告的时间从 3 天压缩到 40 分钟。

Python 演示

python89 行
# -*- coding: utf-8 -*-"""A minimal task planner: decompose a goal into tasks, topo-sort by deps,simulate execution with retry and cache reusing."""from collections import deque class Task:    """A task node with name, cost and dependencies."""     def __init__(self, name, cost=1.0, deps=None):        self.name = name        self.cost = cost        self.deps = deps or []        self.done = False     def run(self):        """Simulate running: mark done and return ok."""        if self.name.startswith("fail_flaky"):            return False  # simulate one-time failure        self.done = True        return True class TaskPlanner:    """Planner: build task tree, topo-sort, and execute with retry."""     def __init__(self, tasks):        self.tasks = tasks        self.cache = {}     def topo_sort(self):        """Return a topological order of tasks."""        indeg = {t.name: len(t.deps) for t in self.tasks}        adj = {t.name: [] for t in self.tasks}        for t in self.tasks:            for dep in t.deps:                adj[dep].append(t.name)        q = deque([t.name for t in self.tasks if indeg[t.name] == 0])        order = []        while q:            name = q.popleft()            order.append(name)            for nxt in adj[name]:                indeg[nxt] -= 1                if indeg[nxt] == 0:                    q.append(nxt)        if len(order) != len(self.tasks):            raise ValueError("Cycle detected in task graph: deadlock!")        return order     def execute(self, max_retry=2):        """Execute tasks in topo order, retry failed ones, reuse cache."""        order = self.topo_sort()        total_cost = 0.0        for name in order:            t = self._find(name)            if t.name in self.cache:                print(f"CACHE hit: {t.name}, skip execution")                continue            cost = t.cost            attempts = 0            while attempts < max_retry:                print(f"RUN: {t.name} (attempt {attempts + 1})")                if t.run():                    total_cost += cost                    self.cache[t.name] = True                    break                attempts += 1            else:                raise RuntimeError(f"Task {t.name} failed after {max_retry} retries")        print(f"Total cost: {total_cost}")        return total_cost     def _find(self, name):        for t in self.tasks:            if t.name == name:                return t        raise KeyError(name) if __name__ == "__main__":    # Task DAG: book_flight -> book_hotel -> plan_route    #            plan_route -> pack_luggage (independent of hotel)    tasks = [        Task("book_flight", cost=5.0),        Task("book_hotel", cost=3.0, deps=["book_flight"]),        Task("plan_route", cost=2.0, deps=["book_flight"]),        Task("pack_luggage", cost=1.0, deps=["plan_route"]),        Task("fail_flaky_verify", cost=1.0, deps=["book_hotel", "pack_luggage"])    ]    planner = TaskPlanner(tasks)    planner.execute(max_retry=3)
目的:演示一个迷你任务规划器——用拓扑排序解决任务依赖顺序,用重试机制处理执行失败,用缓存复用避免重复计算,展现了任务规划在代码层面的核心逻辑。
  1. indeg = {t.name: len(t.deps) for t in self.tasks}计算每个任务的入度(依赖数量),Kahn 拓扑排序的起点。
  2. q = deque([t.name for t in self.tasks if indeg[t.name] == 0])把所有无依赖的任务放入队列,它们可以最先执行。
  3. if len(order) != len(self.tasks): raise ValueError(...)如果拓扑序覆盖不了全部任务,说明存在循环依赖(死锁),必须报错。
  4. if t.name in self.cache: ... continue命中缓存直接跳过执行,这是“缓存复用”策略的落地。
  5. while attempts < max_retry:同一任务允许重试 max_retry 次,模拟工作流引擎的失败重试机制。
  6. else: raise RuntimeError(...)Python 的 while...else 语法:重试全部失败后才抛出异常,触发上层“重规划”。

常见误区

误区任务规划就是把目标拆成一个个 to-do 写下来:先做 A,再做 B,再做 C,线性排列就行。

正解待办清单是一维的顺序列表,而真正的任务规划是带层次、带依赖的图结构(任务树 + DAG)。它不仅要列出做什么,还要表达“哪个必须先做”“哪个可以并行”“哪个失败后该往哪条路走”。就像坐飞机只写“去机场→登机”还不够,你得知道“值机”和“安检”的先后及时间窗。任务规划特别强调依赖关系与并行空间,这是清单给不了的。

为何常见:因为日常生活中的小任务确实只需线性排序,人们便线性外推,误以为规划就是“列清单”,忽视了复杂工程中的依赖约束与分支决策。

误区既然要规划,那就把任务拆到最小粒度——“把鼠标移动到按钮”“点击按钮”这种级别,这样最精确。

正解任务粒度需要权衡:拆得过碎会导致调度开销激增(每个微观步骤都要启动一次执行器、传递一次上下文),且失去灵活性;拆得过粗则执行器拿到任务后仍然不知道怎么做。正确标准是“原子任务”:执行器无需再规划就能直接完成的、有明确产出的步骤。就像你不会指挥孩子“迈左腿、迈右腿”,而是说“把鞋穿上”——一个动作就能完成,又不至于细到肌肉控制。

为何常见:初学者看到“分解”就天然联想“分解到极致”,忽略了工程实践中的开销成本与执行器的抽象边界。

误区规划完任务树,按顺序执行到最后,任务规划的工作就结束了,中途不需要改动。

正解真实世界中,执行过程会不断产生新信息:工具返回错误、用户临时变卦、某个环节耗时超出预期。成熟的规划器必须在执行中根据反馈动态重规划:调整任务参数、增删子任务、切换替代方案。这就是“规划-执行-反馈”闭环。旅行中天气预报说下午下雨,你得当场改行程——这正是“动态重规划”的日常版本。

为何常见:人们习惯把“规划”和“执行”看成两个分离阶段,忽略了它们在 Agent 系统中的紧耦合与在线迭代特性。

误区任务规划本质上就是工程师预先写好的流程分支:if 条件 A 走任务 1,else 走任务 2。

正解经典 if-else 是静态编译的固定流程,而 Agent 的任务规划是模型在运行时动态生成的:LLM 或规划算法根据当前目标、上下文和可用工具实时生成任务树,规划本身也是“计算”的一部分。它能在面对未见过的需求时即兴拆解出新的路径,而不是从预设分支里挑一个。更像旅行顾问根据你的兴趣现场定制路线,而不是翻一本固定的旅行手册。

为何常见:因为许多初学者先接触的是传统工作流引擎(如 Airflow 的 DAG),误以为 Agent 规划也是同一套静态定义机制,没有理解 LLM 驱动规划的动态生成能力。

误区既然无依赖任务可以并行,那就把所有任务全部并行执行,速度最快。

正解并行执行要消耗资源:每个并发任务都要占用内存、CPU 或大模型 API 配额。无限并行可能导致资源耗尽、请求限流、成本失控,甚至因共享资源争抢反而变慢。科学的做法是设置并行度上限和资源配额,让并行度贴合系统承载能力。一个厨师的厨房里开十个灶台不会更快,只会让油锅打架。

为何常见:直觉上“同时做更多事=更快”,但忽略了 Agent 系统的资源是有限且有成本的,工程的本质是在约束下做权衡。

面试题

Q1. 任务规划在 Agent 工作流中的核心产出是什么?

单选题 · easy

  • A.一段自然语言报告
  • B.一棵结构化的任务树← 正确答案
  • C.一个训练好的模型权重
  • D.一组 API 密钥配置

答案:B。任务规划的目标是把高层目标分解为层次化、带依赖关系的任务树,它同时表达了“做什么”和“按什么顺序做”。A 是执行阶段产物,C 是训练产物,D 是环境配置,均非规划输出。

Q2. 任务分解中“原子任务”的判定标准是?

单选题 · easy

  • A.任务名称短于 5 个字
  • B.不需要再规划、可直接执行的最小步骤← 正确答案
  • C.不调用任何外部工具的任务
  • D.耗时小于 1 秒的任务

答案:B。原子任务的定义是“执行器拿到后无需再思考怎么做、直接调用工具或动作即可完成”的粒度。它的名字长短、是否调工具、耗时多少都不是判定标准,关键在“无需再规划”。

Q3. 拓扑排序在任务规划中的作用是?

单选题 · mid

  • A.给任务标注优先级分数
  • B.生成满足依赖约束的执行序列← 正确答案
  • C.计算所有任务的成本总和
  • D.把任务树压缩成一张表

答案:B。拓扑排序针对有向无环图,输出的线性序列保证每条依赖边的起点都在终点之前。它是把“依赖关系”翻译为“执行顺序”的桥梁,优先级分数、成本计算和结构压缩都不是拓扑排序的职责。

Q4. 当任务执行失败且重试仍失败时,规划器的正确处理是?

单选题 · mid

  • A.放弃整个工作流并报错退出
  • B.直接静默跳过失败任务
  • C.触发重规划,生成替代任务路径← 正确答案
  • D.无限次重试直到成功

答案:C。成熟的规划器在重试耗尽后应触发“重规划”——既然原路走不通,就换条路,比如切换备用数据源或降级方案。直接退出太僵硬,静默跳过会污染下游,无限重试浪费资源,三者都不可取。

Q5. 任务规划中 DAG 出现环(循环依赖)意味着什么?

单选题 · mid

  • A.任务可以无限制并行
  • B.规划质量极高,可以立即执行
  • C.存在 A 等 B、B 等 A 的死锁← 正确答案
  • D.任务树太复杂需要简化

答案:C。环表示 A 依赖 B、B 又依赖 A,两者互相等待对方完成,形成死锁,拓扑排序无法给出合法序列。这是规划器必须检测并排除的错误状态,而非可并行或质量高的信号。

Q6. 关于任务规划的“粒度权衡”,下面说法正确的是?

单选题 · hard

  • A.粒度越细,系统开销越小
  • B.粒度越粗,执行器越容易直接执行
  • C.应在“无需再规划”与“调度开销”之间取平衡← 正确答案
  • D.粒度由任务名称长度决定

答案:C。粒度太细会使调度开销压过执行收益,粒度太粗则执行器拿到后还要自行规划。正确做法是找到“刚好原子”的平衡点——执行器不用再想,但任务的调度成本可接受。A、B 各偏一端,D 更是无关。

Q7. 下列哪些属于任务规划的优化策略?(答案填索引)

多选题 · mid

  • A.缓存复用相同子任务结果← 正确答案
  • B.限制并行任务数上限← 正确答案
  • C.为不同任务设置资源配额← 正确答案
  • D.把所有任务改成串行执行

答案:ABC。缓存复用能省重复计算,限制并行度能防止资源争抢,资源配额能保障高优任务——三者都是经典优化策略。D 把并行全改串行是“一刀切”,牺牲了效率,不是优化。

Q8. 任务规划中“动态重规划”触发的典型场景是?(答案填索引)

多选题 · mid

  • A.子任务执行返回失败结果← 正确答案
  • B.用户在过程中提出新约束← 正确答案
  • C.所有任务按预期一次成功
  • D.执行发现原方案需额外前置步骤← 正确答案

答案:ABD。执行失败、新增用户约束、执行中暴露新前置条件这三类“意外”都会触发重规划更新任务树。C 是一次成功,无需重规划。

Q9. 关于“规划-执行-反馈”闭环,正确的理解是?(答案填索引)

多选题 · hard

  • A.规划是一次性的静态过程
  • B.执行结果可作为重规划的输入← 正确答案
  • C.反馈可包含成本与耗时信息← 正确答案
  • D.闭环让 Agent 能应对环境变化← 正确答案

答案:BCD。闭环的核心是让执行结果、失败信息、成本耗时反馈回规划器,从而动态修订后续计划。A 与闭环理念矛盾,规划是持续迭代的。

Q10. 在多 Agent 场景中,任务规划与角色分配的关系是?

单选题 · extreme

  • A.先规划出任务树,再按任务性质分配专职 Agent← 正确答案
  • B.先固定 Agent 角色,再让每个角色各自规划全部任务
  • C.任务规划只在单 Agent 中有效,多 Agent 无需规划
  • D.角色分配决定任务树结构,规划只是记录结果

答案:A。经典协作模式是“先有任务树,再映射角色”——数据采集、分析、撰写任务各自对接擅长的 Agent。B 让每个角色重复规划会大量冗余,C 否定了多 Agent 规划的必要性,D 颠倒了因果:任务树由目标决定,而非角色决定。