预算、停止与人工介入
本节目标
为整个协作系统和每个子任务设置硬上限;把完成、失败、暂停、取消和人工审批做成明确状态。
预算不只有费用
至少考虑七类限制:
- 最大模型调用/工具调用数;
- token 或货币预算;
- 墙钟截止时间;
- 最大并发数;
- 最大委派深度与子任务数;
- 单任务最大尝试/返工次数;
- 对文件、网络、数据库等资源的配额。
全局预算必须覆盖所有子 Agent,不能让每个 Agent 都以为自己拥有完整额度。分配时保留恢复和汇总所需余量;例如研究阶段不能耗尽作者与审查者的额度。
终态要互斥且可解释
建议区分:
- succeeded:验收证据完整;
- failed:确定不能完成,带稳定错误类别;
- denied:策略拒绝;
- budget_exhausted:达到硬限制;
- canceled:用户/上层主动取消;
- waiting_human:暂停,等待审批或澄清;
- partial:按合同允许交付部分结果,明确缺口。
“Agent 说完成了”不能迁移到 succeeded。调度器应检查所有必需任务、输出 schema 和验收器结果。
停止条件
除了成功和预算,还应检测:
- 连续相同动作/消息;
- 没有新增证据的返工循环;
- 相同质量分数多轮不改善;
- 依赖图无法推进;
- 等待对象不存在或租约过期;
- 冲突次数超过阈值;
- 安全策略触发。
停止后保留最后稳定检查点、已验证产物、未完成原因和建议人工动作。不要自动放宽权限或移除护栏以“继续完成”。
人在回路不是一句提示
有效审批必须包含:
- 请求执行的具体动作;
- 目标资源和影响范围;
- 关键输入/输出预览;
- 风险与可逆性;
- 谁有权审批;
- 批准、拒绝、修改、超时各自的状态迁移;
- 审批记录与对应 task/tool call ID。
截至 2026-07-22,OpenAI Agents SDK 的官方 HITL 文档描述了工具调用中断、序列化运行状态以及批准/拒绝后恢复的模式。具体接口会变化,但“暂停而不执行、由外部主体决定、从同一状态恢复”的工程原则稳定。
该 SDK 的中断会在外层 RunState 汇聚(包括 handoff 或嵌套 Agent.as_tool() 中的工具),并可序列化后恢复;这是 SDK 行为,不是对外部授权持久性的保证。序列化状态可包含应用 context 和运行元数据,因此必须按持久数据治理:不要把秘密或宽泛能力令牌塞进 context;生产审批仍由独立的身份、作用域、过期与审计系统在执行边界复验。OpenAI Agents SDK:Human-in-the-loop(访问于 2026-07-22)
哪些动作通常需要人工决定
- 对外发送、发布、支付、删除或不可逆写入;
- 扩大数据访问或权限;
- 处理健康、法律、财务等高影响决定;
- 多个证据冲突且自动仲裁风险高;
- 用户意图存在会改变结果的歧义;
- 预算需要实质扩容。
低风险、可逆、充分验证的重复动作可以按策略自动批准,但应能撤销授权。
预算分配示例
总调用上限 20
经理与路由:4
两个并行专家:各 5
汇总:3
审查/修正:3
总截止 60 秒,单工具 10 秒,最多并发 2
委派深度 1,单任务最多 2 次尝试若一个专家提前用完 5 次,不得占用审查预算;经理可选择部分交付或停止。
练习与自测
为“生成并发布周报”列出预算和至少两个审批点。自测:审批超时属于失败还是 waiting_human?用户取消后,已启动的并行 Agent 和工具如何收到取消信号?
下一步
继续 评测、可观测性与安全边界。
参考资料
- OpenAI Agents SDK:Human-in-the-loop(访问于 2026-07-22)
- OpenAI Agents SDK:Running agents(访问于 2026-07-22)