一个只靠上下文记忆的失败案例

假设一个持续二十章的奇幻任务线,主角在第三章拿到了铁匠的委托,同一章里铁匠的女儿因瘟疫去世。到了第九章,剧情需要再次遇到铁匠。生成时上下文里只带了最近三章的摘要,而摘要里没提到女儿,于是模型顺理成章地写出了一个乐呵呵的铁匠。

单看这一段,文字没有问题;放回整条时间线,却是一次严重的设定冲突。长上下文可以缓解,但不能根治:设定会越攒越多,塞进去的时候没有优先级,取回来的时候没有保证。需要一个专门保存事实的地方。

图里存什么:实体、关系、约束

知识图谱的基本单位是“实体 - 关系 - 实体”的三元组。游戏世界里常见的三类内容如下:

类型 示例(示意) 说明
实体 铁匠、女儿、北门镇、锈蚀之剑 每个实体有类型和属性,如生死状态、所在地
关系 铁匠 - 父亲 - 女儿;女儿 - 死于 - 第三章 关系带时间范围,能随剧情演变
约束 已死角色不能出现在新的对话中;同一时刻只能在一处 由规则表达,用来检验新内容

其中“约束”是最容易被忽略、却最有价值的一层。有了它,图谱就不只是一个资料库,而成为一个可以判断“这样写对不对”的裁判。

生成前查询,生成后检查

图谱在生成流程里有两个位置。

生成前,根据当前场景取回相关事实。写铁匠的对话之前,先查“铁匠的家庭关系”“他最近经历的事件”“他与主角的关系变化”,把这几条作为硬性事实放进提示,而不是把整个世界设定都塞进去。

生成后,把新生成的内容再抽取成三元组,与图谱做比对。如果抽取出“铁匠 - 谈论 - 女儿婚事”,而图谱中“女儿”的状态是已故,就触发冲突提示,让模型带着冲突原因重写。这一步与 玩家说给我生成一座未来城市以后,怎样保证同属一个世界 里讲的一致性检查是同一类思路,只是这里把设定的载体明确成图。

冲突也分级:硬冲突(死者复活、地点错位)必须打回;软冲突(语气略显生硬)只作提示;未知(图谱中没有记录)则应当作为新设定写入,而不是一律禁止。

与向量检索的分工

有人会问:既然有向量检索,为什么还要图谱?两者擅长的事并不相同。

  • 向量检索擅长“找相似”:给一句“阴沉的港口酒馆”,能找回几段气质接近的描述,适合风格、氛围、灵感类内容。
  • 图谱擅长“找确定关系”:谁是谁的父亲,哪个任务依赖哪件物品,哪条路通向哪个城,答案是精确的,可推理的。
  • 向量检索会“差不多”,比如把“女儿去世”和“女儿远行”都当成相近的片段;图谱要求“对”,这两者在状态字段上截然不同。

一个合理的组合是:图谱管事实与约束,向量库管长文本与风格素材,模型负责把两边取回的内容读懂并写作。金沙娱乐AI在设计上倾向于这种分层,而不是把一切都交给一次检索。

图谱谁来写,谁来改

图谱不会自己长出来。设定来源大致有三条:玩家或作者主动写入的世界设定;模型在生成剧情时新发明的角色、地点,经确认后入库;以及从已有文本里自动抽取的事实。自动抽取的一条记录通常带置信度和来源,方便日后追溯。

修改也需要谨慎。剧情反转改变了“女儿是否真的去世”,就应该在图谱里记录一次带时间的修订,而不是直接覆盖旧值。带版本的图谱,可以回答“第三章时世界是什么样”,也可以在作者反悔时回滚。这样的存档与回溯,同样是 比赛记忆 一类场景需要的能力:状态会变,历史必须能查。

收束:下一步是让图谱主动提醒

目前的图谱多半被动等待查询,金沙娱乐大模型这一类系统也不例外。更有用的方向,是让它在剧情推进时主动提醒:某个伏笔已经三章没有回收,某个角色的立场即将与他过去的承诺冲突。当游戏大模型不仅写得出,还能被一张图提醒“别忘了”,长篇创作才真正有了可靠的记忆。