Skip to content
FunCoding

Search

Search docs, Skills and MCP

无人值守预算与持续重试

限定 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运行预算超限
130SIGINT / Ctrl-C 中断

具体结构化输出还有“模型未调用终止工具”的退出 1,见结果失败处理。某些失败只有 stderr、没有 result 事件,所以进程退出状态应优先于输出中的 success 字段。