无人值守预算与持续重试
限定 CI 的时长和顶层工具调度,正确处理重试、子 agent 和退出状态。
This page has not been translated into English yet. The original Chinese version is shown below.
自动化应分别决定工具许可、运行隔离与停止条件。无头加 YOLO 时工具以当前进程权限运行;未配置沙箱会向 stderr 打印警告,QWEN_CODE_SUPPRESS_YOLO_WARNING=1 只隐藏提示,不增加隔离。
三种预算
--max-session-turns 限制用户/模型/工具轮数,超限退出 53;--max-wall-time 限制整次运行时长,--max-tool-calls 限制累计顶层工具调度,两者超限为 FatalBudgetExceededError、退出 55。
qwen -p "Inspect the project and report findings." \
--approval-mode plan \
--max-session-turns 30 \
--max-wall-time 10m \
--max-tool-calls 50 \
--output-format json参数值是示例预算。执行通过共享 AbortController 协作终止,不能承诺工具在硬实时期限内被强制切断。单位和合法值见限制参考。
计量范围
调用一次 agent 只计一次顶层调度,其内部工具不计。因此较小 max-tool-calls 不能限制全部嵌套工作;需要禁止此通道时可用 --exclude-tools agent,并配合时长/轮数预算。
--json-schema 的 structured_output 调用不计工具预算,验证失败重试也豁免。它仍计会话轮数,因此用工具预算防不住反复提交错误结构,需同时限制轮数或时长。
stream-json 输入模式每收到一条用户消息重置预算,限制的是每条消息,不是整个长进程。qwen serve/ACP 会话路径目前不读取 settings.json 中这两项运行预算,不能用它们宣称 daemon 会话已受限。
持续容量重试
QWEN_CODE_UNATTENDED_RETRY 严格接受小写 true 或 1,显式启用后无限重试 HTTP 429 与 529,指数退避单次最多 5 分钟,stderr 每 30 秒发等待心跳。
CI=true 不自动启用;400、500 等其他错误和交互运行不受此模式影响。无限重试可与 --max-wall-time 合用,避免服务一直不可用时无期限等待。stdout 保持机器可读输出,心跳写 stderr。
退出码与失败结果
| 代码 | 用途 |
|---|---|
| 41 | 认证失败 |
| 42 | 输入无效或缺失 |
| 44 | 沙箱环境失败 |
| 52 | 配置无效 |
| 53 | 会话轮数上限 |
| 55 | 运行预算超限 |
| 130 | SIGINT / Ctrl-C 中断 |
具体结构化输出还有“模型未调用终止工具”的退出 1,见结果失败处理。某些失败只有 stderr、没有 result 事件,所以进程退出状态应优先于输出中的 success 字段。