文|游戏那点事|零、willow
在今年的科隆游戏展开发者大会(gamescom dev)上,腾讯游戏带来了多场分享,议题涵盖行业发展、AI角色动画和自动化测试等方向。《洛克王国:世界》的战斗AI,则提供了一个已经进入大规模运营的实践样本。
(2026年gamescom期间的腾讯游戏展区)
8月25日,腾讯游戏魔方工作室群Game AI团队负责人刘若尘分享了《洛克王国:世界》战斗AI的训练与部署实践。据他介绍,这套AI系统与游戏同期上线,已累计支撑数十亿场线上对局。
这些对局里的AI,要给新手感受到博弈的乐趣,也要让熟练玩家有机会练习反制。它需要理解复杂阵容,依据对局中已经公开的信息作出判断;数百名NPC还要呈现不同风格,并随新精灵、新技能持续更新。
这套系统采用的是相对常规的强化学习算法:模型在反复对战中,根据行为和结果获得奖励或惩罚,逐步学会怎样决策。若尘在分享中用了大量篇幅讲述具体研发问题:如何避免能量已满却继续聚能的异常行为,如何让AI学会使用不同阵容,以及如何跟上设计团队的节奏,按周交付模型。
以下为游戏那点事整理的分享实录,为提高阅读体验有所调整:
一、不同玩家,需要怎样的PvE对手?
大家好,我是刘若尘,来自腾讯魔方工作室群,负责Game AI团队。今天和大家分享《洛克王国:世界》PvE战斗背后的强化学习AI。
(团队为动作、射击、RPG等不同品类研发AI,共用工具,技术方向包括强化学习、生成式AI和大语言模型)
《洛克王国》最早于2010年以页游形态推出。打开网页就能玩,也让它成为许多中国玩家的童年记忆。
(早期角色宣传图与页游家园界面)
新作《洛克王国:世界》把这个系列扩展为精灵大世界。玩家在世界中探索,收集、培养称为“精灵”的战斗伙伴,再用精灵和技能组成阵容,参与回合制战斗。我们也首次在精灵回合制的NPC战斗中引入了深度强化学习。
(除探索和战斗外,新作还包含多人互动,可在PC和移动端游玩)
我们要覆盖的PvE(玩家与游戏内对手的战斗)场景,大致分为三类。
一类是露天对战,玩家探索世界时会频繁遇到,局面变化很多;一类是晋升考核,几乎每名玩家都会经历,难度曲线要稳定;还有“星光对决”这样的限时玩法,对手使用的阵容更接近玩家对战时的搭配,需要根据局面连续决策。
(露天对战、晋升考核与“星光对决”的场景示例)
玩家对这些战斗的期待也有差异。休闲玩家希望玩得有趣,NPC至少要能回应玩家的策略,让战斗有来有回。对于竞技玩家,PvE也是进入PvP对战前的练习。他们需要通过NPC连贯的反制,练习系别克制、换位时机和资源管理。
过去,我们可以用行为树、状态机和条件判断来规定NPC的动作。这类方案适合目标明确、流程固定的场景。但随着精灵、技能和阵容持续增加,规则很容易固化成一两套被玩家熟悉的套路。每次增加新内容,开发者还要回头调整大量规则,维护成本也随之上升。
(团队从策略生成、战斗记忆、全局判断、风格扩展和维护成本等维度比较两条技术路线)
我们因此为项目定制了一套强化学习方案,希望决策模型能结合战斗历史考虑连续多步行为,同时适应不断加入的新内容。
这套方案需要解决四类问题。
首先是阵容规模。数百种精灵、上千种技能可以搭配出数量庞大的组合,逐一穷举并不现实。
其次是信息不完全。对手尚未出场的后备精灵、没有使用过的技能,都可能改变局势,AI需要根据已经公开的信息作判断。
第三是怎样评价一场战斗。除了胜负,还要看资源交换、系别克制、特殊机制的处理,以及行为是否自然。
第四是没有“反应时间”这个抓手。动作或射击游戏可以通过调整AI的反应速度改变体验感受。回合制战斗给双方都留出了决策时间,感受的调节就更多地取决于策略本身。
(回合制战斗的主要技术挑战)
我们把研发工作分为状态表示、网络结构、奖励设计、训练数据与调度,以及日常训练和线上部署五个环节。
(从模型输入到线上部署的整体方案)
二、模型能看见什么,又能从中学到什么?
先看一场战斗包含哪些信息:回合数、天气和进度位于最上层,下面是双方阵容中的精灵,每只精灵又有自己的属性、技能、增益和效果。整套数据可能嵌套四五层,各层的对象数量还会变化。
如果把各层都补成固定长度,再将所有信息拼接在一起,会占用大量空间,“哪个技能属于哪只精灵、哪个效果属于哪个技能”的关系也不容易保留。
我们的做法是逐层编码。先把技能整理成固定长度的特征,再汇入精灵层;精灵特征汇入阵容层,最后形成整场战斗的状态。同一层的对象共用编码方法,空位则单独标记,让模型在计算时忽略这些位置。
(效果、增益、技能、精灵和阵容逐层汇入全局状态)
技能还有一个持续更新的问题:模型要怎样理解刚加入游戏的新技能?
我们为技能同时保留具体ID和语义类别。具体ID用来区分每一个技能;语义类别把作用相近的技能归到一起,让模型面对新技能时,能先参考已经学过的同类技能。
这些类别通过一条独立流程生成。大语言模型先读取技能的结构化属性,将它们整理成格式统一的文字描述;文本嵌入模型把描述转成一组数值,用来表示技能的含义;再通过聚类,将含义相近的技能分到同一类别。新技能走完这条流程,模型就能参考已有类别,对它的作用形成初步判断,无需每次都重做输入结构。
大语言模型在对局外完成这项工作。正式战斗中的出招,仍由强化学习策略网络决定。
(以“当头棒喝”为例,技能经过描述生成、文本嵌入模型编码和聚类后获得语义类别)
模型还需要遵守战斗中的信息边界。对手的后备精灵没有出场,就保持隐藏;精灵即使已经出场,尚未使用过的技能也不会提前向AI公开。我们对精灵和技能分别做动态信息屏蔽,让线上出招使用的信息与玩家的可见范围一致。
训练时,我们会用到两类网络。策略网络负责选择动作,始终只接收玩家可见的信息;价值网络负责评估局面,可以在训练阶段读取完整状态,为学习提供更稳定的判断依据。这种安排称为“集中训练、分散执行”(CTDE)。上线后,只运行遵守可见边界的策略网络。
(左侧为动态信息屏蔽,右侧为集中训练、分散执行的结构)
隐藏信息无法直接读取,已经发生的动作却能提供线索。玩家会记得对手常用什么技能起手,哪只精灵在低生命值时被换下,谁可能被留作后手。模型同样需要利用这些历史。
我们把它们分成两条序列:技能操作序列记录每回合的技能使用,捕捉短期意图、连招和效果叠加;精灵出场与换位序列则记录更长时间里的阵容安排。技能序列先完成编码,再与出场序列融合,最后并入当前局面。
(下方两张战报界面分别展示技能记录与精灵出场记录)
这样,模型既有当前战斗状态,也保留了前面回合的公开线索,可以据此判断对手接下来可能怎样行动。
(完整网络结构:状态与历史信息完成编码后,分别用于动作选择和训练时的价值评估)
三、用奖励约束行为,让NPC打出不同风格
我们使用PPO(近端策略优化)算法训练模型,让它从换位、施放技能、聚能等规则允许的动作中作选择。训练时,模型之间反复对战,也就是进行自我博弈;一次任务会运行数千万场对局。
具体到《洛克王国:世界》,大量工作都花在了怎样定义“打得好”上。
胜负要到战斗结束才能确定,伤害、资源交换和系别克制则在过程中不断发生。这些目标的反馈时间和数值范围不同,也各有波动,混在一个评估结果里,会给训练带来干扰。
我们采用多头价值网络,在共享特征之上分出不同的评估分支:一个分支专门预测最终胜负,其他分支分别负责不同的过程目标。各类奖励由此有了各自的评估基准,便于稳定训练;需要增减目标时,主要调整配置即可。
(各分支分别评估胜负、伤害效率、系别克制、技能质量、生命值增减和行为惩罚)
具体奖励也随之拆开。胜负、超时、双方精灵的生命值差和资源差属于基础奖励;时机合适的换位、有效使用技能和利用系别克制,会得到额外奖励。
我们还要单独处理一些异常行为。AI可能赢下一场战斗,却在过程中反复无意义换位,甚至在能量已经蓄满时继续聚能。这些动作未必立刻导致失败,玩家看着却会觉得对手不合常理。
我们把它们称为“immersion bugs”,也就是会破坏战斗沉浸感的异常行为。训练时,无意义换位、满能量聚能、换上生命值过低的精灵等行为都要受到惩罚,促使模型在追求胜利的同时,打出正常的战斗过程。
(不同奖励的训练曲线可以分开观察,便于检查具体行为的学习情况)
不同的奖励配置,还能改变NPC的战斗风格。开放世界里有数百名NPC训练师,如果大家都以同一种节奏出招、换位,体验就会显得机械。
我们复用同一套网络结构,通过不同的奖励配置,训练均衡、进攻、防守等风格的模型。它们在反制、换位、资源使用等指标上会呈现不同特征,无需为每一种风格重新设计底层网络。
(雷达图对照三种风格的胜率、反制与换位次数,以及攻击、防守技能占比)
奖励也要适应具体机制。以天气队为例,天气技能会在多个回合内改变全局环境,影响特定属性技能的威力。如果己方阵容无法从中受益,开启天气就浪费了一个回合;如果用得太晚,剩余时间又不足以发挥效果。
因此,我们为天气设置单独的奖励。阵容能够受益时,奖励会鼓励模型尽早在合适的时机开启天气;随着回合推进,这项奖励逐渐衰减。如果当前阵容无法受益,或时机已经太晚,就应该跳过这个动作。
(左侧曲线记录模型合理施放天气的概率)
共鸣魔法则在常规战斗中增加了新的变量,每种共鸣魔法都需要相应的奖励设计。
当AI使用的阵容带有共鸣魔法时,我们先通过奖励,让它学会每场战斗至少使用一次,再继续寻找合适的施放时机。如果是对手获得了强力增益,模型对资源交换的判断也要随之调整,避免继续按普通状态下的收益来作决策。
(共鸣魔法与战斗风格、细化参数共同组成场景配置,一次训练可覆盖数百个PvE场景)
四、从训练到部署,让AI跟上版本更新
用于训练的阵容,决定了模型会把时间花在哪些战斗上。
如果从所有精灵和技能中完全随机组队,大量计算会耗在正式版本里几乎不会出现的组合上。模型在这些阵容上学到的策略,也未必适用于设计团队准备上线的内容。
我们因此建立了一个混合阵容池,持续纳入最新的PvE设计阵容和早期封闭测试中真实出现过的阵容。训练由这些实际内容起步,再按一定比例对精灵或技能作局部随机替换,扩充能够覆盖的组合。游戏上线后,新阵容也会继续加入。
(训练初期使用的阵容来源)
模型使用不同阵容时,学得快慢并不一样。某些阵容很快就能打出不错的表现,另一些却长期胜率偏低。如果平均分配训练次数,已经熟练的阵容会占用大量计算,落后的阵容却迟迟得不到足够练习。
我们用“遗憾值”调整各套阵容被抽中训练的概率。模型使用某套阵容时的失败率越高,这套阵容的遗憾值就越大,下一阶段获得的训练机会也越多。随着胜率改善,它的采样权重会逐渐回落,计算资源再转向其他需要加强的阵容。
挑选自我博弈对手时,我们也采用同样的方法。当前模型较难战胜的历史版本,会更频繁地被选为对手,让训练持续针对尚未掌握的应对方式。
(图中早期样本里,电系阵容由于低胜率被采样更多;后期各类采样次数逐渐接近)
在训练环境上,我们复用了魔方原有的游戏测试自动化平台。它可以用大量虚拟客户端压测战斗服务器,直接调用正式战斗逻辑,用来并行开展自我博弈,也能让训练与正式产品保持一致。
在此基础上,我们接入内部分布式训练平台,支撑每次任务中数千万场对局的运行。
模型上线时,战斗服务器通过轻量推理工具包(SDK)直接调用模型,计算战斗动作。多个战斗实例共用一份模型和配置,每场对局分别保存自己的历史状态;不变的特征可以提前缓存。模型、配置和NPC参数由配置服务动态更新,更换模型无需重启战斗服务器。
(左侧为分布式训练环境,右侧展示战斗服务器上的推理SDK与动态配置)
前面的状态表示、奖励设计和阵容采样,再加上这套训练与部署方式,使我们可以跟着设计团队按周更新,持续交付多种能够上线的模型。算法本身相对常规,这些围绕具体游戏完成的工作,才让它能够稳定应用于正式版本。
(团队内部对比:本方案的训练池约含10³套阵容,可按周迭代;纯随机方案的可能组合约为10³⁴种,迭代周期为月级)
判断模型在一场战斗中的表现,可以留意它怎样利用系别克制、何时施放共鸣魔法,以及换位节奏是否合理。
(现场展示的《洛克王国:世界》战斗画面)
这套强化学习模型与游戏同期上线,目前已累计支撑数十亿场线上对局,覆盖数百名NPC。
接下来的工作主要有四个方向。
第一是混合专家模型(MoE)。现在,不同风格的模型仍然并行存在。我们希望未来把它们整合进一个模型,根据场景调用相应的“专家”模块,在丰富战斗行为的同时控制模型数量。
第二是平衡性分析。我们正在建立一条从训练策略到阵容搜索的流程,希望在新精灵或新技能上线前预测强度,帮助设计团队更早调整数值。
第三是场景扩展,包括更多的赛季和限时内容,以及未来可能出现的玩家与AI并肩作战的合作场景。在这些场景中,AI还要学会怎样与玩家配合。
第四是进一步轻量化。我们会继续压缩模型,降低推理成本,为未来可能的边缘推理等场景作准备,同时尽量保持战斗行为的质量。
(团队计划继续探索的方向,在玩家设备上运行模型仍属于未来工作)
五、现场问答
问:游戏现在有离线模式吗?模型运行在玩家设备上,还是服务器上?
若尘:目前《洛克王国:世界》是在线游戏,模型运行在战斗服务器上。至于把模型压缩后放到玩家设备上运行,用于可能出现的离线或其他场景,仍是未来的探索方向。
问:线上单次推理大概需要多久?使用什么技术,成本怎样?
若尘:目前单次推理耗时低于1毫秒。我们使用TensorFlow Lite和轻量推理SDK,在战斗服务器的CPU上完成推理,再把结果同步到客户端。


