龙虎斗游戏剧情:AI同时生成角色和任务以后,怎样防止任务叫错角色名字或者引用不存在的地点?
一次批量生成:五十个支线任务,让模型参考已有的角色列表和地图写。文本质量很好,每个任务都有起因、经过和奖励。跑引用校验之后的结果:十二个任务引用了不存在的地点,模型编造了“北方哨塔”“旧磨坊”,地图上没有;八个任务把物品分配给了没有那件物品的NPC,让玩家去药剂师那里拿一把剑;五个任务的完成条件是“说服某人”,游戏没有说服机制;三个任务的奖励是尚未实装的装备。二十八个有问题,二十二个能用。这个比例不是模型差,而是模型在写小说,没有人告诉它这是数据。
问题的根源
模型的输出是自然语言,自然语言里“铁匠”这个词可以指任何铁匠。游戏里的铁匠是npc_blacksmith_01,在loc_forge,拥有item_iron_sword和item_steel_sword,不拥有item_blue_sword。任务文本写“去铁匠那里拿蓝色长剑”,在语言层面通顺,在数据层面有两个断点:蓝色长剑不存在,铁匠也没有它。玩家走到铁匠面前,对话里没有这个选项,任务卡死。龙虎斗游戏剧情把这类问题统称为“引用断裂”:文本里的名词没有对应到数据库里的实体。
三步解决
第一步,内容数据库先行。所有角色、地点、物品、阵营在生成任务之前就有唯一ID和基本字段,散落在表格、脚本和策划文档里的数据要先收进一处。第二步,模型输出ID而不是名字。生成任务时把相关实体列表连同ID放进上下文,要求引用处只填列表里存在的ID,模型需要新实体时写进单独的“新增内容请求”字段,不允许直接编名字。第三步,生成后自动校验。每个引用字段检查ID是否存在;物品引用检查owner是否真的是那个NPC;地点引用检查是否在当前可达区域;完成条件检查是否属于游戏支持的类型;奖励检查是否已实装。
校验规则的分类
- 存在性引用的ID在数据库里有没有。最基础,也拦下最多问题。
- 关系一致性物品的owner是不是那个NPC,NPC是不是在那个地点,阵营是否冲突。
- 系统可判定完成条件是否是“持有物品”“对话完成”“击败目标”“到达区域”这类系统能判断的类型。
- 状态可达任务的前置条件是否可能满足,奖励是否已实装。
- 语义一致任务内容是否符合角色设定,这一层目前主要靠人审。
校验不通过怎么办
两种处理。能修正的,让模型把引用改成已有ID:“北方哨塔”改成地图上真实存在的“东岗哨所”,前提是剧情上说得通。不能修正的,标记为“需要新建内容”,交给策划决定是新建这个地点还是删掉这个任务。关键是不要让校验不通过的任务进入游戏,也不要让模型偷偷编一个名字蒙混过关。
quest: q_blue_sword giver: npc_blacksmith_01 ok location: loc_forge ok objective: fetch item_blue_sword FAIL item not found suggest: item_steel_sword (owner npc_blacksmith_01) turn_in: npc_gate_guard FAIL ambiguous (3 matches) reward: item_ring_haste WARN not implemented condition: has_item ok (supported)
校验之后的返工率
把前面那五十个任务按三步重做一遍:先把角色、地点、物品收进数据库并分配ID,再让模型引用ID生成,最后跑校验。这一次的典型结果是:编造地点的问题基本消失,因为模型只能从列表里选;物品归属错误降到个位数,因为owner字段在列表里可见;完成条件不支持的问题仍有几个,因为模型会尝试用列表外的动作,这几个进了“新增内容请求”交给策划判断是否要加机制。返工从二十八个降到不到十个,而且每一个都带着明确的原因和建议。这个差距不是模型变聪明了,是它拿到了数据而不是名字。
为什么校验反而让生成更自由
有了校验,一次生成两百个任务不可怕,坏掉的会被自动挑出来。没有校验,两百个任务里的问题只能靠玩家一个一个踩。校验是让AI批量生成能安全落地的前提,而不是限制创作的枷锁。
当前限制
校验依赖项目先有干净的内容数据库,很多项目没有。存在性和关系一致性检查可以通用,系统可判定检查要按项目的任务系统定制,语义一致性检查在2026年仍主要靠人。