源码导读
Jev Tetris 源码导读:候选动作、代码分工与有效对照
这是学习“模型判断如何控制动作”的好例子。更有价值的一课是怎样检查模型有没有带来帮助:几何计算留给代码,仔细检查候选描述,并与做同一任务的简单规则比较。
1. 几何 → 描述 → 五个问题 → 一个动作
README 描述了移动、旋转和下落的可达性搜索,用来枚举合法落点。在 describePlacements 中,代码计算每个落点的结果,再用统一句式描述新增空洞、已有空洞、消行、表面形状与堆叠高度。本项目给模型的是这些描述,不是棋盘图片。
composite 模式对同一组候选 ID 问五个 Choice:少造空洞、多消行、保持已有空洞可触达、保持低高度、保持平整。源码中的权重依次为 0.55、0.22、0.15、0.05、0.03。blend 由代码合成概率分布并归一化,默认加权求和,也实现了乘积方案。
README 说明游戏执行排名最高的落点;是否合法、怎么执行仍由代码负责。源码还用 Score 与 Noul 描述棋盘危险程度与败局预期。五个 Choice 是动作选择机制,不代表整个仓库只使用 Choice。
2. 四种对照,回答四个不同问题
- 随机落点:整套策略是否比在合法候选中随便选一个更好?这是本游戏的低基线,不是智能水平测验。
- 打乱概率:保留模型返回的数值,只打乱它们与候选的对应关系。作者报告表现跌回接近随机。这检验候选与概率的对应关系是否影响行为;候选构造中已经编码的工作仍然存在。
- 同句式关键词规则:确定性文本规则能否提取描述中的有用特征?作者报告这个基线胜过 Jev。因为读的是相同描述,它尤其适合检验这里是否需要模型。
- El-Tetris 启发式:与直接利用游戏特征的较强代码策略比较。这是实践中需要超过的基线,不是已经证明的能力上限,也不是信息输入相同的纯文本模型对照。
3. 作者结果不能证明什么
只有三个 seed,而且问题、措辞、合成方法和权重都用这三个 seed 调过。这是调参集内的结果,不是独立留出集成绩。作者也报告,合成后的动作经常与权重最大的 sealed 问题相同;五个输出不等于五份独立贡献。
作者对 1,578 个已记录回合的回放给出了具体数字:合成动作有 91% 与 sealed 问题单独的 argmax 相同(sealed 权重为 0.55)。所有问题等权时,报告的平均消行数约 11.7,而现有权重约 52。这些是作者在调参 seed 上报告的消融结果,并非本站复现,也不能证明五个问题贡献了五份独立收益。
固定 README 写的是 300 块上限,findings 写 200,表格却包含 300。引用总体比率前,需要先核对运行配置与日志。本站没有复跑实验,也不把已发表的耗时与分数当作当前测量。
更强的比较应先固定棋盘状态和候选集合,在一组数据上拟合权重,在另一组上评估;然后用没见过的方块序列跑完整游戏。单步排序与生存表现回答不同的问题,因为早期一步走错会改变后面的所有棋盘。
首次源码核对日期为 2026-11-02;2026-11-03 根据同一固定提交的 findings.md 补充这些消融细节,本站未重跑游戏。
4. API 失败,要与走错一步分开
客户端对缺少 key、HTTP 失败和非 JSON 内容抛出错误。readChoice 在缺少答案时返回 null;否则兼容多种字段名,缺少概率时默认空对象。仅这一步解析,并没有验证候选成员关系或完整概率分布。
README 描述的 UI 测试要求断线时暂停,而不是宣布游戏结束。这是作者报告,本站未做端到端验证。借鉴这种结构时,先检查返回 ID 属于合法集合、数值字段有效,并为“判断未完成”定义出口,再执行动作。
5. 先看 mock,再一次只改一件事
固定 README 要求 Node 22 或以上,并说明没有包依赖与构建步骤。以下命令检出本次阅读的版本,用假答案启动界面;这是待尝试的步骤,不是本站运行记录。mock 能检查界面,不能证明 Jev 的游戏能力。
git clone https://github.com/thelau/jev-tetris.git
cd jev-tetris
git checkout 9869b602965cf002afff766013f8c068846d36aa
npm run dev:mock- 在该检出的另一个终端运行 npm test,可执行文档中的引擎与 mock UI 测试;浏览器要求以仓库说明为准。
- 付费跑模型前,先跑文档中的关键词与启发式基线。固定 seed 和块数上限,保存日志,每次只修改一件事。
- 真实调用按照 README 配置 .env。记录响应中实际返回的模型,不能只记 jev-latest 别名;模型游戏与打乱概率对照会产生 API 用量。
迁移到你自己的决策问题
代码已经会算空洞、高度或合法位置,就让代码算。模型更适合处理规则难以廉价捕捉的语言信息。先与使用相同信息的直接规则比较增量,再考虑更复杂的多问题组合。
可以练习写出三个合法动作,用相同格式描述后果,并决定缺少答案时怎么办。先比较一个 Choice 与简单规则,再加权重。日志同时保存描述与返回数值:作者曾从日志发现,两句候选描述相互矛盾,显著影响了游戏表现。