我已经构建了一个交互式的AI角色扮演引擎,其中AI扮演叙述家,NPC和整个世界,而玩家控制他们的角色。想想看AI地牢,但重点是修辞品质——你愿意阅读的那种写作,而不是每个前沿模型都会产生的“感觉正在凝集着紧张气氛”这样的默认值。

核心技术挑战:如何让生成的AI产生在实时、稳定、横跨成千上万个互动中质量的修辞呢?

下面是我的架构经过6个月的迭代之后。

问题:LLM的默认词汇

如果你生成100个片段的小说使用任何前沿模型,你会发现相同的结构会以野蠻的非人性率出现。“空气中弥漫着紧张。”“一朵彩色般的情绪风暴。”“她始终如此。”“一个幽灵般的微笑。”“她应答。”双语的三项列表(三项结构,例如A-B-C)像一种通用的节奏。

这些词汇本身并不差,但是它们是统计上的默认值——模型的概率分布中最容易产生的结果。人类作者偶尔使用这些,但是AI使用它们的系统性。读者无法总是说出为什么AI写作感觉不一样,但是问题之一是这些。

**第一个层:系统提示规则(15个编辑规则被内置在每次生成中)

系统提示包含明确的反对的规则。不是“写得好”,那样的指导是无用的。取而代之的是:

  • 在物理上表现一个情绪之前,从不以名字命名(说了再告诉,接着告诉问题是)
  • 在没有中断的情况下,不要一个角色说超过3个连续的句子
  • 每个回复中只允许一个重要的新信息
  • 每个新场景至少记录2个不同的细节,除了视觉以外
  • 每个NPC都有一个NEVER SAYS的列表(该角色会说些什么,不会是其NEVER SAYS列表中的内容,约束更有效一些)

反向约束优于正面的指导。测试中可以看到。模型已经在如何写得好的方面学会了一切,但是它不了解你的失效模式。

**第二个层:客户端正则表达式过滤器(275+模式,零API成本,零延迟)

在生成和展示之前,每次响应都在AI生成之后运行。这是可预测的、确定性的,不会有任何API调用的延迟。过滤器:

限制每个响应中em-分号的出现量在2个以上,多余的改为逗号
将分号改为句点
检测并移除显示然后告诉模式(身体动作之后跟着情绪的命名)
限制“某种冷气正在潜入”这样的模式出现1次
限制身体上的反应和情绪的标记(“她感到不舒服”等)出现2次
限制面部的动作和情绪的标记(“她的表情变得严肃”等)出现2次
将近15个确认的AI的老生常谈互换成随机化的替代品(避免这种修正产生自己的老生常谈)
识别出LLM的默认词汇并标记它们
*将感官过滤器在首次出现后移除(“他注意到”“她观察到”),直接描述它

第三个层:每个角色独有的声音

这是最难的部分。获得一个一致的AI声音很容易。获得4到5个不同的NPC声音在同一生成中很难——模型想要变得一致的。

每个NPC都在系统提示中注入了一个声音规范:

  • 品位(正规、严厉、温暖、正式)
  • 句子长度范围(短暂快速的句子,或者细节丰富的、附带着细节句子)
  • 节奏(军事的、学术的、焦虑的)
  • 口头动作(特定的身体行为,如重复擦干玻璃杯)
  • 隐喻的范围(这位NPC使用的隐喻来源,从哪里获取的隐喻,如“防线、威胁”)

隐喻的来源和NEVER SAYS的列表是对话效果最好的。这两个方面可以让这个角色具有唯一性。

第四个层:传承登记册——用结构化的形式记录状态

每个交互式小説引擎都会冒犯上下文的问题。20到30个回合(或者是指令、事件发生之后)后,AI就会忘掉已有的事实。我的解决方法是使用结构化的JSON的登记册来记录:

当前场景(地点、时间、天气、气氛)
NPCs已进入的列表及其情绪状态
玩家已知道的和不知道的列表
每个NPC已知的和存疑事项
一个序列化的故事节奏(紧要性较高、很重要、不重要)
每个NPC已知(或存疑)的事项
*延迟的影响

每次回合后,API会分析变化并更新登记册登记册会注入下一个提示,限制了写下的内容。

第五个层:适应性绘制引擎 — RPG的游戏主公的11个原则

这才是最神奇的部分。玩家体验得到极大的改善。

以下4个原则对玩家体验影响最大:

永远不能阻碍玩家*:如果玩家试图做某事,这样就成为某事。如果这意味着引入结果和陷阱,很好。但是,一定要永远不能让玩家感到无法做某事。“不能这样做”会对玩家而言是阻碍。如果小説的内容要往玩家身上绕,必须在玩家做选择后对决定造成后果。
可动态调整的故事线:这不意味着故事内容已经固定在某一个位置。当玩家跳过这样一个地方,引擎就会把故事移动到下一个地方。“这是发生的位置、发生故事。”玩家体验到故事在不断变化,完全是玩家主导。
NPC的活动:不会有人将NPC当做是一个静态的背景。即使玩家不处理一个NPC,这也不会阻碍NPC的行动或改变NPC的活动。NPC有自己的议程,世界并不一定要等待玩家来驱动剧情。
*不宣示然后激发:在某些坏事情发生之前,玩家应该有一个明显的警告。这会让玩家预见什么会发生,并选择在什么时候做什么。这一点和避免坏事情发生有关。

延迟系统有一个有趣的部分,它跟游戏设计有关。它记录了自游戏发生最近有重大事件以来的回合数。如果故事感到太平静(没有了至少6个事件发生,因为所有的内容都在平静的状态中)、系统会对提示写入系统提示的下一层级指示AI去使用以下列表中的某些事件来打破平静。相反,如果故事发展太快,会对提示进行调整,插入中断以让玩家有机会来进行选择或者思考。

这样,游戏中可以避免游戏内容出现停滞和游戏过热的状况。

第六个层:剖面命令让玩家有更大权力

玩家可以控制游戏的节奏和内容,可以不时使用命令,控制游戏:
/darker 生成更黑暗的内容
/lighter 生成更加轻松的内容
/complication 生成更复杂的内容
/timeskips 抗走到下一天、时间跳进去了
/introduce 生成一个新角色的角色
/npc 给某个NPC发令
/scene 更换了一个新的背景
/flashback 生成从前的人物。

这些命令注入之后会给定游戏提示,直接影响游戏的内容。这个设计不会破坏第四墙,这点很重要。

我学到了一些有用的东西

  1. 提示工程已经达到了上限。过滤是结余的:无论系统提示如何详细,都无法实现100%的完美。客户端过滤器才能填补这个缺口。
    2.负反馈效果大于正反馈:禁止使用某些特定的符号可以取得非常好的效果,没有什么方法可以有效地影响玩家而不是NPC。
    3.AI在创作小品时最严重的问题是模拟。

*它想要每个场景都变得如愿,而不想要每个NPC给予每个玩家无关紧要的信息,也不想写下的每个句子都会结束在一个em点。

这个架构本质上就是一个抗模拟系统。

  1. 结构化的记录方式与概括性描述不同:每个回合都记录下一个有细节的内容和状态。这样可以保持内容的准确性,就算回合数增长,也不应该会出现遗忘。

5.使用Haiku模型+重复性的写作提示+客户端过滤器能够产生与Sonnet等修辞品质的差不多的质量,相当于每月成本的1/10

我们所有的RP互动都使用了Haiku模型。我们使用了一个有编辑功能的系统来维持这部分修改,并使用客户端过滤器来进一步调整和改进写文质量。这样可以有效地保持经济可持续发展的优势。

**这场比赛的规则在https://www.ghostproof.uk/rp可以找到——免费观看,20条回合,一律不需要账号。

目前有9个不同的场景,9个不同种类的文本(医院惊险故事、神幻恐怖、宇宙恐怖、科幻、西部、幽灵浪漫、超自然动画、现代推理、科幻);19个不同的物种;8种不同的职业;80多名不同的NPC,每个NPC都有独有的话语。

当你刚刚到达之后,你会遇到一个门卫NPC。他是一个说了2分钟的测试——他是说话音调的测试以及修辞品质——很棒的测试。

我希望游戏推动者提供一些关于游戏和叙事系统的意见:NPC们的声音够特别吗?每种NPC的声音不一样吗?还有什么我还需要考虑或者优化点吗?

不必我说,我非常乐意来深入地和你探讨所有的架构方面。