阅读示例#

让我们导入示例角色卡, 来理解脚本和前端界面的作用和区别.

导入角色卡后, 我们通过扩展设置, 可以在酒馆助手 ‣ 脚本库正则中分别看到该角色卡有以下角色脚本和局部正则:

../../../../_images/%E6%89%93%E5%BC%80%E8%A7%92%E8%89%B2%E5%8D%A1.png

这分别对应了酒馆助手所支持的两类向酒馆注入代码的方式, 与模板文件夹中的 src/脚本示例src/界面示例 文件夹一一对应.

脚本: 在后台运行一段代码#

我们首先启用 脚本-发布给玩家, 将会收到一条弹窗提示:

../../../../_images/%E5%90%AF%E7%94%A8%E8%84%9A%E6%9C%AC%E5%BC%B9%E7%AA%97.png

这反映了脚本的功能: 在启用时执行一段代码, 可能上图那样的弹窗提示, 也可能是开始监听某些事件从而在事件发生时执行某段代码……

脚本可以在启用时执行一段代码. 除了上图那样的弹窗外, 你还能看到脚本新增了两个消息楼层:

../../../../_images/%E8%84%9A%E6%9C%AC%E6%96%B0%E5%A2%9E%E6%B6%88%E6%81%AF%E6%A5%BC%E5%B1%82.png

脚本可以监听酒馆事件和酒馆助手事件. 例如, 让我们启用这个脚本, 然后通过铅笔尝试修改一下第 0 楼的内容.
当我们点击保存时, 脚本将会监听到 "消息楼层被修改" 事件:

../../../../_images/%E7%9B%91%E5%90%AC%E6%B6%88%E6%81%AF%E6%A5%BC%E5%B1%82%E8%A2%AB%E4%BF%AE%E6%94%B9%E4%BA%8B%E4%BB%B6.png

脚本也可以监听自己的按钮点击事件. 例如, 我们启用脚本后会在输入框上方看见晚上好按钮, 点击它后, 脚本将会监听到 "玩家点击了晚上好按钮" 事件:

../../../../_images/%E7%9B%91%E5%90%AC%E7%8E%A9%E5%AE%B6%E7%82%B9%E5%87%BB%E6%8C%89%E9%92%AE%E4%BA%8B%E4%BB%B6.png

脚本还能监听自己的开关情况. 例如, 我们关闭脚本, 脚本会监听到 "脚本被关闭" 事件:

../../../../_images/%E7%9B%91%E5%90%AC%E8%84%9A%E6%9C%AC%E5%85%B3%E9%97%AD%E4%BA%8B%E4%BB%B6.png

如果你点击酒馆助手 ‣ 脚本库 ‣ 内置库并添加预设防误触脚本, 就会发现你在开启脚本时不能修改预设设置, 关闭脚本后可以修改. 这其实就是脚本在启用时执行了一段代码, 让你不能修改预设设置; 而又监听 "脚本被关闭" 事件, 在脚本关闭时执行代码重新允许你修改预设设置.

总的来说, 脚本的作用就是:

  • 在开启时可以执行一段代码

  • 在启用期间可以监听事件 (酒馆或酒馆助手事件、按钮点击事件、脚本被卸载), 从而在事件发生时执行代码.

如此, 你也许能理解 MVU 变量框架脚本做了什么: 启用它后, 它将监听 "接收到了新的消息楼层" 事件, 当事件发生时根据这个新楼层中的 _.set(...) 等命令来更新变量.

前端界面: 在前台消息楼层显示一个界面#

我们关闭脚本, 启用正则中的界面-发布给玩家正则, 将会收到整整三条弹窗提示:

../../../../_images/%E5%90%AF%E7%94%A8%E7%95%8C%E9%9D%A2%E5%BC%B9%E7%AA%97.png

为什么是三条弹窗提示? 让我们关掉这个正则, 来仔细理解一下它是怎么起作用的.

实际上, 酒馆助手支持前端界面的方式很简单: 如果消息楼层中某个代码块内存在 html 代码 (尤其是 <body></body> 标签), 那么酒馆助手会自动将这个 html 代码渲染成前端界面.
例如, 如果我们在消息楼层中添加以下代码块, 它会被渲染成一个超大的红色 "你好":

代码块由以下部分组成:

  • 开头单独一行 ```代码语言 (建议用 ```text, 原因在之后的进阶技巧中有解释)

  • 代码内容

  • 结尾单独一行 ```

```text
<body>
  <span class="text-9xl text-red-600">你好</span>
</body>
```

但我们显然不想 AI 直接输出整个 html 代码块, 这既浪费 token 又容易出错. 有没有什么办法让 AI 只输出前端界面必要的剧情信息 (如角色当前穿着情况、所在位置等), 却又在酒馆页面上显示出 html 代码块从而渲染出前端界面呢? 酒馆正则的仅格式显示功能正能实现这个功能.

酒馆正则能够捕获 AI 回复和用户输入中的特定文本, 让它在某些用途下被替换为指定内容:

  • 仅格式提示词: 在发送给 AI 时被替换为指定内容. 例如预设的[不发送]思维链正则将 <thinking> 块替换为空字符串, 从而不让 AI 收到之前消息中的思维链内容.

  • 仅格式显示: 在酒馆中显示时被替换为指定内容. 例如预设的[隐藏]思维链正则将 <thinking> 块替换为空字符串, 从而不让玩家在酒馆页面中看到思维链部分.

  • 两个都不勾选: 在 AI 输出接收到时或用户输入发送出去时就被永久替换掉

../../../../_images/%E9%85%92%E9%A6%86%E6%AD%A3%E5%88%991.png

界面-发布给玩家 正则所做的, 就是捕获 AI 回复中尽可能多的字符, 即捕获全部文本, 并将其替换为 html 代码块.

../../../../_images/%E7%95%8C%E9%9D%A2-%E5%8F%91%E5%B8%83%E7%BB%99%E7%8E%A9%E5%AE%B6%E6%AD%A3%E5%88%99.png

回过头来, 为什么打开界面-发布给玩家正则后会收到整整三条弹窗提示呢? 因为我们总共有三个消息楼层, 正则会依次捕获替换, 而酒馆助手由此渲染了三个前端界面:

../../../../_images/%E6%B8%B2%E6%9F%93%E4%B8%89%E4%B8%AA%E5%89%8D%E7%AB%AF%E7%95%8C%E9%9D%A2.png

为了进一步验证这一点, 我们点击铅笔来编辑其中一个消息楼层. 当我们点击铅笔时, 仅该消息楼层的前端界面被卸载而有了一个 你已经卸载界面! 提示; 当我们点击保存时, 酒馆助手又重新渲染这个前端界面而有了 你已经成功加载界面! 提示.

前端界面能做的不仅仅是显示而已, 你还可以和它交互而执行对应的代码. 例如, 我们点击示例中的前端界面, 将会发现这个界面变成了选择框, 而再点击将会发现自己发送了一条消息, 并且输入框右下角显示出正在生成的图标:

../../../../_images/%E4%B8%8E%E5%89%8D%E7%AB%AF%E7%95%8C%E9%9D%A2%E4%BA%A4%E4%BA%92.png

总的来说, 酒馆助手能将消息楼层中的 html 代码块渲染成前端界面, 并支持:

  • 在前端界面加载完成时执行一段代码

  • 在前端界面有效期间监听事件 (酒馆和酒馆助手事件、前端界面被互动、前端界面卸载), 从而在事件发生时执行代码

相比于脚本在后台运行、只受自己开关影响, 前端界面在页面上显示且与消息楼层高度绑定.