SillyTavern 脚本命令自查手册

作者:KAKAA | Discord: @rech0_viixi
版本:SillyTavern 1.12.13 - release
最后更新:2025/04/11

  1. 使用指南
    1. 信息解释
    2. 数据类型
  2. 数据交互
    1. 用户输入
      1. input
      2. setinput
    2. 弹出窗口
      1. echo
      2. popup
      3. button
    3. 传输控制
      1. pass
      2. abort
      3. ||
  3. 变量
    1. 变量类型
    2. 设置变量
      1. setvar
      2. setglobalvar
    3. 获取变量
      1. getvar
      2. getglobalvar
      3. len
    4. 变量操作
      1. addvar
      2. addglobalvar
      3. incvar
      4. incglobalvar
      5. decvar
      6. decglobalvar
      7. flushvar
      8. flushglobalvar
      9. listvar
      10. sort
    5. 数学运算
      1. add
      2. sub
      3. mul
      4. div
      5. max
      6. min
      7. mod
      8. pow
      9. sin
      10. cos
      11. log
      12. abs
      13. sqrt
      14. round
      15. rand
  4. 流程控制
    1. 条件判断
      1. if-else
      2. while
    2. 其他
      1. times
      2. delay
  5. 使用 LLM
    1. 生成文本
      1. gen
      2. genraw
      3. trigger
      4. ask
      5. continue
      6. impersonate
      7. stop
    2. 提示词注入
      1. inject
      2. listinjects
      3. flushinjects
    3. 作者注释
      1. note
      2. note-frequency
      3. note-depth
      4. note-position
      5. note-role
  6. 聊天记录
    1. 获取聊天记录
      1. messages
    2. 发送到聊天记录
      1. send
      2. sendas
      3. sys
      4. sysname
      5. comment
      6. addswipe
    3. 消息操作
      1. hide
      2. unhide
      3. cut
      4. delmode
      5. delswipe
      6. delname
      7. delchat
      8. closechat
      9. sync
      10. reasoning-get
      11. reasoning-parse
      12. reasoning-set
    4. 聊天分支
      1. branch-create
      2. checkpoint-create
      3. checkpoint-exit
      4. checkpoint-get
      5. checkpoint-go
      6. checkpoint-list
      7. checkpoint-parent
  7. 世界书
    1. 世界书状态
      1. world
    2. 获取世界书内容
      1. getcharbook
      2. getchatbook
      3. getpersonabook
      4. findentry
      5. getentryfield
      6. wi-get-timed-effect
    3. 设定世界书内容
      1. createentry
      2. setentryfield
      3. wi-set-timed-effect
    4. 有效输入字段
  8. 文本操作
    1. 编辑文本
      1. replace
      2. upper
      3. lower
    2. 修剪文本
      1. substr
      2. trimtokens
      3. trimstart
      4. trimend
    3. 文本匹配
      1. fuzzy
      2. regex
  9. 配置快速回复
    1. 创建
      1. qr-set-create
      2. qr-create
      3. qr-contextadd
    2. 获取
      1. qr-get
    3. 更新
      1. qr-update
      2. qr-set-update
    4. 运行
      1. run
      2. break
      3. qr
    5. 设置
      1. qr-set
      2. qr-chat-set
      3. qr-list
      4. qr-set-list
    6. 删除
      1. qr-delete
      2. qr-set-delete
      3. qr-contextclear
      4. qr-contextdel
  10. 用户界面
    1. 聊天窗口
      1. chat-render
      2. chat-reload
    2. 角色卡
      1. rename-char
      2. renamechat
      3. random
      4. go
      5. chat-manager
      6. newchat
      7. closechat
      8. tempchat
    3. UI 风格
      1. theme
      2. bubble
      3. flat
      4. single
      5. vn
      6. movingui
      7. resetpanels
      8. panels
      9. css-var
    4. 背景
      1. bg
      2. autobg
      3. bgcol
      4. lockbg
      5. unlockbg
  11. 酒馆命令
    1. 全局
      1. ?
      2. //
      3. reload-page
      4. yt-script
      5. is-mobile
    2. LLM 模型
      1. api
      2. api-url
      3. tokenizer
      4. model
      5. preset
      6. setpromptentry
      7. proxy
      8. tools-invoke
      9. tools-list
      10. tools-register
      11. tools-unregister
    3. 高级格式化
      1. context
      2. instruct
      3. instruct-on
      4. instruct-off
      5. stop-strings
    4. 角色管理
      1. char-find
      2. tag-add
      3. tag-exists
      4. tag-list
      5. tag-remove
      6. dupe
      7. forcesave
      8. lock
      9. persona
    5. 群组管理
      1. member-add
      2. member-remove
      3. member-get
      4. member-enable
      5. member-disable
      6. member-up
      7. member-down
      8. member-peek
  12. 扩展程序
    1. extension-enable
    2. extension-disable
    3. extension-exists
    4. extension-state
    5. extension-toggle
    6. 正则
      1. regex-toggle
    7. 图片描述
      1. caption
    8. 角色表情
      1. classify
      2. classify-expressions
      3. th
      4. uploadsprite
    9. Token Counter
      1. count
    10. 向量存储
      1. db
      2. db-add
      3. db-delete
      4. db-enable
      5. db-disable
      6. db-get
      7. db-list
      8. db-update
    11. 图像生成
      1. imagine
      2. imagine-comfy-workflow
    12. 总结
      1. Summarize
    13. 聊天
      1. translate
    14. Variable Viewer
      1. variableviewer
    15. TTS
      1. speak
  13. 附录
    1. 语法
      1. 转义
        1. 分隔符 (管道)
        2. 引号
        3. 空格
        4. 闭包分隔符
        5. QR 命令
      2. 解析器标志 (parser-flag)
      3. 严格转义
      4. 替换变量宏
      5. 闭包
        1. 子命令
        2. 作用域
        3. 命名
        4. 参数
        5. 立即执行
      1. 系统范围内的替换宏
        1. 角色卡
        2. LLM
        3. 聊天记录
        4. 时间
        5. 随机
        6. 其他
      2. 仅用于高级格式化
        1. 上下文模板
        2. 指示模式
      3. 聊天变量
        1. 局部变量
        2. 全局变量
        3. 范围变量

使用指南

开幕叠甲

本人计算机知识水平仅有半勺水程度,如有错误和缺漏还请大佬斧正🙇

信息解释

guide 命令的展示格式

数据类型

数据类型 说明
Number 数字型,包含整数和浮点数,如 21、0.21
Bool 布尔值类型,如 true、false,等价于 1 和 0
String 字符串类型,可简单理解为文本,如“张三”
Varname 已声明的变量名称,当 varname 和 string 都可使用时,注意给 string 添加双引号以与 varname 做出区分
List 列表(数组)类型,可以包含任何类型的数据,如整数、字符串等。列表中的元素是有顺序的,由它们在列表中的位置(index)来标识
Dictionary 词典(对象)类型,无序的对象集合
Subcommand 斜线子命令,一种子命令的写法,包含一系列要执行的斜线命令
closure 闭包,另一种子命令的写法(推荐),是包裹在 {: 和 :} 之间的一系列命令,只有在执行该部分代码时才会对其进行评估,闭包作为子命令时无需转义管道和宏

数据交互

用户输入

input

弹出一个包含所提供文本和输入框的弹出窗口。(别名: /prompt)

/input [default="string"] [large=on/off] [wide=on/off] [okButton="string"] [rows=number] [onSuccess=closure] [onCancel=closure] (text)
  • default - 输入框默认已填写好的文本
  • large - 增加弹出窗口的垂直尺寸
  • wide - 增加弹出窗口的水平尺寸
  • okButton - 自定义确认键的文本
  • rows - 增加输入控件的大小,默认值:1
  • onSuccess - 当点击确定按钮或输入成功关闭(通过回车等)时执行的闭包
  • onCancel - 当点击取消按钮或关闭输入(通过 Esc 等)时执行的闭包
  • text (string) - 输入框标题显示的文本

返回值:用户输入的文本


例:

/input default="默认的已有文本" okButton="YES!" 这里是标题

input


setinput

用提供的文本替换用户输入栏的内容。

/setinput (text)
  • text (string) - 提供的文本

返回值:无


例:

/setinput 替换文本

setinput


注意

使用此命令会覆盖所有输入栏中已有的内容,操作不可撤销

弹出窗口

echo

显示文本到 Toast (轻量级弹窗提示) 信息中。

/echo [title=string] [severity=info/warning/error/success] [timeout=number] [extendedTimeout=number] [preventDuplicates=bool] [awaitDismissal=bool] [cssClass=string] [color=string] [escapeHtml=bool] [onclick=closure] (text) 
  • title - 弹窗的标题
  • severity - 提示的类型,影响弹窗外观,默认值:info
  • timeout - 显示信息的时间(毫秒)。如果将此值和 extendedTimeout 设为 0,则信息将无限期显示,直至被取消。默认值:4000
  • extendedTimeout- 显示信息的时间(毫秒)。将此值和 timeout 设为 0,就可以无限期显示直到被取消。默认值:10000
  • preventDuplicates - 是否防止重复显示相同信息,默认值:false
  • awaitDismissal - 是否等待弹窗结束后再继续,默认值:false
  • cssClass - 另外增加 CSS 类添加到 toast 消息(例如:用于自定义样式)
  • color - toast 信息的自定义 CSS 颜色。可接受所有有效的 CSS 颜色值(如 "红色"、" #FF0000 "、"rgb (255, 0, 0)")。可使用 "cssClass "参数和自定义类进行更多自定义
  • escapeHtml - 是否在 toast 信息中转义 HTML
  • onclick - 当 toast 被点击时调用的闭包。这个已执行的闭包接收脚本中提供的作用域。在操作变量等时,请注意可能产生的副作用。
  • text (string) - 弹窗的内容

返回值:text 的内容


例:

/echo title=警告 severity=warning 这是一个警告弹窗

echo


弹出一个带有指定文本和按钮的阻挡式弹出窗口。

/popup [large=bool] [wide=bool] [wider=bool] [transparent=bool] [okButton="string"] [cancelButton="string"] [result=bool] (text) 
  • large - 增加弹出窗口的垂直尺寸,默认为 false
  • wide - 增加弹出窗口的水平尺寸,默认为 false
  • wider - 显示更宽的弹出窗口,默认为 false
  • transparent - 显示透明弹出窗口,默认为 false
  • okButton - 自定义确认键的文本,默认为 OK
  • cancelButton - 自定义取消键的文本
  • result - 如果启用,将返回弹出结果(整数)而不是弹出文本。确定按钮返回 1,取消按钮返回 0,退出按钮返回空字符串。
  • text (string) - 弹出框显示的文本,支持简单的 HTML 格式,例如 /popup <font color=red>I'm red!</font>

返回值:text 的内容


例:

/popup okButton="OK~" 这是一个弹出框

popup


button

用指定的文本和按钮标签显示一个阻塞弹出窗口。 

/buttons labels=["a","b"] (text)
  • labels (list) - 必须是字符串的 JSON 序列化数组或包含此类数组的变量名。如果取消弹出,则将点击的按钮标签返回 pipe 或空字符串。
  • text (string) - 提示文本,支持 HTML + CSS 格式。

返回值:点击的按键名


例:

/buttons labels=["Yes","No"] 继续?

button


传输控制

pass

通过管道将文本传递给下一条命令。 (别名: /return)

/pass (text)
  • text (string/number/bool/list/dictionary/closure) - 传递的内容

返回值:传递的内容

abort

终止斜线命令批处理的执行。

/abort [quiet=bool] (text)
  • quiet - 是否关闭终止时弹出的 Toast 窗口显示,默认值:true
  • text (string) - 终止命令执行的原因。当 quiet=false 时显示

返回值:无

||

为防止上一条命令的输出作为未命名参数自动注入下一条命令,请在两条命令之间加双竖杠。

||

例:
如以下命令所示,当只有一条竖杠时,ABC 会自动传输到下一个命令,导致弹出两次 ABC 窗口。使用双竖杠后,参数不再传递,第二个 echo 命令无效

1
2
3
4
5
6
7
//弹出两次
/echo ABC |
/echo |

//弹出一次
/echo ABC ||
/echo |

变量

变量类型

  • 局部变量--保存在当前聊天的元数据中,并且是唯一的。
  • 全局变量--保存在 settings. json 中,适用于所有聊天。
  • 数组和对象--变量值可包含 JSON 序列化数组或键值对(对象)。数组: ["apple","banana","orange"],对象: {"fruits":["apple","banana","orange"]}

设置变量

setvar

设置一个局部变量的值并将其传入 pipe。使用 index 时,如要将值转换为特定的 JSON 类型,请使用 as 参数。(别名:/setchatvar)

setvar [key=varname] [index=number/string] [as=string] (text)  {{setvar::varname::value}}
  • key - 设置变量名
  • index - 变量为数组或对象时使用,如果在一个不存在的变量上使用了 index,该变量将被创建为一个空数组 [] 或空对象 {}
    • 若为 number,则设置为数组,从 0 开始计数。一次只能写入数组中的一个值,未指定的值显示空值"null"。
    • 若为 string,则设置为对象,string 为键的名称。
  • as - 与 index 一起使用时,可更改值的类型。
  • text (string/number/bool/list/dictionary) - 变量的内容

返回值:设置的变量的值


例:
获取变量 测试 的结果为 [null,null,null,null,null,"five"]

/setvar key=测试 index=5 five

下方命令的运行结果为:{"John":21}

/setvar key=ages index=John as=number 21

setglobalvar

设置全局变量的值,具体设置同 setvar

/setglobalvar [key=varname] [index=number/string] (text)  {{setglobalvar::name::value}}

获取变量

getvar

获取局部变量的值

/getvar [key=varname] [index=number/string] (text)  {{getvar::name}}
  • key - 变量名
  • index - 变量为数组或对象时使用
  • text (varname) - 与 key 同样的效果,二选一

返回值:获取的变量的值


例:

1
2
3
/getvar height
/getvar key=height
/getvar index=3 costumes

getglobalvar

获取全局变量的值,具体设置同 getvar

/getglobalvar [key=name] [index=number/string] (text)  {{getglobalvar::name}}

len

获取数组中的项目数。

/len (string/varname) 
  • string/varname - getvar 获取变量,或手动输入字符串。若输入的是字符串,则返回的是字符串长度

返回值:值的长度


例:

1
2
3
/len {{getvar::array}} 

/len 这是字符串 

变量操作

  • 在 /addvar , /incvar , /decvar 命令中首次使用之前未定义的变量时,其默认值为空字符串或 0
  • 如果命令参数接受一个变量名,而本地变量和全局变量的名称相同,则本地变量优先。
  • 所有用于变量操作的斜线命令都会将结果值写入 pipe,供下一条命令使用。
  • 对于宏,只有 "get"、"inc"和 "dec"类型的宏会返回值,"add"和 "set"类型的宏会用空字符串代替。
  • 由于变量在脚本执行之间被保存而不被刷新,因此您可以在其他脚本中或通过宏引用该变量。想要确保该值被丢弃,请在脚本中添加 /flushvar 命令。

addvar

将增量添加到局部变量的值中。

/addvar [key=varname] (increment)
  • key - 目标变量名
  • increment (string/number) - 添加到变量中的增量

例:
如果增量和变量值都可以转换为数字,将执行加法或减法运算。执行以下命令后,test 为 18

/setvar key=test 8|
/addvar key=test 10|

其他情况将执行字符串连接运算。执行以下命令后,test 为 八10

/setvar key=test |
/addvar key=test 10|

对于数组型,可增加新值。执行以下命令后,test 为 ["5","10"]

/setvar key=test index=0 5|
/addvar key=test 10|

addglobalvar

将增量添加到全局变量的值中。设置同 addvar

addglobalvar [key=name] (increment)  {{addglobalvar::name:increment}}

incvar

使局部变量的值递增 1。

/incvar (name) 
  • name (varname) - 目标变量名

例:
数字型变量将执行加法运算,其他情况执行字符串连接运算。执行以下命令后,test 为 9

/setvar key=test 8|
/incvar test|

incglobalvar

使全局变量的值递增 1。具体设置同 incvar

/incglobalvar (name) 

decvar

使局部变量的值递减 1。具体设置同 incvar

/decvar (name) 

decglobalvar

使全局变量的值递减 1。具体设置同 incvar

/decglobalvar (name) 

flushvar

删除本地变量的值。

/flushvar (name)
  • name (varname) - 目标变量名

返回值:无

flushglobalvar

删除全局变量的值。具体设置同 flushvar

/flushglobalvar (name)

listvar

列出已设置的所有变量。

/listvar

返回值:无

sort

按升序对列表或字典排序,并将结果通过 pipe 传递下去。

  • 对于列表,返回按值排序的列表。
  • 对于字典,返回排序后的键值有序列表。设置 keysort=false 表示键按相关值排序。
    /sort [keysort=true|false] (value)
    
  • keysort - 是按键排序还是按值排序;对列表无效。默认值:true
  • value (string/number/list/dictionary) - 值的内容

返回值:已排序的列表或字典键


例:

/sort [5,3,4,1,2] | /echo
/sort keysort=false {"a": 1, "d": 3, "c": 2, "b": 5} | /echo

返回值:无

数学运算

  • 以下所有操作都接受一系列数字或变量名,并将结果输出到管道中。
  • 无效运算(如除以 0)以及产生 NaN 值或无穷大的运算都返回 0。
  • 乘法、加法、最小值和最大值接受的参数数量不限,参数之间用空格隔开。
  • 减法、除法、指数运算和模数运算接受用空格分隔的两个参数。
  • 正弦、余弦、自然对数、平方根、绝对值和四舍五入接受一个参数。

add

执行数值集的加法运算。

/add (number/varname)...
  • value (number/varname) - 待计算的数字或变量名称,输入其他类型(如字符串)会忽略不计

返回值:计算结果


例:计算结果为 52

1
2
3
/setvar key=i 5|
/setvar key= 7|
/add 10 i 30 

sub

仅执行两个值的减法运算。

/sub (value) (value)
  • value (number/varname) - 待计算的数字或变量名称,输入其他类型(如字符串)或多于两个值的部分,都会忽略不计

返回值:计算结果

mul

执行数值集的乘法运算。其他内容与 /add 相同。

/mul (value)...

div

仅执行两个值的除法运算。其他内容与 /sub 相同。

/div (value) (value)

max

从数值集合中返回最大值。其他内容与 /add 相同。

/max (value)...

返回值:返回最大值,不返回其变量名

min

从数值集合中返回最小值。其他内容与 /max 相同。

/min (value)...

mod

仅对两个值进行模运算,取余数。其他内容与 /sub 相同。

/div (value) (value)

pow

仅对两个值进行乘方运算。其他内容与 /sub 相同。

/div (value) (value)

sin

执行单个数值的正弦运算。

/sin (value)
  • number/varname - 待计算的数字或变量名称,输入其他类型(如字符串)或多于一个值的部分,都会忽略不计

返回值:计算结果

cos

执行单个数值的余弦运算。其他内容与 /sin 相同。

/cos (number/varname)

log

对单个数值进行自然对数运算。其他内容与 /sin 相同。

/log (number/varname)

abs

执行单个数值的绝对值运算。其他内容与 /sin 相同。

/abs (number/varname)

sqrt

执行数值的平方根运算。其他内容与 /sin 相同。

/sqrt (number/varname)

round

对数值进行四舍五入到最接近整数的运算。其他内容与 /sin 相同。

/round (number/varname)

rand

返回一个介于 from 和 to 之间的随机数,范围的起始值和结束值都属于该范围。返回值将包含小数部分。

/rand [from=number] [to=number] [round=round/ceil/floor]
  • from - 起始值
  • to - 结束值
  • round - 取整数,ceil 向上舍入,floor 向下舍入,round 四舍五入。

返回值:随机值的结果


例:
返回 0 到 1 之间的随机数

/rand

返回 0 到 10 之间的随机数

/rand 10

返回 5 到 10 之间的随机数

/rand from=5 to=10

流程控制

条件判断

if-else

创建条件表达式,根据定义的规则分支执行。

/if [left=varname/string/number] [right=varname/string/number] [rule=gt/gte/lt/lte/eq/neq/not/in/nin] [else=closure/subcommand] (closure/subcommand)
  • left - 第一个运算对象,此处暂称为 A,为字符串时需要放在引号中
  • right - 第二个运算对象,此处暂称为 B,为字符串时需要放在引号中
  • rule - 对运算对象进行的布尔运算规则
    1. eq (equals | 等于) => A = B
    2. neq (not equals | 不等于) => A != B
    3. lt (less than | 小于) => A < B
    4. gt (greater than | 大于) => A > B
    5. lte (less than or equals | 小于等于) => A <= B
    6. gte (greater than or equals | 大于等于) => A >= B
    7. not (逻辑非) => !A
    8. in (包括子串) => A 包括 B,不区分大小写
    9. nin (不包括子串) => A 不包括 B,大小写不敏感
  • else - 布尔运算的结果为假时执行的子命令,需要使用引号包裹(闭包不需要)
  • (closure/subcommand) - 布尔运算的结果为真时执行的子命令,需要使用引号包裹(闭包不需要)

返回值:子命令的执行结果

while

循环运行某些命令,直到满足特定条件。在循环的每一步中,它都会比较变量 left 和变量 right 的值,如果条件为真,则执行任何有效斜线命令,否则退出循环。可用的布尔运算、变量处理、字面值和子命令集与 /if 命令相同。

/while [left=varname/string/number] [right=varname/string/number] [rule=gt/gte/lt/lte/eq/neq/not/in/nin] [guard=off] (closure/subcommand)
  • left - 第一个运算对象
  • right - 第二个运算对象
  • rule - 对运算对象进行的布尔运算规则
  • guard - 限制循环次数。要禁用并允许无穷循环,可设置 guard=off(默认为 on,开启时次数限制为 100)
  • (closure/subcommand) - 布尔运算的结果为真时执行的子命令,需要使用引号包裹(闭包不需要)

返回值:最后执行的命令的结果


例:将 i 的值每次加 1 直到 10,然后输出结果值 10

1
2
3
/setvar key=i 0 |
/while left=i right=10 rule=lt "/addvar key=i 1" |
/echo {{getvar::i}} 

其他

times

将子命令运行指定次数。

/times [guard=off] (number) (closure/subcommand)
  • number - 重复次数
  • closure/subcommand - 子命令,斜线命令需要放在引号中,闭包不需要
  • {{timesIndex}} - 宏,显示当前迭代次数(以零为起始)
  • guard - 限制迭代次数。要禁用并允许无穷循环,可设置 guard=off(默认为 on,开启时次数限制为 100)

返回值:最后一次执行的命令结果


例:以下命令的结果是 101。添加 guard=off 后 ( /times guard=off 105 "/addvar key=i 1"),结果为 106

/setvar key=i 1 | 
/times 105 "/addvar key=i 1"

以下命令依次显示 0~3

/times 4 "/echo {{timesIndex}}"

delay

将下一条命令延迟指定的毫秒数后再运行。(别名:/wait,/sleep)

/delay (time)
  • time (number) - 延迟的世界,单位是毫秒

返回值:无

使用 LLM

生成文本

gen

使用提供的提示词生成文本,并通过管道将其传递给下一条命令。

/gen [lock=on/off] [name=string] [length=number] [as=system/name] (prompt)
  • lock - 生成时是否阻止用户输入,默认为 off
  • name - 指示模式的提示词内名称 (Chat Completion API 不支持此功能)
  • length - 限制 API 响应的 token 长度
  • as - 可以是 system (默认) 或 char 。定义最后提示行的格式。char 将使用角色名,system 将不使用角色名或使用中性角色名。(用于 Text Completion API)
  • prompt - 发送给 LLM 的提示词

返回值:LLM 生成的文本

genraw

使用提供的提示词生成文本,并通过管道将文本传递给下一条命令,不会发送角色卡,世界书等提供的提示词之外的内容。

/genraw [lock=on/off] [instruct=on/off] [stop=list] [as=system/char] [system=string] [length=number] (prompt)
  • lock - 生成时是否阻止用户输入,默认为 off
  • instruct - 已启用指示模式的情况下,允许在输入提示词上使用指示格式。默认为 on (Chat Completion API 不支持此功能)
  • stop - JSON 序列化的字符串数组。为本次生成添加自定义停止字符串 (如果 API 支持)
  • as - 可以是 system (默认) 或 char 。定义最后提示行的格式。char 将使用角色名,system 将不使用角色名或使用中性角色名。(用于 Text Completion API)
  • system - 提示词起始的系统提示
  • length - 限制 API 响应的 token 长度
  • prompt - 发送给 LLM 的提示词

返回值:LLM 生成的文本


例:

/genraw Write a funny message from Cthulhu about taking over the world. Use emojis. |
/popup <h3>Cthulhu says:</h3><div>{{pipe}}</div>

genraw


trigger

触发正常生成(相当于点击 "发送 "按钮)。如果在群组聊天中,则可以使用以 1 为起始的序号或角色名称触发对应角色的回复,否则会根据群组设置触发回复。

/trigger [await=bool]
  • await - 后续命令是否等待触发后再继续,默认值:false

返回值:无


例:触发群组的成员列表中第一位角色的回复

/trigger 1

ask

向特定角色发送消息,即使此角色并非在当前聊天中,也会调取其角色卡与绑定世界书中的内容,以及当前聊天的历史记录一起发送至 LLM。所得到的回复显示在当前聊天内。

/ask [name=string] [return=pipe|object|toast-html|toast-text|console|none] (prompt)
  • name - 角色名
  • return - 提供返回值的方式,默认为 none
    • console:将返回值(对象)记录到控制台
    • none:无返回值
    • object:以对象(或数组)形式返回 pipe,供下一条命令使用
    • pipe:返回管道,执行下一条命令
    • toast-html:将返回值显示为吐司通知 - 可以显示 HTML
    • toast-text:将返回值显示为吐司通知 - 仅显示为文本
  • prompt (string) - 提示词

返回值:如果在 return(返回) 参数中指定,则可返回发送信息的文本

continue

继续聊天中的最后一条信息,可选择附加提示。(别名:/cont)

/continue [await=bool] (prompt)
  • await - 是否让下一条命令在继续生成结束后再执行,默认值:false
  • prompt (string) - 提示词,附加在酒馆预设中的 实用提示词-继续推动 提示词的后面

返回值:无

impersonate

调用 AI 帮答,可选择附加提示。(别名:/imp)

/impersonate [await=bool] (prompt)
  • await - 是否让下一条命令在 AI 帮答生成结束后再继续,默认值:false
  • prompt (string) - 提示词,附加在酒馆预设中的 实用提示词-AI帮答提示词 提示词的后面

stop

停止任何正在运行的流式生成。(别名:/generate-stop)

/stop

返回值:true/false,说明生成是否正在运行并被停止

此命令不能通过聊天输入执行,因为在生成过程中,从聊天输入发送任何信息或脚本都会被阻止。但可以通过自动化或 QR 脚本/按钮执行该命令

提示词注入

inject

/inject [id=string] [position=before/after/chat] [depth=number] [scan=bool] [role=system/user/assistant] [ephemeral=bool] [filter=closure] (prompt)
  • id - 一个字符串或变量名,随后调用具有相同 ID 的 /inject 将覆盖之前的文本注入。
  • position - 设置提示词注入的位置。默认值: after
    • after :在 main prompt 之后
    • before : 在 main prompt 之前
    • chat: 在聊天记录中
  • depth - 若 position 为 chat,能设置在聊天记录中的注入深度。0 表示在最后一条信息之后插入,1 表示在最后一条信息之前插入,等等。默认值:4
  • scan - 注入的内容是否触发世界书扫描,默认值:false
  • role - 若 position 为 chat,以何种 role 注入,默认值:system
  • ephemeral - 生成后是否移除注入的提示词,默认值:false
  • filter - 如果定义了过滤器,则只有在闭包返回 true 时才会执行注入操作
  • prompt - 注入的提示词。空字符串将清空保存在 id 中的提示词

返回值:无

listinjects

在聊天界面的系统消息中显示脚本为当前聊天添加的所有提示词注入的列表。

/listinjects [format=popup|chat|none]
  • format - 脚本注入的 JSON 对象, 默认在弹出窗口中显示注入信息。使用 format 参数更改输出格式

返回值:无

flushinjects

删除脚本为当前聊天添加的所有提示注入。

/flushinjects

返回值:无

作者注释

note

设置当前聊天的作者注释。

/note (text)
  • text (string) - 要添加到作者注释的内容

返回值:无

note-frequency

设置作者注释的插入频率。(别名:/freq,/note-freq)

/note-frequency (frequency)
  • frequency (number) - 0 = 禁用,1 = 始终触发,2 = 间隔一次用户输入触发,以此类推

返回值:无

note-depth

设置作者注释的插入深度。(别名:/depth)

/note-depth (depth)
  • depth (number) - 插入深度,0 表示在最后一条信息之后插入,1 表示在最后一条信息之前插入,以此类推。使用此命令会自动将作者注释的插入位置切换到 chat 中

返回值:无

note-position

设置当前聊天的作者注释位置。(别名:/pos,/note-pos)

/note-position (position)
  • position (chat/scenario) - 设置作者注释的位置。
    • before : 在 main prompt 之前
    • after:在 main prompt 之后
    • chat: 在聊天记录中

返回值:无

note-role

设置当前聊天的作者注释插入时的角色。

/note-role (role)
  • role - 设置作者注释以什么角色插入。
    • system : 系统
    • user:用户
    • assistant: AI

返回值:无

聊天记录

获取聊天记录

messages

访问当前选定聊天中的信息。(别名:/message)

/messages [names=off/on] [hidden=off/on] [role=system/assistant/user] (specified message)
  • name - 是否在消息开头显示对应的角色名,默认值:off
  • hidden - 是否包含已隐藏的消息,默认值:on
  • role - 只输出某一角色的消息
  • specified message (number/range) - 访问的消息编号或某一范围。可使用 start-finish 格式获取范围内的聊天记录,包含始末编号的对应消息。第一条消息(即开场白)的编号为 0。

返回值:获取消息的内容


例:
获取第 5 至第 10 条消息的内容

/messages 5-10

获取最后 3 条信息

1
2
3
/setvar key=start {{lastMessageId}} |
/addvar key=start -2 |
/messages {{getvar::start}} - {{lastMessageId}} |

注意

如果范围不可满足,即编号无效或请求的信息多于存在的信息,则返回空字符串。

发送到聊天记录

send

将指定消息添加到聊天记录,但不触发生成。

/send [compact=bool] [at=number/varname] [name=string/varname] [return=pipe|object|toast-html|toast-text|console|none] (text)
  • compact - 是否使用紧凑型布局, 默认值:false
  • at - 发送到聊天记录的位置编号,第一条消息(即开场白)的编号为 0,但当 at 为 0 时,判断为深度,此时插入位置为最新一条消息。支持负数,负数时判断为深度。不设置时默认插入到聊天记录的末尾
  • name - 发送后消息显示的角色名,若使用的字符串与变量名重合,即使添加双引号也依旧判断为变量。使用紧凑型布局时不会显示名字。默认值: {{user}}
  • return - 提供返回值的方式,默认为 none
    • console:将返回值(对象)记录到控制台
    • none:无返回值
    • object:以对象(或数组)形式返回 pipe,供下一条命令使用
    • pipe:返回管道,执行下一条命令
    • toast-html:将返回值显示为吐司通知 - 可以显示 HTML
    • toast-text:将返回值显示为吐司通知 - 仅显示为文本
  • text (string) - 消息内容

返回值:如果在 return(返回) 参数中指定,则可返回发送信息的文本


例:
两种布局的差别

/send compact=true 紧凑型布局
/send 普通布局

send


sendas

以特定角色的身份发送信息。不会触发生成。

/sendas [name=string] [compact=bool] [at=number/varname] [return=pipe|object|toast-html|toast-text|console|none] (text)
  • name - 角色名称,可以使用非当前聊天对象,但存在于角色列表中的角色名。该角色头像也会一同显示。
  • compact - 是否使用紧凑型布局, 默认值:false
  • at - 发送到聊天记录的位置编号,第一条消息(即开场白)的编号为 0 ,支持负深度。不设置时默认插入到聊天记录的末尾
  • return - 提供返回值的方式,默认为 none
    • console:将返回值(对象)记录到控制台
    • none:无返回值
    • object:以对象(或数组)形式返回 pipe,供下一条命令使用
    • pipe:返回管道,执行下一条命令
    • toast-html:将返回值显示为吐司通知 - 可以显示 HTML
    • toast-text:将返回值显示为吐司通知 - 仅显示为文本
  • text (string) - 消息内容

返回值:如果在 return(返回) 参数中指定,则可返回发送信息的文本

sys

添加一条不属于用户或角色的中立旁白信息。显示的名称与 role 中的 system 无关,可使用 /sysname 命令进行自定义。参数的详细定义和返回值同 /send

/sys [compact=bool] [at=number/varname] [return=pipe|object|toast-html|toast-text|console|none] (text)

sysname

为该聊天中的系统旁白信息设置名称(仅显示)。

/sysname (text)
  • text (string) - 旁白名称,默认值:system,留空重置。

返回值:无

comment

添加一个隐藏旁白,该内容会在聊天中显示,但不会发送给 LLM。参数的详细定义和返回值同 /send

/comment [compact=bool] [at=number/varname] (text)

addswipe

为最后一条角色发送的消息添加一次右滑轻扫,但并不会触发重新生成,仅显示用户输入的字符串。对用户,旁白或 /send 等命令生成的消息无效。(别名:/swipeadd)

/addswipe [switch=bool] (text)
  • switch - 是否切换到新的滑动
  • text (string) - 输入的内容会显示在右滑后的消息里

返回值:最新滑动的 ID 号

消息操作

hide

隐藏一条或数条消息,隐藏的内容不会发送给 LLM。参数和返回值同 /messages

/hide [name=string] (specified message)
  • name - 只隐藏某个特定角色的信息
  • specified message (number/range) - 访问的消息编号或某一范围。可使用 start-finish 格式获取范围内的聊天记录,包含始末编号的对应消息。第一条消息(即开场白)的编号为 0,支持负深度。

返回值:无

unhide

取消隐藏一条或数条消息。参数和返回值同 /messages

/unhide [name=string] (specified message)
  • name - 只取消隐藏某个特定角色的信息
  • specified message (number/range) - 访问的消息编号或某一范围。可使用 start-finish 格式获取范围内的聊天记录,包含始末编号的对应消息。第一条消息(即开场白)的编号为 0,支持负深度。

返回值:无

cut

从聊天中剪切指定的信息或连续片段。

/cut (specified message)
  • specified message (number/range) - 访问的消息编号或某一范围。可使用 start-finish 格式获取范围内的聊天记录,包含始末编号的对应消息。第一条消息(即开场白)的编号为 0,支持负深度。

返回值:剪切信息文本,多个片段由换行进行分隔

delmode

进入信息删除模式,如果提供数字参数,则自动删除最近的 N 条信息。(别名:/del)

/delmode (delnum)
  • delnum (number) - 从最新一条消息开始计数,删除的消息条目数

返回值:无

delswipe

删除最后一条聊天信息中的轻扫消息。(别名:/swipedel)

/delswipe (delnum)
  • delnum (number) - 从 1 开始计数,删除的指定 ID 的轻扫消息。如果未提供轻扫消息 ID,则会删除当前 ID 的消息。

返回值:无

delname

删除当前聊天中指定名称下的所有消息。(别名:/cancel)

/delname (character name)
  • character name (string) - 角色名称

返回值:无

delchat

删除当前聊天。

/delchat

返回值:无

closechat

关闭当前聊天。

/closechat

返回值:无

sync

将当前选定的用户角色同步到当前聊天中用户名。

/sync

reasoning-get

获取消息的推理块内容。如果消息没有推理块,则返回空字符串。(别名:/get-reasoning)

/reasoning-get (MessageID)
  • MessageID - 消息 ID。如果未提供,则使用最后一条消息的 ID。

返回值:推理块内容字符串

reasoning-parse

使用推理格式设置从字符串中提取推理块。(别名:/parse-reasoning)

/reasoning-parse [regex=bool] [return=reasoning|content] [strict=bool] (text)
  • regex - 是否将正则表达式脚本应用于推理内容。默认值:true
  • return - 是返回已解析的推理结果,还是返回不含推理结果的内容。默认值:reasoning
  • strict - 是否要求推理块位于字符串的开头(不包括空白)。默认值:true
  • text (string) - 输入字符串

返回值:根据 return 参数决定返回值

reasoning-set

给消息设置的推理块。(别名:/set-reasoning)

/reasoning-set [at=number] (text)
  • at - 消息 ID。如果未提供,则使用最后一条消息的 ID。
  • text - 推理块内容

返回值:推理块内容

聊天分支

branch-create

从选定的信息中创建一个新分支。如果没有提供消息 ID,则将使用最后一条消息。
创建分支会自动为分支选择一个名称。创建分支后,分支聊天将自动打开。
如果不想跳转到新聊天,请使用检查点和 /checkpoint-create

/branch-create (number)
  • number - 消息 ID

返回值:新分支名称

checkpoint-create

使用提供的名称为所选信息创建一个新的检查点。如果没有提供消息 ID,将使用最后一条消息。留空检查点名称可自动生成检查点。
创建的检查点将与消息永久链接。如果检查点已经存在,其链接将被覆盖。创建检查点后,可以使用带有检查点名称的 /go 命令或消息上的 /checkpoint-go 命令,用检查点标记打开检查点聊天。
如果想跳转到新的聊天,请使用分支和 /branch-create

/checkpoint-create [mesId=number] (name)
  • mesID - 消息 ID
  • name - 检查点名称

返回值:新检查点名称


例:
下面的命令将为当前角色的最新信息创建一个新的检查点,并将其保存为本地变量以供将来使用。

/checkpoint-create mes={{lastCharMessage}} Checkpoint for char reply |
/setvar key=rememberCheckpoint {{pipe}}

checkpoint-exit

退出检查点聊天。如果不在检查点聊天中,则返回空字符串。

/checkpoint-exit

返回值:退出的聊天名称。如果不在检查点聊天中,则返回空字符串。

checkpoint-get

获取与所选消息关联的检查点名称。如果没有提供消息 ID,将使用最后一条消息。如果没有链接检查点,结果将为空。

/checkpoint-get (number)
  • number - 消息 ID

返回值:聊天名称

checkpoint-go

打开与所选消息链接的检查点。如果没有提供报文 ID,将使用最后一条消息。
如果要确保所选消息有一个检查点,请使用 /checkpoint-get

/checkpoint-go (number)
  • number - 消息 ID

返回值:检查点名称

checkpoint-list

列出该聊天中的所有现有检查点。

/checkpoint-list [links=bool]
  • links - 获取检查点的所有链接/聊天名称列表,而不是信息 ID。如果设置为 true,则返回所有检查点链接,默认值:false

返回值:该聊天中所有现有检查点的 JSON 数组

checkpoint-parent

获取此检查点的父聊天名称。如果不在检查点聊天中,返回空字符串。

/checkpoint-parent

返回值:该检查点的父聊天名称

世界书

世界书状态

world

设置全局世界书的激活状态。

/world [state=off/toggle] [silent=bool] (name)
  • state - 设置世界书状态,关闭或在开关两种状态切换。不提供此参数则默认状态为激活
  • silent - 是否禁止弹出 Toast 弹窗, 默认值:false
  • name (string) - 世界书名称,不提供此参数则禁用所有全局世界书

返回值:无

获取世界书内容

getcharbook

获取角色绑定的传说书名称并将其传入管道。如果未设置角色传说书,则返回空字符串。如果不提供角色名称,则无法在群聊中使用。(别名:/getcharlore,/getcharwi)

/getcharbook [type=primary|additional|all] (name)
  • type - 要获取的传说书展示类型,为"all" 和 "additional" 时返回列表,默认值:primary
  • name(number/string) - 角色名称或唯一的角色标识符。如果未提供,则使用当前角色。

    返回值:传说书名称或传说书名称列表

getchatbook

获取当前聊天绑定的世界书名称,如果未绑定,则创建一个新的,名称默认为 Chat_Book_{charname}_{time} 然后将其传递到管道中。(别名:/getchatlore,/getchatwi)

/getchatbook [name=string]
  • name - 如果创建一个新的传说书名称,将自动生成

    返回值:世界书名称

getpersonabook

获取当前角色绑定的传说书名称,并将其传入管道。如果未设置,则返回空字符串。(别名:/getpersonalore,/getpersonawi

/getpersonabook

返回值:传说书名称

findentry

使用字段值的模糊匹配查找指定世界书中条目的 UID,并将其传入管道。若有多个匹配结果,输出靠前的单个 UID。(别名:/findlore,/findwi)

/findentry [file=string] [field=string] (text)
  • file - 世界书名称
  • field - 字段值,详见此章末尾的有效输入字段表,默认值:key
  • text (string) - 匹配的内容

返回值:UID


例:
模糊匹配名叫 Lore 的世界书中关键字含有 Shadowfang 的条目,并输出 UID

/findentry file=Lore field=key Shadowfang

getentryfield

从指定的世界书中获取特定 UID 的条目的字段值,并将其传入管道。(别名:/getlorefield,/getwifield)

/getentryfield [file=string] [field=string] (UID)
  • file - 世界书名称
  • field - 获取的字段值,详见此章末尾的有效输入字段表,默认值:content
  • UID (number) - 指定条目的 UID

返回值:获取的字段值内容


例:
获取名叫 Lore 的世界书中 UID123 的条目的内容

/getentryfield file=Lore field=content 123

wi-get-timed-effect

从指定的世界书中获取某个 UID 的条目的定时效果(粘性/冷却/delay)的当前状态。

/wi-get-timed-effect [file=string] [effect=sticky/cooldown/delay] [format=bool/number] (UID)
  • file - 世界书名称
  • effect - 效果名称
  • format - 以何种格式输出状态,布尔值(true/false)或效果持续的剩余时间。默认值:bool
  • UID (number) - 指定条目的 UID

返回值:条目的效果状态


例:
以下命令查询世界书 Lore 的 UID 为 123 的条目粘性效果是否激活,返回 truefalse

/wi-get-timed-effect file=Lore effect=sticky format=bool 123

以下命令查询世界书 Lore 的 UID 为 123 的条目粘性效果剩余的持续时间,如果未激活则返回 0

/wi-get-timed-effect file=Lore effect=sticky format=number 123

设定世界书内容

createentry

在指定世界书中创建新条目,并将 UID 从管道中传出。(别名:/createlore,/createwi)

/createentry [file=string] [key=string] (text)
  • file - 世界书名称。若不存在,会新建同名世界书
  • key - 条目关键词。要为关键词设置多个值,请使用逗号分隔的列表作为值。
  • text (string) - 条目内容

返回值:新条目的 UID


例:
在名叫 Lore 的世界书新增条目,条目的关键词为 Shadowfang, sword, weapon,内容为 The sword of the king

/createentry file=Lore key=Shadowfang,sword,weapon The sword of the king

setentryfield

设置指定世界书中特定 UID 条目的字段值。(别名:/setlorefield,/setwifield)

/setentryfield [file=string] [uid=number] [field=string] (text)
  • file - 世界书名称
  • uid - 指定条目的 uid,uid 必须存在
  • field - 要设置的字段值,详见此章末尾的有效输入字段表。要为关键词设置多个值,请使用逗号分隔的列表作为值。默认值:content
  • text (string) - 字段值的内容

返回值:无


例:
设置名叫 Lore 的世界书中 UID123 的条目的关键词,关键词为 Shadowfang, sword, weapon

/setentryfield file=Lore uid=123 field=key Shadowfang,sword,weapon

wi-set-timed-effect

为指定世界书中带有 UID 的条目设置定时效果(粘性/冷却/delay)。持续时间必须在条目本身中设置。仅适用于当前聊天。启用已激活的效果会刷新持续时间。如果最后一条聊天信息被轻扫或删除,该效果将被移除。

/wi-get-timed-effect [file=string] [uid=number] [effect=sticky/cooldown/delay] (mode) (UID)
  • file - 世界书名称
  • uid - 指定条目的 uid,uid 必须存在
  • effect - 效果名称
  • mode (on/off/toggle) - 效果的状态,开/关/切换。默认值:toggle

返回值:无


例:
以下命令将世界书 Lore 的 UID 为 123 的条目的粘性效果激活

/wi-set-timed-effect file=Lore uid=123 effect=sticky on

有效输入字段

字段值 用户界面显示元素 值类型
addMemo 备注 Boolean (1/0)
automationId 自动化ID String
content 内容 String
comment 标题/备忘录 String
key 主要关键词 List of strings
keysecondary 可选过滤器 List of strings
constant 始终启用 Boolean (1/0)
disable 始终禁用 Boolean (1/0)
order 顺序 Number
sticky 粘性 Number
cooldown 冷却 Number
delay 延迟 Number
selective 受条件控制 Boolean (1/0)
selectiveLogic 逻辑 (见下方)
excludeRecursion 排除递归 Boolean (1/0)
preventRecursion 防止进一步递归 Boolean (1/0)
delayUntilRecursion 延迟到递归 Boolean (1/0)
probability 触发率% Number (0-100)
useProbability 判断是否使用触发率属性 Boolean (1/0)
depth 深度 Number (0-999)
position 位置 (见下方)
role 角色 (见下方)
scanDepth 扫描深度 Number (0-100)
caseSensitive 区分大小写 Boolean (1/0)
matchWholeWords 匹配整个单词 Boolean (1/0)
vectorized 向量存储匹配 Boolean (1/0)
useGroupScoring 是否考虑了组权重 Boolean (1/0)
group 组名称 String
groupOverride 组优先级 Boolean (1/0)
groupWeight 组权重 Number

逻辑

  • 0 = 与任意
  • 1 = 非所有
  • 2 = 非任意
  • 3 = 与所有

Position

  • 0 = main prompt 之前
  • 1 = main prompt 之后
  • 2 = 作者注释之前
  • 3 = 作者注释之后
  • 4 = 聊天记录中
  • 5 = 对话示例之前
  • 6 = 对话示例之后

角色 (仅在 Position = 4 时有效)

  • 0 = System
  • 1 = User
  • 2 = Assistant

文本操作

编辑文本

replace

根据模式替换所提供字符串中的文本。(别名:/re)

/replace [model=literal|regex] [pattern=string] [replacer=string] (text)
  • model (string) - 匹配模式。如果modelliteral(或省略),则model为字面搜索字符串(区分大小写)。如果modelregexpattern会被解析为 ECMAScript 正则表达式。默认值:literal
  • pattern (string) - 匹配规则。
  • replacer (string) - 以何种内容替换。替换器根据输入文本中的模式进行替换,如果省略replacer,替换内容将是空字符串。
  • text (string) - 需要匹配的文本。

返回值:替换后的文本


例:

1
2
3
4
5
/let x Blue house and blue car ||                                                                        
/replace pattern="blue" {{var::x}}                                | /echo  |/# Blue house and  car     ||
/replace pattern="blue" replacer="red" {{var::x}}                 | /echo  |/# Blue house and red car  ||
/replace mode=regex pattern="/blue/i" replacer="red" {{var::x}}   | /echo  |/# red house and blue car  ||
/replace mode=regex pattern="/blue/gi" replacer="red" {{var::x}}  | /echo  |/# red house and red car   ||

upper

将提供的文本字符串转换为大写。(别名:/uppercase,/to-upper)

/upper (text)
  • text (string) - 需要转换的字符串文本

返回值:调整后的字符串

lower

将提供的文本字符串转换为小写。(别名:/lowercase,/to-lower)

/lower (text)
  • text (string) - 需要转换的字符串文本

返回值:调整后的字符串

修剪文本

substr

从提供的字符串中提取文本。(别名:/substring)

/substr [start=number] [end=number] (text)
  • start - 起始索引
  • end - 结束索引
  • text (string) - 被修剪字符串

返回值:修剪后的字符串


例:
如果 start 被省略,则视为 0。 如果 start < 0,索引从字符串的末尾开始计算。如果 start >= 字符串长度,则返回空字符串。如果省略了 end,或者 end >= 字符串长度,则提取到字符串的末尾。如果 end < 0,索引从字符串的末尾开始计算。如果 end <= start 在对负值进行规范化处理后,返回空字符串。

1
2
3
4
5
/let x The morning is upon us.     ||                                     
/substr start=-3 {{var::x}}         | /echo  |/# us.                    ||
/substr start=-3 end=-1 {{var::x}}  | /echo  |/# us                     ||
/substr end=-1 {{var::x}}           | /echo  |/# The morning is upon us ||
/substr start=4 end=-1 {{var::x}}   | /echo  |/# morning is upon us     ||

trimtokens

将文本的开头或结尾修剪为指定的 token 数。

/trimtokens [limit=number] [direction=start/end] (text)
  • limit - 剩余的 token 数
  • direction - 保留的位置,为 start 则删去末尾的字符串,end 反之。默认值:end
  • text (string) - 被修剪字符串

返回值:修剪后的字符串


例:

/trimtokens limit=5 direction=start This is a long sentence with many words

trimstart

将输入内容剪切到第一个完整句子的开头,即删除输入内容的第一个完整句子。

/trimstart (text)
  • text - 需要插入的内容

返回值:修剪后的字符串


例:
此命令运行结果为 And here is another sentence.

/trimstart This is a sentence. And here is another sentence.

备注

此命令无法识别中文句号,且会删除英文句号后的一个角色。如上例所示,如果输入中句号后没有空格: This is a sentence. And here is another sentence.,则会返回 nd here is another sentence.

trimend

将输入内容剪切到最后一个完整句子的末尾。即文本末尾不带英文句号 . 的字符串删除。其他内容同 /trimstart

/trimend (text)

文本匹配

fuzzy

将输入文本与字符串列表进行模糊匹配,并将最佳匹配字符串输出到管道中。

/fuzzy [list=list] [threshold=number] (text)
  • list - 一个 JSON 序列化的字符串数组,其中包含候选条目。也可以指定一个包含列表的变量名。
  • threshold - 可以控制匹配的严格程度。低值(最小 0.0)表示匹配非常严格。1.0(最大值)表示匹配非常宽松,可以匹配任何内容。默认值:0.4
  • mode - 可选的 mode 参数用于控制多个项目匹配文本时的行为。
    • first(默认)返回低于阈值的第一个匹配项。
    • best(最佳)返回低于阈值的最佳匹配项。
  • text (string) - 准备匹配的字符串

返回值:第一个符合条件的候选条目


例:

/fuzzy list=["a","b","c"] threshold=0.4 abc

regex

针对指定文本执行 Regex 扩展中的正则脚本。必须启用脚本才生效。

/regex [name=string] (text)
  • name - 脚本名称
  • text (string) - 准备匹配的字符串

返回值:匹配结果

配置快速回复

创建

qr-set-create

创建新快速回复集,再次运行会覆盖现有预设。(别名:/qr-presetadd)

/qr-set-create [nosend=bool] [before=bool] [inject=bool] (name)
  • nosend - 禁用在用户输入中发送/插入(对斜线命令无效), 默认值:false
  • before - 用户发送消息时,是否先运行程序,LLM 再处理发送的消息内容,默认值:false
  • inject - 自动注入用户输入(如果禁用,则使用 {{input}} 宏进行手动注入),默认值:false
  • name (string) - 快速回复集的名称

返回值:无


例:
运行以下命令后

/qr-set-create nosend=true before=true inject=true MyNewPreset

qr-set-create


qr-create

创建新的快速回复。

/qr-create [label=string] [set=string] [hidden=bool] [startup=bool] [user=bool] [bot=bool] [load=bool] [group=bool] [title=string] (text)
  • label - 按钮上的文本,也是快速回复的名称
  • set - 快速回复集的名称,必须事先创建好,查询不到会报错
  • hidden - 是否隐藏按钮,默认值:false
  • startup - 应用程序启动时自动执行,默认值:false
  • user - 用户发送消息时自动执行,默认值:false
  • bot - AI 发送消息时自动执行,默认值:false
  • load - 聊天加载时自动执行,默认值:false
  • group - 群组成员发送消息前自动执行,默认值:false
  • title - 光标停留在按钮上时显示的标题/工具提示
  • text (string) - 命令内容

返回值:无


例:
在快速回复集 MyPreset 下创建名叫 MyButton 的程序,内容为/echo 123

/qr-create set=MyPreset label=MyButton /echo 123

qr-contextadd

添加快速回复上下文菜单。

/qr-contextadd [set=string] [label=string] [chain=bool] (name)
  • set - 快速回复集的名称,必须事先创建好,查询不到会报错
  • label - 快速回复名称,必须事先创建好,查询不到会报错
  • chain - 启用后,当前快速回复将与上下文菜单中点击的命令一起(先于命令)发送,默认值:false
  • name - 加入到子菜单中的另一个快速回复集,必须事先创建好,查询不到会报错

例:
MyPresetMyButton 添加上下文菜单 MyOtherPreset 并链接

/qr-contextadd set=MyPreset label=MyButton chain=true MyOtherPreset

qr-contextadd


获取

qr-get

获取快速回复的属性。

/qr-get [set=string] [label=string] [id=number]
  • set - QR 集的名称, 例如:set=PresetName1
  • label - 按钮上的文字,例如:label=MyButton
  • id - QR 的数字 ID,例如:id=42

返回值:包含所有 QR 属性的字典


例:

/qr-get set=MyPreset label=MyButton | /echo
/qr-get set=MyPreset id=42 | /echo

更新

qr-update

更新指定快速回复。未注明参数同/qr-create

/qr-create [newlabel=string] [label=string] [set=string] [hidden=bool] [startup=bool] [user=bool] [bot=bool] [load=bool] [group=bool] [title=string] (text)
  • newlabel - 新的快速回复名称
  • label - 需要更新的快速回复名称
  • set - 快速回复集的名称,必须事先创建好,不存在会报错

返回值:无


例:
MyPreset 中的 MyButton 更名为 MyRenamedButton,并修改命令为/echo 321

/qr-update set=MyPreset label=MyButton newlabel=MyRenamedButton /echo 321

qr-set-update

更新一个现有的快速回复集。所有参数和返回值同 /qr-set-create。(别名:/qr-presetupdate)

/qr-set-update [nosend=bool] [before=bool] [inject=bool] (name)

运行

run

运行来自作用域变量的闭包,或来自当前启用的命令集或其他命令集的具有指定名称的快速回复,不使用 args 参数时可以简写为 /: (后不接空格)。已命名的参数在快速回复中用 {{arg::key}} 引用。(别名:/call,/exec)

/run [args=string/number/bool/list/dictionary] (name)
  • args - 已命名的参数
  • name (string) - 闭包或快速回复的名称。如果当前命令集与其他命令集具有同名的 label,可以使用 /run QRpreset 1. QRlabel 1 来指定程序。此情况下,系统将首先查找名叫 QRpreset 1. QRlabel 1 的程序,不存在的情况下,才搜索命令集名称 QRpreset 1 和其下的 QRlabel 1

返回值:脚本执行的结果


例一:使用/:调用
新建快速回复,名称(label)为 测试。命令如下:

/echo 这是一条测试消息

新建另一个快速回复,名称(label)为 调用测试。命令如下:

/: 测试

运行 调用,会弹出 这是一条测试消息 的窗口。

例二:传递参数
新建快速回复,名称(label)为 年龄。命令如下:

/echo 今年是 {{arg::year}} ,我 {{arg::age}} 岁了

新建另一个快速回复,名称(label)为 调用年龄。命令如下:

/run year=2024 age=99 年龄

运行 调用年龄,会弹出 今年是 2024 ,我 99 岁了 的窗口。

例三:跨命令集指定程序
调用名叫 另一个命令集 下的 年龄 程序。命令如下:

/run year=2024 age=99 另一个命令集. 年龄

break

跳出通过 /run 或 /: 执行的循环或闭包。

/break value (string|number|range|bool|varname|closure|subcommand|list|dictionary)
  • value - 以需要向下传递的管道值代替当前的管道值。

返回值:无

qr

激活已启用的某一快速回复程序。

/qr (index)
  • index (number) - 根据快速回复按钮从左至右的排序确定序号。最左侧为 0。确定序号后,即使隐藏按键命令也能运行。

返回值:无

设置

qr-set

设置全局的 Chat Quick Reply Sets 快速回复集启用状态。

/qr-set [visible=bool] (name)
  • visible - 设置启用状态,默认值:true
  • name - 快速回复集名称

返回值:无

qr-chat-set

设置当前聊天的 Chat Quick Reply Sets 快速回复集启用状态。

/qr-chat-set [visible=bool] (name)
  • visible - 设置启用状态,默认值:true
  • name - 快速回复集名称

返回值:无

qr-list

获取此快速回复集中所有快速回复程序的名称列表。

/qr-list (name)
  • name - 快速回复集名称

返回值:程序名列表,多个程序用 , 分隔

qr-set-list

获取此快速回复集中所有快速回复程序的名称列表。

/qr-set-list (type)
  • type (all/global/chat) - 快速回复集的启用类型,默认值:all

返回值:快速回复集列表,多个集用 , 分隔

删除

qr-delete

删除指定的快速回复程序。

/qr-delete [set=string] [label=string]
  • set - 指定快速回复集
  • label - 指定集中的某个快速回复程序,如果没有提供此参数,则删除整个集合。

返回值:无

qr-set-delete

删除指定的快速回复集。

/qr-set-delete (name)
  • name (string) - 指定快速回复集

返回值:无

qr-contextclear

移除某个快速回复程序的所有上下文菜单集。

/qr-contextclear [set=string] (name)
  • set - 指定快速回复集
  • name (string) - 指定集中的某个快速回复程序

返回值:无


例:
删除 MyPresetMyButton 的所有上下文菜单

/qr-contextclear set=MyPreset MyButton

qr-contextdel

移除某个快速回复程序的指定上下文菜单集。

/qr-contextclear [set=string] [label=string] (name)
  • set - 指定快速回复集
  • label - 指定集中的某个快速回复程序
  • name (string) - 要移除的上下文菜单集名称

返回值:无


例:
移除 MyPresetMyButton 的上下文菜单 MyOtherPreset

/qr-contextdel set=MyPreset label=MyButton MyOtherPreset

用户界面

聊天窗口

chat-render

将指定数量的消息呈现到聊天窗口中。如果没有提供参数,则显示所有的消息。

/chat-render [scroll=bool] (number)
  • scroll - 呈现后滚动到顶部。默认值:false
  • number - 消息数量

返回值:无

chat-reload

重载当前聊天。

/chat-reload

返回值:无

角色卡

rename-char

重命名当前角色卡。

/rename-char [silent=bool] [chats=bool] (name)
  • silent - 是否隐藏任何弹出窗口,隐藏后之前聊天记录的名称不会更改。如果为 false,则会弹出取名窗口,可以不提供 name 参数。默认值:true
  • chats - 是否重命名之前所有聊天记录中的角色名
  • name (string) - 新的角色名

返回值:true 或 false,代表重命名的成功或失败

renamechat

重命名当前聊天文件名。

/renamechat (name)
  • name (string) - 聊天文件名

返回值:无

random

用随机角色开始新的聊天。如果提供了参数,则只从具有指定标签的角色中选择。

/random (tag)
  • tag (string) - 指定某一个角色标签组

返回值:无

go

用角色或群组的名称打开聊天窗口,首先搜索完全匹配的名称,然后按前缀搜索,最后按子串搜索。(别名:/char)

/go (name)
  • name (string) - 角色或群组名称

返回值:无

chat-manager

打开当前角色/组的聊天记录管理器。(别名:/chat-history,/manage-chats)

/chat-manager

返回值:无

newchat

与当前角色开始新的聊天。

/newchat

返回值:无

closechat

关闭当前聊天。

/closechat

返回值:无

tempchat

同 AI 开启一个临时聊天。

/tempchat

返回值:无

UI 风格

theme

根据名称设置 UI 主题。

/theme (name)
  • name - 主题预设名称,必须是已存在的预设名

返回值:无

bubble

将信息样式设置为 "气泡聊天" 样式。(别名:/bubbles)

/bubble

返回值:无

flat

将信息样式设置为 "平面聊天" 样式。(别名:/default)

/flat

返回值:无

single

将信息样式设置为 "单一文档" 样式。(别名:/story)

/single

返回值:无

vn

切换视觉小说模式的开启/关闭。

/vn

返回值:无

movingui

按名称激活可移动 UI 预设。

/movingui (name)
  • name (string) - 可移动 UI 预设的名称

返回值:无

resetpanels

将可移动 UI 面板状态重置为默认预设。(别名:/resetui)

/resetpanels

返回值:无

panels

切换顶栏、左抽屉和右抽屉整体的可见性。(别名:/togglepanels)

/panels

返回值:无

css-var

将 CSS 变量设置为目标元素上的指定值。只支持设置变量名。变量名前必须有双破折号("--exampleVar")。不支持设置实际 CSS 属性。为此,可以使用主题设置中的自定义 CSS。 页面重载后,此值将消失!

/css-var [varname=string] [to=chat/background/zoomedAvatar/gallery] (value)
  • varname - CSS 变量名(以双破折号开头)
  • to - 将应用 CSS 变量的目标元素,默认值:chat
  • value - CSS 变量值

返回值:无


例:
将聊天文字的颜色设置为红色

/css-var varname="--SmartThemeBodyColor" #ff0000

去除放大头像的模糊效果

/css-var to=zoomedAvatar varname="--SmartThemeBlurStrength" 0

背景

bg

根据提供的文件名设置背景,允许使用部分名称进行模糊匹配查找。(别名:/background)

/bg (name)
  • name (string) - 文件名

返回值:无


例:
beach. jpg 设置为聊天背景

/bg beach. jpg

autobg

使用当前 AI 模型发送内置提示词,系统会根据聊天上下文自动从酒馆的背景图片库中选择一张背景并更换。(别名:/bgauto)

/autobg

返回值:无

bgcol

(测试中功能)UI 自动着色。

/bgcol

返回值:无

lockbg

锁定当前选定聊天的背景。(别名:/bglock)

/lockbg

返回值:无

unlockbg

解锁当前选定聊天的背景。(别名:/bgunlock)

/unlockbg

返回值:无

酒馆命令

全局

?

获取有关命令、文本样式、快捷键和宏的帮助。(别名:/help)

/? (slash/format/hotkeys/macros)

//

注释是脚本代码中人可读的解释或注解,不会对代码执行造成影响,以 ///# 开头,以 | 结尾

1
2
3
// 这是注释 |
/echo foo |
/# 这也是注释

reload-page

重新读取当前页面。所有后续命令将不再处理。

/reload-page

返回值:无

yt-script

通过 ID 或 URL 从 YouTube 视频中抓取文字记录。

/yt-script [lang=string] (youtube)
  • lang - ISO 639-1 语言代码,如 "en"
  • youtube (string) - YouTube 视频的 URL 或 ID

返回值:YouTube 视频的 URL 或 ID

is-mobile

如果当前设备是移动设备,则返回 true,否则返回 false。等同于 {{isMobile}} 宏。

/is-mobile

返回值:布尔值

LLM 模型

api

连接到一个 API。如果没有提供参数,它将返回当前连接的 API。

/api [quiet=bool] (api name)
  • quite - 是否在连接时显示 toast 提示信息,默认值:false
  • api name - 可用 API 见如下表格
kobold horde novel kcpp oai
openrouter openrouter-text ooba mancer vllm
aphrodite tabby koboldcpp togetherai llamacpp
ollama infermaticai dreamgen featherless huggingface
openai windowai claude scale ai 21
makersuite mistralai custom cohere perplexity
groq 01 ai blockentropy

返回值:当前连接的 api

api-url

返回当前选定 API 的 API 网址/服务器网址,包括端口。如果没有提供参数,它将返回当前的 API 网址。
此斜线命令适用于大多数文本补全源、KoboldAI Classic 以及与自定义 OpenAI 兼容的聊天补全源。如果不确定哪些 API 受支持,请检查此命令的可选 api 参数的自动完成功能。(别名:/server)

/api [api=name] [connect=bool] [quiet=bool] (url)
  • api - 可用 API 见如下表格
  • connect - 设置 URL 后是否自动连接 API。如果提供了手动 API 来设置 URL,请确保设置了 connect=false,因为自动连接只适用于当前选定的 API,或者考虑先用 /api 切换到它。
    • quiet - 取消 api 更改时的提示窗,默认为 false
  • url - 要连接的 API 网址
custom kobold ooba mancer vllm
koboldcpp togetherai llamacpp ollama infermaticai
featherless huggingface

返回值:当前的 API 网址

tokenizer

根据名称选择分词器。

/tokenizer (name)
  • name - 分词器名称。如果没有提供名称,则获取当前分词器。可用分词器见如下表格。
best_match none gpt 2 llama llama 3
nerd nerd 2 mistral yi claude
api_current

返回值:当前分词器

model

设置当前 API 的模型。

/model [quiet=bool] (name)
  • quiet - 取消模型更改时的提示窗,默认为 false
  • name (string) - 模型名称。若未提供此项参数,则获取当前模型名称。

返回值:模型名

preset

根据名称为当前 API 设置预设(破限)。

/preset (name)
  • name (string) - 预设名称。若未提供此项参数,则获取当前预设名称。

返回值:预设名

setpromptentry

打开或关闭当前使用的预设(破限)中的条目。(别名:/setpromptentries)

/setpromptentry [identifier=string/list] [name=string/list] (mode)
  • identifier - 预设中指定条目的输入标识符
  • name - 预设名称
  • mode (on/off/toggle) - 设置为开/关/切换状态。默认值:toggle

返回值:无

proxy

根据已保存的代理预设名称设置反向代理。

/proxy (name)
  • name (string) - 预设名称。若未提供此项参数,则获取当前预设名称。

返回值:预设名

tools-invoke

按名称调用已注册的工具。参数必须是 JSON 序列化对象。(别名:/tool-invoke)

/tools-invoke [parameters=dictionary] (name)
  • parameters - 传递给工具的参数。
  • name(string)- 要调用的工具名称。

返回值:无

tools-list

以 OpenAI 函数 JSON 格式获取所有已注册工具的列表。使用 return 参数指定返回值类型。(别名:/tool-list)

/tools-invoke [return=pipe|object|toast-html|toast-text|console|none]
  • return - 提供返回值的方式

返回值:所有已注册工具的列表。

tools-register

在工具注册表中注册一个新工具。

  • 参数必须是具有有效 JSON 模式的 JSON 序列化对象。
  • 未命名参数必须是接受函数参数作为本地脚本变量的闭包。
    更多信息请参阅 json-schema.orgOpenAI 函数调用。(别名:/tool-register)
    /tools-register [name=string] [description=string] [parameters=dictionary]
    [displayName=string]? [formatMessage=closure] [shouldRegister=closure]? (closure)
    
  • name - 工具名称。
  • description - 说明工具的作用。
  • parameters - 工具的参数。
  • displayName - 工具的显示名称。
  • formatMessage - 为格式化工具调用信息而执行的闭包。必须返回字符串。
  • shouldRegister - 要执行的闭包,用于确定工具是否应被注册。必须返回布尔值。
  • closure - 调用工具时要执行的闭包。

返回值:无


例:

/let key=echoSchema 
{ 
"$schema": "http://json-schema.org/draft-04/schema#", 
"type": "object", 
"properties": { 
"message": { "type": "string", 
"description": "The message to echo." 
} 
}, 
"required": [ 
"message" 
] 
} 
|| 
/tools-register name=Echo description="Echoes a message. Call when the user is asking to repeat something" parameters={{var::echoSchema}} {: /echo {{var::arg.message}} :}

tools-unregister

从工具注册表中取消工具注册。

/tools-unregister (name)
  • name - 要取消注册的工具名称。

返回值:无

高级格式化

context

根据名称选择上下文模板。如果未提供名称,则获取当前模板。

/context [quiet=bool] (name)
  • quiet - 取消模板更改时的提示窗,默认为 false
  • name (string) - 特定模板名称,模板名不存在会报错

返回值:当前模板名

instruct

按名称选择指令模式模板。如果尚未启用指示模式,则启用指示模式。如果未提供名称且指示模式已启用或传递了 forceGet=true 则获取当前指示模板。

/instruct [quiet=bool] [forceGet=bool] (name)
  • quiet - 取消模板更改时的提示窗,默认为 false
  • forceGet - 即使指示模式已禁用,也可强制获取名称,默认为 false
  • name (string) - 模板名

返回值:当前模板名

instruct-on

启用指示模式。

/instruct-on

返回值:无

instruct-off

关闭指示模式。

/instruct-off

返回值:无

stop-strings

设置自定义停止字符串列表。如果没有提供值,则获取列表。(别名:/stopping-strings、/custom-stopping-strings、/custom-stop-strings)

/stop-strings (strings)
  • strings (list) - 字符串列表

返回值:当前停止字符串列表


例:
值必须是 JSON 序列化数组:

/stop-strings ["goodbye", "farewell"]

必须用反斜线转义管道字符:

/stop-strings ["left\|right"]

角色管理

char-find

如果有多个同名角色,可以用它来为 /sendas 或其他需要角色名的命令选择正确的角色。

/char-find [tag=string] [preferCurrent=true|false] [quiet=true|false] name
  • tag - 如果多个角色具有相同的名称,则提供一个或多个 tag,以筛选出所提供名称的正确角色。
  • preferCurrent - 如果多个角色匹配,则优先选择当前角色或角色组中的角色,默认值:true
  • quiet - 发现多个角色时不显示警告,默认值:false
  • name (string) - 角色名称,或独特的角色标识符

返回值:角色的唯一标识符


例:
返回 "Chloe"的唯一标识符。

/char-find name="Chloe"

返回标记为 "friend"的角色 "Chloe"的唯一标识符。举例来说,如果你有多个名为 "Chloe"的角色,而其他角色都是 "敌人"、"女神 "或其他任何名字,那么这个功能就非常有用,这样你就可以选择你要找的角色。

/send name="Chloe" tag="friend"

tag-add

为角色添加标签。

/tag-add [name=string] (tag)
  • name - 指定的角色名称。如果未提供角色名,则将其添加到当前角色({{char}}
  • tag (string) - 标签名。如果标签不存在,则会创建

返回值:true/false - 标记是已添加还是已存在

tag-exists

检查给定的标签是否已分配给角色。

/tag-exists [name=string] (tag)
  • name - 指定的角色名称。如果未提供角色名,则检查当前角色({{char}}
  • tag (string) - 标签名

返回值:true/false - 给定的标签名称是否分配给角色

tag-list

列出角色的所有标签。

/tag-exists [name=string]
  • name - 指定的角色名称。如果未提供角色名,则使用当前角色({{char}}

返回值:角色的所有标签名,多个标签用,分隔

tag-remove

移除角色的特定单个标签。

/tag-remove [name=string] (tag)
  • name - 指定的角色名称。如果未提供角色名,则移除当前角色({{char}})的标签
  • tag (string) - 标签名

返回值:true/false - 标签是否已被删除或尚未分配

dupe

复制当前的角色卡。

/dupe

返回值:无

forcesave

强制保存当前聊天和设置。

/forcesave

返回值:无

lock

将用户角色(名字和头像)锁定/解锁到当前聊天中。(别名:/bind)

/lock

返回值:无

persona

使用名称或头像 URL 选择用户角色管理中的角色。(别名:/name)

/persona [mode=lookup/temp/all] (name)
  • mode - 角色选择模式
    • lookup - 搜索现有角色,如果不存在匹配的角色,则使用临时名称
    • temp - 设置临时名称
    • all - 允许在同一命令中同时使用这两种模式
  • name (string) - 角色名称或头像 URL

返回值:无

群组管理

member-add

在群组聊天中添加新的群组成员。(别名:/addmember,/memberadd)

/member-add (name)
  • name (string) - 新成员名,必须是角色列表里已有的角色

返回值:无

member-remove

从群组聊天中删除一名群组成员。(别名:/removemember,/memberremove)

/member-remove (name)
  • name (string/number) - 目标成员名或所在序号(从 0 开始计数)

返回值:无

member-get

检索组成员的名称、索引、id或头像。(别名:/getmember,/memberget)

/member-get [field=name|index|id|avatar] (member)
  • field - 是否检索名称、索引、ID或头像。默认值:name
  • member (string/number) - 成员索引(从0开始)、名称或头像

返回值:无

member-enable

启用某个成员回复。(别名:/enable,/enablemember,/memberenable)

/member-enable (name)
  • name (string/number) - 目标成员名或所在序号(从 0 开始计数)

返回值:无

member-disable

禁止某个成员回复。(别名:/disable,/disablemember,/memberdisable)

/member-disable (name)
  • name (string/number) - 目标成员名或所在序号(从 0 开始计数)

返回值:无

member-up

在群组聊天列表中将某群组成员上移。(别名:/upmember,/memberup)

/member-up (name)
  • name (string/number) - 目标成员名或所在序号(从 0 开始计数)

member-down

在群组聊天列表中将某群组成员下移。(别名:/downmember,/memberdown)

/member-down (name)
  • name (string/number) - 目标成员名或所在序号(从 0 开始计数)

返回值:无

member-peek

在不切换聊天的情况下显示群组成员的角色卡。(别名:/peek,/memberpeek,/peekmember)

/member-peek (message)
  • message (number/range) - 消息编号或范围

返回值:无


例:
显示信息 25 条对应的角色卡

/peek 2-5

扩展程序

以下命令必须安装并配置对应的扩展才可正常运行。

extension-enable

启用指定扩展。
默认情况下,页面将自动重新加载,停止任何进一步的命令。如果传递了名为 reload=false 的参数,页面将不会被重新加载,扩展将一直处于禁用状态,直到被刷新。页面要么需要刷新,要么必须调用 /reload-page

/extension-enable [reload=true|false] name
  • reload - 启用扩展后是否重新加载页面,默认值:true
  • name (string) - 扩展名

返回值:扩展名称

extension-disable

禁用指定扩展。
默认情况下,页面将自动重新加载,停止任何进一步的命令。如果传递了名为 reload=false 的参数,页面将不会被重新加载,扩展将一直处于禁用状态,直到被刷新。页面要么需要刷新,要么必须调用 /reload-page

/extension-disable [reload=true|false] name
  • reload - 禁用扩展后是否重新加载页面,默认值:true
  • name (string) - 扩展名

返回值:扩展名称

extension-exists

检查指定扩展是否存在。(别名:/extension-installed)

/extension-exists name
  • name (string) - 扩展名

返回值:扩展是否存在并已安装,返回布尔值

extension-state

扩展的状态,即是否启用。

/extension-state name
  • name (string) - 扩展名

返回值:返回指定扩展的状态(启用为 true,禁用为 false)

extension-toggle

切换指定扩展的状态。
默认情况下,页面将自动重新加载,停止任何进一步的命令。如果传递了名为 reload=false 的参数,页面将不会被重新加载,扩展将一直处于禁用状态,直到被刷新。页面要么需要刷新,要么必须调用 /reload-page

/extension-toggle [reload=true|false] [state=true|false] name
  • reload - 启用扩展后是否重新加载页面,默认值:true
  • state - 明确设置扩展的状态(true 表示启用,false 表示禁用)。如果不提供,状态将切换到与当前状态相反的位置。
  • name (string) - 扩展名

返回值:扩展名称

正则

regex-toggle

切换指定正则脚本的状态。

/regex-toggle [state=on|off|toggle] [quiet=true|false] name
  • state - 明确设置正则脚本的状态(on 表示启用,off 表示禁用)。如果不提供,状态将切换到与当前状态相反的位置。默认值:toggle
  • quiet - 是否不显示任何提示信息。默认值:false
  • name (string) - 正则脚本名称

返回值:无


例:

/regex-toggle MyScript
/regex-toggle state=off Character-specific Script

图片描述

caption

使用提示词为图像添加描述,只有多模态数据源支持自定义提示词。

/caption [quiet=bool] [id=number] (prompt)
  • quiet - 是否禁止将已添加描述的图片显示在聊天记录的最新一条消息中,默认值:false
  • id - 消息 ID,选择从消息中获取图片,而不是直接上传图片。
  • prompt (string) - 提示词

返回值:AI 生成的描述内容

角色表情

classify

对给定文本进行情感分类并返回标签。

/classify [api=local|extras|llm] [prompt=string] (text)
  • api - 用于分类的分类器 API。如果未指定,将使用已配置的 API。
  • prompt - 自定义分类提示。仅当分类器 API 设置为 LLM 时才相关。
  • text (string) - 给定的文本

返回值:给定文本的情感分类标签

classify-expressions

返回可用表情(包括自定义表情)的列表。(别名:/expressions)

/classify [format=plain|json]
  • format - 返回列表的格式:逗号分隔的纯文本或 JSON 数组。默认为纯文本。

返回值:以逗号分隔的可用表情列表,包括自定义表情。

th

切换 Image Type - talkinghead (extras)。(别名:/talkinghead)

/th

返回值:打开/关闭 Image Type - talkinghead (extras) 的当前状态。

uploadsprite

从URL上传精灵图。

/uploadsprite [name=string] [label=string] [folder=string] (url)
  • name - 角色名称或id(默认为当前角色)
  • label - 精灵图标签/表情名称
  • folder - 要上传到的文件夹
  • url - 要上传图像的 URL

返回值:空

Token Counter

count

计算当前聊天中的 token 数量。

/count

返回值:无

向量存储

db

打开 Data Bank。(别名:/databank/,data-bank)

/db

返回值:无

db-add

向数据库添加附件。如果未提供名称,附件将自动生成。(别名:/databank-add,/data-bank-add)

/db-add [source=global/character/chat] [name=string] (content)
  • source - 将附件添加到全局附件/角色附件/聊天附件
  • name - 附件名称
  • content (string) - 附件的内容

返回值:附件的 URL

db-delete

从数据库中删除附件。(别名:/databank-delete,/data-bank-delete)

/db-delete [source=global/character/chat] (name)
  • source - 将附件从全局附件/角色附件/聊天附件中删除
  • name (string) - 附件名称

返回值:空

db-enable

根据附件名称或 URL 启用数据库中的附件。(别名:/databank-enable,/data-bank-enable)

/db-enable [source=global/character/chat] (name)
  • source - 将附件从全局附件/角色附件/聊天附件中启用
  • name (string) - 附件名称或 URL

返回值:空

db-disable

根据附件名称或 URL 禁用数据库中的附件。(别名:/databank-disable,/data-bank-disable)

/db-disable [source=global/character/chat] (name)
  • source - 将附件从全局附件/角色附件/聊天附件中禁用
  • name (string) - 附件名称或 URL

返回值:空

db-get

从数据库中获取附件文本。(别名:/databank-get,/data-bank-get)

/db-disable [source=global/character/chat] (name)
  • source - 将附件从全局附件/角色附件/聊天附件中获取
  • name (string) - 附件名称或 URL

返回值:附件文本

db-list

以 JSON 序列化数组的形式列出数据库中的附件。(别名:/databank-list,/data-bank-list)

/db-disable [source=global/character/chat] [field=name/url]
  • source - 列出全局附件/角色附件/聊天附件中的附件
  • field - 依据名称或 URL 列出。

返回值:附件数组

db-update

更新数据库中的附件。(别名:/databank-update,/data-bank-update)

/db-disable [source=global/character/chat]   
[name=string] [url=string] (content)
  • source - 将附件更新到全局附件/角色附件/聊天附件
  • name - 待更新的附件名称
  • url - 待更新的附件的 URL
  • content (string) - 附件的内容

返回值:附件的新 URL

图像生成

imagine

请求生成图片并发布到聊天中。(别名:/sd,/img,/image)

/imagine [quiet=bool] [negative=string] (type)
  • quiet - 是否禁止将生成的图片发送到聊天中,默认值:false
  • negative - 负面提示词前缀
  • type (you/me/scene/raw_last/last/face/background) - 生成什么类型的图片,不同的类型有着不同的提示词,可在 图像提示模板 中修改。如果此处填写了非括号内的参数,则视其为提示词进行生图。例如:/imagine apple tree 会生成一张苹果树的图片。
    • you - 角色的形象
    • me - 用户的形象
    • scene - 最近发生的事件+角色形象+环境
    • raw_last - 未经过格式要求的最后一条消息的内容
    • last - 经过格式要求的最后一条消息的内容
    • face - 角色的面部特写肖像
    • background - 背景环境

返回值:生成图片的本地位置链接

imagine-comfy-workflow

更改用于 ComfyUI 图像生成的工作流程。(别名:/icw)

/imagine-comfy-workflow (name)
  • name (string) - 工作流名称

返回值:无

总结

Summarize

总结给定文本。如果没有提供文本,则会总结当前聊天的所有内容。

/summarize [quiet=bool] [source=main/extras] [prompt=string/varname] (text)
  • quite - 是否在总结时显示 toast 提示信息,默认值:false
  • source - 总结所使用的 API
  • prompt - 总结提示词
  • text (string) - 需要总结的文本

返回值:总结后的文本

聊天

translate

将文本翻译为目标语言。如果未提供目标语言,则将使用扩展设置中的值。

/translate [target=language] [provider=string] (text)
  • target - 将要翻译成哪一种语言。可选语言如下:
af sq am ar hy az eu be bn bs bg ca ceb zh-CN zh-TW
co hr cs da nl en eo et fi fr fy gl ka de el
gu ht ha haw iw hi hmn hu is ig id ga it ja jw
kn kk km ko ku ky lo la lv lt lb mk mg ms ml
mt mi mr mn my ne no ny ps fa pl pt pa ro ru
sm gd sr st sn sd si sk sl so es su sw sv tl
tg ta te th tr uk ur uz vi cy xh yi yo zu
  • provider - 要使用的翻译提供程序。如果未提供,将使用扩展设置中的值。
  • text (string) - 需要翻译的文本

返回值:翻译后的文本

Variable Viewer

variableviewer

显示/隐藏变量查看器面板。

/variableviewer

返回值:无

TTS

speak

使用选定的 TTS 引擎和语音映射中的角色来叙述文本。

/speak [voice="name"] (text)
  • name (string) - 角色声音名称
  • text (string) - 叙述的文本

返回值:无


例:

/speak name="Donald Duck" Quack!

附录

语法

转义

闭包无需转义宏。
在斜杠命令下需要转义,要么转义两个开头的大括号,要么同时转义开头和结尾的大括号。

/echo \{\{char}} |
/echo \{\{char\}\} 
分隔符 (管道)

在闭包(用作命令分隔符时)中,分隔符不需要转义。
如果要在任何地方使用分隔符作为角色而不是命令分隔符,则需要转义。

/echo title="a\|b" c\|d |
/echo title=a\|b c\|d 
引号

要在引号值内使用字面引号角色,该角色必须转义。

/echo title="a \"b\" c" d "e" f |
空格

要在已命名参数的值中使用空格,必须用引号或转义空格符将值包围起来。

/echo title="a b" c d |
/echo title=a\ b c d 
闭包分隔符

如果要使用用于标记闭包开始或结束的角色组合,则必须转义该序列。

/echo \{: |
/echo \:}
QR 命令

在 /qr 信息/命令中, | 和 {} 可以用反斜线转义。使用

/qr-create set=MyPreset label=MyButton /getvar myvar \| /echo \{\{pipe\}\}

会创建一个名叫 MyButton 的快速回复,内容为

/getvar myvar | /echo {{pipe}} 

解析器标志 (parser-flag)

解析器接受用于修改其行为的标记。这些标记可以在脚本中的任何位置打开或关闭,所有后续输入都将相应地进行评估。在 用户设置-STscript 设置 中可以设置默认标记。

/parser-flag (STRICT_ESCAPING/REPLACE_GETVAR) (on/off)
  • STRICT_ESCAPING/REPLACE_GETVAR - 严格转义或替换变量宏
  • on/off - 模式的开关状态

返回值:无

严格转义

切换到更严格的转义,允许所有分隔角色 | 使用反斜杠转义,并且反斜杠也可以转义。

/parser-flag STRICT_ESCAPING on |

启用后更改如下:

管道
管道不需要在引号值中转义。
下方代码运行结果为 a|b c|d

/echo title="a|b" c\|d

反斜杠
在反斜杠前面的反斜杠可以转义,以提供字面上的反斜杠,然后才是功能符号。
下方代码运行结果为 foo \bar

/echo foo \\|
/echo bar

下方代码运行结果为 \\|

/echo \\|
/echo \\\|

替换变量宏

当变量值包含可被解释为宏的文本时,该标记有助于避免双重替换。 {{var::}} 宏会最后被替换,由此产生的文本/变量值不会再被替换。

/parser-flag REPLACE_GETVAR on |

用 {{var::}} 替换所有 {{getvar::}} 和 {{getglobalvar::}} 宏。在后台,解析器会在带有被替换宏的命令前插入一系列命令执行器:

  • 调用 /let 将当前的 {{pipe}} 保存到作用域变量中
  • 调用 /getvar 或 /getglobalvar 获取宏中使用的变量
  • 调用 /let 将检索到的变量保存到作用域变量中
  • 使用保存的 {{pipe}} 值调用 /return ,为下一条命令恢复正确的管道值

例:
不启用替换变量宏时,以下命令会返回最后一条消息的编号

/setvar key=x \{\{lastMessageId}} |
/echo {{getvar::x}}

启用时,会返回文本{{lastMessageId}}

1
2
3
/parser-flag REPLACE_GETVAR |
/setvar key=x \{\{lastMessageId}} |
/echo {{getvar::x}}

闭包

子命令

闭包让使用子命令变得更容易,而且无需转义管道和宏。


不使用闭包:

1
2
3
4
5
6
7
/if left=1 rule=eq right=1
    else="
        /echo not equal \|
        /return 0
    "
    /echo equal \|
    /return \{\{pipe}}

使用闭包:

1
2
3
4
5
6
7
8
9
/if left=1 rule=eq right=1
    else={:
        /echo not equal |
        /return 0
    :}
    {:
        /echo equal |
        /return {{pipe}}
    :}

作用域

闭包有自己的作用域,并支持作用域变量。使用 /let 声明作用域变量,使用 /var 设置和获取变量值。另一种获取作用域变量的方法是使用 {{var::}} 宏。


例:

1
2
3
4
5
/let x |
/let y 2 |
/var x 1 |
/var y |
/echo x is {{var::x}} and y is {{pipe}} .

  • 在一个闭包中,你可以访问在同一闭包或其祖先中声明的所有变量。但你不能访问在闭包的后代中声明的变量。
  • 如果声明的变量与闭包的祖先变量同名,则无法在该闭包及其后代中访问祖先变量。
  • 来自父闭包的管道值将不再自动注入到子闭包的第一个命令中。您仍然可以使用 {{pipe}} 显式引用父级的管道值,但如果将第一个命令的未命名参数保留在闭包内空白,则该值将不会自动注入。

例:

/let x 祖先 X |
/let y 祖先 Y |
/return {:
    /echo 这是闭包: x  " {{var::x}} " + y  " {{var::y}} " |
    /let x 闭包-X |
    /echo 声明 x 为闭包-X : x  " {{var::x}} " + y  " {{var::y}} " |
    /return {:
        /echo 这是闭包的后代: x  " {{var::x}} " + y  " {{var::y}} " |
        /let x 闭包后代-X |
        /echo 声明 x 为闭包后代-X : x  " {{var::x}} " + y  " {{var::y}} " |
    :}()
:}() |
/echo 闭包外 x  " {{var::x}} " + y  " {{var::y}} "

执行以上命令,会依次输出

  • 这是闭包: x 是 " 祖先 X " + y 是 " 祖先 Y "
  • 声明 x 为闭包-X 后: x 是 " 闭包-X " + y 是 " 祖先 Y "
  • 这是闭包的后代: x 是 " 闭包-X " + y 是 " 祖先 Y "
  • 声明 x 为闭包后代-X 后: x 是 " 闭包后代-X " + y 是 " 祖先 Y "
  • 闭包外 x 是 " 祖先 X " + y 是 " 祖先 Y "

命名

闭包可以分配给变量(仅限作用域变量),以便在以后调用或用作子命令。

/let x {: ... :} | 
/:x

例:将闭包命名为 myClosure 并调用,使用 {{var::}} 宏同样可以完成调用。

1
2
3
4
/let myClosure {:
    /echo this is my closure
:} |
/:myClosure
1
2
3
4
5
/let myClosure {:
    /echo this is my closure |
    /delay 500
:} |
/times 3 {{var::myClosure}}

备注

/: 也可用于执行快速回复,因为它只是 /run 的简写,详见配置快速回复中的条目 run


参数

命名的闭包可以接受命名参数,就像斜线命令一样,参数可以有默认值,结尾无需分隔符。


例:

1
2
3
4
/let myClosure {: a=1 b=
    /echo a is {{var::a}} and b is {{var::b}}
:} |
/: myClosure b=10

执行后输出 a is 1 and b is 10


立即执行

在闭包后加上 () 可以立即执行并返回值,对于没有明确支持闭包的地方很有帮助,而且还能缩短一些需要大量中间变量的命令。

{: ... :}()

例:
不使用闭包的情况下比较两字符串的长度

1
2
3
4
5
/len foo |
/var lenOfFoo {{pipe}} |
/len bar |
/var lenOfBar {{pipe}} |
/if left= {{var::lenOfFoo}} rule=eq right= {{var:lenOfBar}} /echo 相等

使用闭包

/if left={:/len foo:}() rule=eq right={:/len bar:}() /echo 相等

系统范围内的替换宏

角色卡
  • {{original}} - 在 API 设置中定义的全局提示。(仅在高级定义提示覆盖中有效)
  • {{input}} - 用户输入
  • {{charPrompt}} - 覆盖的角色主要提示
  • {{charJailbreak}} - 覆盖的角色越狱提示
  • {{description}} - 角色描述
  • {{personality}} - 人物性格
  • {{{scenario}} - 场景
  • {{persona}} - 当前的角色描述
  • {{mesExamples}} - 角色的对话示例
  • {{mesExamplesRaw}}- 未格式化的对话示例 (仅适用于故事串)
  • {{user}} - 当前的角色用户名
  • {{char}} - 角色名称
  • {{char_version}} - 角色的版本号
  • {{group}} - 以逗号分隔的群组成员名称或单人聊天中的角色名称。别名: {{charIfNotGroup}}
  • {{groupNotMuted}} – 与 {{group}} 相同,但排除被禁言的成员
LLM
  • {{model}} - 当前所选 API 的文本生成模型名称。 可能不准确!
  • {{bias "文本"}} --为 AI 设置行为偏差,直到下一次用户发送消息。文本周围必须加引号。
  • {{banned "文本"}} --如果使用 Text Generation WebUI 后端,则在禁止字词序列中动态添加引号中的文本。对其他后端不起作用。可在任何地方使用(角色说明、世界书、作者注释等)。文本周围必须加引号。
聊天记录
  • {{lastMessage}} – 最新聊天消息的文本。
  • {{lastUserMessage}} – 最后的用户聊天消息文本。
  • {{lastCharMessage}} – 最后的角色聊天消息文本。
  • {{lastMessageId}} – 最新聊天消息的索引号。对于斜线命令批处理很有用。
  • {{lastGenerationType}} - 最后一次生成请求的类型。如果尚未执行生成或活动聊天已切换,则为空。可能的值:"normal", "impersonate", "regenerate", "quiet", "swipe", "continue".
  • {{firstIncludedMessageId}} – 上下文中包含的第一条消息的 ID。要求在当前会话中至少运行一次生成。
  • {{firstDisplayedMessageId}} - 加载到可见聊天中的第一条消息的 ID。
  • {{currentSwipeId}} - 最后一条聊天消息中当前滑动的 ID(以 1 为基数)。如果最后一条消息是用户或提示隐藏的,则为空字符串。
  • {{lastSwipeId}} - 最后一条聊天消息中的滑动次数。如果最后一条消息是用户隐藏或提示隐藏的,则为空字符串。
  • {{summary}} – “Summarize”扩展生成的最新聊天摘要(如果有)。
时间
  • {{time}} - 当前时间
  • {{date}} - 当前日期
  • {{weekday}} - 当前工作日
  • {{isotime}} - 当前 ISO 时间(24 小时制)
  • {{isodate}} - 当前 ISO 日期(YYYY-MM-DD)
  • {{{datetimeformat ...}} - 对当前日期/时间的指定格式,例:德国日期/时间格式: {{datetimeformat DD.MM.YYYY HH:mm}}
  • {{time_UTC±#}} - 当前时间在指定 UTC 时区偏移后的结果,例: {{time_UTC-4}}{{time_UTC+2}}
  • {{timeDiff::(time1)::(time2)}} - 时间 1 和时间 2 之间的时差。接受时间和日期宏。例:{{timeDiff::{{isodate}} {{time}} :: 2024/5/11 12:30:00}}
  • {{idle_duration}} - 上次用户发送信息后的时间与当前时间的间隔
随机
  • {{roll:(formula)}} - 掷骰子。例:{{roll:1d6}} 将掷一个 6 面骰子,并返回一个介于 1 和 6 之间的数字
  • {{random:(args)}} - 从列表中随机返回一个项目。例:{{random:1,2,3,4}} 将随机返回 4 个数字中的 1 个。也适用于文本列表。
  • {{random::(arg1)::(arg2)}} - 随机的另一种语法,允许在列表项中使用逗号。
  • {{pick::(args)}} - 从列表中随机选取一个项目。工作原理与 {{random}} 相同,语法选项也相同,但一旦选中,该聊天内容将保持一致,不会在连续的消息和提示处理中重新滚动。
其他
  • {{pipe}} – 仅适用于斜线命令批处理。替换为上一个命令的返回结果。
  • {{newline}} – 仅插入一个换行符。
  • {{trim}} – 修剪此宏周围的换行符。
  • {{noop}} – 没有操作,只是一个空字符串。
  • {{//(文本)}} --您可以在此处留下备注,宏将被替换为空白内容。不会发送给 AI。例: {{//这些是备注的内容}}
  • {{reverse:(content)}} – 反转宏的内容。
  • {{isMobile}} – 当为移动端时为"true",反之为"false"

仅用于高级格式化

上下文模板
  • {{maxPrompt}} - 以 token 为单位的最大允许提示长度 = (上下文大小 - 响应长度)
  • {{{exampleSeparator}} - 上下文模板示例对话框分隔符
  • {{chatStart}} - 上下文模板聊天开始行
指示模式
  • {{systemPrompt}} - 主系统提示(如果选择覆盖角色提示,或指示系统提示)
  • {{instructSystemPrompt}} - 指示系统提示
  • {{instructSystemPromptPrefix}} - 指示系统提示前缀序列
  • {{istructSystemPromptSuffix}} - 指示系统提示后缀序列
  • {{instructUserPrefix}} - 指示用户前缀序列
  • {{instructUserSuffix}} - 指导用户后缀序列
  • {{instructAssistantPrefix}} - 指导助理前缀序列
  • {{instructAssistantSuffix}} - 指导助理后缀序列
  • {{instructFirstAssistantPrefix}} - 指导助理的第一输出序列
  • {{instructLastAssistantPrefix}} - 指令助理最后输出序列
  • {{istructSystemPrefix}} - 指示系统信息前缀序列
  • {{istructSystemSuffix}} - 指示系统信息后缀序列
  • {{istructSystemInstructionPrefix}} - 指示系统指令前缀
  • {{istructUserFiller}} - 指令第一个用户信息填充
  • {{istructStop}} - 指令停止序列

聊天变量

局部变量 = 当前聊天独有的变量
全局变量 = 在任何聊天中对任何角色都有效
范围变量 = 在 STscript 中有效

  • {{incvar::name}} - 替换为变量 "name "的值递增 1 的结果
  • {{decvar::name}} - 替换为变量 "name "的值减 1 的结果
局部变量
  • {{getvar::name}} - 替换为本地变量 "name"的值
  • {{setvar::name::value}} - 替换为空字符串,将本地变量 "name"设置为 "value"
  • {{addvar::name::increment}} - 替换为空字符串,为本地变量 "name "添加数值 "increment"。
全局变量
  • {{getglobalvar::name}} - 替换为全局变量 "name "的值
  • {{setglobalvar::name::value}} - 替换为空字符串,将全局变量 "name "设置为 "value"
  • {{addglobalvar::name::value}} - 替换为空字符串,为全局变量 "名称 "添加数值 "增量
  • {{incglobalvar::name}} - 替换为全局变量 "name "的值增量 1 的结果
  • {{decglobalvar::name}} - 替换为全局变量 "name "的值减 1 的结果
范围变量
  • {{var::name}} - 替换为作用域变量 "name "的值
  • {{var::name::index}} - 替换为作用域变量 "name "的索引项(Array/List 或 Object/Dictionary)的值
Edit Report
Pub: 30 Jun 2024 07:46 UTC
Edit: 11 Apr 2025 09:43 UTC
Views: 8416