文章提出在原始对话与模型响应之间维护可审计的连续性账本,以结构化记录事实、承诺、情绪影响及游戏后果。每条记录包含来源、置信度、可见性和过期条件,可减少长上下文噪声与摘要失真。
一个 AI 游戏角色即使记得玩家的名字,仍然可能无法保持连续性。
真正棘手的问题并不是孤立信息的回忆,而是在一段跨越多个场景的长时间游戏会话之后,依然能够维系事实、承诺、情绪余韵与玩法后果之间的关系。
连续性账本(continuity ledger)是一种很实用的测试产物:它以紧凑、可审计的方式,记录对话轮次与场景转换之间必须保留下来的信息。它位于原始对话历史与下一条生成回复之间。
账本并不是对话记录的摘要,而是一组可由游戏验证的声明。
要让 AI NPC 在长时间的游戏会话中保持连贯,应当把连续性信息存储为带有类型、来源、置信度、可见性规则和过期条件的条目。生成台词之前,先让这些条目与当前游戏状态进行协调。生成台词之后,只记录实际发生变化的事实与承诺。
这样可以避免两种常见的失败:
不断发送越来越长的对话记录,直到重要状态被噪声淹没。
把对话记录压缩成模糊的摘要,导致谁在什么时间、什么条件下承诺了什么等信息全部丢失。
账本为编剧和 QA 审核人员提供了一种比完整对话记录更精简、又比文字概述更严谨的工具。
假设有一名原创科幻游戏角色 Maelin Voss。她负责维护一座位于某颗卫星上的气象站,那里的电磁风暴会抹除所有未受屏蔽保护的记录。
在一次游戏会话中,玩家可能会:
承认自己损坏了一台中继器。
承诺找回一个失踪的传感器。
向 Maelin 隐瞒一条来自她上司的消息。
得知 Maelin 不信任自动天气预报。
修好气象站,却为了另一项任务留下了传感器。
一份通用摘要可能会这样写:
玩家在风暴期间帮助了 Maelin,两人的关系虽然复杂,但正在好转。
这句话听起来合情合理,却几乎无法为下一个场景提供任何帮助。它没有说明 Maelin 是否知道玩家对中继器一事的坦白、归还传感器的承诺是否已经履行,也没有说明 Maelin 是否掌握了有关那条隐瞒消息的证据。
连续性账本应该保留这些区别。
在叙事 QA 中,我会使用六种类型。
角色亲眼见证的事情。
fact: player replaced relay fuse
source: direct observation
confidence: confirmed
visible_to: Maelin, player
expires: never
由其他角色说出、但当前说话者并未核实的事情。
fact: supervisor claims the western antenna failed first
source: supervisor radio call
confidence: unverified
visible_to: Maelin
expires: when antenna logs are inspected
区分亲眼所见的事实与他人转述的事实,可以防止系统基于道听途说生成言之凿凿的台词。
承诺、威胁、交易或分配的任务。
commitment: player will return the missing sensor
owner: player
witness: Maelin
status: open
trigger: next station visit
承诺必须有明确的责任人和状态。否则,摘要或许会记得双方讨论过传感器,却忘记玩家曾经许下承诺。
与证据绑定的变化,而不是一个孤立浮动的情绪分数。
relationship: trust +1
reason: player admitted damaging the relay before being confronted
scope: honesty under pressure
作用范围非常重要。Maelin 可以相信玩家在压力下依然诚实,同时仍然怀疑玩家的技术判断力。
两个无法同时被认定为真的条目。
contradiction:
- player says the message was never received
- station log records player terminal acknowledgement
status: unresolved
不要强迫模型在不作说明的情况下自行选择其中一个版本。应当让矛盾保持可见,直到玩法事件将其解决。
一种短期的对话影响,它应该改变语气,却不应成为永久性的人格特征。
residue: Maelin is embarrassed that the player saw her panic
intensity: medium
expires: after private debrief or two scene transitions
这与关系状态不同。情绪余韵应该逐渐消退,或者通过事件得到化解。
某项事实可以存在于游戏世界中,却不一定对每个 NPC 都可见。
如果玩家读取了一台私人终端,世界状态可以记录这一发现,但除非 Maelin 看到了玩家的行为、收到了相关报告,或者根据玩家之后的行为推断出了这件事,否则她不应该提到其中的内容。
对于账本中的每个条目,都要询问:
他们是如何得知这件事的?
他们对此有多确定?
他们现在可以透露这件事吗?
什么事件会改变它,或者使它过期?
这意味着,连续性不仅是一个记忆问题,也是一个权限问题。
如果模型收到了正确的事实,却带着错误的可见性权限,它就可能生成一个措辞精致的剧透。这仍然属于系统故障。
在为下一条回复构建 prompt 之前,先执行一次协调流程。
移除已经过期的情绪余韵。
将承诺标记为已履行或已违背。
检测新事件与现有条目之间的矛盾。
根据当前说话者的可见性过滤条目。
依据玩家当前的意图,对相关条目进行排序。
附加当前的玩法后果。
假设玩家没有带回传感器,却向 Maelin 申请使用一台受限发射器。
此时相关的上下文包并不是整个会话,而是:
玩家承诺过归还传感器。
该承诺仍处于未完成状态。
Maelin 亲眼见证了玩家先前对中继器一事的坦白。
Maelin 对玩家诚实程度的信任有所提升,但对其执行能力的信任并未提升。
使用发射器需要获得行动能力方面的信任。
一条连贯的回复可以肯定玩家的诚实,同时因为行动承诺尚未履行而拒绝其访问请求。
不要只测试连续发生的对话轮次,还要主动拉开距离。
一份实用的测试矩阵应包括:
对于每一行,都使用两到三种不同的表述方式提出相同的连续性问题。这样可以暴露出那些只有在玩家重复原始措辞时才能记住信息的系统。
玩家说:“我已经把传感器还回来了,你还感谢过我。”
NPC 应该将这一说法与账本进行比对,而不是把玩家在对话中表现出的自信当成证据。
玩家声称,是 Maelin 承诺要找回传感器。
系统应该保留承诺的责任归属。
玩家把一则尚未核实的传闻复述成 Maelin 亲眼见证的事实。
回复应该保留最初的信息来源和置信度。
这些探针远比询问角色能否记住玩家最喜欢的颜色更有价值。它们测试的是:在受到压力时,记忆能否继续保持结构上的有效性。
审核人员经常只为最终生成的台词打分,却忽略生成这句台词的状态上下文包。这会让根因分析变得十分缓慢。
账本有效性:来源、责任人、可见性、置信度和过期条件均正确。
选择有效性:包含相关条目,并排除无关的秘密信息。
回复有效性:台词遵循选定的状态。
角色声音连续性:说话者仍然具有鲜明且一致的辨识度。
玩法有效性:结果符合当前的游戏规则。
一条从无效账本中生成的优美台词仍然是不合格的。账本正确而文案平淡,则属于另一种通常更容易解决的问题。
连续性账本无法决定什么样的关系发展弧线才能在情感上令人满意。它也无法取代叙事设计、文化审核、本地化、安全审核或实际游玩测试。
它为预先编写的规则与生成式对话之间提供了一个可追溯的接口。编剧可以检查某条回复为什么提到了某个承诺。QA 可以复现特定分支中的故障。工程师则可以区分检索错误与生成错误。
我在 SEELE AI 工作。我们的编辑团队还记录了在更广泛的游戏世界工作流中,角色设计、世界规则与交互循环如何协同运作:面向互动游戏世界的 Anime AI 聊天角色。
这一原则简单而持久:不要让冗长的对话记录充当结构化游戏状态。应当把连续性保存为可由游戏验证、过滤、过期处理和解释的声明。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。