离线回放很容易得到虚假的好成绩:如果程序在判断某一时刻时能读到未来截图、用户操作结果或人工答案,它看起来会“理解游戏”,实际上只是泄漏了答案。这个内部实验没有训练识别器;它先验证更基础的合同——运行时观察者只能收到当时可用的像素和时间前缀。
两段开发会话一共包含 272 个动作记录和 418 张图片。评估侧选择 18 个窗口:12 个常规窗口、6 个边缘窗口,共 37 张唯一截图。运行时、动作结果和人工审核资料分目录保存,避免一个方便的 JSON 把未来信息带进模型输入。
flowchart LR
S[Recorded sessions] --> P[Window selection]
P --> R[Runtime pixels]
P --> E[Evaluator-only evidence]
R --> O[Observer input]
O --> T[Timestamp prefix audit]
E -. hidden from observer .-> V[Later adjudication]
图 1:运行时像素与评估答案在准备阶段分开。虚线表示后续评估关系,不是模型可读取的数据流。
1. 未来信息泄漏会让离线评估失真
例如,动作收据可能写着“法力减少成功”,后一张截图也可能明确显示结果。若模型在处理动作前画面时能读取这些字段,它无需识别 UI 就能答对。即使代码没有故意作弊,一个共用对象、过宽路径或按整段加载的缓存也可能造成泄漏。
因此回放准备器只向 runtime 导出中性的帧和时间;outcome 保存动作意图与实际收据;evaluator 保存来源映射、窗口选择和待裁决参考。目录边界是合作式 API 约束,不是操作系统安全沙箱,但足以让测试发现常见的错误数据流。
2. 18 个窗口覆盖常规与边缘情况
session01 有 101 个动作、202 张图片;session02 有 171 个动作、216 张图片。选择器从每段会话取 9 个动作窗口,总计 18 个;其中 12 个常规、6 个边缘,得到 37 张唯一截图。session02 的 action-0130 特意同时保留即时和延迟法力证据,用来测试可用时间。

图 2:运行时拿到的是原始游戏像素,不含人工 verdict 或期望数值。

图 3:后一时刻画面可以在时间到达后输入,但不能倒流到前一时刻的判断。两张图的 UI 变化最终需要语义模型解释。
另有 12 张 session01 补充 after-image 的因果可用时间未知。它们保留在源清单里,但没有进入这 18 个窗口。未知不是删除理由,也不是允许模型提前读取的理由。
3. 本轮通过的是结构与传输检查
中性 probe 依次读取 37 张 runtime 帧,并检查 37 个时间戳前缀;前缀违规为 0。它刻意不输出任何正向游戏数值断言。配套测试还验证了准备器、生产入口和工作区打包:聚焦测试 30 项、Perception 当时完整套件 261 项、集成打包 4 项均通过。
| 检查 | 结果 | 能证明什么 |
|---|---|---|
| 已送达 runtime 帧 | 37/37 | 像素运输路径可运行 |
| 时间前缀检查 | 37/37,无违规 | 输入顺序符合声明的时间边界 |
| 正向游戏值断言 | 0 | probe 没有伪装成识别器 |
| semantic smoke | NOT_RUN | 语义识别尚未被验证 |
4. “全部拒识”也能通过运输测试
一个什么都不识别、永远返回 unknown 的观察者同样可以通过 37 帧运输检查。因此这个实验不证明字段准确率、状态跟踪可靠性、动作结果验证或游戏控制有效。6 个 edge window 也不是 6 个已经独立完成的哨兵类别。
这类阴性结论很重要:它把“管道不会明显偷看未来”与“模型真的会读游戏”分开。后续识别实验仍需独立真值、覆盖率、误接受率和恢复行为。
5. 下一步接入一个有限观察者
先为可见字段裁决小规模参考,再通过 replay_frames 接入只读当前像素的观察者。观察者可以复用现有的场景、HUD、计时、日志和生物模块,但必须保留每条证据的来源时间与置信状态。
当单帧观察可用后,再测试有年龄的 State Estimation 和结果验证。最终新视频验收仍以纯本地算法为准:回放工具只保证公平地送帧,不能替算法回答画面里有什么。
Comments