Skip to content
FunCoding

Search

Search docs, Skills and MCP

运行预算与循环限制

区分整次运行、单轮工具预算、Goal 窗口和子 agent 深度。

This page has not been translated into English yet. The original Chinese version is shown below.

不同限制计量的对象不同。配置为 0 时也不具有统一含义,应逐项核对。

整次运行

设置默认与行为
model.sessionTokenLimit-1;-1 和 0 都不限。记录的 prompt token 超限后丢弃下一次发送,不中止整个会话
model.maxSessionTurns-1,不限会话轮数
model.maxWallTimeSeconds-1,不限;无头/无人值守运行超时退出 55
model.maxToolCalls-1,不限;0 禁止全部工具调用,只计顶层调度的成功和失败,structured_output(含验证失败)在 --json-schema 下豁免
model.maxSubagentDepth5;从第一级 subagent 计数,范围钳制 1–100

--max-wall-time 可覆盖时长,接受 90、30s、5m、1h、1.5h 等正值,最短 1 秒;500ms、0.5 会拒绝。--max-tool-calls 可覆盖累计工具预算,超过预算退出 55,最大可设 1,000,000。

--max-subagent-depth 可覆盖嵌套深度;1 仍允许一级 subagent,但禁止继续嵌套。teammate、fork 和 workflow 启动的 agent 不按该设置开放嵌套。

一次 agent 调度只算一次,其内部工具不计入整次 maxToolCalls。stream-json 输入每条用户消息重置预算;qwen serve/ACP 当前不读取这两项时长/工具运行预算。详见无人值守范围。

单轮工具上限

model.maxToolCallsPerTurn 显式设置正数时为硬上限。默认未显式配置时,100 是自适应软阈值:重复同一调用的停滞轮次会停止,多样化的有效调用可继续,但硬上限为 1000。

这个“轮”包括模型响应及工具结果续接;阻塞 Stop Hook 的续接和运行时调度的 Goal 轮次有新预算。daemon/ACP 按整个 batch 执行前检查,越过显式或硬上限的 batch 全部跳过,因此可能提前一个 batch 停止。

0 或负值禁用此单轮 cap。model.skipLoopDetection 默认 true,关闭的是另一些流式检测;单轮 cap 独立生效。daemon/ACP 还始终有无效参数停滞保护,不能将 skipLoopDetection=true 理解为无任何循环保护。

Goal 窗口

model.goalTokenBudget 默认 30,000,000,累计 Goal 自己轮次中的模型调用 totalTokenCount;-1 不限,0、超过 300,000,000、其他负数、非整数或非数字会在启动时拒绝。

Goal 用尽窗口会获得一轮收尾,然后停止,恢复会授权下一窗口。它不是每次模型请求的上下文上限,也不等于服务商账单预算。

model.goalMaxTurns 未设则无轮数上限,-1 也表示不限;合法正数最多 10,000。计入已完成的用户驱动 Goal 轮次,达到上限仍可接收用户消息,但下一次自主续接可能转为收尾。

model.goalMaxActiveMinutes 未设则无活动时长上限,-1 不限;合法正数最多 10,080。计入 active 状态下的等待与轮间空闲,不计 paused/blocked/stopped 和重启停机;进程挂起仍计时。仅在轮间检查,不是到点强制终止当前工具。

这两项修改需重启,新上限只为之后创建的 Goal 建立。要给既有 Goal 重新设限,官方提示用 /goal set 替换或清除后重建,都会重置记录与计量;不能将其当作无损修改。取消已耗尽上限也要后续 resume/edit 才生效,未耗尽的旧窗口不会自动消失。

model.goalCheckpointTimeoutSeconds 已弃用,值虽接受但不再使用。