微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 上交大、港大等七所顶尖高校联手,用"说话"来控制游戏世界,这个AI系统让虚拟角色真正听懂了你的命令

上交大、港大等七所顶尖高校联手,用"说话"来控制游戏世界,这个AI系统让虚拟角色真正听懂了你的命令

2026-05-25 13:32
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-05-25 13:32 科技行者

这项由上海交通大学、香港大学、中国科学技术大学、中国科学院大学、新加坡国立大学、滑铁卢大学、香港科技大学等多所顶尖高校及NVIDIA研究院共同完成的研究,于2026年5月以预印本形式发布在论文库arXiv上,编号为arXiv:2605.18601。这项研究的成果被命名为Incantation(意为"咒语"),恰如其名——它让人们真正能用语言"施法",直接操控虚拟世界里的角色行动。

**游戏世界的隐形枷锁**

假设你是一位游戏设计师,你的工作室正在开发一款有着成千上万个角色、每个角色都有独特动作技能的大型游戏。传统方式下,你必须为每一个角色手动编写一套专属的"动作密码本"——编号001对应"普通攻击",编号002对应"翻滚闪避"……每新增一个角色,就得从头建一套全新的密码本。更糟糕的是,这些密码本之间互不相通。你不可能让用A角色密码本里的技能,直接套用到B角色身上——因为那套编号在B角色的世界里根本没有对应的动作。

这个看似合理的设计,其实是现代游戏AI世界模型(可以理解为"能生成游戏画面的AI大脑")长期以来的核心困境。这些AI系统虽然能生成令人叹为观止的画面,但它们控制角色的方式极为僵硬:要么通过"动画编号"(就像上面说的密码本),要么通过键盘鼠标按键,要么通过对整个场景的笼统描述。这三种方式都有致命缺陷。动画编号被死死绑定在特定角色身上,无法跨角色复用;键盘鼠标输入只能控制一个角色,没法同时精确指挥多个角色各自做不同的事;场景描述则太过模糊,说"角色在战斗",AI根本分不清是哪个角色在做什么具体动作。

更麻烦的是,现实中最吸引人的游戏场景往往是多个角色同台竞技的局面——比如RPG游戏中玩家与Boss的对决,或者格斗游戏里两名角色你来我往的缠斗。在这类场景下,现有的AI系统几乎全军覆没:大多数系统只能控制一个角色,其余角色要么是被动的木偶,要么根本不在控制范围内。即便有少数系统尝试处理多角色场景,也要么放弃共同视角(各角色用各自的第一人称摄像头),要么只能控制其中一方,另一方的行为完全不可干预。

Incantation的研究团队认为,这一切麻烦的根源不在于AI模型本身不够强大,而在于"动作接口"的设计从一开始就走错了路。既然如此,为什么不直接用人类最自然的语言来传递指令呢?

**"说话"就能控制角色:Incantation的核心理念**

Incantation的核心思想其实并不复杂:把每一帧画面里每一个角色要做的动作,都用一句自然的中文或英文描述出来,然后让AI根据这些描述来生成对应的画面。

以游戏《艾尔登法环》为例,传统系统可能会说"角色执行动画编号047",而Incantation则直接说"玩家向前翻滚闪避;Boss玛格尼特挥出光刃斩击"。这两者的区别,就好比一个是在用摩斯密码传电报,另一个是直接打了个电话——信息量和自然程度完全不在同一个层级。

这种语言化的控制方式天然具备两个关键能力,是任何"密码本"方式都无法实现的。第一个能力叫做"跨角色语义迁移"——因为语言本身是跨越具体角色存在的,"光刃斩击"这个词汇同时对玛格尼特和坩埚骑士都有意义,哪怕其中一个角色在训练数据里从来没有执行过这个动作,AI也能理解这个指令并尝试合理地生成对应画面。第二个能力叫做"词汇表之外的表达"——语言是开放的,你可以说"双光刃投掷",也可以说"光刃抛射",只是换了个说法,AI依然能理解你的意图;而密码本里没有编号,AI就真的什么都做不了,连尝试的机会都没有。

整个系统的提示词格式非常直觉化。双角色控制时,输入看起来就像是一条对话记录:"玩家执行[动作A]。Boss执行[动作B]。"每隔0.25秒(也就是每一个"潜在帧")更新一次这对指令,AI就会据此生成对应的下一帧画面。这个结构天然可以扩展——想控制三个角色?直接加一行"角色C执行[动作C]"就行,不需要对AI模型做任何修改。

**两阶段训练:从"理解语言"到"实时生成"**

理解了Incantation要做什么之后,自然要问:它怎么做到的?整个系统的训练分两个阶段,可以用"先学扎实基本功,再练闪电出手速度"来理解。

第一阶段的目标,是让AI真正理解"每一帧的语言指令"并据此生成对应的画面内容。这里有一个非常精妙的注意力机制设计,理解它需要先搞清楚AI在生成每一帧新画面时都在"看"什么:它既要参考历史上已经生成好的那些帧(这些是清晰的、已确定的),也要专注于当前正在生成的这一帧(这一帧还处于"模糊的草稿状态",正在被AI逐步精细化)。

一个自然而然的想法是:让语言指令对所有帧都可见,这样AI在修改历史帧记忆的同时也能感受到指令的影响。然而研究团队发现这会带来严重问题——当前帧的动作指令如果能"回溯影响"历史帧的表示,那些已经确定好的历史记忆就会被污染,产生奇怪的"动作回声"效果,让历史画面莫名其妙地出现本不属于它的动作痕迹。

于是研究团队设计了一种"解耦的文字交叉注意力机制":历史帧之间用双向注意力互相参考(保留了基础模型Wan 2.2在预训练时积累的丰富时空先验知识),而当前帧的语言指令则只与当前这一帧进行交叉注意力计算,完全不触碰历史帧。这就像一个厨师的工作台设计:已经做好的菜放在封好的保温盒里不受干扰,只有正在烹饪的这道菜才能根据客人临时提出的口味要求来调整,两者井水不犯河水。

实验证明,这个设计是正确的。研究团队还做了一个对照实验:当他们把"历史帧用双向注意力"改成"历史帧也用单向因果注意力",同时让语言指令对所有帧都可见时,训练过程直接崩溃——FVD(一种衡量视频质量的指标,数字越小越好,可以理解为"视频和真实游戏画面的相似度得分")在整个训练过程中始终居高不下,超过1100分,而其他正常配置都能收敛到200分左右。这组数据直接印证了"语言指令污染历史记忆"的危害有多严重。

**跨越时间的位置感知:防止AI"迷失方向"**

训练的第一阶段还解决了另一个看似技术细节、实则决定成败的问题:AI在处理视频流时如何记住"自己现在在哪里"。

AI模型在处理序列数据时,通常会用一种叫做"旋转位置编码"(RoPE)的技术来感知每个元素的相对位置——可以理解为给每一帧画面贴上一个"时间戳标签",让AI知道这帧画面是在序列的第几个位置。问题在于:如果按照绝对时间顺序给标签,视频越来越长,标签数字就越来越大,最终超出了AI在训练时见过的范围,AI就会"迷失方向",不知道该怎么处理这种前所未见的时间位置,生成质量因此急剧下降。

Incantation的解决方案是给位置编码设置一个"天花板"——无论视频已经生成了多长,最近几帧的相对位置编号都被压缩在一个固定的小范围内(比如最多到16),而"锚帧"(每个片段的第一帧,用于固定场景和角色外观)则永远被标记为0号。这样不管视频生成到第几百帧,AI看到的位置信息都和训练时见过的一样,永远不会"迷失"。这个设计是后续实现长时间稳定生成的基础。

**从"每帧50步"到"每帧2步":速度革命**

训练第一阶段结束后得到的AI,虽然理解力出色,但速度奇慢:生成每一帧画面需要执行50次去噪步骤,整个系统每生成一帧要花上超过12秒——这显然不可能用于实时交互游戏。第二阶段的任务,就是在不损失太多质量的前提下,把这个速度提升几十倍。

加速分两步走。第一步叫做"ODE初始化":第一阶段的模型在处理历史帧时用的是双向注意力,而实时流式生成要求每一帧只能"往后看"(因为未来的帧还没生成)、不能"往前看",这叫"因果注意力"。两种注意力机制直接切换会导致质量大幅下降,所以研究团队先用一个专门设计的"速度场匹配目标",让一个新的"学生模型"在保持因果注意力的同时,尽可能地模仿"老师模型"双向注意力下的生成方式。这一步只需要1000步训练就能有效弥合两种注意力机制之间的差距。

第二步叫做"自强迫蒸馏"(Self-Forcing Distillation):经过第一步初始化之后的学生模型,继续接受更激进的加速训练。这种训练方法的精髓在于,学生模型在训练时不再依赖"真实的历史帧"作为参考,而是用"自己之前生成的帧"作为输入继续生成下一帧。这样,模型从一开始就学会了如何应对自己可能犯的错误,不会在实际使用时因为"看到了自己的不完美输出"而产生误差累积。经过这两步,最终的学生模型只需要2次去噪步骤就能生成每一帧,速度提升了整整74倍(针对《艾尔登法环》的数据)。

与此同时,研究团队还解决了实时流式生成时的内存管理问题。随着视频越来越长,缓存的历史帧越来越多,内存迟早会被耗尽。他们设计了一个"滑动KV缓存窗口":只保留最近7帧的历史信息和第一帧(作为锚点),超出范围的历史帧会被"驱逐"出缓存。驱逐时还有一个细节:如果把带有位置旋转信息的键值向量直接缓存起来,那么当帧的相对位置因为驱逐而发生变化时,缓存里的位置信息就会对不上号,导致画面出现闪烁。解决方案是缓存"旋转之前"的原始键向量,每次使用时再根据当前最新的相对位置重新计算旋转——就像把每张照片上的日期擦掉重写,而不是保留过时的旧日期。

**用真实游戏数据验证:两个截然不同的世界**

为了验证Incantation的设计,研究团队构建了一个跨越两个"截然不同的游戏世界"的数据集,总时长超过128小时。一个是《艾尔登法环》——三维写实风格的动作RPG,玩家与Boss(玛格尼特和坩埚骑士)进行激烈的近战对决。另一个是《拳皇》(King of Fighters,简称KOF)——二维像素风格的格斗游戏,两名战士在固定场景下对打。这两款游戏在视觉风格上几乎毫无共同点:一个追求电影级的真实感,另一个是复古的卡通像素画面。把这两款游戏都纳入测试,正是为了验证Incantation的方法是否真的具备"跨世界泛化"能力,而不是只对特定视觉风格有效。

数据标注方面,研究团队采用了一种极为精准的方式:直接从游戏引擎的内存中读取每一帧的动作状态。这相当于直接从后台数据库里获取信息,完全没有标注误差,精度是帧级别的(每帧对应0.25秒游戏时间)。这种方式只有在游戏这种"有完整内部状态可读取"的场景下才能实现,这也是研究团队选择游戏作为测试平台的核心原因之一。

值得一提的是《艾尔登法环》的动作词汇量并不小。玩家方面有13种动作,包括各方向移动、翻滚、两种剑技、死亡和处决动画。Boss方面,玛格尼特原生拥有30种动作(包括跳跃空中击地、尾部横扫、光刃斩击、工作人员猛砸等),坩埚骑士则额外贡献了17种不重叠的动作,合并后的联合词汇表共47种Boss动作。这47种动作里,有些是两位Boss各自独有的,有些是共有的——这为跨角色测试提供了丰富的测试用例。

**三轴实验:用严格对照揭示语言接口的真正优势**

为了公平地评估"用自然语言控制"究竟比"用动作编号控制"好在哪里,研究团队设计了一组极为严格的对照实验。对照组(Action-Index基线)采用完全相同的AI架构,只把语言输入替换成"每种动作对应一个独热编码向量"(可以理解为:一个长度为47的数组,当前动作对应的位置填1,其余填0)。两个系统除了这一点不同,其他所有超参数、训练数据、训练步骤都完全相同。更重要的是,研究团队把两个Boss的动作合并成了一个联合词汇表,让Action-Index也能"看到"所有47种动作编号,技术上讲玛格尼特的"光刃斩击"编号也可以被注入到坩埚骑士的控制输入里——这样的设置对Action-Index是"最有利的",消除了任何因为"压根没见过这个编号"而失败的可能。

第一轴:在训练数据中出现过的动作上,两者表现如何?结果是语言版本以95%的平均动作控制准确率(ACA,由三位独立人工标注员盲评生成视频,给出0-2分的评分,1分及以上算正确)对比Action-Index版本的89%,相差6个百分点。这一步的目的是排除"语言版本只是模型容量更大所以更好"的可能性——两者在常规情况下表现相当,说明后续差距真的来自接口设计本身,而不是模型强弱。

第二轴:如果要求一个角色执行另一个角色专属的动作,会发生什么?这才是真正考验两个系统的时刻。研究团队测试了5对跨角色动作组合,每对测试20次,结果语言版本平均ACA达到89%,而Action-Index版本只有43%,相差整整46个百分点。这背后的机制值得细细分析。

研究团队把这5对测试用例按"难度"分成了三层。第一层是最难的:坩埚骑士的"坩埚之尾"(一种散发着神秘光能的尾部横扫)完全不存在于玛格尼特的动作库里,没有任何可以回退的"近似动作"。Action-Index在这里只有15%的成功率,而且全都是"部分完成"(0分和2分的完全没有,只有1分),说明动作编号里残留的视觉信息偶尔能激活一点光刃相关的内容,但根本无法形成完整的"坩埚之尾"效果。语言版本则达到了90%,因为"坩埚之尾"这个词汇里的"尾""能量""发光"等概念在语言模型的预训练中都有语义关联,哪怕从没见过玛格尼特做这个动作的画面,AI也能合理地想象出来。

第二层是中等难度:两个角色都有尾部横扫动作,但视觉风格截然不同——坩埚骑士的版本有发光能量拖尾,玛格尼特的版本则是暗色厚重的物理打击。Action-Index可以借助"共有的尾扫运动模式"勉强做到60%的成功率,但它无法编码"发光"这个视觉特性,因为那是坩埚骑士专属动画里的视觉元素,不在任何词汇编号的能力范围内。语言版本达到了90%。

第三层是理论上对Action-Index最有利的:两个角色都有叫做"斜劈""重型俯砍""水平横斩"的动作,编号可以直接类比。然而实验结果让人意外:Action-Index在这三个案例上的成功率分别是25%、75%和40%,差异极大。原因在于,即便动作名称相同,两个角色的具体动画在时序、幅度和运镜上可能差异很大——"水平横斩"对玛格尼特来说是快速横扫,对坩埚骑士来说是缓慢的弧形挥击,动画对应关系几乎是错的。语言版本在这三个案例上全都保持在80%以上,因为语言描述的是动作的语义而非具体哪套动画。

第三轴:如果输入的指令根本不在训练词汇表里会怎样?语言版本和Action-Index版本之间的差距在这里变成了彻底的"有"与"无"之别。研究团队构造了4个略微改变的指令,比如把"双光刃投掷"改成"双刃光束投掷",把"头盾格挡"改成"头盾防守"。这些词汇里没有一个精确对应到训练词汇表里的某个编号,所以Action-Index系统在面对这4个指令时ACA是精确的0%——它根本没有对应的输入槽,无从处理,就像密码本里没有这个编号,整个系统陷入无语的沉默。语言版本则凭借语言的组合泛化能力,在这4个探针测试中达到了90%的平均成功率。

**实时流式运行:连续两小时不崩溃**

速度测试的结果令人满意。在单张H100显卡上,经过2步蒸馏的学生模型生成每帧的时间约为163毫秒(包含解码等完整流程),有效帧率达到19.7帧每秒,完全满足实时交互的最低要求。相比之下,未经加速的"老师模型"需要12058毫秒才能生成一帧,慢了整整74倍。

更重要的是长时间稳定性。研究团队让系统连续不间断运行了最长118分钟的会话,并用FVD指标追踪视频质量的变化。结果显示,从第30分钟到第118分钟,FVD值始终在162到171之间波动,均值166,标准差只有2.3,完全看不出任何随时间推移而退化的趋势。考虑到模型的训练上下文只有1.75秒,能维持两小时的稳定生成,这背后正是位置编码"天花板设计"和滑动KV缓存共同发挥的作用。

《拳皇》的测试则验证了Incantation的"跨世界泛化"能力。研究团队在完全相同的架构和超参数下,只把动作词汇表换成《拳皇》的角色动作,就得到了在《拳皇》上同样优秀的表现:老师模型ACA 94.9%,2步学生模型ACA 94.0%,FVD从170.1略微改善到162.9,生成速度同样达到19.7帧每秒。两个游戏世界在视觉上天差地别,但同一套方法在两者上都奏效——这恰好说明Incantation学到的是"如何用语言控制视频生成"这件事本身,而不是某个特定游戏的画风规律。

**让角色"记住"整场战斗:Observer-Tracker-Policy扩展**

Incantation的核心架构虽然能精确控制每0.25秒的角色动作,但它有一个内在的局限:它只能"记住"最近约1.75秒的画面历史。一场游戏战斗往往要持续好几分钟,甚至更长,在这个时间尺度上,有些重要状态需要被持续追踪——最典型的就是角色的血量。

这个问题有一个有趣的地方:AI模型在训练数据中见过大量的角色受伤和死亡动画,它能非常逼真地渲染出"被击中时的硬直"和"濒死挣扎",但它无法自发地触发"累计受伤超过阈值后死亡"这个状态转变,因为这需要跨越好几分钟的信息积累,远超它1.75秒的记忆窗口。

研究团队为此设计了一套附加模块,由三个角色分工合作:第一个叫"观察者"(Observer),它用一个经过微调的视觉语言模型(Qwen3-VL-2B-Instruct)持续扫描AI生成的视频流,判断每0.25秒内是否发生了"受到伤害"事件,同时分别追踪玩家和Boss两个角色;第二个叫"追踪器"(Tracker),它是一个超级简单的外部状态机,只做一件事:把观察者报告的每次受伤事件累加到对应角色的HP计数器里;第三个叫"策略器"(Policy),当追踪器的HP计数器降到某个阈值时,策略器就向AI注入新的语言指令,触发"濒死""处决""死亡"等对应阶段的动作提示。

这三个模块组合起来,就像在AI的短暂记忆窗口外面套了一个"万年账本":AI看的是当下这1.75秒,账本记的是从战斗开始到现在的所有积累。观察者的检测准确率相当高:在真实游戏画面测试集上,对Boss的"受伤"事件F1分数达到95.77%,对玩家的"受伤"事件F1分数达到96.44%;在AI生成的视频上(这才是实际运行时的场景),数字略有下降但仍保持在90%左右。

这个扩展模块的设计是模块化且通用的:核心AI模型一行代码不用改,只需要根据不同游戏重新定义"观察者要检测什么事件"、"追踪器要维护什么状态"、"策略器要在什么条件下触发什么提示"。当然,研究团队也坦诚地指出,这套模块目前还是针对格斗游戏手工设计的,如何学习一个完全通用的版本是未来的研究方向。

**局限性与未来方向**

Incantation的研究团队在论文中相当坦诚地列举了几个未来需要解决的问题。

首先,目前的训练数据标注方式依赖从游戏引擎内存直接读取动作状态,这只有在能够"入侵"游戏内存的情况下才可行。对于普通的现实世界视频或闭源商业游戏,就需要用视觉语言模型来自动标注每一帧的角色动作——这在技术上是可行的,但标注质量和成本都是挑战。研究团队强调这是"数据侧的问题"而非"接口设计的根本限制",未来可以通过自动标注工具解决。

其次,语言接口的表达能力最终受限于文本编码器的能力边界——如果描述的是文本编码器从未接触过的全新概念,泛化效果就会大打折扣。另外,语言描述的是语义动作("翻滚""斩击"),不太适合表达需要精确数值的连续控制指令,比如摄像机的具体旋转角度或机器人关节的精确力度。不过研究团队指出,这并不需要放弃语言接口,而是可以在保留语言作为"高层语义控制"的同时,额外增加一个并行的连续数值控制通道。

此外,在严格单角色的场景下,用自然语言来描述动作其实和用动作编号没有本质区别,语言接口在这种场景下并没有特别的优势。语言接口真正发挥价值的场景,是需要同时控制多个角色、或者需要在不同实体间迁移动作概念的情况。

归根结底,Incantation这项研究真正有意义的地方不只是"游戏AI更好玩了"这么简单。它揭示了一个更深层的道理:当我们想让AI控制系统变得更灵活、更具泛化能力时,与其在"编号密码本"上做加法,不如直接转向人类语言这个天然的开放词汇系统。语言里蕴含的组合性和跨领域语义,是任何封闭编号系统都无法复制的。这一思路在游戏AI里得到了验证,未来很可能在机器人控制、虚拟现实交互、影视制作辅助等需要精细控制多个元素的场景中找到更多用武之地。有兴趣深入了解技术细节的读者,可以通过论文编号arXiv:2605.18601查阅完整原文,代码和数据集也已在GitHub上开放供研究者使用。

Q&A

Q1:Incantation系统是怎么实现跨角色动作迁移的,为什么用动作编号做不到?

A:Incantation用自然语言描述每个角色的动作,语言本身带有跨实体的通用语义,比如"光刃斩击"这几个字对不同角色都有意义。而动作编号是死绑在特定角色专属动画上的,注入到另一个角色的控制流里只能勉强激活相似的运动模式,完全无法复现原角色特有的视觉特征。

Q2:Incantation生成视频的速度够不够实时交互?

A:够。经过两阶段蒸馏训练后,系统只需2步去噪就能生成每帧,配合TAEHV轻量解码器在单张H100显卡上实测达到19.7帧每秒,低于500毫秒每帧的实时预算。更重要的是连续118分钟运行后视频质量没有明显下降。

Q3:Incantation控制多个角色时用的是什么格式的指令?

A:每隔0.25秒更新一次结构化语言提示,格式为"玩家执行某动作。Boss执行某动作",每个角色占一个语法独立的槽位。想控制三个角色直接加一行即可,不需要修改模型结构。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-