预算、停止与人工介入

本节目标

为整个协作系统和每个子任务设置硬上限;把完成、失败、暂停、取消和人工审批做成明确状态。

预算不只有费用

至少考虑七类限制:

  • 最大模型调用/工具调用数;
  • 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 和工具如何收到取消信号?

下一步

继续 评测、可观测性与安全边界。

参考资料