写好条目的技巧
平台上每个世界都用设定(也叫条目、词条),很多热门的卡甚至只靠设定,一条行为都没有。开场白、设定和四块设定的基础,见 开场白和设定。
把角色写活
平台上做得最好的世界,花心思最多的就是角色设定。
写性格怎么表现出来,不要只贴标签
别只列性格特点,要写这些特点在行动上是什么样。
不要这样写:
加須害羞、内向、渴望被接纳。
这样写,这是《壺中の毒 · 大逃杀》卡里加須的原文设定:
加須内向到几乎没有存在感,他最想要的就是被接纳。在学校三年,他几乎没主动跟谁说过话,不是因为冷漠,是因为害怕。他怕一开口就被拒绝、被嘲笑、被无视。所以他选择沉默,把自己变成背景。
在洞窟小团体里,加須默默干了最多的体力活:去溪边打水、整理睡铺、退潮时去捡海螺。他从不抱怨,因为「有事可做」本身就让他觉得自己是被需要的。
「害羞」这种词,AI 没法前后一致地演出来。但「默默去打水、从不抱怨、把自己变成背景」,它可以一直演下去。
关系阶段
最有沉浸感的世界,会按玩家和角色熟到什么程度,改变角色的表现。Sakura Season 就是这么做的:三位女主角每人都有四档好感(0-25、26-50、51-75、76-100)各自的表现描写。
做法是一个关系阶段写一条设定,每条只在变量落在这个阶段的范围里时才发:
- 初识(好感 0-25):客气、戒备、只聊表面的话题
- 信任渐长(好感 26-50):开始说自己的想法,偶尔露出软弱的一面
- 亲近(好感 51-75):有只有你们懂的梗,沉默也不尴尬,会开口求助
- 深厚羁绊(好感 76+):完全敞开,有独特的说话方式,会护着你
关系变量一变,AI 拿到的指引就自动跟着换。
怎么设置
在画布上,这就是 条件设定:
- 每个阶段写一条设定(「Rin:初识」「Rin:信任渐长」等等)。
- 把
rin_affinity变量拖到一条设定上。两者之间会连一根线,这条设定挪进 条件设定 块。点这根线设条件,比如≥ 26。 - 要设一个范围,就再把变量往同一条设定上拖一次,设第二个条件(
< 51)。有两个以上条件时,在这条设定的 什么时候发给 AI 里可以选全部满足还是任一满足。阶段范围用全部满足。
引擎每回合都检查这些条件,只有对得上的那个阶段的内容会发给 AI。
另一种做法是 待命设定 加行为:把各阶段设定的 始终发送 关掉,不给关键词也不给条件,然后加几条行为,在好感越过每个阈值时用 启用词条 / 禁用词条 去开关它们。这样更费事,主要适合由变量值以外的东西来打开设定的情况(一个按钮、一个关键词、一次性的事件)。见 行为与自动化。
在卡的数据里,这些条件存在设定的 conditions: [...] 里。完整 schema 参考 → World Spec: Entries
角色设定的写法
很多成功的世界都用这个结构:
- 身份(1-2 句):名字、角色定位、核心特点
- 外貌(2-3 句):玩家看到的样子。写具体的细节,别写泛泛的描述
- 行为方式(大头):怎么说话,紧张/生气/开心时会做什么,有什么习惯,有什么矛盾的地方
- 和玩家的关系:一开始怎么看玩家,什么事会改变这个看法
- 秘密: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
