搜索文档...

开始输入以搜索文档

聊天指南

宏(CBS)

在任意提示词文本中的花括号脚本。

宏是用双花括号包裹的标记,会在请求时展开。它们可用于角色字段、世界书条目、预设、开场白和聊天文本,并且可以嵌套。

text
{{char}} smiles at {{user}}.
{{random::sunny::rainy::foggy}}
{{calc::1+2*3}}

参数之间用双冒号分隔。未知的宏会展开为空而不是报错,因此打错字不会让请求失败。

单花括号不是宏。一对单花括号会作为字面文本传给模型并出现在回复里,这是出现多余花括号的常见原因。这与 SillyTavern、RisuAI 和 JanitorAI 一致,因此它们的卡片无需修改即可使用。

text
{{user}}   expands to your persona name
{user}     stays literal text

展开为
{{char}}当前角色名(群聊中为当前发言者)。
{{user}}你的人设名。
{{persona}}你的人设描述。
{{description}}当前角色的描述字段。
{{lastmessage}}最近一条消息的文本。
{{time}} / {{date}}按你的区域和时区的当前时间 / 日期。

random 每次展开都重新挑一个参数。pick 做出的选择在整段对话中保持不变。roll 用 d 记法掷骰子。

text
{{random::a::b::c}}   {{pick::a::b::c}}   {{roll::d20}}

掷骰和随机按轮次设定随机种子:重新生成会复用相同的值,因此滑动切换不会重新掷骰。

聊天变量按对话分支保存。全局变量在所有对话中保留。可在任何支持宏的文本中设置,也可以在触发脚本里设置。

text
{{setvar::mood::happy}}
{{getvar::mood}}
{{setglobalvar::visits::1}}

按分支存储意味着滑动到另一个分支时会恢复该分支的变量状态。同级分支之间的值不会互相泄漏。

块用来包裹内容。if 在条件为真时渲染其内容。each 会遍历数组并做槽位替换。when 提供按行的 else 分支。

text
{{#if {{equal::{{getvar::mood}}::happy}}}}
{{char}} is in a great mood.
{{/if}}

{{#each {{array::red::green::blue}} item}}
Color: {{slot::item}}
{{/each}}

pure 和 escape 可以保护字面花括号不被展开。任何闭合标签都会关闭最内层已打开的块。

注释宏在模型看到之前就消失了,因此适合在卡片字段中写备注。要原样展示宏语法,请使用 pure 块。

text
{{// note to self, never sent to the model}}
{{#pure}}{{char}} stays literal here{{/pure}}