现在让 Agent 写业务代码、跑单测、修线上 Bug ,基本已经没什么新鲜感了。有编译器、类型检查和报错堆栈兜底,它自己多试几轮总能收敛。
最近几个月换了个更折磨它的场景:把 MinePilot 当实验田,试试看能不能让 Agent 在原生 Minecraft 里稳定造出十几万到三十几万方块、玩家真能走进去逛的大型建筑。
我原本以为跟以前做策略 DSL 一样,先给它造一套带编译校验的底座就够了(底层的体素编译引擎 CraftDAG 已经开源)。方块 ID 、门窗朝向、结构碰撞都能在编译期拦住。
结果一进真游戏,发现编译器只能保证“方块没报错”,完全管不了空间对不对:
1. 编译零报错,抬头一看洞顶漏了 69 列
让它造一座跨峡谷的山地建筑( 15.7 万方块),编译一次过,零碰撞。进瀑布洞穴抬头一看,头顶有 69 列根本没封顶,直接漏出外面的蓝天;所谓的“瀑布”其实是贴在半空的一层水帘,底下连承接的水池都没有。前前后后修了水体物理和局部遮挡,跑完 550 步 Survival 实机走查,在原版 Java 26.3 (无光影)里截出来是这样:

2. CLI 检查绿灯通过,但相机前 62.49% 全是石栏杆
做一座室内澡堂的二楼观景台,命令行渲染退出码是 0,相机也没卡进方块里(eyesInSolid: [])。但人眼高度正前方立着一排实心石栏杆,把 62.49% 的画面堵得严严实实,底下的池水 0.00% 可见。
更意外的是做对照实验时,让写代码的同一个 Agent 看着这张渲染图自检( Self-Critique ),它居然觉得完全没毛病;换成不参与建造的独立视觉评审模型盲审,才一眼揪出来把实心墙改成了透空栏杆。
3. 静态文件全绿,进游戏当场掉下 203 盏灯笼
做一座 33.4 万方块的夜景街区,离线 .schem 静态检查全都合法。结果导进原版客户端触发邻居方块更新,挂在杜鹃树叶和上半砖底下的 203 盏灯笼哗啦一下全崩成了满地掉落物。最后老老实实补了挂点合法性校验,才把 1633 盏灯稳稳挂住(同样是原版无光影实机截图):

4. 曲面雕塑和自然地形又是另一套坑
像自由女神像这种浑身曲面的地标,用搭房子的轴对齐体素硬拼会直接糊成马赛克,最后退回先写 Python/C 算三角网格 .obj、再做亚体素采样的路子(早期雕塑源还把冠冕上的 7 扇窗洞全弄丢了):

到现在也没完全搞定的是“自然地形 + 建筑穿插”。一座嵌在冰川裂隙里的天文台( 26.1 万方块),编译零差异、380 步静态路线也能走通,但因为冰川外形被切成了死板的挡土墙斜面,被独立视觉评审打回冻结( 74/100 HOLD ),目前还在推倒重改侵蚀内凹的几何表达,没过正式验收。
折腾下来最大的感受是:代码世界里单测绿了基本就八九不离十,但到了三维空间,编译器管的是“填进去的方块”,真正决定能不能看、能不能走的反而是没放方块的那片“负空间”、玩家第一人称的视线,以及必须和生成者拆开的独立视觉盲审。
把这几个月踩的坑、多模型接力对比( Claude / GPT / Gemini )和完整实验记录整理成了一篇长文: