Goal 证据与验证器
写可判定的完成条件,理解有限转录窗口、缺失证据和遥测内容。
Goal 完成不是由模型一句“做完了”决定。独立验证器只读取已有转录,不会自行运行命令、读取文件或确认远端状态。
验证器实际看见什么
验证器从本 Goal 最近的记录向前读取,请求上限 256,000 字节,单条记录超过 8,000 时从中部截断。较短的收尾轮次能为前几轮证据留出空间;过长的一轮可能占满窗口。
可见助手输出、工具结果和用户消息可以作为证据;目标文本和隐藏推理不算。早先运行过的检查若已不在窗口,需要重新给出当前工具结果。验证器会得知较早记录被省略,并拒绝依赖不可见证明的完成提议。
- 打印“测试通过”只能证明打印了该文字,不能证明测试真的运行。
- 文件修改、远端更新和检查通过,需要相应工具输出。
- 声称用户批准了某项操作,需要真实用户消息。
- 缺证据时结论是尚未完成,而不是默认通过。
当前版本不再把证据压缩为 checkpoint 声明,也不再运行旧的轮末 checkpoint 模型检查和 stall 限制。model.goalCheckpointTimeoutSeconds 仍可解析但被忽略;不要用该字段排查当前验证器停顿。
写可判定的目标
按最终状态、验收条件、禁止事项、阻塞报告和必要上下文来组织。至少一个条件应给出实际检查命令以及预期退出码或输出,并要求保留关键结果。
Outcome: Fix the reported parser failure. Done when: 1) the regression test passes; 2) npm test exits 0 and the decisive output is shown. Must not: weaken assertions or publish changes. On block: report the failing check and the missing input.示例中的命令必须换成项目真实存在的检查。审计目标可以用覆盖约定场景并报告证据来验收,零缺陷也是有效结果,不要设“至少发现几个问题”这种错误成功条件。
目标建议大致控制在 1,200 字符以内,因为每轮都会再次发送。set、edit 接受任意长度,但会把换行压成空格;用编号保留条件边界。模型通过 propose_goal 提出的目标最多 1,500 字符。
文本预算不是运行时上限
目标里写“20 轮后报告阻塞”只是给模型的指令,不会配置计数器。需要运行时限制时,使用Goal 预算设置。不要在目标中混合多个互不相关的终点,使验证器无法判断当前是否达标。
遥测边界
Goal 转换可分别进入 OpenTelemetry 与用量统计:事件名为 qwen-code.goal_state,用量统计由 privacy.usageStatisticsEnabled 控制,默认启用;两套开关独立。
状态事件包括轮数、token、活动时间与配置预算,目标文本只记录码点长度,不记录正文或停止原因。clear 不带用量,replace 描述新目标而不是旧目标最终用量;恢复已记录状态不会再次上报同一转换。
但其他遥测仍可能含目标正文:propose_goal、update_goal 工具参数会进入工具调用遥测,即使 telemetry.logPrompts 关闭也一样。不要把“Goal 状态事件不含正文”误解为所有遥测都不含正文。