技术多结局叙事:因果一致性的三层校验 鼎上娱乐官方资讯中心
首页/资讯攻略/技术前沿

多结局不跑偏的技术:天工引擎的因果图与世界状态快照

前一篇讲了「长风季」前情库怎么记住过去,这一篇讲另一半问题:记住之后,怎么保证几十条支线同时推进时,世界不会自相矛盾。答案不是更大的模型,而是一张因果图加一套状态快照。

一、多结局为什么会「跑偏」

叙事系统失控通常有三种形态。第一种是因果断裂:玩家先看到了结果,却永远遇不到原因,比如 NPC 提起一件从未发生的事。第二种是状态漂移:同一个角色在主城说一套,在雾区又说另一套。第三种是时间线冲突:两个互斥的事件在同一存档里同时成立。

「长风季」把叙事预算翻倍后,单周并发事件从 5 个升到 12 个,这三种问题的概率会被同步放大。靠人工写规则已经追不上,必须让系统在事件提交前就拦住。

二、因果图:节点、边与三类约束

因果图的节点是「事件」和「状态事实」,边是它们之间的关系。比如「雾区第三层开放」是一个事件节点,「玩家已获得回声点通行权」是一个状态事实节点,前者是后者的硬前置。

边只有三类。硬前置:必须发生在它之后,缺了就不能提交。互斥:两件事不能同时成立,比如同一角色不能既在渡口又在雾区。软权重:不强制,只影响导演系统的选择倾向,同分时优先挑权重高的。

本赛季的图有 4,700 个节点、11,300 条边。单个事件入图校验平均耗时 1.8 毫秒,最坏 6 毫秒——这个数字决定了它可以在每次事件提交时同步执行,而不是等到每晚批处理。

三、世界状态快照:每30秒一次增量

因果图管「能不能发生」,快照管「已经发生了什么」。全量状态约 240MB,不可能每次事件都存一份;系统每30秒做一次增量快照,单次约 1.2MB,保留72小时。

快照里只存事实,不存叙事文本。比如「某角色在10月19日21:07离开渡口」是事实,「他离开时说了什么」是文本。文本可以由模型重新生成,事实不能——这是回滚能成立的前提。

回滚一次平均 180 毫秒。这个能力主要用在两种场景:玩家投诉某段剧情明显矛盾时,回到事件提交前的快照重放;以及新版本上线发现规则写错时,把受影响的存档退回上一个一致点。

四、冲突消解:四级优先级

两个事件同时满足前置、却互相排斥时,系统按四级优先级裁决:主线硬约束高于角色生死,角色生死高于关系值,关系值高于环境变量。

被压下去的事件不会直接删除,而是降级成「传闻」。玩家仍可能在酒馆听到、在路边看到痕迹,但它不进入正史,也不影响后续判定。这样既保住了一致性,又不会让玩家觉得世界突然变空。

有一类冲突没有完美解:某角色在A线已经死亡,但B线的剧本需要他出场。系统的处理是「不复活,改用回忆、录像或他人转述呈现」。这条规则写死在最底层,任何导演指令都不能覆盖。

五、一致性校验:提交前1.8毫秒做什么

第一层是图闭包:所有硬前置是否满足,有没有引入新的互斥。第二层是快照 diff:本次提交与最近一次快照是否有事实冲突,比如同一时刻出现在两个地点。第三层是时间线偏序:事件先后能否排出一个不自相矛盾的顺序。

三层都通过,事件才会真正写入世界状态。任何一层失败,系统只有三个选择:重排(换一个时间点)、降级(转为传闻)、挂起(等待前置补齐)。不会出现「先写进去,以后再修」这种选项。

这也是为什么它能在 1.8 毫秒内完成:图是预编译的,快照 diff 只比对增量,时间线用偏序索引而不是全量排序。真正昂贵的部分在离线构建图的时候,不在运行时。

六、玩家可见的三条规则

第一,NPC不会说出超出其认知的信息。他没去过雾区第三层,就不会描述回声点的灯序,哪怕模型知道答案。第二,已发生的事实不可撤销,可以遗忘、可以误传,但不能被改写。第三,跨地图的因果同步延迟低于1秒,玩家换线之后不会看到两个版本的世界。

这三条规则听起来像限制,实际是叙事可信度的来源。玩家之所以愿意相信一个AI驱动的世界,不是因为它什么都答得上来,而是因为它承认自己不知道。

七、写在最后

因果图负责「不许犯错」,快照负责「错了能退」,优先级负责「撞车时听谁的」。三件套叠起来,才撑得住多结局叙事。前情库的分层记忆在上一篇;世界事件的调度扩容在事件引擎解读;首夜并发的实际数字在首夜遥测报告。

「好的叙事系统,先学会承认自己不知道。」——天工引擎叙事组
← 上一篇:开票日答疑 下一篇:雾区第三层首日手册 →

多结局不跑偏,靠的是约束不是运气

因果图4,700个节点;状态快照每30秒一次,回滚180毫秒。