Skip to content

写好条目的技巧 ​

平台上每个世界都用设定(也叫条目、词条),很多热门的卡甚至只靠设定,一条行为都没有。开场白、设定和四块设定的基础,见 开场白和设定。


把角色写活 ​

平台上做得最好的世界,花心思最多的就是角色设定。

写性格怎么表现出来,不要只贴标签 ​

别只列性格特点,要写这些特点在行动上是什么样。

不要这样写:

加須害羞、内向、渴望被接纳。

这样写,这是《壺中の毒 · 大逃杀》卡里加須的原文设定:

加須内向到几乎没有存在感,他最想要的就是被接纳。在学校三年,他几乎没主动跟谁说过话,不是因为冷漠,是因为害怕。他怕一开口就被拒绝、被嘲笑、被无视。所以他选择沉默,把自己变成背景。

在洞窟小团体里,加須默默干了最多的体力活:去溪边打水、整理睡铺、退潮时去捡海螺。他从不抱怨,因为「有事可做」本身就让他觉得自己是被需要的。

「害羞」这种词,AI 没法前后一致地演出来。但「默默去打水、从不抱怨、把自己变成背景」,它可以一直演下去。

关系阶段 ​

最有沉浸感的世界,会按玩家和角色熟到什么程度,改变角色的表现。Sakura Season 就是这么做的:三位女主角每人都有四档好感(0-25、26-50、51-75、76-100)各自的表现描写。

做法是一个关系阶段写一条设定,每条只在变量落在这个阶段的范围里时才发:

  • 初识(好感 0-25):客气、戒备、只聊表面的话题
  • 信任渐长(好感 26-50):开始说自己的想法,偶尔露出软弱的一面
  • 亲近(好感 51-75):有只有你们懂的梗,沉默也不尴尬,会开口求助
  • 深厚羁绊(好感 76+):完全敞开,有独特的说话方式,会护着你

关系变量一变,AI 拿到的指引就自动跟着换。

怎么设置

在画布上,这就是 条件设定:

  1. 每个阶段写一条设定(「Rin:初识」「Rin:信任渐长」等等)。
  2. 把 rin_affinity 变量拖到一条设定上。两者之间会连一根线,这条设定挪进 条件设定 块。点这根线设条件,比如 ≥ 26。
  3. 要设一个范围,就再把变量往同一条设定上拖一次,设第二个条件(< 51)。有两个以上条件时,在这条设定的 什么时候发给 AI 里可以选全部满足还是任一满足。阶段范围用全部满足。

引擎每回合都检查这些条件,只有对得上的那个阶段的内容会发给 AI。

另一种做法是 待命设定 加行为:把各阶段设定的 始终发送 关掉,不给关键词也不给条件,然后加几条行为,在好感越过每个阈值时用 启用词条 / 禁用词条 去开关它们。这样更费事,主要适合由变量值以外的东西来打开设定的情况(一个按钮、一个关键词、一次性的事件)。见 行为与自动化。

在卡的数据里,这些条件存在设定的 conditions: [...] 里。完整 schema 参考 → World Spec: Entries

角色设定的写法 ​

很多成功的世界都用这个结构:

  1. 身份(1-2 句):名字、角色定位、核心特点
  2. 外貌(2-3 句):玩家看到的样子。写具体的细节,别写泛泛的描述
  3. 行为方式(大头):怎么说话,紧张/生气/开心时会做什么,有什么习惯,有什么矛盾的地方
  4. 和玩家的关系:一开始怎么看玩家,什么事会改变这个看法
  5. 秘密:AI 知道、但角色不会轻易说出来的事

大多数创作者在行为方式这部分下的功夫都不够。


设定集:用到才给 ​

有了关键词设定,一个世界可以存 5 万字的设定,而 AI 每回合只读这一回合用得上的那几条。

设计好的关键词列表 ​

引擎会扫最近几条消息,找你的关键词。任何一个关键词对上,这条设定就触发(「或」的关系)。想想玩家会用哪些说法提到这个东西:

一条关于酒馆的设定:

  • 酒馆、客栈、吧台、喝酒、酒保、小酒馆

一条关于角色樱井公香的设定:

  • 公香、樱井、班长

全词匹配:短关键词容易误触发时打开它。不开的话,英文关键词 "art" 会匹配到 "start"、"heart" 和 "apart"。

用辅助关键词把范围收窄 ​

有时候光一个关键词,还判断不了这条设定有没有用。辅助关键词 可以再加一层过滤:

模式意思例子
AND_ANY主关键词对上,并且至少对上一个辅助关键词「森林」+「精灵」「危险」「遗迹」中任意一个
AND_ALL主关键词对上,并且辅助关键词全部对上「森林」+「夜晚」和「危险」都有
NOT_ANY主关键词对上,并且辅助关键词一个都没出现「森林」,但没有「安全」或「平静」
NOT_ALL主关键词对上,并且辅助关键词没有全部出现「森林」,但「安全」和「白天」没有同时出现

最常见的用法:用 AND_ANY 取两个话题的交集。你希望「黑暗森林」这条设定在玩家同时提到森林和某种不祥的东西时才触发,而不是一提到树就触发。

全词匹配、辅助关键词和下面这些设置,都在展开一条设定后的 什么时候发给 AI → 高级 里。

深度注入:设定出现在聊天里的哪个位置 ​

注入到 设成 提到时才给 AI 的设定,不会和每次都发的设定一起放在提示词最上面,而是插进聊天记录里某个位置。深度(距末尾消息数) 决定插在哪。

深度 4 表示这条设定出现在聊天末尾往前数第 4 条消息的位置。这样它读起来像是最近对话的一部分,而不是从上面压下来的系统指令。

深度越小(越靠近末尾),AI 越重视。越大(越靠前),越像背景信息。

技术细节:深度是怎么算的

假设聊天记录是:

[1] User: Hello
[2] AI:   Hi there
[3] User: Where's the forest?
[4] AI:   Head north
[5] User: Alright, let's go

深度为 2 的设定会插在消息 [4] 前面:

[1] User: Hello
[2] AI:   Hi there
[3] User: Where's the forest?
--- [设定内容插在这里] ---
[4] AI:   Head north
[5] User: Alright, let's go

深度 0 会把设定放在最末尾(和 放在最后 的设定差不多)。

完整参考 → World Spec: Entries


跟着状态走的设定 ​

有些设定不该等关键词,而该按世界的实际状态发给 AI。在画布上,它们就是 条件设定 块:把变量拖到设定上,再点那根线设条件。具体步骤见上面的 关系阶段。

这样这条设定就跟着 变量的实际值 开关,而不是看玩家碰巧有没有打出某个关键词。

真实例子:同伴的态度 ​

Wandering Diary 用这个办法改变同伴对玩家的态度。每个同伴有三条设定:低好感一条(谨慎、疏远),中好感一条(慢慢热络),高好感一条(死心塌地),好感变量越过每个阈值时,发给 AI 的就换成对应的那条。

玩家看不到这些机关,只会觉得这个同伴在慢慢对自己敞开。

条件和关键词一起用 ​

一条设定可以同时有关键词 和 条件。这时只有关键词出现 并且 条件成立,它才会发:

  • 关键词:公香、班长
  • 条件:day_count > 3
  • 效果:NPC 的背景故事只在第 3 天以后、并且玩家提到她的时候才出现

这样信息就不会在故事里出现得太早。

七种比较方式 ​

操作符画布上显示意思适合
eq等于等于精确的状态判断(「地点等于山洞」)
neq不等于不等于排除(「不在新手区」)
gt>大于阈值(「好感高于 50」)
gte≥大于等于包含边界的阈值
lt<小于低值触发(「生命低于 20」)
lte≤小于等于包含边界的低值
contains包含文字里包含部分文字匹配

几个条件之间用 全部(每个都要满足)或 任一(满足一个就行)组合。


进阶技巧 ​

递归:连锁上下文 ​

设定 A 触发了,它的内容里又提到了设定 B 的关键词,B 要不要也触发?这就是递归。默认是关的(Context → 高级 里的 级联触发深度 = 0),设定之间关联很紧的世界可以打开。

小心使用。 递归链太深会吃掉很多上下文。大多数世界保持 0 或 1。

每条设定上有两个保险:

  • 防止递归:这条设定能被触发,但它的内容不会再去扫别的设定。它可以被叫醒,但不会去叫醒别人。
  • 排除递归:只有玩家实际说的话能触发这条设定,递归扫描完全看不到它。

改变发送身份 ​

默认所有设定都以系统消息发送。发送方式 可以改变 AI 怎么理解它们:

  • 指令(system):默认。AI 把它当成要遵守的规则。
  • 用户:AI 以为是玩家说的。有些模型更看重用户消息。
  • AI(assistant):AI 以为是它自己说的。适合「预填」回复风格。

示例对话 ​

注入到 设成 示例对话 的设定会被特殊处理。引擎会把它拆成一对对 user/assistant 消息,AI 看到的是真正的对话样本,而不是一整块文字。

格式:

<START>
{{user}}: 你能治好这个伤口吗?
{{char}}: *查看伤口,皱起眉* 这不是普通的刀伤。
上面残留着诅咒。我需要月光花的花粉……可现在是白天。
<START>
{{user}}: 那怎么办?
{{char}}: *耸耸肩* 要么等天黑,要么你忍着。
我推荐后者,疼痛是最好的老师。

用 <START> 分隔不同的对话样本。{{user}} 和 {{char}} 是宏,会换成实际的玩家名和角色名。

例子少而精更好。 2-3 段抓住角色口吻的对话,比 10 段让 AI 死板模仿的对话有用。

正则关键词 ​

关键词也支持正则表达式。按 /pattern/flags 的格式写(比如 /dark\s*forest/i),引擎就把它当正则,而不是普通文字。普通关键词覆盖不了比较灵活的说法时很有用。

扫描深度和 token 预算 ​

引擎不会扫完整段聊天记录找关键词。触发词往回看几条(默认 2,最多 50)决定检查最近几条消息。在画布上它在 Context → 高级 里;面板 → 设定 的 词条设置 里也有同一项。数值越大能抓到的提及越多,但处理开销也越大。

触发的设定还有一个 token 预算:世界设置里的 lorebookBudgetPercent(默认 100%)和 lorebookBudgetCap(默认 0,表示不设上限)。编辑器里没有这两项的开关,要在卡的数据里设。触发的设定超出预算时,按 位置 顺序保留(匹配分数只在位置相同时用来分先后),剩下的丢掉。

用文件夹整理 ​

世界里有几十上百条设定时,用文件夹:面板 → 设定 里有 添加文件夹,可以把设定拖进按逻辑分好的组(NPC 一个文件夹,地点设定一个文件夹)。文件夹只是用来整理的,不影响运行、匹配和注入顺序。

位置排序 ​

每一段里,设定按 位置 数字排序(越小越靠前),在 面板 → 设定 里设。支持小数,比如想插在 2 和 3 之间,就填 2.5。

每次都发的设定越靠前,缓存效果越好。所以最稳定的内容(角色描述、世界规则)放在位置小的地方,可能会变的内容(动态指令)放在位置大的地方。


常见错误 ​

设定永远发不出去。 一条设定关了 始终发送,又没有关键词和条件,它自己永远不会发。这就是 待命设定,要靠行为来打开它的时候正好这么设。如果你不是这个意思,就给它加关键词或条件,或者勾上始终发送。

阶段范围有重叠。 如果「Rin:初识」在好感 < 30 时发,「Rin:信任渐长」在好感 > 25 时发,那好感在 26-29 之间时两条都会发给 AI。用不重叠的范围:< 26,以及 ≥ 26 且 < 51。用行为开关阶段设定时也一样。

关键词太具体,永远对不上。 如果关于「水晶圣殿」的设定只在出现 水晶圣殿 时触发,玩家打「水晶那个地方」或者「那座神殿」就永远看不到它。想想玩家实际会怎么称呼,别只写正式名字。

重要的信息注入得太深。 深度 8 的设定在聊天记录里埋得太靠前,AI 几乎不怎么看它。重要的信息保持在深度 2-4,更深的位置留给背景氛围。


另见 ​

完整 schema 参考 → World Spec: Entries & Sections