裁定三落地:accepted = 机械预筛 ∧ 独立模型玩法判定,九门 pass 降为「未见明显死」预筛。 - 波2a 玩法判定器(cheap_verify.py):读 brief+run-summary+全程截图(含新增局中连拍 midplay-1..N,play.cdp.cjs 只读并发拍、不进任何门判据),布尔裁 broken/hollow/off_brief, fail-closed;判定真相层落 evidence/judge.json + verdict.json 写回 accepted/judge 段; 金标夹具 fixtures/judge-golden/ + judge_golden.py 校准跑批 - 波2b 拆残笼:check 词法 tokenizer 替换 stripCode 正则(字符串内 // 假阴根修,292 在册 源零差异);prompt v1.6.3 外科清洗(两层奖励→纯设计语/删盲驱动器围设计/删熔断恐吓), registry 热取==内置逐字节一致(cheap_roles 内置回退同步);edit_file 空白归一+近似片段提示 - 判定器补修:空输出有界重试一次(glm 思考吃光 max_tokens 时 content 空)+重试放大公式 反缩 bug 修(旧 min(×2,6000) 大 base 反缩)+finishReason 落盘;imagesSeen 模型自报+ 盲检微扰重掷、两掷均盲=仪器故障 degraded(闲鱼中转静默丢图实锤,不再错杀 hollow) - 判定档切 MiniMax-M3(创始人 2026-07-10 拍板,裁定三①边界随 v2 plan 修订): generation.yaml judge.model+max_tokens=202752(512K 网关实探 400 拒,取实探上限); 3 例盲案 M3 重判全 accept、¥0.026/局 - 三路消费对齐:CLI 预筛语义修(cheap_studio 喂 verdict.pass 而非 finished,违裁定三的 放行已纠)/Service 路 apply_gameplay_judge 显式 prefilter 参数/result_out 权威改读 accepted(无键回落预筛,旧产物兼容)+trace.gameplayJudge additive 透传; tier2 gate_judge/genconfig 同步判定配置与消费 测试:test_gameplay_judge 33 项新增,全仓 pytest 480 绿;真判定闭环 accept ¥0.061。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
119 lines
13 KiB
YAML
119 lines
13 KiB
YAML
# ════════════════════════════════════════════════════════════════════════════
|
||
# generation.yaml —— tier2 富游戏自治生成线 · 生成器旋钮配置(运行时读 · 单一事实源)
|
||
#
|
||
# 这是什么:把过去散在 6+ 个 Python 文件里写死的「调生成、优化过门率」旋钮收敛到这一份外部配置。
|
||
# worker/genconfig.py 在每次 run 运行时读它(env 覆盖 > 本文件 > 内置默认 > 调用方默认),
|
||
# 故【调生成 = 改这个文件重跑,不改码、不重同步到 mini-desktop】。对应图说 B 族「配置注册表
|
||
# (唯一事实源 / 版本化 / 运行时读)」在生成器旋钮这一面的落地。
|
||
#
|
||
# 怎么改:把某个值改掉、保存,下一次跑生成自动生效(genconfig 按文件 mtime 自动重读)。
|
||
# 想只对某一批临时压一个值而不动文件:export TIER2_GEN__<区>__<键>=值(全大写、双下划线分隔),
|
||
# 例 `export TIER2_GEN__ITERATION__WRITER_MAX_ITERS=60`;实验完 unset 即恢复本文件的值。
|
||
#
|
||
# 默认行为不变(红线):本文件每个值 = 改造前各源文件里的硬编码值,逐项对齐。只要不动这里、不设 env,
|
||
# 生成行为与外置前字节一致;只有人主动改了某个值,它才经 genconfig 流通到取值点生效。
|
||
#
|
||
# ★ 标记:directional(方向性占位)值——需 mini-desktop 跑 n≥30 真基线后据实测分布校准。
|
||
# 调这类值是「优化 20% 过门率」迭代循环的主要着力点(改这里重跑、看过门率)。
|
||
#
|
||
# 维护纪律:本文件与 genconfig.py 的 _BUILTIN_DEFAULTS 应同值(后者是本文件失效时的兜底副本)。
|
||
# 改默认值优先改本文件;若要连兜底也改,同步改 _BUILTIN_DEFAULTS。
|
||
# ════════════════════════════════════════════════════════════════════════════
|
||
|
||
# ── model · 模型客户端构建旋钮(消费方:worker/config.py)──────────────────────────────
|
||
model:
|
||
default_model_name: MiniMax-M3 # 单写 agent 默认模型(M3 路;model_name_from_env 默认值)
|
||
deepseek_flash: deepseek-v4-flash # 便宜主力档名(spike 主问「便宜到什么程度还守得住」)
|
||
deepseek_pro: deepseek-v4-pro # 强便宜救场档名(退路树 Q1 读它的过门率)
|
||
baseline_opus: claude-opus-4-8 # 强基线 Opus(网关现【无此渠道】、真调 503;待 new-api 开通后改这里即接上)
|
||
baseline_fable: claude-fable-5 # 强基线 Fable(同上,网关现无;列出不假设可用,build_baseline_model 取不到诚实报错)
|
||
baseline_crosscheck: deepseek-v4-pro # 跨族 cross-check(创始人 2026-06-24 拍:网关无 Opus/Fable,证路当前用它;实测可调)
|
||
max_tokens: 512000 # 输出上限(非上下文窗;build_model 硬约束 max_tokens > thinking_budget)。
|
||
# 2026-07-09 创始人拍「统一 512K(后面可调)」——把 output 上限抬到不再是瓶颈。
|
||
# 依据:16K 是自设限非模型限(实测 M3 单轮能输出 17000 tokens/finish_reason=stop、
|
||
# accepts 40K 与 512K 均无报错);cheap 走 OpenAI inline thinking(thinking 吃额度),
|
||
# 低上限 + 大文件整写易撞截断丢方法/导出(heritage 黑屏、thrash 病根之一)。512K 彻底消除
|
||
# 输出截断顾虑;模型 finish_reason=stop 自然收尾、不会因上限高而空转多花(thinking_budget 8K 仍封顶思考)。
|
||
thinking_enable: true # M3 是否开 thinking 分离(便宜档无此约束,只 M3 路用)
|
||
thinking_budget: 8000 # M3 thinking 预算(必须 < max_tokens,否则 build_model 抛)
|
||
max_retries: 2 # 网关偶发 502 突发的兜底重试次数(wg1 spike 实证有效)
|
||
ctx_trigger_ratio: 0.8 # 历史压缩触发比例(超 trigger_ratio×context_size token 才压;2.0.2 约束 0<r<0.9)
|
||
ctx_reserve_ratio: 0.1 # 历史压缩保留最近上下文比例(须 < trigger_ratio)
|
||
|
||
# ── budget · ¥ 累进硬闸 + 四道熔断 + 软刹(消费方:worker/middleware.py)────────────────────
|
||
# 这一区是「自治多轮 ReAct 不能无限烧钱」的硬地板。调它们 = 调成本上限与失控保护强度。
|
||
budget:
|
||
# 预算两段式(创始人 2026-07-03 一次性裁决,裁决记录 = docs/agent-specs/2026-07-03-生成引擎agentic架构-第一性重推演与差量-设计.md §5;
|
||
# 单位经济或模型单价大变即复审):软停线越线只许收尾类动作(finish/构建/跑门,禁新增大额生成调用),
|
||
# 整局 RMB 硬地板 = 软停线 × rmb_hard_floor_ratio,与轮数/墙钟闸任一先到即停(middleware 强制)。
|
||
rmb_hard_limit: 50.0 # 富档单局 ¥ 软停线(soft 档;hard 档=单段硬线)。裁决值 ¥50(原 3.0 是 0号 spike 占位)
|
||
rmb_hard_floor_ratio: 1.5 # 两段式硬地板倍率:硬地板 = 软停线 ×1.5(富档 ¥75 / 便宜档 ¥15,fail-closed 封上界)
|
||
cheap_rmb_hard_limit: 10.0 # 便宜档单局 ¥ 软停线(裁决 ¥10;生产 Service 与 CLI 经 cheap_budget.build_cheap_breaker 同源读)
|
||
max_tool_calls: 100 # step_cap 步数硬顶(工具调用总次数)。2026-07-04 创始人令提阈值 60→100:
|
||
# F-2 实证 60 步顶挤掉续修窗(writer 40 轮撞墙后 resume 只剩 ~20 步,美食类
|
||
# 硬 brief 修不完就被拦);100 = writer 60 + 续修 ~40 headroom,失控保护交
|
||
# ¥ 硬闸(50×1.5)与墙钟。cheap Service 显式传 150 不受此影响;cheap CLI 继承此值(纯兜底,¥10/15 是真闸)。
|
||
max_model_calls: 120 # budget 预算闸(模型推理总次数;¥ 取价失败时由它兜底拦飞车)。随步顶 60→100 等比 80→120。
|
||
wall_timeout_s: 2700.0 # timeout 整 reply 墙钟超时(秒)。随步顶提到 45min(F-2 美食 R1 在 60 步已跑 1464s,100 步预留 ~2400s)。
|
||
step_timeout_s: 420.0 # timeout 单步静默超时(相邻事件间隔超此判单步卡死;秒)
|
||
stuck_repeat_threshold: 4 # stuck 连续同一失败签名达此次数 → 判死圈
|
||
soft_ratio: 0.8 # 软刹触发比例(达 soft_ratio×硬顶时往 system prompt 注入收敛提醒)
|
||
group_ratio: 1.0 # new-api 分组倍率(¥ 折算用)
|
||
est_prompt_tokens: 12000 # ¥ 闸首调保守预估的 prompt token 量级(系统提示+历史+设计稿;调用后按实测覆盖)
|
||
est_completion_tokens: 2000 # ¥ 闸首调保守预估的补全 token 量级(一轮补全+tool_use)
|
||
|
||
# ── iteration · 单写 ReAct 轮数 + 外层有界 resume(消费方:worker/agent_loop/studio.py)──────────
|
||
# 这一区是「优化过门率」最直接的着力点之一:放开/收紧自治轮数与续修次数。
|
||
iteration:
|
||
writer_max_iters: 60 # 单写 ReAct 放开的最大轮数。2026-07-04 创始人令提阈值 40→60:F-2 两轮实证美食类
|
||
# 硬 brief 在 40 轮墙上反复被截(R1 churn 到 step_cap、R2 设计收敛后仍 40 轮不绿),
|
||
# 40 是预算墙不是能力墙;烧钱风险交 ¥ 两段式(50/75)兜。
|
||
max_resumes: 6 # 外层有界自纠 resume 上限(agent 过早停下、门未绿且有预算时,带反馈再踹回去续修的次数)
|
||
|
||
# ── design_team · 阶段 1 工作室星形多 agent 设计预算(消费方:worker/agent_loop/design_team.py)──
|
||
# 设计阶段是过门头号杠杆(图说 C1);这一区控制设计团队烧多少 token、跑多久。
|
||
design_team:
|
||
leader_max_iters: 12 # leader ReAct 总轮数上限(= 调四专家 + 汇总的天花板;默认够各专家 ≤2 次 + 汇总)
|
||
per_expert_cap: 2 # 单专家被 leader 调用次数上限(防 leader 反复刷同一专家烧 token)
|
||
timeout_s: 420.0 # 整设计团队墙钟硬超时(秒;超时 degrade 回单 agent 设计,不中断主链)。
|
||
# 2026-07-04 F-2 R1 实证 240→420:两败局(美食/糖水店)均为 3/4 专家已产出、
|
||
# 末段调用/leader 撞 240s 墙钟 → 降级单 agent 设计 → writer 40 轮不收敛 → step_cap;
|
||
# 三过门局设计团队全部正常收敛(超时↔失败 5/5 完美相关)。M3 thinking 慢尾单调用
|
||
# 可达 120-180s,420 给一次慢尾余量,与 runtime.step_timeout_s=420 同刻度。
|
||
|
||
# ── gates · 退路树四阈值 + harness 门阈值 ──────────────────────────────────────────────
|
||
# 退路树阈值消费方:worker/fallback_tree.py(go/no-go 判定,纯分析侧,import 时读)。
|
||
# harness 阈值消费方:tier2/harness/play-phaser.cdp.cjs(Node;经 env TIER2_GEN__GATES__* 注入,
|
||
# 或读 genconfig.export_for_harness() 导出的 JSON;.cjs 端按「env > 内置默认」消费,默认 = 现值)。
|
||
# ★ 这些多为 directional,真跑校准过门率时改这里。
|
||
gates:
|
||
qpass_go_min: 0.40 # ★ 退路树 Q1:最强便宜档(v4-pro)过门率 ≥ 此值 → GO 转铺引擎
|
||
qpass_floor_max: 0.20 # ★ 退路树 Q4:便宜档全线 < 此值 → 判「全线崩」
|
||
qpass_strong_baseline_min: 0.0 # 退路树 Q4:强基线(Opus/Fable)过门率 > 此值(即 >0,至少 1 款过)→「能过」
|
||
concentration_ratio: 0.50 # ★ 退路树 Q2/Q3:某失败桶占失败总数 ≥ 此值 → 判「集中」(过半算集中)
|
||
human_min_patience_ms: 12000 # ★ harness 人可玩 advisory:订单耐心的人类最小反应窗口(ms);低于金标 min(16s)留余量
|
||
color_dist_min: 18 # harness render-reflects-state:有 item 格 vs 空格的色差 > 此值 → 判「渲染反映了状态」
|
||
var_delta_min: 120 # harness render-reflects-state:方差增量 > 此值 → 判「渲染反映了状态」(与色差任一满足即过)
|
||
|
||
# ── judge · 独立模型玩法地板判定(消费方:cheap-worker/cheap_verify.apply_gameplay_judge)──────────
|
||
# W-AXIS 波2(质量模型 SoT 裁定三):机械九门降位为「未见明显死」预筛,玩法地板由独立多模态模型看真玩证据
|
||
# (首帧/局中连拍/局末截图 + game-log + 取证时间线)裁 broken/hollow/off-brief 三类拒绝,阻断放行。
|
||
# ok = 预筛 ∧ 判定;判定只对过筛者跑(省¥);fail-closed(评不出/无证据 → 不放行、标 degraded)。
|
||
judge:
|
||
blocking: true # 玩法判定是否阻断放行(整体回退位:false=判定只观测、ok 仍=预筛,可一键回退到修订前口径)
|
||
model: MiniMax-M3 # 判定模型(创始人 2026-07-10 令切 M3):glm-5.2 唯一通道=闲鱼二手中转,图像支持按池轮换、07-09 整日全盲实证不可依赖;M3 读图亲验可靠(裸图/判定/spike 三路实证,且当场抓出 M3 自己写的渲染 bug)且走 MiniMax Direct 一手通道。裁定三①「出题≠被考」边界随本决策修正(地板只裁「有无」+金标亲玩兜同源盲区),SoT 修订随 v2 双评审落档。
|
||
max_tokens: 202752 # 判定输出上限。1500 实测太低(创始人 2026-07-09 令调大):glm-5.2 思考长度随机,21 局里 6 局撞线重试、1 局重试后仍截断被误拒(trpg-r5)。512000 经 new-api 实探 400 拒,202752=glm-5.2 网关实探可过上限;真实成本/时长闸=timeout_s(思考再长也被 120s 截停)。
|
||
timeout_s: 120 # 判定 LLM 调用超时(秒);超时 → fail-closed degraded
|
||
max_frames: 6 # 最多喂几帧证据截图(首帧 + 局中连拍 + 局末,控 token/成本;超出保头尾均匀采样)
|
||
cost_target_rmb: 0.3 # 单局判定成本目标(¥;仅记账对照/告警,不阻断——实测约 ¥0.10/4-6 帧)
|
||
|
||
# ── archetype · business-sim 品类 driver 参数(消费方:worker/archetypes.py)─────────────────
|
||
# 注:这里只放 driver 真玩规格里的【可调数值】(怎么玩);品类的【结构】(三系统/数据表 schema)
|
||
# 不在配置层,仍由 fixture 与品类注册表定。改这些 = 调 business-sim driver 怎么把游戏玩到终态。
|
||
archetype:
|
||
business_sim_driver_steps: 80 # driver 总步数(赢路点合成→凑单→交单→金币达标;够走完一局)
|
||
business_sim_driver_step_ms: 280 # driver 步间隔(ms;每步之间的真玩节奏)
|
||
business_sim_win_threshold: 100 # 盈利路金币胜利阈值(与 economy/latch 门、数据表 winCondition 对齐)
|
||
business_sim_bankrupt_steps: 60 # 破产路观察步数(放任流失,看是否走到 lose)
|
||
business_sim_streak_lose: 3 # 连续流失判负次数(与数据表 loseCondition.consecutiveOrderFails 对齐)
|