跳到主要内容
这篇论文把世界模型劈成了两半:代码管规则,视频管渲染

这篇论文把世界模型劈成了两半:代码管规则,视频管渲染

破壁人
破壁人

· 阅读约 7 分钟

盯着 Sora 和世界模型这条线的人,这篇《Code World Model: Coding Agent as World Brain》(arXiv 2608.25927)值得花一个晚上。不是因为结果炸,而是它把一件大家隐约觉得别扭、但没人挑明的事讲透了:视频世界模型从像素里挤动态规律,这路子从根上就有问题。

视频世界模型这几年被吹得神乎其神。给一段画面,模型续出接下来几帧,看着像真的,大家就觉得“模型学会了物理”。但你再多问一句:它能持续演化吗?能在一个场景里维持因果链吗?能从一段推演里把“规则”拆出来吗?——基本不能。它生成的是结果,不是机制。这个区别就是这篇论文的承重墙。光看像素,你没法把“台球撞击后的运动”和“反弹规则”分开——模型输出的每一帧都是个孤立的结果。

作者提的解决方案粗暴到让我一开始有点哭笑不得,后来才反应过来这是对的:让语言模型去当世界大脑,负责推演事件后果、维护世界状态、生成可执行代码;让视频模型退回到它擅长的事——你给我约束,我给你渲染高保真画面。世界是代码,画面是渲染。这堵墙被作者一刀切开了。

我盯着这个框架图看了半小时才反应过来它在干嘛。以往做世界模型的人,总想让一个模型把“世界是什么样的”和“世界怎么变的”全学会。结果就是两件事都学不明白。生成几十帧还行,一拉长就崩,因为没有持续状态。Code World Model 的思路完全不同:世界演化和视觉呈现根本是两件事,必须拆开。世界演化交给语言模型加代码,视觉呈现交给视频模型加条件输入。中间用一个叫 proxy representation 的东西把两边接上。

编码智能体这块。这个智能体就是个大语言模型,被塞进“世界大脑”的角色里。它的任务很具体:接收当前世界状态,推理接下来会发生什么,然后生成一段可执行代码来维护持久的世界状态。注意“持久”这个词——这是视频模型做不到的事。视频模型是前馈的,给它输入,它出图,它没有地方放变量,没有地方维护“这个杯子已经碎了”这个事实超过当前帧。代码天然有变量、有状态、有规则。让 LLM 生成代码来维护世界状态,等于给它装了内存和规则引擎,比让网络自己从像素里“学出”状态强几个数量级。

再往下,代理表示这一段是整个框架真正巧妙的地方。LLM 生成了可执行代码之后,你没法直接把它塞给视频模型去渲染。视频模型吃的是张量,不是代码。proxy representation 必不可少:它把代码里的状态——哪些物体在什么位置、以什么速度运动、什么约束必须满足——编码成逐帧的时空条件。可以理解成一份逐帧的规格说明书,每一帧都写清楚“此时这个世界里什么东西应该在哪儿、怎么动”。这个代理表示再被编译成一种代理视频,作为条件输入喂给视频模型。视频模型拿到的是“哦,这个时刻这个物体往这个方向以这个速度运动,场景里还有这些结构约束”,剩下的视觉细节由它去填。

把数据流拉直了看,骨架是这样的:

世界状态
   │
   ▼
语言模型(世界大脑)
   │  推理事件后果,生成可执行代码
   ▼
代码世界状态(可持久、可查询、含规则)
   │
   ▼
proxy representation(编码逐帧时空约束)
   │
   ▼
proxy video(作为条件输入)
   │
   ▼
视频模型(渲染高保真视觉观测)
   │
   ▼
下一时刻的世界状态
   │
   └──────────────► 回到世界大脑,循环

这条环路的关键一目了然:代码在每一轮循环里被更新,状态持续存在,不是每一帧重新算。视频模型的输入不是“猜猜下一帧该长啥”,而是“给你指定好了这一步的时空约束,你把细节给我填上”。一个管“该发生什么”,一个管“看起来怎么样”。语言模型当导演兼编剧,视频模型当摄影师。

视频世界模型的训练目标是“预测下一帧”,所以它学到的是像素级的变化模式,不是抽象规则。你让它预测十步之后的画面,误差会像滚雪球一样放大,因为底下没有一个可执行的真相撑着,只有一帧一帧的视觉猜测。Code World Model 不一样:世界状态是代码,代码每一步的执行是确定性的,规则是明确的。哪怕视觉渲染有误差,下一轮的世界状态还是基于代码更新,不会像像素累积误差那样漂出去。

跑是能跑的。作者搞了个数据流水线,从游戏画面和真实世界视频里提取出对齐的“代理—观测”数据对,在成对游戏数据上微调了 MiniMax-H3。论文里报告的结果是,在简单交互世界里,模型能遵循编码智能体构建的代理时空规格,同时保留视觉细节和动态。我看完实验部分说实话没太兴奋。不是结果不行,是这个结果离“世界模型”这个名头还差得远。作者自己在摘要里也说了“展示潜力”“为开放式世界模型提供一条新路径”——翻译过来就是“别期望太高,这是方向起点”。简单交互世界和真实开放式演化之间,隔了多少个数量级的复杂度,做过 agent 的人心里有数。

我得诚实地补一刀。作者没把 agent 生成代码的标准、以及 proxy representation 怎么把复杂世界约束编码成视频模型能吃的条件完全展开。这里的关键难点在于:代码可以表达任意逻辑,但视频模型能接受的条件空间有限,两者之间有持续被拉紧的张力。简单游戏场景里能对得齐,换到真实世界那种物体数量、遮挡、光照、材质全都爆炸组合的环境里,这个代理表示能不能扛住,不知道。这不是作者的问题,是这个方向本身的硬骨头。我拆到这里只能说:后面那半墙还很硬。

落到工程上,这篇论文给的东西其实很具体。如果你是做 agent 的,这个思路最直接的价值是:模型要有可查询的世界状态。别再用一长串对话历史去让模型自己回忆“我刚才做了什么”,那是所有 agent 系统里最脆弱的一环。代码状态用起来就像数据库,每一步可审计、可回溯、可打断。视频模型只管渲染,工程解耦变得清晰——你可以在不同的视觉模块之间切换,规则引擎保持稳定。

这跟 RAG 的思路有一种对称性。RAG 解决的是“知识放不进模型”,这个框架解决的是“状态放不进模型”。两条路线都选择外部化:把模型不擅长持久维护的东西从神经网络里拿出来,放到结构化的载体上。代码在这里扮演的是世界状态的数据库,语言模型负责写事务,视频模型负责输出报告。这个比方落到这儿就为止,别较真代码格式。

原文有 14MB,实验细节比摘要那些漂亮话实在得多。如果你读完还想往下走,我建议先把数据流水线那段仔细看一遍。视频世界模型这条线不是要消失了,而是角色得重新定义。这篇论文最值得记住的就一句:别让视频模型既当规则引擎又当渲染器。剩下代码和视觉之间那个 gap,得你自己走。

破壁人
破壁人

把高冷论文拆成中文开发者能懂的:核心 idea、公式推导、示意图、工程联系。

查看主页 →