跳到正文

任务编排与长程推进 ​

一句话:任务的本质不是“多轮对话”,而是把模型的离散判断组织成有状态、有预算、可恢复、由证据决定结束的过程。模型只能申请完成,Harness 才提交完成。

对应原书:第 4 章《任务:编排、长程推进与协作流转》。

为什么需要 ​

一次调用能回答的问题,不需要任务模型。一旦任务跨越多步、多个工具、多个请求,三件事会同时失效:

  • 过程丢了:进程重启、上下文窗口切换之后,不知道做到哪一步;
  • 结束失控:模型说“完成了”,但环境里什么都没变;或者循环停不下来,预算悄悄烧完;
  • 责任不清:委派给子 Agent 之后,失败算谁的,产物算不算数。

消息历史解决不了这些问题——它记录“说过什么”,不记录“事实是什么”。任务模型要解决的是后一件事。

核心机制 ​

一、Agent Loop 五阶段 ​

五个阶段里最容易被做薄的是 Verify:很多实现把它交给模型自评,等于让考生自己判卷。原书的要求是“用环境事实或规则验收”——测试过没过、文件变没变、接口返回什么,都要能查。

二、权威状态与十态状态机 ​

消息历史不是任务状态。权威状态必须可机读,至少包含:目标、当前阶段、Plan/Todo、已确认事实、阻塞项、子任务、Artifact、剩余预算、等待原因、完成依据。

状态含义关键出边
CREATED已创建→ RUNNING
RUNNING推进中→ 三种 WAITING / PAUSED / VERIFYING / FAILED / CANCELLED
WAITING_INPUT等用户输入收到输入 → RUNNING
WAITING_APPROVAL等人工审批批准 → RUNNING;拒绝 → 结束
WAITING_EVENT等外部事件事件到达 → RUNNING;超时 → 结束
PAUSED主动暂停恢复 → RUNNING
VERIFYING验收中通过 → COMPLETED;不通过 → RUNNING/FAILED
COMPLETED / FAILED / CANCELLED终态—

两个区分决定了系统的可运维性:WAITING 不是失败,它让运行时释放资源、界面说清在等什么、监控区分“执行慢”和“审批慢”;PAUSED 不是结束,它是可以恢复的中间态。

三、预算与计划 ​

预算必须是多维的:步骤数、总时长、Token、费用、工具调用并发、高风险动作次数。只设一个最大步数,会漏掉“步数没到但钱烧完了”和“步数没到但一直原地打转”。预算耗尽要给明确终态和未完成清单,不能悄悄截断。

计划的控制强度分三档:

  • 轻量 Todo:目标明确、步骤少,列出来防遗漏即可;
  • Plan Mode:影响大、需要审阅,先只读探索,写出计划,人工确认后再执行;
  • Planner-Executor:长任务、多依赖、可并行,计划本身是一等对象。

阶段门禁的写法值得固定下来:每个阶段回答“输出是什么、证据在哪里、谁来确认”。计划允许修订,但修订要说明触发事实、保留已完成项,不能靠改写目标来掩盖失败。

四、委派:七字段契约 ​

子 Agent 的价值来自三件事:上下文隔离(只加载相关材料)、能力隔离(不同模型、指令、权限)、并行执行(缩短墙钟时间)。任务很短、步骤强依赖、共享对象频繁变化时,委派反而亏本。

委派必须是可机读的契约,七个字段缺一不可:目标与边界、已知上下文、能力与权限、预算、输出与证据、失败语义、验收条件。失败策略四选:FAIL_FAST、BEST_EFFORT、RETRY_OR_REASSIGN、ESCALATE。

还要分清两种关系:

  • Delegation:父任务保留责任,子任务产物是新的 Observation;
  • Handoff:控制权转移,接收者成为当前责任人。

两者都不能只靠一条自然语言消息。子任务返回的自然语言答案,必须过 Schema 校验和父任务验收,才能进入权威状态。

五、长程续行与失败处理 ​

跨请求、跨进程、跨上下文窗口续行,靠的是三件东西:稳定的 task_id、事件游标、Continuation。Session 存在共享存储里,任意实例都能接续。恢复的动作顺序很关键:先重查目标、外部条件、权限与剩余预算,再决定继续。 直接重放对话会恢复出一个越权或已经失效的执行现场。Context Reset 只控制语义——旧窗口形成一个一致的继续点,新窗口从权威状态重建,不重放聊天记录。

失败要先分类,再决定动作:

失败类型处理
瞬时错误有界退避重试
参数错误修正参数
环境缺失重建环境
权限拒绝等待授权或终止
重复探索重新规划
业务条件不满足明确缺口,转人工

“Agent 失败了”不是可执行诊断。另外,有副作用的重试前必须先回答“上一次到底有没有发生”:幂等键、记录请求结果、优先查询状态,三件事至少做两件。

六、完成由证据决定 ​

验证强度要和风险匹配:内部工具调用做到 A/B 即可,对外交付要做到 C,不可逆操作才需要 E。验证失败本身就是一条新的 Observation,不是异常退出。还有一条分工要记牢:Verifier 是单次任务的门禁,Evaluation 是跨版本的好坏判断。 把两者混在一起,会出现“为了过门禁而调评估集”的退化。

最小上手 ​

yaml
task:
  state_fields: [goal, phase, plan, facts, blockers, artifacts, budget, waiting_for, completion_evidence]
  budget: {steps: 40, minutes: 30, tokens: 200000, cost: 2.0, high_risk_actions: 2}
  pause:
    before_pause: [stop_new_actions, save_state, save_cursor]
    on_resume: [recheck_goal, recheck_external, recheck_permission, recheck_budget]
delegation:
  contract: [goal, context, capability, budget, output, failure_semantics, acceptance]
  failure_policy: ESCALATE
completion:
  verifier: [schema, environment, tests]
  model_can_only_request: true

验收看四件事:进程重启后能接着跑;等待态能被正确识别而不是被超时重试;委派产物必须过验收才进状态;完成时能指出证据在哪。

生产动作 ​

  • 把“无进展”做成检测器。五个信号:同参重复调用、反复同一错误、计划长时间不变、没有新事实、在少数行动间循环。只靠最大步数,循环早就发生了,预算还没到。
  • 等待态要有超时语义。等输入、等审批、等事件都要定义超时后的动作,且超时不等于批准。
  • 取消要沿父子传播,收尾要记录原因。取消父任务时子任务一起取消,已发生的外部副作用保留事实、需要时走补偿;每次结束记下终态、未完成清单、剩余预算与最后一条证据,这四项决定事后能不能复盘。

边界 ​

  • 状态机不是越细越好。十态是为了区分资源占用与等待原因;小系统可以合并 WAITING,但不能把等待混进 RUNNING。
  • Plan Mode 不是万能。探索成本高的任务,先规划反而拖慢;短任务用轻量 Todo 即可。
  • 委派不能消除责任。Delegation 与 Handoff 只是责任归属不同,都不能让“发起方不知道子任务做了什么”。
  • 证据也有成本。每级验证都要花时间和算力,验证强度应随风险递增,而不是一律做到 E。
  • 恢复不等于重放。重放对话只恢复语义,恢复事实要重查环境;已经发出的副作用,重放不会撤销。

讲清楚 ​

任务模型解决的是“过程可恢复、结束有证据”。Agent Loop 五阶段里,Verify 必须用环境事实,而不是模型自评;权威状态要和消息历史分开,用十态状态机区分运行、等待、暂停与验收。

长任务靠三件东西续行:稳定的任务标识、事件游标、Continuation。恢复时先重查目标、外部条件、权限和预算,再继续;直接重放对话会恢复出失效现场。

委派要有七字段契约(目标、上下文、能力、预算、输出、失败语义、验收),子任务产物必须过验收才能进父状态。完成由证据分级决定,模型只能申请完成,Harness 才提交完成。

适用:长任务、异步任务与多步 Agent 的编排设计 | 初稿 2026-10

把 AI 工程讲到既懂也会用