一句Prompt里,真正写明的信息不到三成

先看一个模拟示例。玩家在乐鱼体育的创作入口输入:“山顶平台上的4v4冰球,没有围栏,冰球掉下山崖对方得1分,先到7分获胜。”这句话读起来很完整,但如果把它当作一份比赛说明书,会发现缺的东西比写的多。

写明的:人数4v4、运动类型冰球、场地在山顶且无围栏、一种特殊得分方式、胜利条件先到7分。

没写的:冰场多大;有没有球门,球门进球算几分;冰球掉下去算谁的责任,是最后触球方的对手得分,还是掉在哪一侧就算哪一侧失分;掉下去以后在哪里重新开球;有没有守门员;有没有比赛时间上限,如果双方一直6比6怎么办;球员会不会也掉下去;冰面摩擦是真实冰球那样还是更“滑”一点。

所以引擎的第一步不是生成,而是把这句话拆成结构化的意图,再把缺失项分成两类:一类可以用运动模板的默认值补上,比如冰球质量、球杆长度;另一类会直接改变玩法,比如“掉下山谁得分”,必须显式问玩家,或者生成两个候选版本让玩家试玩后选。整条链路可以写成:

Prompt规则地图球员物理系统AI赛事自动测试复盘Playable Build

这条链看起来是直线,实际上后面每一环都可能把问题退回前面某一环,关键在于引擎知道该退回哪一环。

为什么规则要排在地图前面

直觉上应该先有场地再有规则,但在生成系统里反过来更稳,因为地图必须服从规则:如果规则里“掉下山崖得分”是主要得分方式,那么场地边缘就是一条“得分线”,它的长度、形状和离球门的距离都直接决定比赛节奏;如果规则里只把掉落当作失误、主要还是靠进门得分,边缘就只是危险区。

大模型在这一步负责起草,把自然语言变成规则草案。但规则草案必须落到规则引擎可以执行的形式:得分事件、触发条件、归属判定、重新开球位置、结束条件、平局处理。比如“冰球掉下山崖对方得1分”,规则引擎需要的是:当冰球坐标低于平台高度且离开平台边界时,触发掉落事件;读取最后一次触球的球员所属队伍;给另一队加1分;在本方半场中点重新开球。

最常见的问题是规则冲突。如果大模型为了“更像冰球”又加上“每节20分钟、共三节”,就和“先到7分获胜”形成两个结束条件,必须写清优先级:先到7分立即结束,三节打完未到7分则比较比分,平局进入加时突进。规则引擎在生成阶段就应该做静态检查:每个比赛状态都至少有一条路径能走到“比赛结束”。

地图不是一张好看的山顶,而是一组可验证的空间约束

规则定下来以后,空间模型才开始工作。它输出的不是一张图,而是一组有坐标、有尺寸、有语义的场景数据:冰面范围、边缘线、两个球门的位置、8个出生点、裁判开球点、镜头可移动区域,以及山崖外侧的掉落判定体。

示例里,假设空间模型生成了一块30米乘15米的椭圆冰面(模拟参数)。几个空间问题马上出现:球门如果放在冰面长轴两端且紧贴边缘,那么每一脚射偏都会直接掉下去送对方1分,射门就成了高风险动作,比赛会变成双方都不敢射门;出生点如果离边缘不到1.5米,开球瞬间的身体碰撞就可能把球员挤下去;山顶的装饰岩石如果带了碰撞体、又刚好在冰面边缘,就会变成一块“护栏”,悄悄改掉“无围栏”的设定。

这些都不是审美问题,而是规则和空间之间的约束。所以空间模型生成的每个物体都要带语义标签:装饰还是碰撞体,可站立区还是掉落区,后面的物理系统和测试Agent都依赖这些标签。

球员生成要同时产出外观、属性和动作能力

“4v4”听起来只是人数,实际要生成的是8个完整的可运行角色。每个角色至少包括三层:外观和动作资源、能力属性、与物理系统对齐的运动参数。

资源生成可以交给3D生成模型,但动作集必须完整:滑行、急停、射门、传球、身体对抗,缺一个动作,Runtime就会在需要时卡住或回退到默认姿态。属性层最容易出问题的是单位。大模型可能写出“速度90、射门力量85”,但物理系统需要的是最大滑行速度多少米每秒、射门初速度上限多少。两边之间需要一张映射表,否则“射门力量85”在这个冰面上可能意味着每一脚都会飞出场地。

示例里还有一个隐含问题:球员会不会掉下去?如果规则没写,默认允许掉落,那就要生成掉落后的重生逻辑;如果默认不允许,就要在边缘给球员加一道不可见的阻挡,但这道阻挡不能挡住冰球。这类细节要由规则、空间、物理、角色四方共同决定。

物理系统决定这项运动到底像不像冰球

公开资料显示,GameNGen能在单个TPU上以约20 FPS实时模拟DOOM,Genie 3可以从文本生成24 FPS、720p的可导航世界,但官方同时列出了动作空间有限、多智能体交互弱、一致性只能维持数分钟等局限。这类世界模型适合做玩法构思和原型探索,据其发布说明,微软的Muse也把自己定位为“玩法构思”工具。一场需要精确判定掉落、比分和胜负的体育比赛,仍然需要确定性的物理系统在底下跑。

物理系统要回答的问题都很具体:冰面摩擦多大,冰球被击出后滑多远才停;越过边缘的那一帧如何判定;两名球员高速相撞各被推出多远。

示例里,假设第一版把冰面摩擦设得太低(模拟参数),冰球被正常传球后能滑过整个30米冰面。结果是任何一次没接住的传球都会掉下去,比赛变成比谁失误少。这不是大模型“再写一次规则”能解决的,需要调物理参数,再由测试验证。所以物理参数应该从运动模板和可调范围中取值,大模型只能在范围内提出建议,而不是直接写一个数字进去。

AI要从规则里重新推导战术,而不是套用普通冰球

AI对手在这里有两个身份。第一个身份是比赛里的对手和队友:3名场上队员加1名守门员(示例假设),需要跑位、传球、射门、防守。第二个身份是测试员,后面会讲。

照搬普通冰球战术会出错。普通冰球AI敢在进攻区大力射门,因为射偏了只是撞围栏弹回;在山顶版本里,射偏就是送对方1分。一个合格的对手AI需要从规则引擎读到“边缘掉落等于失分”这条信息,并在决策中加入位置风险:离边缘越近,射门和长传的期望收益越低;防守时则可以反过来,把持球者往边缘方向挤压,逼他在危险区处理球。

这种战术调整来自对规则的理解和决策的变化,而不是给AI偷偷加速度或提高命中率。前者玩家可以看懂、可以反制;后者只会让玩家觉得被针对。这一层如何根据玩家水平改变策略,可以参考乐鱼体育关于体育游戏智能对手的专题。

赛事层:一场比赛之外,还有开局、重置和结束

很多生成系统能生成“一个场景里有人在动”,但缺的是Game Loop:开球、比赛进行、得分、重置、再开球、达到结束条件、结算、返回菜单或进入下一场。任何一个状态没有出口,玩家就会卡在里面。

示例里,赛事层还要决定掉落得分后冻结几秒、重新开球时球员是否回到出生点;如果玩家要的是4支队伍的小型杯赛,还要生成对阵表和同分排名规则。这一层同时负责把每次触球、射门、掉落、得分写成带时间戳的事件日志,后面的测试和复盘都读这份日志,而不是读画面。

自动测试:先让Agent替玩家打两百场

到这里引擎有了一个“能跑”的版本,但能跑不等于能玩。下一步让测试Agent用和玩家相同的输入接口进去打,每场结束后把事件日志交给检测器。

一次模拟测试的结果可能是这样的(以下数字均为模拟示例):200场比赛中,有14场开球后3秒内就发生掉落,原因是左侧出生点离边缘太近;全部得分中约六成来自对手失误掉落,进门得分很少,说明射门风险过高;有3场比赛超过40分钟没有结束,因为双方AI都学会了在中圈来回传球不进攻;另有一处装饰岩石让冰球卡住不动,比赛时间继续走,但没有任何人能碰到球。

每一个问题都要被定位回具体环节:出生点问题退回地图;射门风险退回物理摩擦和球门位置;拖延问题退回规则,比如加入“持球超过10秒未过中线判违例”;卡球问题退回空间模型的碰撞标签。修改以后,只重测受影响的部分,再做一轮完整回归。这个闭环怎样设计,可以看自动游戏测试那篇的详细拆解。行业里也有同样的提醒:2026年的GBQA基准中,表现最好的模型也只找出了约48%的已验证bug,所以测试Agent是第一道筛网,不是最后一道。

复盘既给玩家看,也给引擎自己看

比赛打完,事件日志被整理成复盘。对玩家,复盘指出:第二节那次被逼到右侧边缘时,他选择了回传而不是横移,结果传球被断后直接滑下山崖,这是比分从5比5变成5比6的转折点。对引擎,复盘指出:右侧边缘弧线最短,这里的逼抢次数是左侧的两倍(模拟示例),场地形状可能要调整。

同一份数据,两种用途:玩家的复盘影响下一场AI的战术,引擎的复盘影响下一版的地图和规则。

各环节交出去的东西,必须能被下一环读懂

把过程压缩成一张表:

环节 主要负责系统交给下一环的内容典型断点
规则 大模型起草 + 规则引擎 可执行的得分、重置、结束条件 两个结束条件没有优先级
地图 空间模型 带语义标签的坐标和碰撞体 装饰物带碰撞,改变玩法
球员 资源生成 + 属性映射 动作集和物理单位的能力值 属性数值无法映射到物理
物理 物理引擎可复现的运动和判定摩擦过低,传球全部掉落
AI AI Agent 基于规则的战术决策 照搬普通战术,频繁送分
赛事 Runtime + 规则引擎 完整Game Loop和事件日志 某状态没有出口
测试 测试Agent + 检测器定位到环节的问题清单 只报“有问题”不报位置

大模型在第一行最有用,往下每一行都需要别的系统接手。公开资料里,Epic在UE 5.8中提供了实验性的MCP插件,让外部模型可以调用引擎工具,这类做法的方向是一致的:模型负责理解和调度,真正的状态和运行留在引擎里。

什么时候可以说它是一个Playable Build

能生成出来不算完成,能被一个陌生玩家从进入打到结算、不遇到卡死和明显不公平,才算完成。

在乐鱼体育的做法里,一个版本要标记为Playable Build,至少要同时满足下面几条:

  1. 每个出生点进入后,球员能正常移动,开局10秒内不会因地图原因掉落或卡住。
  2. 每一种得分方式在测试中都被触发过,并且比分正确累加。
  3. 每一场测试比赛都能走到结束状态,平局、超时、双方拖延都有出口。
  4. 没有一条规则与另一条规则直接冲突,结束条件有明确优先级。
  5. AI对手的得分和失分分布合理,不存在某个固定打法稳定刷分。
  6. 事件日志完整,复盘能指出至少一个关键回合。
  7. 玩家修改任何一个参数后,系统知道需要重跑哪一部分测试。

如果你在用一句话生成比赛,拿到结果后可以先用这七条自己过一遍,尤其是第3条。能不能结束,往往是最先暴露一个生成系统是否真正连通的地方。