酒馆 SillyTavern 简单使用
酒馆 SillyTavern 简单使用
特让他也让SillyTavern 介绍
SillyTavern
酒馆,可以简单理解为一个可以和 AI
说话的平台。在导入对应的 AI
提供商的 API 后,可以通过导入角色卡,让 AI 扮演角色卡所设定的人物,实现和角色聊天。
SillyTavern 安装
安装前的简单说明
SillyTavern 的 Github 链接:https://github.com/SillyTavern/SillyTavern
SillyTavern 有两个分支版本
- release:推荐大多数用户使用。这是最稳定的分支,只有在推出重大版本时才会更新,适合大多数用户。通常每月更新一次。
- staging:不推荐普通用户使用。此分支包含最新的功能,但请小心,它可能随时出现问题。仅适合高级用户和爱好者使用。每天更新多次。
不过本人使用 staging 以来,没遇见什么问题。而且 staging 版本会有很多新的特性,如果有一定动手能力的,推荐直接用 staging 版本。
如果过程中遇到网络问题,请进行科学上网
Windows 安装
- 安装 NodeJS
- 安装 Git for Windows。
安装好了后,我们打开终端,在终端内输入命令
- release 分支:
git clone https://github.com/SillyTavern/SillyTavern -b release
- staging 分支:
git clone https://github.com/SillyTavern/SillyTavern -b staging
这里以 staging 分支为例,
在文件夹内有如下的启动文件
Start.bat
:一个普通的启动脚本UpdataAndStrt.bat
:运行更新并且启动UpdataForkAndStrt.bat
:更新某个分支,并且启动
直接运行 UpdataForkAndStrt.bat
就行了。
然后等待片刻,它会自动下载依赖。之后会自动在浏览器中访问 127.0.0.1:8000
,同时终端上也会显示
这样就安装成功了
Linux 安装
请自行在 Linux 上安装 Git 和 NodeJS。这里以 Ubuntu 为例
命令如下
1 | apt update |
安装好了后,在终端内输入命令
- release 分支:
git clone https://github.com/SillyTavern/SillyTavern -b release
- staging 分支:
git clone https://github.com/SillyTavern/SillyTavern -b staging
使用 cd SillyTavern
进入安装文件夹。
运行 ./start.sh
命令
SillyTavern 云服务器部署
云服务器部署
关于 SillyTavern 云服务器部署其实和上面讲的一样。
- 自己准备一个国外的云服务器(台湾也算国内!),一般都是 Linux 的云服务器
- 然后根据自己服务器的操作系统,选安装过程
下面我们以 Ubuntu 为例。
forever 后台持久化
在安装后,并且能够成功启动 start.sh
,并且访问到酒馆后,接下来就是持久化的问题。
这里采用 forever
方案
安装命令
1 | npm install forever -g |
我们来到 SillyTavern 的文件夹下,运行命令
1 | forever start server.js |
查看一下
1 | forever list |
成功。
想要更新时,需要把这个后台关掉,使用命令
1 | forever stop 13628 |
其中 13628
是你的 PID
成功关闭
SillyTavern 更新
对于 Windows 来说,直接双击 .bat
就行了。
对于 Linux 来说,我们已经是 staging 分支了,所以直接运行 git pull
即可。不过云服务器更新前,记得把后台退出一下
SillyTavern 配置文件说明
在文件夹里的 config.yaml
是酒馆的配置文件
整体配置文件说明
如果不想看,可以直接往下跳到”关键配置说明”
配置文件说明如下
1 | # -- 数据配置 -- |
关键配置说明
监听
1 | listen: true # 这里设置为true,如果设置为 false,服务器将只能通过 localhost 访问。 |
云服务器上的必须开启
监听端口
1 | port: 1234 # 端口自行设置 |
请修改成别的端口,尽量不要用默认端口
白名单(不建议打开)
1 | whitelistMode: false # 白名单启用后,只有白名单中的 IP 地址才能访问服务器。 |
不建议打开,除非你对你的出口 IP 十分了解
单用户的基本身份认证
1 | basicAuthMode: false |
如果开启了的话,效果如下
没啥用,一般用的是下面的多用户认证
多用户认证
注意,多用户认证和单用户的基本身份认证只能开一个。
1 | # 关闭单用户的基本身份认证 |
初次运行会有提示
默认的管理员用户名是 default-user
,需要我们用 recover.js
设置一个密码,命令如下
1 | # 命令格式 |
我们再次运行即可正常访问,效果如下
该页面可以美化,在下面会提到。
多用户认证页面美化
在酒馆文件夹下,有一个 public
文件夹
这里就是多用户认证的前端项目,可以在修改源码。
或者直接网上找个现成的。一般都会有使用教程
效果如下
其他
其他的就不用动。
SillyTavern 功能介绍
功能栏介绍
功能栏主要有如下功能
这些功能先不用了解,下面会介绍
修改 UI 界面
SillyTavern 可以通过导入不同的 JSON
文件修改界面样式。在用户设置里,可以通过导入预设修改 UI
界面
点击“导入”即可导入 JSON
格式的 UI 主题,导入后需要选择刚才导入的主题使其生效
可以配置背景图片使用
API Key 配置
配置 API Key
在这里可以配置 AI
的 API Key
这里是选择想要使用的 API 功能,这里选择的是”聊天补全”
下面可以选择补全的来源,此处选择 Google
的来源
下面填写对应的 API Key
填写后,点击”连接”,即可测试 API
的连通性。如果连接成功,会变成绿色
连接成功后,可选择对应的模型。这里选择的是 Gemini exp 1206
接着点击”发送测试消息”,即可测试模型的可用性
自定义服务
自定义就是用非官方的第三方厂商,通过他们提供的接口去访问服务。一般 API 端点的地址会写在服务商的通告或者文档里。
操作差不多,填写 API 端点端点,再填写 API Key
,连接成功后即可选择模型
反向代理
我们在使用官方渠道时,会发现有一个反向代理的功能
就是个反向代理,没啥东西。
角色聊天
现在酒馆里有了一个 AI,我们现在要导入角色卡。角色卡有 PNG
和 JSON
格式,不过我一般见的都是 PNG
,还没见过 JSON
格式的。角色卡可以在 Discord 类脑频道
里找。
导入成功后点击角色即可开始聊天。如果点击后出现一个提示块,让你 Import
什么,直接点击 import
进行导入就行了。
点击人物头像可以进行放大查看
用户设置
在如下地方可以对用户进行管理
可以设置用户名,设置用户头像,设置用户角色描述等操作。
扩展功能
酒馆提供了一下扩展功能
这里可以进行一些扩展操作,比如接入 TTS
实现语音输出、接入本地 SD
实现图片生成、使用聊天输出翻译实现输入输出的翻译等等。
可以寻找扩展进行安装。
聊天翻译
我们现在设置为”翻译回复”
翻译回复,就是自动翻译 Char 的消息。
这里 Char 输出的是一段英文。
点击这里即可翻译
正则
正则功能是来进行匹配替换的。举个例子。
一般预设里,都会设置一个 cot(思考链),用 <think></think>
进行包裹
但是我们观感会很不好,我们要的是结果,不是 AI 的思考过程。所以得想办法把 <think></think>
里的内容去掉。
这时候就可以用正则了
使用正则表达式 /(^[\s\S]*?<\/think>.*)/g
,去匹配 AI输出
的内容,并替换成空。试试效果,把它开启
成功替换
这个正则配合 HTML,可以进行一些离谱的操作,比如说状态栏,人物卡片等等。
快速回复
快速回复是一些代码功能,下面是我的快速回复,实现总结功能
它在会话框上出现功能点
这样点击就能触发功能了。
世界书
参考文档:世界书 - 飞书云文档
世界书基本概念
什么是世界书?
世界书 (Lorebooks) 旨在为你的角色卡提供更为完整的背景信息。
下面是《天涯明月刀》中的一段
1 | 秋水清又推开一块巨石,石壁里还藏着个铁柜,难道孔雀翎就在这铁柜里? |
这段话给 AI
看,秋水清是谁?孔雀翎是啥?此时就可以添加世界书
1 | 秋水清:“孔雀山庄”庄主的幼弟。 |
这样 AI
就知道秋水清是谁,孔雀翎是什么了。
关于世界书的 导入导出
、重命名
、删除
、设置全局世界书
、设置角色世界书
等基础操作,请到参考文档中自行查看
- 参考文档:世界书 - 飞书云文档
世界书简单设置
Strategy
世界书的 Strategy,一般只用两个:
常量
:不需要输入关键词,每次对话都会触发该条目内容,插入上下文。AI
永远都能读到世界书设定。正常
:正常地以关键词触发内容。AI
最新的回复消息,包含某个关键字A
;或者用户发的消息里,包含关键字A
。此时世界书就会触发,AI
就会读到世界书的内容。
位置
世界书的位置,只需要知道两个即可:
角色定义后
:将条目内容插入角色描述下方。@D
:按插入深度插入。
首先是 角色定义后
,举个例子。现在存在如下角色描述
1 | here's a description of {{char}}: |
有一个世界书,介绍 {{char}}
的癖好:
1 | {{char}}'s idiocrasy: 喜欢摸{{user}}的头 |
我们将世界书位置选择为 角色定义后
,那么效果就是在角色描述下添加世界书内容。
1 | here's a description of {{char}}: |
然后是 @D
,这个是和 AI
的注意力有关。比如说 AI
似乎没注意到 idiocrasy
特性,此时需要让 AI
增加对其的注意力,使用 @D
。
@D
后有一个深度,深度是指在第 X 条消息下。比如 {{user}}
发给 AI
的消息是
1 | {{user}}: “姐姐,你身上好香啊” |
深度 0 的世界书就是在 {{user}}
消息的下方加世界书
1 | {{user}}: “姐姐,你身上好香啊” |
深度 1 就是在上一条消息前加上世界书
1 | {{char}}: {{char}}从后面悄悄靠近,从后面抱住{{user}} |
深度 2,深度 3 同理。因此,深度值越小,注意力越大。深度为 0
时,AI
会集中注意力去看你这条设定。
Order
在介绍 Order 之前,简单说一下顺序问题。一般来说,Prompt 的上下文顺序是这样的(由于这里只关注 角色描述
和 聊天记录
,其他的就不管了)
1 | 角色描述 |
AI
先看 当前的聊天记录
再看 角色描述
,然后是 上一条聊天记录
这样从下往上读,注意力从高到低。而我们加入世界书后,会在这些位置里穿插着世界书内容。那么如果是如下的情况呢?
再使用相同 Strategy
和相同 深度
时,这两条是怎么排序的呢?因为 order
相同,按照时间排序。癖好
先创建的,Life Story
是后面创建,所以顺序如下:
1 | 角色描述 |
此时 AI
会优先注意 癖好
。如果需要对其进行注意力修改,但是还不想更改 Strategy
和 深度
时,就需要用到 order
了。在使用 order
时,可以把其理解为一个注意力的的象征值,order
越大,注意力越来,也就是越靠下。
结果就是
1 | 角色描述 |