
字节笔记本
2026年10月3日 · 约 4 分钟读完
LLM 负责想,Jev 负责选:一盘俄罗斯方块讲透判断模型
让 AI 打俄罗斯方块,常规做法是截个图扔给多模态大模型,等它输出「左左右下」。Jev 玩法完全不同,因为它根本不会写东西:这个判断模型只能回答带候选答案的选择题,给每个选项返回概率。两个新开源项目正好把这个特性用到了极致,把 agent 架构里最容易被含糊带过的分工问题演成了一盘可以看的游戏。

项目简介
thelau 的 jev-tetris 开场白就很直白:一个由「不能写、看不见棋盘、也没人告诉过它俄罗斯方块是什么」的模型来玩的游戏。几何计算全部由代码完成,Jev 只负责在候选里挑。同类的对战版由 trungdq88 搭好,让 Jev 和 Claude Haiku 4.5、Gemini 3.8 Flash、开源权重模型 Laya 实时对战,已经在线上可玩。
核心功能
决策循环:代码出题,模型批卷。 每一帧,程序搜索当前方块所有能 maneuver 进去的落点,平移、旋转、软降任意组合,连 tuck 和 spin 这类骚操作都算在内。每个落点被写成一句自然语言描述,比如「下方不产生新空洞,消一行,表面更平,堆叠保持低位,平放在棋盘中央」。这些句子作为选择题选项发给 Jev,它对每个选项给出概率,单次判断约 380ms,程序执行排名最高的那个。
概率可视化。 因为拿到的是全部候选的概率分布而不只是一个赢家,棋盘能在方块落下前把每个格子的模型偏好热度点亮,选中的落点套白圈;已堆好的方块按当时的确信度调暗,整面墙就是模型不确定性的可读记录。
对战版:像样的 benchmark。 对战项目里双方共享同一随机种子序列、同一候选集合、同一时钟,消一行就给对面塞一行垃圾行,先堆到顶的输。重力按共享时刻表加速(默认每行 150ms,每 20 秒快 15%,下限 40ms),回答晚于落锁算 missed deadline。LLM 侧用强制 place_piece 函数调用约束到合法落点,Jev 用同构的选择题,双方每个模型的消行数、延迟、成本、每次调用花费都实时挂在棋盘两侧。

作者公布的对照实验最能说明问题:固定三个种子、最多 300 个方块时,随机决策存活 20 上下,真 Jev 存活 83 到 300、消行 23 到 115,而经典手写算法 El-Tetris 三局全部满存活。作者的结论也很诚实:实验只证明 Jev 能按自然语言描述有效排序候选,不证明它擅长俄罗斯方块,它目前还打不过简单的启发式算法。
快速上手
要求 Node 22 以上,没有 npm 依赖、没有构建步骤:
git clone https://github.com/thelau/jev-tetris && cd jev-tetris
cp .env.example .env
npm run dev去 typesafe.ai 拿一个 key 填进 .env 的 TYPESAFE_API_KEY,浏览器开 localhost:5173 点 START。一局几分钱,服务端在 1500 次调用或 1 美元处硬性止损。没有 key 也能跑 npm run dev:mock 看整套交互,只是决策是假的、打得很难看。对战版在 jev-tetris.vercel.app,自备 TypeSafe key 加一个 Anthropic 或 Gemini key;Laya 是开源权重模型,本地起服务即可,无需 key。
为什么值得看
它把 Jev 这类模型在 agent 里的正确位置讲清楚了:工具选择、下一步动作、agent 路由这些本质是选择题的环节,都可以由「代码产候选、判断模型做排序、程序去执行」的三段式来承接,比让大模型生成动作再解析要便宜、快且可控。俄罗斯方块只是把这个决策过程可视化了。仓库地址:thelau/jev-tetris、trungdq88/jev-tetris。



