主题
第 10 章 · Agent 异步任务与自动化流程
核心观点 + 逻辑框架(运行篇 · 异步与自动化)
▍速览
一句话版(开场,约 20 秒)
长任务怎么可靠地接收、调度、等待与恢复?把执行生命周期与请求生命周期解耦:异步任务靠队列+调度器+状态机,定时与事件触发共享同一条执行链,工作流用 DAG 表达编排。完成语义分五层——执行状态、运维状态、候选证据、Evidence、业务 Outcome,各层权威不能越级。
一段话版(展开,约 60–90 秒)
同步请求-响应模式,一到长任务就撑不住:请求超时、上下文溢出、用户得在线等。所以要把执行和请求解耦,这就是异步任务。核心是三层组件:任务队列管排序缓冲与积压降级(拒绝入队、低优先级限速、告警扩容);调度器管投递、租约与背压,背压的本质是让消费速率自适应执行速率;状态机管 9 个状态的合法转换,waiting 到 queued 到 running,还有 hold 等人审批。状态同步有三种方案——轮询、回调、共享存储,生产上组合用:回调为主、轮询和租约兜底、共享存储做权威。定时任务让 Agent 从被动变主动:时间触发和事件触发在执行层是同一件事,都向任务队列投 Task;错过策略要定好,补跑最新的还是全部跳过。工作流就是 DAG:业务节点干活、逻辑节点控制走向;OR Join 的关键是显式取消没被选中的分支;Checkpoint 复用计算结果,但不等同于外部副作用幂等,外部写进去的只能补偿不能撤销。最后记住五层完成语义:执行状态、运维状态、候选证据、Evidence、Outcome——Observability 给材料,Evaluation 出评分,Outcome 只有业务应用或授权 Verifier 能判。
- 一个解耦:执行生命周期 ≠ 请求生命周期(Task 独立持久标识)
- 三类组件:任务队列(缓冲背压)|调度器(投递租约)|状态机(9 态合法转换)
- 两种触发:时间(Cron/At/FixedRate)与事件(Webhook/MQ/内部)→ 共享执行链
- 一个 DAG:业务节点+逻辑节点;AND/OR Join 就绪条件
- 五层完成语义:执行状态→运维状态→候选证据→Evidence→Outcome
一句话(收尾)
恢复与幂等不能外包给任何单一组件——外置调度降低重复触发概率,但副作用要靠去重、幂等、围栏、对账与补偿共同兜住。
▍逻辑框架(记忆卡片)
① 命题:同步模式的局限
请求超时 · 上下文窗口溢出 · 用户必须在线等待 · 等待外部事件时进程持续占用资源
解法 = 执行与请求解耦:提交即得可靠接收确认与 Task ID,后台排队 / 执行 / 重试,完成后 Webhook / 推送 / 轮询通知。
② 任务模型的责任边界
Task 最小业务单元:独立持久标识 + 业务 State,跨等待 / 恢复 / 审批 / 多 Session
Session 只是执行视图:跨 Session 续跑需 Runtime 显式装载经授权的 Task State(参数+Checkpoint+等待对象+副作用记录)
权威归属:Task/成功标准=业务应用;Session=Harness/Runtime;Checkpoint=引擎/Runtime;租约=Runtime;副作用=业务系统
⬆ 执行状态 (Runtime:跑没跑完) → 运维状态 (Worker 在线/租约) → 候选证据 (原始材料) → Evidence (被成功标准引用) → 业务 Outcome (业务应用/授权 Verifier 判定)
LLM-as-a-Judge 是 Evaluation 实现,不是 Outcome 权威 · "强制标记成功"只改执行状态+完整审计,不判 Outcome
③ 异步任务核心架构
任务队列:优先级排序·同优先 FIFO·去重;积压降级=拒绝/限速/告警;队列深度=核心指标 · 调度器:Worker 选择=轮询/活动任务/加权/亲和;背压=配额/水位线/自适应/租约超时/动态容量 状态机:9 态合法转换
**异步任务 11 项属性**:任务名称 · 任务内容 · 优先级 · Agent/Agent 池 · 关联 Session(可选)· 成功标准 · 重试策略 · 超时时间 · 计划调度时间 · 数据业务时间 · 实际开始时间
背压本质 = 消费速率自适应执行速率,避免过载崩溃;Worker 续租失效后才判失联(unknown → 对账)。
存储选型:内存(重启即失) · 文件(机器不可用不可达) · 数据库(生产主选=权威源)+ 内存缓存
④ 状态监听三方案 + HITL
- A 轮询:控制权集中;单次失败≠异常(网络分区/GC 暂停),判定异常用租约/心跳
- B 回调:实时但依赖"诚实回报"(崩溃可能未发);带 Task ID+序号+Worker 标识+租约 token,幂等消费、丢弃迟到事件
- C 共享存储:权威持久化+变更通知;Redis 通知默认关/断连丢事件,etcd Watch 落后返回 ErrCompacted 需重建
生产组合 = 回调为主 + 轮询/租约兜底 + 共享存储权威;信号缺失 → 以权威 Task State 重新对账。
HITL:Task 进 hold 等审批(分钟~数天);部署位置 ≠ 业务责任(是否常驻取决于恢复能力);回传=Task ID+审批版本号+授权主体+决策结论,验证未过期/未重复/状态兼容。
框架案例:Airflow 3.1.0 human_injected_task(此前需自定义 Operator);MSE-XXLJOB 工作流人工节点支持暂停 / 恢复框架只负责流程暂停与恢复协调,不自动拥有业务审批授权——授权链路由业务应用与 Verifier 体系定义
⑤ 定时任务:从被动响应到主动执行
按用户/业务预授权,按时间规则创建 Task。触发两类:
- 左:时间触发 Cron 周期 · ScheduledAt 单次 · FixedRate 固定频率 约定:时区 / 错过 / 重叠
- 右:事件触发 Webhook 推送 · 消息队列 · 内部状态变化 约定:去重 / 乱序处理
执行层统一:两类触发都向任务队列投递 Task,共享调度 / 并发控制 / 重试 / 对账。
状态:启用 / 禁用(禁用后不再调度) · 触发类型:Cron / ScheduledAt / FixedRate · 任务并发数(1=串行) · 阻塞处理(排队/跳过/合并最新) · 失败重试:次数与退避策略超时:单次截止时间 + 取消与未知结果处理方式 · 开始时间:配置后立即生效或从指定时间起 · 时区与发生标识(调度 ID+计划时间识别同一次触发)
错过策略:run_latest 只补最新 · run_all 全部补跑 · skip 跳过 · prompt 挂起人工
内置 vs 外置六维度:触发统一性 / 并发控制 / 故障转移 / 资源利用 / 接入门槛 / 运维复杂度。大规模外置,但三点不变:① 时间与事件触发执行层统一;② 外置调度不接管业务 State 权威;③ 幂等是业务设计责任。
⑥ 工作流:DAG 型编排
编排形态:ReAct 自主 · 预定义工作流 · Multi-Agent 分解 · 组合(节点内嵌 Agent 循环)
- 业务节点:Agent 调用 / 工具调用 / 代码执行 / 知识检索 / 人工审批 / 通知推送
- 逻辑节点:条件分支 / 并行 / 汇聚 / 循环 / 等待 / 错误处理 / 子工作流(循环用有界展开,图保持无环)
- 就绪条件:普通依赖(succeeded/skipped);AND Join(全部终态+策略);OR Join(任一即就绪,显式取消未选分支,迟到结果进审计日志)
Checkpoint 断点恢复(进程无状态化) · 幂等局部重跑(复用≠副作用幂等;已发生只能补偿) · 可视化运维(重跑/跳过/标记成功/暂停/终止) · 最小必要采集+脱敏+凭证禁入库+RBAC
⑦ 横切关注点
- 责任分层:Observability 提供材料 → Evaluation 产出评分/诊断 → Outcome 由业务应用/授权 Verifier 判定(评分用于验收需有明确标准与授权)
- 安全:无人值守按预授权执行,持续检查身份/任务/资源策略;运行身份 / 租户隔离 / 网络出口 / 审批超时默认行为(超时不构成批准)
- 成本:Token/工具 API/计算/存储/网络/重试补偿/人工审批;预算=次数/时长/并发/副作用/总费用;死循环 Agent 非预期账单是真实风险
⑧ 小结:组合自由,责任不混
- 异步任务 / 定时任务 / 工作流分别描述执行方式 / 触发方式 / 编排结构,可自由组合
- 落地关键不在堆叠组件,而在分清责任边界:Task 权威在业务应用;恢复与幂等不能外包(去重/幂等/围栏/对账/补偿);Observability/Evaluation/Outcome 各归其位
- 这些原则决定 Agent 平台能否从"原型 Demo"走向可信赖的生产系统
▍逻辑全景图(总览 · 先读图 1 主线,再看图 2 组合与横切)
图 1 · 任务生命周期主链路:触发(时间/事件)→ 队列 → 调度 → 状态机 → Worker → 权威状态 → 完成语义五层
- 业务应用权威
- Harness / Runtime
- 调度 / 触发
- 观测 / 评估
- 人工介入
读法:① 顶部五层完成语义是"权威收敛"纵轴——只有业务应用/授权 Verifier 能判 Outcome;② 左侧主链从上到下:两种触发在队列处合流,队列→调度(背压)→状态机(9 态)→Worker→权威状态存储;③ HITL 从状态机 hold 分出,审批通过虚线回投递;④ 右侧紫色通道为证据输出。面试一句话:触发→队列→调度→状态机→Worker→权威状态→完成语义五层,恢复与幂等不能外包给任何单一组件。
▍逻辑全景图 · 图 2 · 工作流编排(DAG)+ 横切关注点
读法:左上是编排形态四选(可组合),左下 DAG 示意分支/并行/Join 的典型结构(OR Join 显式取消未选分支);右侧三块横切——责任分层(材料→评分→结论)、无人值守安全成本、监听三方案(回调为主+租约兜底+存储权威)。底部一句话收口全章主线。
▍书中关键图(SVG 重绘版·示意)① 任务调度、执行与权威状态协同
示意 · 按正文重绘(原书图 10-1)
▍书中关键图(SVG 重绘版·示意)② 任务执行状态机(9 态)
示意 · 按正文重绘(原书图 10-2 状态机与 10.2.3.3 状态表);仅画主线迁移,非全量状态图,完整合法转换以状态表为准。
▍书中关键图(SVG 重绘版·示意)③ 时间与事件触发共享任务执行链路
示意 · 按正文重绘(原书图 10-3)