跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

无人值守预算与持续重试

限定 CI 的时长和顶层工具调度,正确处理重试、子 agent 和退出状态。

自动化应分别决定工具许可、运行隔离与停止条件。无头加 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 字段。