# 酒馆百科 · SillyTavern 中文知识库 — 全文合集 > 来源 https://sillytaverncn.net · 生成时间 2026-10-18 23:51 ===== Administration/config-yaml.md (https://sillytaverncn.net/administration/config-yaml/) ===== --- icon: cpu route: /administration/config-yaml/ --- # 配置文件 !!!warning 免责声明 此文档可能已过时、不完整或不正确。请参考您安装中的 [默认 config.yaml](https://github.com/SillyTavern/SillyTavern/blob/release/default/config.yaml) 以获取最新的设置列表。 **警告:不要直接编辑默认配置。这不会产生任何积极效果。请编辑存储库根目录中的副本。** !!! `config.yaml` 是 SillyTavern 服务器的主配置文件,您可以在[完成安装](/Installation/index.md)后在存储库根目录中找到它。它是一个 YAML 文件,包含各种设置,例如网络、安全和后端特定选项。**对此文件所做的更改将在重新启动服务器后生效。** 在[更新存储库](/Installation/Updating/index.md)后运行 `npm install`(具体来说是 `post-install.js` 脚本)时,上游添加的新设置会自动填充默认值。然后您可以根据需要修改这些设置。 对于嵌套设置,使用点表示法来指示层次结构。例如,`protocol.ipv6: false` 指的是 `protocol` 部分下的 `ipv6` 设置,值为 `false`。 ```yaml protocol: ipv6: false ``` ## 命令行参数 启动 SillyTavern 服务器时,您可以传递命令行参数来覆盖 [config.yaml](../Administration/config-yaml.md) 中的某些设置。 ### 示例 ```shell node server.js --port 8000 --listen false # 或 npm run start -- --port 8000 --listen false # 或(仅限 Windows) Start.bat --port 8000 --listen false ``` ### 支持的参数 !!!tip 所有参数都不是必需的。如果您不提供它们,SillyTavern 将使用 `config.yaml` 中的设置。 !!! | 选项 | 描述 | 类型 | |---------------------------------|----------------------------------------------------------------------|----------| | `--version` | 显示版本号 | boolean | | `--global` | 强制使用系统范围的应用程序数据路径 | boolean | | `--configPath` | 覆盖 config.yaml 文件的路径(仅限独立模式) | string | | `--dataRoot` | 设置数据存储的根目录(仅限独立模式) | string | | `--port` | 设置 SillyTavern 运行的端口 | number | | `--listen` | 使 SillyTavern 在所有网络接口上侦听 | boolean | | `--whitelist` | 启用白名单模式 | boolean | | `--basicAuthMode` | 启用基本身份验证 | boolean | | `--enableIPv4` | 启用 IPv4 协议 | boolean | | `--enableIPv6` | 启用 IPv6 协议 | boolean | | `--listenAddressIPv4` | 指定要侦听的 IPv4 地址 | string | | `--listenAddressIPv6` | 指定要侦听的 IPv6 地址 | string | | `--dnsPreferIPv6` | DNS 首选 IPv6 | boolean | | `--ssl` | 启用 SSL | boolean | | `--certPath` | 设置证书文件的路径 | string | | `--keyPath` | 设置私钥文件的路径 | string | | `--browserLaunchEnabled` | 在浏览器中自动启动 SillyTavern | boolean | | `--browserLaunchHostname` | 设置浏览器启动主机名 | string | | `--browserLaunchPort` | 覆盖浏览器启动的端口 | string | | `--browserLaunchAvoidLocalhost` | 在自动模式下避免使用 'localhost' 进行浏览器启动 | boolean | | `--corsProxy` | 启用 CORS 代理 | boolean | | `--requestProxyEnabled` | 为传出请求启用代理 | boolean | | `--requestProxyUrl` | 设置请求代理 URL(HTTP 或 SOCKS 协议) | string | | `--requestProxyBypass` | 设置请求代理绕过列表(空格分隔的主机列表) | array | | `--disableCsrf` | 禁用 CSRF 保护(不推荐) | boolean | ## 环境变量 配置也可以通过环境变量设置,这将覆盖 `config.yaml` 文件中的值。 环境变量应以 `SILLYTAVERN_` 为前缀,并对设置名称使用大写字母。例如,`dataRoot` 设置可以使用 `SILLYTAVERN_DATAROOT` 环境变量覆盖。 嵌套设置应使用下划线分隔。例如,`protocol.ipv6` 可以使用 `SILLYTAVERN_PROTOCOL_IPV6` 环境变量覆盖。 !!!warning 期望数组或对象的配置应进行 JSON 字符串化。例如,要使用 `SILLYTAVERN_WHITELIST` 环境变量覆盖 `whitelist` 设置,您应将其设置为 JSON 字符串:`SILLYTAVERN_WHITELIST='["127.0.0.1", "::1"]'`。 !!! 如果您使用的是 Node.js v20 或更高版本,您还可以在 `.env` 文件中存储环境变量,并使用 `--env-file` 标志将其传递给服务器。例如,要使用位于存储库根目录中的 `.env` 文件,您可以使用以下命令启动服务器: ```bash node --env-file=.env server.js ``` 或者,直接通过命令行传递环境变量: ```bash SILLYTAVERN_LISTEN=true SILLYTAVERN_PORT=8000 node server.js ``` 有关使用环境变量的更多信息,请参见 [Node.js 文档](https://nodejs.org/en/learn/command-line/how-to-read-environment-variables-from-nodejs)。 ## 数据配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `dataRoot` | 用户数据存储的根目录(仅限独立模式) | `./data` | 任何有效的目录路径 | | `skipContentCheck` | 跳过新默认内容的检查 | `false` | `true`, `false` | | `enableDownloadableTokenizers` | 启用按需下载 tokenizer | `true` | `true`, `false` | ## 日志配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|------------------| | `logging.minLogLevel` | 在终端中显示的最小日志级别 | `0` (DEBUG) | (DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3) | | `logging.enableAccessLog` | 将服务器访问日志写入文件和控制台 | `true` | `true`, `false` | ## [网络配置](/Administration/remote-connections.md) | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `listen` | 启用侦听传入连接 | `false` | `true`, `false` | | `port` | 服务器侦听端口 | `8000` | 任何有效的端口号 (1-65535) | | `protocol.ipv4` | 在 IPv4 协议上启用侦听 | `true` | `true`, `false`, `auto` | | `protocol.ipv6` | 在 IPv6 协议上启用侦听 | `false` | `true`, `false`, `auto` | | `listenAddress.ipv4` | 侦听特定的 IPv4 地址 | `0.0.0.0` | 有效的 IPv4 地址 | | `listenAddress.ipv6` | 侦听特定的 IPv6 地址 | `'[::]'` | 有效的 IPv6 地址 | | `dnsPreferIPv6` | DNS 解析首选 IPv6 | `false` | `true`, `false` | ## SSL 配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|------------------| | `ssl.enabled` | 启用 SSL/TLS 加密和 HTTPS 协议 | `false` | `true`, `false` | | `ssl.keyPath` | SSL 私钥的路径(相对于服务器目录) | `"./certs/privkey.pem"` | 有效的文件路径 | | `ssl.certPath` | SSL 证书的路径(相对于服务器目录) | `"./certs/cert.pem"` | 有效的文件路径 | | `ssl.keyPassphrase` | SSL 私钥的密码短语。如果不需要则留空 | `""` | 任何字符串 | ## 安全配置 ### IP 白名单 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `whitelistMode` | 启用 IP 白名单过滤 | `true` | `true`, `false` | | `enableForwardedWhitelist` | 检查转发的头以获取白名单 IP | `true` | `true`, `false` | | `whitelist` | 允许的 IP 地址列表 | `["::1", "127.0.0.1"]` | 有效 IP 地址的数组 | | `whitelistDockerHosts` | 自动将 Docker 主机 IP 加入白名单 | `true` | `true`, `false` | ### 主机白名单 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `hostWhitelist.enabled` | 启用主机白名单 | `false` | `true`, `false` | | `hostWhitelist.scan` | 记录来自不受信任主机的传入请求 | `true` | `true`, `false` | | `hostWhitelist.hosts` | 受信任主机名列表 | `[]` | 有效主机名的数组 | ### 安全覆盖 !!!danger **强烈不建议禁用安全措施。在进行更改之前,请确保您了解自己在做什么。** !!! | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|------------------| | `allowKeysExposure` | 允许在 UI 中暴露未遮蔽的 API 密钥 | `false` | `true`, `false` | | `disableCsrfProtection` | 禁用 CSRF 保护(不推荐) | `false` | `true`, `false` | | `securityOverride` | 禁用启动安全检查(不推荐) | `false` | `true`, `false` | ## [用户身份验证](/Administration/multi-user.md) | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `basicAuthMode` | 启用基本身份验证 | `false` | `true`, `false` | | `basicAuthUser.username` | 基本身份验证用户名 | `"user"` | 任何字符串 | | `basicAuthUser.password` | 基本身份验证密码 | `"password"` | 任何字符串 | | `enableUserAccounts` | 启用多用户模式 | `false` | `true`, `false` | | `enableDiscreetLogin` | 在登录屏幕上隐藏用户列表 | `false` | `true`, `false` | | `sessionTimeout` | 用户会话超时(秒) | `-1` (禁用) | 任何数字(-1 禁用,0 为浏览器关闭,>0 为超时) | | `perUserBasicAuth` | 使用账户凭据进行基本身份验证 | `false` | `true`, `false` | ### SSO 自动登录 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|------------------| | `sso.autheliaAuth` | 启用基于 Authelia 的自动登录。参见:[SSO](/Administration/sso.md) | `false` | `true`, `false` | | `sso.authentikAuth` | 启用基于 Authentik 的自动登录。参见:[SSO](/Administration/sso.md) | `false` | `true`, `false` | ## 速率限制配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|------------------| | `rateLimiting.preferRealIpHeader` | 使用 X-Real-IP 头而不是套接字 IP 进行速率限制 | `false` | `true`, `false` | ## 请求代理配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `requestProxy.enabled` | 为传出请求启用代理 | `false` | `true`, `false` | | `requestProxy.url` | 代理服务器 URL | `null` | 有效的代理 URL(例如 `"socks5://username:password@example.com:1080"`) | | `requestProxy.bypass` | 绕过代理的主机 | `["localhost", "127.0.0.1"]` | 主机名/IP 数组 | ## CORS 代理配置 !!! 某些扩展可能需要启用的 CORS 代理。任何内置功能都不需要它。 !!! | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `enableCorsProxy` | 启用 CORS 代理中间件 | `false` | `true`, `false` | ## 浏览器启动配置 > 以前称为 "Autorun" 设置。 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `browserLaunch.enabled` | 在服务器启动时自动打开浏览器 | `true` | `true`, `false` | | `browserLaunch.browser` | 用于打开 URL 的浏览器 | `"default"` | `"default"`, `"chrome"`, `"firefox"`, `"edge"`, `"brave"` | | `browserLaunch.hostname` | 覆盖浏览器启动的主机名 | `"auto"` | `"auto"`,任何有效的主机名(例如 `"localhost"`, `"st.example.com"`) | | `browserLaunch.port` | 覆盖浏览器启动的端口 | `-1` | `-1`(使用服务器端口),任何有效的端口号 | | `browserLaunch.avoidLocalhost` | 在启动 URL 中避免使用 'localhost' | `false` | `true`, `false` | ## 性能配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|------------------| | `performance.lazyLoadCharacters` | 延迟加载角色数据 | `true` | `true`, `false` | | `performance.useDiskCache` | 为角色卡启用磁盘缓存 | `true` | `true`, `false` | | `performance.memoryCacheCapacity` | 最大内存缓存容量 | `100mb` | 人类可读的大小(例如 `100mb`, `1gb`) | ## Cache Buster 配置 !!!warning 需要 localhost 或带有 HTTPS 的域,否则将无法工作! !!! | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|------------------| | `cacheBuster.enabled` | 在首次加载或上传图像文件后清除浏览器缓存 | `false` | `true`, `false` | | `cacheBuster.userAgentPattern` | 仅为与指定正则表达式模式匹配的用户代理清除缓存。例如:`'firefox'`(不区分大小写)。 | `''` | 任何有效的正则表达式字符串 | ## 缩略图配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `thumbnails.enabled` | 启用缩略图生成 | `true` | `true`, `false` | | `thumbnails.quality` | JPEG 缩略图质量 | `95` | 0-100 | | `thumbnails.format` | 缩略图的图像格式 | `jpg` | `jpg`, `png` | | `thumbnails.dimensions.bg` | 背景缩略图大小 | `[160, 90]` | 两个数字的数组(宽度,高度) | | `thumbnails.dimensions.avatar` | 头像缩略图大小 | `[96, 144]` | 两个数字的数组(宽度,高度) | | `thumbnails.dimensions.persona` | 人格缩略图大小 | `[96, 144]` | 两个数字的数组(宽度,高度) | ## 备份配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `backups.chat.enabled` | 启用自动聊天备份 | `true` | `true`, `false` | | `backups.chat.checkIntegrity` | 在保存前验证聊天文件的完整性 | `true` | `true`, `false` | | `backups.common.numberOfBackups` | 要保留的备份数量 | `50` | 任何正整数 | | `backups.chat.throttleInterval` | 备份限制间隔(毫秒) | `10000` | 任何正整数 | | `backups.chat.maxTotalBackups` | 要保留的最大聊天备份总数 | `-1` | 任何正整数或 -1 | ## [扩展配置](/extensions/index.md) | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `extensions.enabled` | 启用 UI 扩展 | `true` | `true`, `false` | | `extensions.autoUpdate` | 自动更新扩展(如果扩展清单启用) | `true` | `true`, `false` | | `extensions.models.autoDownload` | 启用自动下载模型 | `true` | `true`, `false` | | `extensions.models.classification` | 用于分类的 HuggingFace 模型 ID | `"Cohee/distilbert-base-uncased-go-emotions-onnx"` | 有效的模型 ID | | `extensions.models.captioning` | 用于图像字幕的 HuggingFace 模型 ID | `"Xenova/vit-gpt2-image-captioning"` | 有效的模型 ID | | `extensions.models.embedding` | 用于嵌入的 HuggingFace 模型 ID | `"Cohee/jina-embeddings-v2-base-en"` | 有效的模型 ID | | `extensions.models.speechToText` | 用于语音转文本的 HuggingFace 模型 ID | `"Xenova/whisper-small"` | 有效的模型 ID | | `extensions.models.textToSpeech` | 用于文本转语音的 HuggingFace 模型 ID | `"Xenova/speecht5_tts"` | 有效的模型 ID | ## [服务器插件](/For_Contributors/Server-Plugins.md) | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `enableServerPlugins` | 启用服务器端插件 | `false` | `true`, `false` | | `enableServerPluginsAutoUpdate` | 在启动时尝试自动更新服务器插件 | `true` | `true`, `false` | ## [API 集成设置](/Usage/API_Connections/index.md) ### OpenAI 配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `promptPlaceholder` | 空提示的默认消息 | `"[Start a new chat]"` | 任何字符串 | | `openai.randomizeUserId` | 为 API 调用随机化用户 ID | `false` | `true`, `false` | | `openai.captionSystemPrompt` | 字幕完成的系统消息 | `""` | 任何字符串 | ### MistralAI 配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `mistral.enablePrefix` | 启用回复预填充。**前缀将在响应中回显** | `false` | `true`, `false` | ### Ollama 配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `ollama.keepAlive` | 模型保持活动持续时间(秒) | `-1` | `-1`(无限期),`0`(立即卸载),正整数 | | `ollama.batchSize` | 控制生成请求的 "num_batch"(批量大小)参数 | `-1` | `-1`(模型默认值),正整数 | ### Claude 配置 !!!warning **重要!** 请谨慎使用,仅在提示前缀是静态的且在请求之间不会更改时使用。\{\{random\}\} 宏、lorebooks、向量、摘要等可能会使缓存无效,您只会在缓存未命中上浪费金钱。行为可能不可预测,不会也不能提供任何保证。 参见:[Prompt Caching](https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching) !!! | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `claude.enableSystemPromptCache` | 启用系统提示缓存 | `false` | `true`, `false` | | `claude.cachingAtDepth` | 启用消息历史缓存 | `-1` | `-1`(禁用),`0` 或正整数 | | `claude.extendedTTL` | 使用 1h TTL 而不是默认的 5m。请注意,这也会增加请求的成本。 | `false` | `true`, `false` | ### Google AI Studio 配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `gemini.apiVersion` | API 端点版本 | `v1beta` | `v1beta`, `v1alpha` | ### DeepL 配置 | 设置 | 描述 | 默认值 | 允许的值 | |---------|-------------|---------|-----------------| | `deepl.formality` | 翻译正式程度 | `"default"` | `"default"`, `"more"`, `"less"`, `"prefer_more"`, `"prefer_less"` | ===== Administration/index.md (https://sillytaverncn.net/administration/) ===== --- order: 25 icon: gear expanded: true route: /administration/ --- # 管理 !!!warning 尽管遵循了许多安全最佳实践,SillyTavern 服务器的安全性仍不足以暴露在公共互联网上。 **在未首先确保适当的安全措施的情况下,切勿在开放的互联网上托管任何实例。** **对于因不当或不充分的安全实施而导致未经授权访问造成的任何损害或损失,我们概不负责。** !!! :::callout **[config.yaml](./config-yaml.md)** SillyTavern 的主配置文件。它包含各种设置,例如网络、安全和后端特定选项。 ::: :::callout **[多用户](multi-user)** 要与他人共享您的 SillyTavern 实例,您可以创建多个用户账户。每个用户都有自己的设置、扩展和数据。用户账户也可以设置密码保护。 ::: :::callout **[远程访问](remote-connections)** 您可以从手机、平板电脑或其他计算机访问您的 SillyTavern 实例。 ::: :::callout **[VPN 和隧道](tunneling.md)** 要从互联网访问您的 SillyTavern 实例,您可以使用 VPN 或隧道服务,如 Cloudflare Zero Trust、ngrok 或 Tailscale。 ::: :::callout **[反向代理](reverse-proxying)** 高级用户可以设置反向代理以从互联网访问他们的 SillyTavern 实例。 ::: ## 安全检查清单 **这些只是建议。在使您的 ST 实例上线之前,请咨询 Web 应用程序安全专家。** 1. 保持您的操作系统和运行时软件(如 Node.js)更新。这可确保您的系统拥有最新的安全补丁和修复程序,有助于防止潜在的漏洞。 2. 使用[白名单](/Administration/config-yaml.md#ip-whitelisting)和网络防火墙。仅允许受信任的 IP 范围访问服务器。 3. 启用[基本身份验证](/Administration/config-yaml.md#user-authentication)。它在您访问前端应用程序之前充当"主密码"。 4. 或者,配置外部身份验证。一些已知的服务包括 [Authelia](https://www.authelia.com/) 和 [authentik](https://goauthentik.io/)。详情请参阅 [SSO 指南](sso.md)。 5. 永远不要让管理员账户没有密码。如果您有任何未受保护的管理员账户,服务器将在启动时警告您。 6. 在本地网络外使用隐私登录设置。这会对潜在的外部人员隐藏用户列表。 7. 经常检查访问日志。它们被写入服务器控制台和 `access.log` 文件,并提供有关传入连接的信息,例如 IP 地址和用户代理。 8. 配置 HTTPS。对于 localhost 服务器,您可以生成并使用自签名证书。否则,您可能需要部署反向代理 Web 服务器,如 [Traefik](https://traefik.io/) 或 [Caddy](https://caddyserver.com/docs/getting-started)。 9. 配置并启用[主机白名单](/Administration/config-yaml.md#host-whitelisting),特别是如果您在本地网络上未使用 HTTPS 加密。 在以下指南中查找有关安全代理的更多信息:[反向代理 SillyTavern](reverse-proxying)。 ===== Administration/multi-user.md (https://sillytaverncn.net/administration/multi-user/) ===== --- title: 多用户模式 icon: people order: -10 route: /administration/multi-user/ --- 多用户模式允许多人使用一个 SillyTavern 服务器。每个用户都有自己的设置、扩展和数据。用户账户也可以设置密码保护。 !!!warning 用户密码在多用户设置的用户之间提供基本隐私。它们不是安全功能,不应被视为安全功能。所有用户数据(包括聊天历史、API 密钥和其他敏感信息)都以明文形式存储在服务器上。任何有权访问服务器文件系统的人都可以查看和修改它。**不要在公共服务器上或与不受信任的用户一起使用 SillyTavern。** !!! ## 配置 要启用和使用多用户模式,请编辑 `config.yaml` 文件: ```yaml # 启用多用户模式 enableUserAccounts: true # 启用隐私登录模式:在登录屏幕上隐藏用户列表 enableDiscreetLogin: true ``` 1. 当用户账户设置被禁用时,使用 `default-user` 后备管理员账户来存储用户数据。 2. 当隐私登录设置被禁用时,在登录屏幕上显示活动用户列表。如果启用,用户必须手动输入其句柄。 !!!info 您无法从用户列表中_删除_ `default-user` 账户,因为它用于在 `enableUserAccounts` 设置为 `false` 时提供用户数据。但您可以_禁用_它以将其从列表中隐藏并禁止登录。 !!! ## 用户句柄 句柄是用户的唯一标识符。它只能由小写字母、数字和破折号组成。 用户数据目录的路径假定使用以下模式:`%DATA_ROOT%/%USER_HANDLE%`。 有效用户句柄的示例: - default-user - juan555 - flux-the-cat - cool-guy1337 ## 角色 - **Admin** - 可以管理(创建、删除、修改)其他用户。可以为所有用户安装扩展。 - **User** - 无法管理其他用户。只能为自己安装扩展。 除了拥有管理面板访问权限外,两种用户角色在功能上是相同的,可以使用 SillyTavern 的全部功能而没有任何限制。用户权限的实现尚待确定。 所有用户账户首先被创建为普通用户,然后如果需要可以提升为管理员。 ### 登录屏幕 在那里您可以选择要使用的用户账户。根据 `enableDiscreetLogin` 配置值有两种样式。 当您只有一个活动用户且未设置密码保护时,将绕过登录屏幕且不显示。 ### 用户个人资料 您可以使用顶部菜单栏中"用户设置"面板下的"账户"按钮访问账户自我管理菜单。 1. 显示名称 - 在登录屏幕中使用,可以更改。与人格不相关,对 AI API 不可见 - 您仍然可以使用任意数量的人格。 2. 个人资料图片 - 在登录屏幕中使用。您可以使用自定义图片、默认人格图片(如果已设置)或最后使用的人格。 3. 密码 - 锁图标反映账户保护状态(开锁 = 无密码)。可以使用"更改密码"按钮设置、更改或删除密码。 4. 设置快照 - 访问和查看 `settings.json` 文件的备份,并能够创建或恢复快照。 5. 下载备份 - 下载用户数据文件夹的存档。 6. 重置设置 - 重置工厂默认设置,同时保留其他数据(角色、聊天)不变。 ## 密码恢复 1. 可以从登录屏幕恢复密码。您需要访问服务器控制台以获取一次性恢复代码(由 4 位数字组成)。 2. 或者,您可以使用 SillyTavern 服务器中的实用程序脚本通过提供用户句柄来重置密码。 ```txt Usage: node recover.js [account] (password) Example: node recover.js admin SecurePassword ``` ## 内容脚手架 要为用户添加自定义内容,您可以使用内容脚手架功能。此功能允许您定义一组文件,这些文件将在服务器启动时复制到每个用户的数据目录。 要使此功能正常工作,您必须在 `/default/scaffold` 目录中创建一个 `index.json` 文件。语法与默认内容相同。所有文件路径应相对于 `/default/scaffold` 目录,您可以使用子目录组织文件。 脚手架文件在默认文件之前复制,这意味着它们将覆盖具有相同文件名的任何默认文件(预设/设置等)。 !!!tip 每个用户数据目录都有一个 `content.log` 文件,列出从脚手架和默认目录复制的所有文件。删除此文件以强制服务器在下次重启时再次同步内容。 !!! ### 识别的内容类型 | 类型 | 值 | |-------------------------------|----------------------| | settings.json | `'settings'` | | 角色卡 | `'character'` | | 角色精灵 | `'sprites'` | | 背景图像 | `'background'` | | World Info 文件 | `'world'` | | 人格头像 | `'avatar'` | | UI 主题 | `'theme'` | | ComfyUI workflow | `'workflow'` | | KoboldAI Classic 预设 | `'kobold_preset'` | | Chat Completion 预设 | `'openai_preset'` | | NovelAI 预设 | `'novel_preset'` | | Text Completion 预设 | `'textgen_preset'` | | Instruct Mode 模板 | `'instruct'` | | Context Formatting 模板 | `'context'` | | MovingUI 预设 | `'moving_ui'` | | Quick Replies 集 | `'quick_replies'` | | System Prompt 模板 | `'sysprompt'` | | Reasoning Formatting 模板 | `'reasoning'` | ### 示例 (`/default/scaffold/index.json`) ```json [ { "filename": "themes/Midnight.json", "type": "theme" }, { "filename": "backgrounds/city.png", "type": "background" }, { "filename": "characters/Charlie.png", "type": "character" } ] ``` ===== Administration/remote-connections.md (https://sillytaverncn.net/administration/remote-connections/) ===== --- icon: rss order: -30 route: /usage/remoteconnections/ --- # 远程连接 最常见的情况是人们想在同一个 WiFi 网络内通过手机使用 SillyTavern,而 PC 运行着 ST 服务器。 这也是允许来自本地网络外部的远程连接的第一步。 !!!warning 您不应使用端口转发将您的 ST 服务器暴露到互联网。相反,使用 VPN 或隧道服务,如 Cloudflare Zero Trust、ngrok 或 Tailscale。有关更多信息,请参阅 [VPN 和隧道](tunneling.md)指南。 !!! !!!danger 免责声明 **在未首先确保适当的安全措施的情况下,切勿在开放的互联网上托管任何实例。** **对于因不当或不充分的安全实施而导致未经授权访问造成的任何损害或损失,我们概不负责。** !!! ## 允许远程连接 默认情况下,ST 服务器仅接受来自运行它的机器(localhost)的连接。要允许它监听来自其他设备的连接,请在 `config.yaml` 中将 `listen` 选项设置为 `true`。 !!! 如果您直接在 SillyTavern 文件夹中搜索 `config.yaml`,您可能会找到两个文件。 本文档中对 `config.yaml` 的所有修改都是指 SillyTavern 根目录中的那个(/SillyTavern/config.yaml),而不是 `/SillyTavern/default/config.yaml`。 !!! ```yaml # 监听传入连接 listen: true ``` 当 ST 监听远程连接时,您应该在控制台中看到此消息: ```txt SillyTavern is listening on IPv4: 0.0.0.0:8000 ``` 以及一些关于这意味着什么的说明。 当 ST **未**监听远程连接时,您应该在控制台中看到此消息: ```txt SillyTavern is listening on IPv4: 127.0.0.1:8000 ``` ## 访问控制配置 启用远程连接监听后,您必须配置至少一种访问控制方法。否则,服务器将不会启动。 ### 基于白名单的访问控制 要通过白名单启用访问控制,请编辑 SillyTavern 根目录中的 `config.yaml` 文件(`/SillyTavern/config.yaml`): 1. 至少启动一次 SillyTavern 以生成必要的配置文件。 2. 在文本编辑器中打开 `/SillyTavern/config.yaml`。 3. 找到 `whitelist` 部分并添加您希望允许的 IP 地址: * 分别列出每个 IP 地址。 * 确保包含 `127.0.0.1`,否则您将无法从主机连接。 * 支持单个 IP、CIDR 掩码(例如 `10.0.0.0/24`)和通配符(`*`)范围。 4. 保存 `config.yaml` 文件。 5. **重新启动您的 SillyTavern 服务器。** #### `config.yaml` 白名单配置示例 1. 允许本地网络上的任何设备: ```yaml whitelist: - ::1 - 127.0.0.1 - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 ``` 如果不确定您的本地网络地址范围,请使用上面的白名单。 2. 允许两个特定设备连接: ```yaml whitelist: - ::1 - 127.0.0.1 - 192.168.0.2 - 192.168.0.5 ``` 3. 允许 `192.168.0.*` 子网上的任何设备连接: ```yaml whitelist: - ::1 - 127.0.0.1 - 192.168.0.* ``` 4. 允许所有 IPv4 设备的网络连接: ```yaml whitelist: - 0.0.0.0/0 ``` ### 禁用基于白名单的访问控制 要禁用通过白名单进行的访问控制: * 在 `/SillyTavern/config.yaml` 中将 `whitelistMode` 设置为 `false`。 * 删除或重命名 `whitelist.txt`(如果存在)在 SillyTavern 基本安装文件夹中。 * 重新启动您的 SillyTavern 服务器。 ### 不推荐:使用 `whitelist.txt` !!!info 如果 `whitelist.txt` 存在,它会优先于 `config.yaml` 中的白名单设置。 然而,由于所有其他配置都在 `config.yaml` 中管理,而 `whitelist.txt` 可能会遇到权限问题或被锁定,系统可能会悄悄地恢复使用 `config.yaml` 白名单。 **直接编辑 config.yaml 既简单又可靠。** !!! 如果您仍然更喜欢使用 whitelist.txt: 1. 在 SillyTavern 基本安装文件夹中创建一个名为 `whitelist.txt` 的新文本文件。 2. 在文本编辑器中打开它并添加允许的 IP 地址。 3. 保存文件并重新启动您的 SillyTavern 服务器。 #### `whitelist.txt` 配置示例 ```txt 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.1 ::1 ``` 这允许本地网络上的任何设备连接。 ### 通过 HTTP 基本认证进行访问控制 !!!warning HTTP 基本认证不提供强大的安全性。 没有速率限制来防止暴力攻击。如果这是一个问题,建议使用具有 TLS 和速率限制的反向代理,以及专用的[认证服务](sso.md)。 !!! 当客户端通过 HTTP 连接时,服务器将要求用户名和密码。**这仅在启用远程连接(listen: true)时有效。** 要启用 HTTP BA,在 SillyTavern 基本目录中打开 `config.yaml` 并搜索 `basicAuthMode`。将 basicAuthMode 设置为 true 并设置用户名和密码。注意:只有在 ST 至少执行过一次后,`config.yaml` 才会存在。 ```yaml basicAuthMode: true basicAuthUser: username: "MyUsername" password: "MyPassword" ``` 或者,您可以按如下方式启用基本认证: ```yaml basicAuthMode: true enableUserAccounts: true perUserBasicAuth: true ``` 在这种 `perUserBasicAuth` 模式下,基本认证的用户名和密码将与任何有密码的有效多用户账户相同。此外,SillyTavern 将直接登录到该账户。**在启用 `perUserBasicAuth` 之前,请确保您有一个带密码的账户。** 保存文件,如果 SillyTavern 已经在运行,请重启它。连接到您的 ST 时,系统应该会提示您输入用户名和密码。用户名和密码都以明文传输。如果您担心这一点,可以通过 HTTPS 提供 ST 服务。 ### 主机白名单 在没有 HTTPS 的情况下在网络上托管服务器时,强烈建议启用请求主机验证。这有助于防止各种攻击,例如 DNS 重新绑定。默认情况下,SillyTavern 服务器将在第一次从无法识别的主机连接时记录控制台消息。 ### 切换主机白名单 要启用主机白名单,请编辑 SillyTavern 根目录中的 `config.yaml` 文件: ```yaml hostWhitelist: enabled: true ``` ### 添加受信任的主机 要将主机名添加到受信任主机列表,请将其包含在 `hostWhitelist.hosts` 部分中: !!!tip 提示 不要添加 `localhost` 或 IP(例如 `127.0.0.1` 或 `::1`)。这些始终被视为受信任的。 要添加一系列主机,请使用前导点。例如,添加 `.trycloudflare.com` 将信任 `trycloudflare.com` 以及任何子域,如 `example.trycloudflare.com`。 !!! ```yaml hostWhitelist: hosts: - "example.com" - ".trycloudflare.com" ``` ### 切换控制台消息 要禁用无法识别主机的控制台消息,请将 `hostWhitelist.scan` 选项设置为 `false`: ```yaml hostWhitelist: scan: false ``` ## 连接到您的 SillyTavern 实例 ### 获取 ST 主机的 IP 地址 设置白名单后,您需要 ST 主机设备的 IP。 如果 ST 主机设备在同一个 wifi 网络上,您将使用 ST 主机的内部 wifi IP: * 对于 Windows:Windows 按钮 > 在搜索栏中输入 `cmd.exe` > 在控制台中输入 `ipconfig`,按 Enter > 查找 `IPv4` 列表。 如果您(或其他人)想在不在同一网络上时连接到您托管的 ST,您需要 ST 主机设备的公共 IP。 * 使用 ST 主机设备时,访问[此页面](https://whatismyipaddress.com/)并查找 `IPv4`。这就是您从远程设备连接时要使用的地址。 ### 连接到 ST 服务器 无论您在您的情况下得到了什么 IP,您都将在远程设备的网络浏览器中输入该 IP 地址和端口号。 同一 wifi 网络上的 ST 主机的典型地址如下所示: `http://192.168.0.5:8000` 使用 http:// 而不是 https:// ### 连接日志 新的服务器连接会显示在控制台窗口中,并记录在 SillyTavern 数据目录中的 `access.log` 文件中。 来自服务器所在机器上的浏览器的控制台消息看起来像: ```txt New connection from 127.0.0.1; User Agent: ... ``` 来自与服务器在同一网络上的不同机器上的浏览器的控制台消息可能看起来像: ```txt New connection from 192.168.116.187; User Agent: ... ``` 如果连接被拒绝,控制台消息将看起来像: ```txt New connection from 192.168.116.211; User Agent: ... Forbidden: Connection attempt from 192.168.116.211. If you are attempting to connect, please add your IP address in whitelist or disable whitelist mode in config.yaml in root of SillyTavern folder. ``` `access.log` 将包含带有时间戳的连接信息,但不包含连接是否被接受或拒绝的信息。 ### 故障排除 仍然无法连接? * 如果连接尝试[出现在控制台中](#连接日志),但被禁止,这是一个[白名单问题](#基于白名单的访问控制)。 * 如果 ST 正在监听远程连接但连接尝试没有出现在控制台中,这是一个[网络问题](#网络问题)。 * 如果 ST 没有监听远程连接,这是一个[读取问题](#允许远程连接)。 #### 网络问题 * 在 Windows 上,应用程序可能被应用程序防火墙阻止。最快的解决方法是卸载并重新安装 node.js,当防火墙提示时,允许它访问网络。否则,您需要手动允许 node.js 应用程序通过 Windows 应用程序防火墙。 * 在 Windows 11 上,在设置 > 网络和 Internet > 以太网中启用私有网络配置文件类型。这对 Windows 11 来说非常重要,否则,即使有上述防火墙规则,您也无法连接。 * 在 Linux 上,您可能需要允许端口通过防火墙。执行此操作的命令是 `sudo ufw allow 8000`。这将允许端口 8000 上的流量。 不要修改路由器上的端口转发设置。这对于在本地网络内访问 ST 不是必需的,并且可能会将您的服务器暴露到互联网。 如果您正在尝试从[本地网络外部](remote-connections.md)访问您的 ST 服务器,并且它不工作,请确定问题是出在远程设备和隧道/VPN 端点之间,还是在服务器上的隧道端点和 ST 服务之间。否则,您将花费大量时间排除错误的问题。 ## HTTPS ### 使用 TLS/SSL 启动 SillyTavern !!!tip SSL 也可以使用 `config.yaml` 文件进行配置:[SSL 配置](/Administration/config-yaml.md#ssl-configuration)。 !!! 要加密往返于您的 ST 实例的流量,请使用 `--ssl` 标志启动服务器。 示例: ```bash node server.js --ssl ``` 默认情况下,ST 将在 `certs` 文件夹中搜索您的证书。如果您的文件位于其他位置,您可以使用 `--keyPath` 和 `--certPath` 参数。 示例: ```bash node server.js --ssl --keyPath /home/user/certificates/privkey.pem --certPath /home/user/certificates/cert.pem ``` 您运行 SillyTavern 的用户需要对证书文件具有读取权限。 ### 如何获取证书 获取证书的最简单、最快的方法是使用 [certbot](https://letsencrypt.org/getting-started/)。 ===== Administration/reverse-proxying.md (https://sillytaverncn.net/administration/reverse-proxying/) ===== --- label: 反向代理 order: -50 icon: server route: /usage/st-reverse-proxy-guide/ --- !!! danger 注意 本节**不**涉及 OpenAI/Claude 反向代理。这仅涉及 **HTTP/HTTPS 反向代理**。 !!! Termux 的设置让您感到困惑吗?您是否厌倦了在每个设备上更新和安装 ST?想要组织您的聊天和角色吗?好消息是,您很幸运。本指南将_希望_涵盖如何在您的 PC 上托管 SillyTavern,让您可以从任何地方连接,并在同一台用于运行 AI 模型的 PC 上与您的机器人聊天! !!! warning 警告 本指南**不适合**初学者。这将非常技术性。 !!! ## 公平警告 !!! info 对于 Windows 用户 本指南不适用于 Windows 用户。我们建议使用 Linux 虚拟机或 WSL2 来按照本指南操作。 !!! !!! info 对于 Linux 用户 您必须具备以下先验知识: - Linux 控制台命令 - DNS 记录 - 公共 IP 地址 - [Docker](https://www.docker.com) !!! **您需要为自己购买一个域名,并为您的 SillyTavern 页面配置一个 `CNAME`。我们建议在 [Cloudflare](https://www.cloudflare.com) 上添加或购买域名,因为本指南将介绍如何使用 Cloudflare 本身来完成这项工作。** ## 安装 ### Linux(裸机 SillyTavern) 对于 Linux,我们将通过 [Traefik](https://traefik.io/traefik/) 反向代理 SillyTavern。还有其他选项,如 _NGINX_ 或 _Caddy_,但在本指南中,我们将使用 Traefik,因为这是我们自己使用的。 1. 使用 `ifconfig` 或从路由器获取计算机的私有 IP。 !!! info 提示 建议将您的私有 IP 设置为静态 IP。请参考您的路由器手册或 Google 来配置静态 IP。 !!! 2. 通过 Google 搜索 `what's my ip` 获取调制解调器的公共 IP。 !!! info 关于公共 IP 大多数住宅/家庭网络使用**动态 IP**,这些 IP 在使用数月后会更新。如果您有动态 IP,请使用 DDClient 或记得经常在 Cloudflare 仪表板上检查和更改您的公共 IP。 !!! 3. 按照[此处](https://docs.docker.com/engine/install/)的 Docker 安装指南安装 Docker。 !!! danger 注意 **不要**安装 Docker Desktop。 !!! 4. 按照[此处](https://docs.docker.com/engine/install/linux-postinstall/)的 Docker 安装后指南中的**以非 root 用户身份管理 Docker**步骤进行操作。 5. 进入 Linux 的根文件夹并创建一个名为 `docker` 的新文件夹。 ```sh cd / sudo mkdir docker && cd docker ``` 6. 执行 `chown`,将 __ 替换为您的 Linux 用户名,以设置 docker 文件夹中的权限。 ```sh sudo chown -R : . ``` 7. 在 _docker_ 文件夹内创建一个名为 `secrets` 的文件夹,在 _secrets_ 内创建 `cloudflare`。 ```sh mkdir secrets && mkdir secrets/cloudflare ``` 8. 在 _docker_ 文件夹内创建一个名为 `appdata` 的文件夹,在 _appdata_ 内创建 `traefik`。之后进入 `appdata/traefik` 文件夹。 ```sh mkdir appdata && mkdir appdata/traefik cd appdata/traefik ``` 9. 使用 `touch` 创建一个 _acme.json_ 文件,并将其权限设置为 600。 ```sh touch acme.json chmod 600 acme.json ``` 10. 使用 `nano` 或类似的编辑器,创建一个名为 _traefik.yml_ 的文件并粘贴以下内容。将模板电子邮件替换为您自己的电子邮件,然后保存文件。 ```yml api: dashboard: true debug: true insecure: true entryPoints: http: address: ":80" http: redirections: entryPoint: to: https scheme: https https: address: ":443" serversTransport: insecureSkipVerify: true providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false file: filename: /config.yml watch: true certificatesResolvers: cloudflare: acme: email: YOUR_CLOUDFLARE_EMAL@DOMAIN.com storage: acme.json dnsChallenge: provider: cloudflare #disablePropagationCheck: true # 如果您通过 cloudflare 拉取证书时遇到问题,请取消注释此行。将此标志设置为 true 会禁用等待 TXT 记录传播到所有权威名称服务器的需求。 resolvers: - "1.1.1.1:53" - "1.0.0.1:53" ``` 11. 返回到 `docker` 文件夹。 ```sh cd /docker ``` 12. 使用 `nano` 或类似的编辑器,创建一个名为 _docker-compose.yaml_ 的文件并粘贴以下内容。之后保存文件。 ```yaml secrets: CF_DNS_API_KEY: file: ./secrets/cloudflare/CF_DNS_API_KEY services: traefik: image: traefik:latest container_name: traefik restart: unless-stopped secrets: - CF_DNS_API_KEY ports: - 80:80 - 443:443 - 8080:8080 environment: CLOUDFLARE_DNS_API_TOKEN_FILE: /run/secrets/CF_DNS_API_KEY CLOUDFLARE_ZONE_API_TOKEN_FILE: /run/secrets/CF_DNS_API_KEY volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./appdata/traefik/traefik.yml:/traefik.yml:ro - ./appdata/traefik/config.yml:/config.yml:ro - ./appdata/traefik/acme.json:/acme.json - /etc/localtime:/etc/localtime:ro networks: internal: driver: bridge ``` 13. 登录 Cloudflare 并点击您的域名,然后点击 **Get your API token**。 14. 点击 _Create Token_,然后点击 _Create Custom Token_,确保您给予令牌以下权限。 !!! info 令牌权限 **Zone -> DNS -> Edit** **Zone -> Zone -> Read** !!! 点击 _Continue to summary_,然后点击 _Create Token_。 15. 复制给您的令牌密钥并将其存储在安全的地方。 16. `cd` 进入 `secrets/cloudflare`,使用 `nano` 或类似的编辑器,创建一个名为 **CF_DNS_API_KEY** 的文件并在其中粘贴您的密钥。 17. 返回到您的域名页面并转到 **DNS**。使用 **Add record** 创建新记录,并创建两个如下所示的 _A_ 类型密钥。将 `PUBLIC_IP` 替换为您自己的公共 IP,然后点击 _Save_。 | 类型 | 名称(必填) | 目标(必填) | 代理状态 | TTL | |------|------------|-------------|----------|------| | A | DOMAIN.com | PUBLIC_IP | 已代理 | 自动 | | A | www | PUBLIC_IP | 已代理 | 自动 | 18. 创建另一个 **`CNAME`** 类型的记录,然后点击 _Save_。以下是它在 Cloudflare 仪表板上应该显示的示例。 | 类型 | 名称(必填) | 目标(必填) | 代理状态 | TTL | |-------|------------|-------------|----------|-----| | CNAME | silly | DOMAIN.com | 已代理 | N/A | 19. `cd` 进入 _appdata/traefik_,使用 `nano` 或类似的编辑器,创建一个名为 _config.yml_ 的文件并粘贴以下内容。将 `PRIVATE_IP` 替换为您获得的私有 IP,将 `silly.DOMAIN.com` 替换为您的子域名和域名页面的名称,然后保存文件。 ```yml http: routers: sillytavern: entryPoints: - "https" rule: "Host(`silly.DOMAIN.com`)" middlewares: - https-redirectscheme tls: {} service: sillytavern services: sillytavern: loadBalancer: servers: - url: "http://PRIVATE_IP:8000" passHostHeader: true middlewares: https-redirectscheme: redirectScheme: scheme: https permanent: true ``` 20. 使用以下命令运行 Docker Compose: ```sh cd /docker docker compose up -d ``` 21. 进入您的 SillyTavern 文件夹并编辑 `config.yaml` 以启用监听模式和基本认证,同时禁用 `whitelistMode`。 ```yaml listen: yes whitelistMode: false basicAuthMode: true ``` !!! warning 提示 确保将默认用户名和密码更改为您能记住的强密码。 !!! 或者使用 SillyTavern 账户作为用户名和密码: ```yaml basicAuthMode: true enableUserAccounts: true perUserBasicAuth: true ``` !!! warning 提示 在启用 perUserBasicAuth 之前,确保您有一个带有有效密码的多用户设置。 !!! 22. 等待几分钟,然后打开您为 ST 创建的域名页面。最后,您应该能够从任何地方只使用一个 URL 和一个账户就能打开 SillyTavern。 !!! info 提示 如果几分钟后什么都没有发生,请检查 Traefik 的容器日志是否有任何可能的错误。 !!! 23. 尽情享受!:D ### Linux(Docker SillyTavern) !!! warning 注意 请注意,我们在裸机上运行 SillyTavern 而不是 Docker。这是我们在 Docker 上使用其他 Docker 容器与 ST 一起使用时的粗略想法。 !!! 1. 按照 **Linux(裸机 SillyTavern)**的步骤 1-11 操作。 2. 登录 Cloudflare 并点击您的域名,然后点击 **Get your API token**。 3. 点击 _Create Token_,然后点击 _Create Custom Token_,确保您给予令牌以下权限。 !!! info 令牌权限 **Zone -> DNS -> Edit** **Zone -> Zone -> Read** !!! 点击 _Continue to summary_,然后点击 _Create Token_。 4. 复制给您的令牌密钥并将其存储在安全的地方。 5. `cd` 进入 `secrets/cloudflare`,使用 `nano` 或类似的编辑器,创建一个名为 **CF_DNS_API_KEY** 的文件并在其中粘贴您的密钥。 6. 返回到您的域名页面并转到 **DNS**。使用 **Add record** 创建新记录,并创建两个如下所示的 _A_ 类型密钥。将 `PUBLIC_IP` 替换为您自己的公共 IP,将示例域名替换为您的域名,然后点击 _Save_。 | 类型 | 名称(必填) | 目标(必填) | 代理状态 | TTL | |------|------------|-------------|----------|------| | A | DOMAIN.com | PUBLIC_IP | 已代理 | 自动 | | A | www | PUBLIC_IP | 已代理 | 自动 | 7. 创建另一个 **`CNAME`** 类型的记录,然后点击 _Save_。以下是它在 Cloudflare 仪表板上应该显示的示例。 | 类型 | 名称(必填) | 目标(必填) | 代理状态 | TTL | |-------|------------|-------------|----------|-----| | CNAME | silly | DOMAIN.com | 已代理 | N/A | 8. 将 SillyTavern Git clone 到 `docker` 文件夹中。 ```sh cd /docker && git clone https://github.com/SillyTavern/SillyTavern ``` 9. 使用 `nano` 或类似的编辑器,创建一个名为 _docker-compose.yaml_ 的文件并粘贴以下内容。将 `silly.DOMAIN.com` 替换为您在上面添加的子域名,然后保存文件。 ```yaml secrets: CF_DNS_API_KEY: file: ./secrets/cloudflare/CF_DNS_API_KEY services: traefik: image: traefik:latest container_name: traefik restart: unless-stopped secrets: - CF_DNS_API_KEY ports: - "80:80" - 443:443 - 8080:8080 environment: CLOUDFLARE_DNS_API_TOKEN_FILE: /run/secrets/CF_DNS_API_KEY CLOUDFLARE_ZONE_API_TOKEN_FILE: /run/secrets/CF_DNS_API_KEY volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./appdata/traefik/traefik.yml:/traefik.yml:ro - ./appdata/traefik/config.yml:/config.yml:ro - ./appdata/traefik/acme.json:/acme.json - /etc/localtime:/etc/localtime:ro sillytavern: build: ./SillyTavern container_name: sillytavern hostname: sillytavern image: ghcr.io/sillytavern/sillytavern:latest volumes: - "./appdata/sillytavern/config:/home/node/app/config" - "./appdata/sillytavern/data:/home/node/app/data" restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.sillytavern.entrypoints=http" - "traefik.http.routers.sillytavern.rule=Host(`silly.DOMAIN.com`)" - "traefik.http.middlewares.sillytavern-https-redirect.redirectscheme.scheme=https" - "traefik.http.routers.sillytavern.middlewares=sillytavern-https-redirect" - "traefik.http.routers.sillytavern-secure.entrypoints=https" - "traefik.http.routers.sillytavern-secure.rule=Host(`silly.DOMAIN.com`)" - "traefik.http.routers.sillytavern-secure.tls=true" - "traefik.http.routers.sillytavern-secure.service=sillytavern" - "traefik.http.services.sillytavern.loadbalancer.server.port=8000" networks: internal: driver: bridge ``` 10. 使用以下命令运行 Docker Compose: ```sh docker compose up -d ``` 11. 停止 SillyTavern Docker 容器。 ```sh docker compose stop sillytavern ``` 12. 进入您的 SillyTavern 文件夹(`appdata/sillytavern/config`)并编辑 `config.yaml` 以启用监听模式和基本认证,同时禁用 `whitelistMode`。 ```yaml listen: yes whitelistMode: false basicAuthMode: true ``` !!! warning 提示 确保将默认用户名和密码更改为您能记住的强密码。 !!! 13. 再次启动 SillyTavern Docker 容器。 ```sh docker compose up -d sillytavern ``` 14. 等待几分钟,然后打开您为 ST 创建的域名页面。最后,您应该能够从任何地方只使用一个 URL 和一个账户就能打开 SillyTavern。 !!! info 提示 如果几分钟后什么都没有发生,请检查 Traefik 的容器日志是否有任何可能的错误。 !!! 15. 尽情享受!:D ## 更新您的 Cloudflare DNS [**DDClient**](https://ddclient.net/) 允许您在 ISP 更改公共 IP 的情况下将公共 IP 同步到 Cloudflare,让您可以继续访问您的 ST 实例,就像什么都没发生一样。 ===== Administration/sso.md (https://sillytaverncn.net/administration/sso/) ===== --- label: 单点登录 (SSO) icon: key order: -20 route: /administration/sso/ --- # 单点登录 (SSO) SSO 允许您创建用户并使用登录门户来保护您想要保护的多个网站。虽然设置比较复杂,但这是一个很好的方式来学习 SSO 并更好地保护您在互联网上的 ST 实例。 [**Authelia**](https://www.authelia.com/) 和 [**Authentik**](https://goauthentik.io/) 是可以与 SillyTavern 一起使用的开源 SSO 提供商。 ## 使用 SSO 登录 如果您的 SSO 提供的用户名与 SillyTavern 用户账户的用户名完全匹配,您可以通过 SSO 以该用户身份登录 SillyTavern。 要实现这一点,请在 *config.yaml* 中启用 `autheliaAuth`。 ```yaml autheliaAuth: true ``` 这增强或替代了[多用户模式](/Administration/multi-user.md)设置中内置的[密码管理](/Usage/User_Settings/User_Settings.md#账户管理)组件。 ## 替换 HTTP BA SSO 还可以替换 [HTTP 基本认证](/Administration/remote-connections.md#通过-http-基本认证进行访问控制)作为[远程连接](/Administration/remote-connections.md#访问控制配置)的访问控制机制。 这是推荐的,因为 SSO 提供比 HTTP BA 更好的安全性和功能。 要使用 SSO 提供商来替代 HTTP BA,请在 *config.yaml* 中启用 `securityOverride`。否则,SillyTavern 将[拒绝启动](remote-connections.md#访问控制配置)。 ```yaml autheliaAuth: true basicAuthMode: false securityOverride: true ``` ===== Administration/tunneling.md (https://sillytaverncn.net/administration/tunneling/) ===== --- label: VPN 和隧道 order: -40 icon: lock route: /administration/tunneling/ --- VPN 和隧道是一种从世界任何地方安全访问您的家庭网络的方式。本指南将向您展示如何使用 VPN 或隧道从任何地方访问您的 SillyTavern 实例。 ## 方法 1. 使用**自建 VPN**。 许多路由器都具有在路由器管理页面中托管 VPN 服务器(主要是 OpenVPN 或 WireGuard)的功能。请参考您的路由器手册来设置 VPN 并将您的设备添加到 VPN 中。连接后,只需访问您为 SillyTavern 设置的私有 IP 地址即可正常连接。对用户和 Windows 使用来说都更简单。 2. 使用 [**Cloudflare Zero Trust**](https://developers.cloudflare.com/cloudflare-one/)。 Cloudflare Zero Trust 是 Cloudflare 中的一项免费组织功能,允许您添加 50 个用户。这将通过 Cloudflare 代理您的流量,通过使用 `cloudflared` 将您的 ST PC 添加为隧道,您可以像在家一样连接到您的 ST 实例。 请注意,在创建隧道后,您需要添加到路由器私有 IP 地址的路由,并计算 IP CIDR 值,以便使用 Cloudflare Zero Trust 在移动中获得完整的本地访问权限。 3. 使用独立的 **Cloudflare** 或 **[ngrok](https://ngrok.com)** 隧道。 与 AI 后端可以连接的方式类似,您也可以通过 Cloudflare 隧道连接您的 ST 实例并打开 Cloudflare 隧道页面。但是,每次您想要在移动中使用 ST 时,都必须复制并粘贴由 Cloudflare/NGROK 生成的每个新链接。 4. 使用 **Tailscale**。 Tailscale 是一个 VPN 提供商,可以实现与您的 PC 的安全远程连接。 ## Tailscale 设置 Tailscale 是一个 VPN 提供商,可以实现与您的 PC 的安全远程连接。Tailscale 服务器有一个开源实现,您也可以使用 [Headscale](https://github.com/juanfont/headscale) 托管服务器,但这超出了本教程的范围。 ### 1. 创建账户 * 访问 [Tailscale 的网站](https://tailscale.com/) 并创建一个新账户。 **注意:** 对于单人日常使用,Tailscale 将永久免费。如果您担心隐藏费用,只需不添加任何支付选项即可。 ### 2. 设置客户端 * 访问 [Tailscale 的下载页面](https://tailscale.com/download) 并在运行 SillyTavern 的设备和您想要从远程位置使用的设备上下载客户端/应用程序。 * 在两个设备上都使用您之前创建的账户登录。 * 访问 [Tailscale 的管理页面](https://login.tailscale.com/admin/machines) 并批准两个设备。 * 记下两个已连接设备的名称。 ### 3. 将您的设备添加到白名单 * 按照[管理白名单 IP](remote-connections.md#基于白名单的访问控制) 的说明,将您的连接设备的机器名称(您想要用来使用 SillyTavern 的设备)添加到 SillyTavern 的白名单中。 ### 4. 连接 现在,无论何时您想要从任何地方使用 SillyTavern,您只需要: * 在托管 SillyTavern 的 PC 和想要远程使用它的设备上都打开 Tailscale。 * 在想要连接的设备上打开浏览器,访问 `http://<运行 st 的 PC 的机器名称>:8000/` ### 5. 与朋友共享 SillyTavern 实例(可选) * 告诉您的朋友创建他们自己的 Tailscale 账户并在他们的设备上下载客户端。 * 访问 [Tailscale 的管理页面](https://login.tailscale.com/admin/machines)。 * 将鼠标悬停在托管 SillyTavern 的 PC 的三点按钮上并点击"共享...",或点击三点按钮并点击"共享设置..."。 * 取消选中"允许用作出口节点"(除非您想让您的朋友能够通过您的 PC 路由他们的所有互联网流量)。 * 通过电子邮件发送链接,或切换到"复制共享链接"标签,点击相同文本的大蓝色按钮,并以其他方式将其发送给您的朋友。 * 点击您的共享链接后,您的朋友将在他们的 Tailscale 网络中看到您的 PC 出现。 * 按照上一步中的说明,将您用来访问 SillyTavern 的相同链接发送给您的朋友。 **注意:** 这将给予您的朋友对您 PC 上运行的任何本地服务(如 SillyTavern、automatic1111 等)的完全访问权限。只有在您真正信任您的朋友时才这样做。 ===== For_Contributors/Function-Calling.md (https://sillytaverncn.net/for-contributors/function-calling/) ===== --- order: -10 icon: code-review route: /for-contributors/function-calling/ --- # 函数调用 函数调用允许通过让 LLM 使用结构化数据来为您的扩展添加动态功能,然后您可以使用这些数据触发扩展的特定功能。 !!! warning 注意 此功能目前正在开发中。实现细节可能会发生变化。 !!! ## 示例用例 1. 查询外部 API 以获取额外信息(新闻、天气、网络搜索等)。 2. 根据用户输入执行计算或转换。 3. 存储和回忆重要记忆或事实,包括 RAG 和数据库查询。 4. 在对话中引入真正的随机性(掷骰子、抛硬币等)。 ## 官方支持使用函数调用的扩展 1. [图像生成](/extensions/Stable-Diffusion.md)(内置)- 根据用户提示生成图像。 2. [网络搜索](/extensions/WebSearch.md) - 触发查询的网络搜索。 3. [RSS](https://github.com/SillyTavern/Extension-RSS/) - 从 RSS 源获取最新新闻。 4. [AccuWeather](https://github.com/SillyTavern/Extension-AccuWeather) - 从 AccuWeather 获取天气信息。 5. [D&D Dice](https://github.com/SillyTavern/Extension-Dice) - 为 D&D 游戏掷骰子。 ## 前提条件和限制 1. 此功能仅适用于某些聊天补全源:OpenAI、Claude、MistralAI、Groq、Cohere、OpenRouter 和自定义 API 源。 2. 文本补全 API 不支持函数调用,但一些本地托管的后端(如 Ollama 和 TabbyAPI)可以在聊天补全下以自定义 OpenAI 兼容模式运行。 3. 必须首先由用户明确允许使用函数调用功能。这是通过在 AI 回应配置面板中启用"启用函数调用"选项来完成的。 4. 不能保证 LLM 会执行任何函数调用。大多数都需要通过提示词进行明确的"激活"(例如,用户要求"掷骰子"、"获取天气"等)。 5. 并非所有提示词都能触发工具调用。继续、扮演、背景('安静')提示词不允许触发工具调用。它们仍然可以在其响应中使用过去成功的工具调用。 ## 如何制作函数工具 ### 检查功能是否受支持 要确定是否支持函数工具调用功能,您可以从 `SillyTavern.getContext()` 对象调用 `isToolCallingSupported`。这将检查当前 API 是否支持函数工具调用以及设置中是否启用了该功能。以下是如何检查功能是否受支持的示例: ```ts if (SillyTavern.getContext().isToolCallingSupported()) { console.log("Function tool calling is supported"); } else { console.log("Function tool calling is not supported"); } ``` ### 注册函数 要注册函数工具,您需要从 `SillyTavern.getContext()` 对象调用 `registerFunctionTool` 函数并传递所需参数。以下是如何注册函数工具的示例: ```ts SillyTavern.getContext().registerFunctionTool({ // 函数工具的内部名称。必须唯一。 name: "myFunction", // 函数工具的显示名称。将在 UI 中显示。(可选) displayName: "My Function", // 函数工具的描述。必须描述函数的功能和使用时机。 description: "My function description. Use when you need to do something.", // 函数工具参数的 JSON schema。参见:https://json-schema.org/ parameters: { $schema: 'http://json-schema.org/draft-04/schema#', type: 'object', properties: { param1: { type: 'string', description: 'Parameter 1 description', }, param2: { type: 'string', description: 'Parameter 2 description', }, }, required: [ 'param1', 'param2', ], }, // 工具触发时要调用的函数。可以是异步的。 // 如果结果不是字符串,它将被 JSON 字符串化。 action: async ({ param1, param2 }) => { // 您的函数代码在这里 console.log(`Function called with parameters: ${param1}, ${param2}`); return "Function result"; }, // 可选函数,用于格式化调用函数时显示的 toast 消息。 // 如果返回空字符串,则不会显示 toast 消息。 formatMessage: ({ param1, param2 }) => { return `Function is called with: ${param1} and ${param2}`; }, // 可选函数,返回一个布尔值,指示是否应为当前提示词注册工具。 // 如果没有提供 shouldRegister 函数,工具将为每个提示词注册。 shouldRegister: () => { return true; }, }); ``` ### 取消注册函数 要停用函数工具,您需要从 `SillyTavern.getContext()` 对象调用 `unregisterFunctionTool` 函数并传递要禁用的函数工具的名称。以下是如何取消注册函数工具的示例: ```ts SillyTavern.getContext().unregisterFunctionTool("myFunction"); ``` ## 提示和技巧 1. 成功的工具调用会作为可见历史的一部分保存,并将在聊天 UI 中显示,因此您可以检查实际的参数和结果。 2. 如果您不想在聊天历史中看到工具调用。如果您想用自定义 CSS 设置样式或隐藏它们,请针对 `.mes` 元素上的 `toolCall` 类,例如 `.mes.toolCall { display: none; }` 或 `.mes.toolCall { color: #999; }`。 ===== For_Contributors/Server-Plugins.md (https://sillytaverncn.net/for-contributors/server-plugins/) ===== --- order: -30 icon: server route: /for-contributors/server-plugins/ --- # 服务器插件 服务器插件是一种扩展 SillyTavern 服务器功能的方式。它们可以添加新的 API 端点、处理程序和其他功能。 ## 创建插件 1. 在 `plugins` 目录中创建一个新目录。目录名称将成为插件的名称。 2. 在插件目录中创建一个 `index.js` 文件。这是插件的入口点。 3. 在 `index.js` 中导出一个包含以下方法的对象: ```javascript module.exports = { // 在服务器启动时调用 async init(app) { // app 是 Express 应用程序实例 // 在这里添加您的路由和中间件 }, // 在服务器关闭时调用 async stop() { // 在这里清理资源 } } ``` ## 示例插件 ```javascript const express = require('express'); module.exports = { async init(app) { // 创建一个新的路由器 const router = express.Router(); // 添加一个新的 API 端点 router.get('/hello', (req, res) => { res.json({ message: 'Hello from plugin!' }); }); // 将路由器挂载到 /api/plugins/[plugin-name] app.use('/api/plugins/example', router); }, async stop() { // 清理代码 } } ``` ## 启用插件 要启用插件,请在 `config.yaml` 中添加以下内容: ```yaml plugins: # 插件目录的名称 - example ``` ## 插件 API 插件可以访问以下 API: - `app` - Express 应用程序实例 - `express` - Express 模块 - `config` - 服务器配置对象 - `jsonwebtoken` - JWT 模块,用于身份验证 - `path` - Node.js path 模块 - `fs` - Node.js fs 模块 - `logger` - Winston 日志记录器实例 ===== For_Contributors/Writing-Extensions.md (https://sillytaverncn.net/for-contributors/writing-extensions/) ===== --- order: -20 icon: file-added templating: false route: /for-contributors/writing-extensions/ --- # UI 扩展 UI 扩展通过挂钩到 SillyTavern 的事件和 API 来扩展其功能。它们在浏览器环境中运行,几乎可以无限制地访问 DOM、JavaScript API 和 SillyTavern 上下文。扩展可以修改 UI、调用内部 API 并与聊天数据交互。本指南介绍如何创建您自己的扩展(需要 JavaScript 知识)。 !!!tip 只想安装扩展? 前往这里:[Extensions](../extensions/index.md)。 !!! 要扩展 Node.js 服务器的功能,请参阅 [Server Plugins](./Server-Plugins.md) 页面。 **不会写 JavaScript?** * 考虑使用 [STscript](./st-script.md) 作为编写完整扩展的简单替代方案。 * 学习 [MDN 课程](https://developer.mozilla.org/en-US/docs/Learn/JavaScript),完成后再回来。 ## 扩展提交 想要将您的扩展贡献到 [官方内容仓库](https://github.com/SillyTavern/SillyTavern-Content)? 联系我们! 为确保所有扩展安全且易于使用,我们有一些要求: 1. 您的扩展必须是开源的,并具有自由许可证(参见 [选择许可证](https://choosealicense.com/licenses/))。如果不确定,AGPLv3 是个不错的选择。 2. 扩展必须与最新发布版本的 SillyTavern 兼容。如果核心发生变化,请准备好更新您的扩展。 3. 扩展必须有完善的文档。这包括一个包含安装说明、使用示例和功能列表的 README 文件。 4. 需要 server plugin 才能运行的扩展将不被接受。 ## 示例 查看简单 SillyTavern 扩展的实时示例: * - 基础扩展模板。展示 manifest 创建、本地脚本导入、添加设置 UI 面板和持久化扩展设置的使用。 * - GitHub 上所有官方 SillyTavern 扩展的列表。 ## 打包 扩展还可以使用打包工具将自己与其他模块隔离,并使用 NPM 中的任何依赖项,包括 Vue、React 等 UI 框架。 * - 使用 TypeScript 和 Webpack 的扩展模板仓库(无 React)。 * - 使用 React 和 Webpack 的基础扩展模板仓库。 要从打包的文件中使用相对导入,您可能需要创建一个导入包装器。以下是 Webpack 的示例: ```js /** * Import a member from a module by URL, bypassing webpack. * @param {string} url URL to import from * @param {string} what Name of the member to import * @param {any} defaultValue Fallback value * @returns {Promise} Imported member */ export async function importFromUrl(url, what, defaultValue = null) { try { const module = await import(/* webpackIgnore: true */ url); if (!Object.hasOwn(module, what)) { throw new Error(`No ${what} in module`); } return module[what]; } catch (error) { console.error(`Failed to import ${what} from ${url}: ${error}`); return defaultValue; } } // Import a function from 'script.js' module const generateRaw = await importFromUrl('/script.js', 'generateRaw'); ``` ## manifest.json 每个扩展都必须在 `data//extensions` 中有一个文件夹和一个 `manifest.json` 文件,该文件包含有关扩展的元数据以及作为扩展入口点的 JS 脚本文件的路径。 可下载的扩展在通过 HTTP 提供服务时会被挂载到 `/scripts/extensions/third-party` 文件夹中,因此应该基于此使用相对导入。为方便本地开发,建议将扩展仓库放在 `/scripts/extensions/third-party` 文件夹中("为所有用户安装"选项)。 ```json { "display_name": "The name of the extension", "loading_order": 1, "requires": [], "optional": [], "dependencies": [], "js": "index.js", "css": "style.css", "author": "Your name", "version": "1.0.0", "homePage": "https://github.com/your/extension", "auto_update": true, "minimum_client_version": "1.0.0", "i18n": { "de-de": "i18n/de-de.json" } } ``` ### Manifest 字段 * `display_name` 是必需的。它显示在"管理扩展"菜单中。 * `loading_order` 是可选的。数字越大,加载越晚。 * `js` 是主 JS 文件引用,是必需的。 * `css` 是可选的样式文件引用。 * `author` 是必需的。应包含作者的姓名或联系信息。 * `auto_update` 设置为 `true` 时,当 ST 包的版本更改时,扩展将自动更新。 * `i18n` 是一个可选对象,指定支持的语言环境及其对应的 JSON 文件(见下文)。 * `dependencies` 是一个可选的字符串数组,指定此扩展依赖的其他**扩展**。 * `generate_interceptor` 是一个可选字符串,指定在文本生成请求时调用的全局函数名称。 * `minimum_client_version` 是一个可选字符串,指定此扩展正常工作所需的最低 SillyTavern 版本。 ### 依赖项 扩展也可以依赖其他 SillyTavern 扩展。如果缺少或禁用了这些依赖项中的任何一个,扩展将不会加载。 依赖项由其在 `public/extensions` 目录中显示的**文件夹名称**指定。 示例: * 内置扩展: `"vectors"`, `"caption"` * 第三方扩展: `"third-party/Extension-WebLLM"`, `"third-party/Extension-Mermaid"` ### 已弃用的字段 * `requires` 是一个可选的字符串数组,指定所需的 **Extras 模块**。如果连接的 Extras API 不提供所有列出的模块,扩展将不会加载。 * `optional` 是一个可选的字符串数组,指定可选的 **Extras 模块**。如果缺少这些模块,扩展仍将加载,扩展应优雅地处理它们的缺失。 要检查当前连接的 Extras API 提供哪些模块,请从 `scripts/extensions.js` 导入 `modules` 数组。 ## 脚本编写 ### 使用 getContext `SillyTavern` 全局对象中的 `getContext()` 函数可以让您访问 SillyTavern 上下文,这是所有主要应用状态对象、有用函数和实用程序的集合。 ```js const context = SillyTavern.getContext(); context.chat; // Chat log - MUTABLE context.characters; // Character list context.characterId; // Index of the current character context.groups; // Group list context.groupId; // ID of the current group // And many more... ``` 您可以在 [SillyTavern 源代码](https://github.com/SillyTavern/SillyTavern/blob/staging/public/scripts/st-context.js)中找到可用属性和函数的完整列表。 !!! 如果 `getContext` 中缺少任何您需要的函数/属性,请联系开发人员或向我们发送 pull request! !!! ### 共享库 SillyTavern 前端内部使用的大多数 npm 库都在 `SillyTavern` 全局对象的 `libs` 属性中共享。 * `lodash` - 实用程序库。[文档](https://lodash.com/)。 * `localforage` - 浏览器存储库。[文档](https://localforage.github.io/localForage/)。 * `Fuse` - 模糊搜索库。[文档](https://www.fusejs.io/)。 * `DOMPurify` - HTML 清理库。[文档](https://github.com/cure53/DOMPurify)。 * `Handlebars` - 模板库。[文档](https://handlebarsjs.com/)。 * `moment` - 日期/时间操作库。[文档](http://momentjs.com/)。 * `showdown` - Markdown 转换库。[文档](https://showdownjs.com/)。 您可以在 [SillyTavern 源代码](https://github.com/SillyTavern/SillyTavern/blob/staging/public/lib.js)中找到导出库的完整列表。 **示例:** 使用 DOMPurify 库。 ```js const { DOMPurify } = SillyTavern.libs; const sanitizedHtml = DOMPurify.sanitize(''); ``` ### TypeScript 注意事项 如果您想要 `SillyTavern` 全局对象中所有方法的自动完成功能(您可能想要),包括 `getContext()` 和 `libs`,您应该添加一个 TypeScript `.d.ts` 模块声明。此声明应从 SillyTavern 的源代码导入全局类型,具体取决于您的扩展位置。以下示例适用于两种安装类型:"所有用户"和"当前用户"。 **global.d.ts** - 将此文件放在扩展目录的根目录中(`manifest.json` 旁边): ```ts export {}; // 1. Import for user-scoped extensions import '../../../../public/global'; // 2. Import for server-scoped extensions import '../../../../global'; // Define additional types if needed... declare global { // Add global type declarations here } ``` ### 从其他文件导入 !!!warning 从 SillyTavern 代码导入是不可靠的,如果 ST 模块的内部结构发生变化,可能会随时中断。`getContext` 提供了更稳定的 API。 !!! 除非您正在构建打包的扩展,否则您可以从其他 JS 文件导入变量和函数。 例如,此代码片段将在后台从当前选择的 API 生成回复: ```js import { generateQuietPrompt } from "../../../../script.js"; async function handleMessage(data) { const text = data.message; const translated = await generateQuietPrompt({ quietPrompt: text }); // ... } ``` ## 状态管理 ### 持久化设置 当扩展需要持久化其状态时,它可以使用 `getContext()` 函数中的 `extensionSettings` 对象来存储和检索数据。扩展可以在设置对象中存储任何 JSON 可序列化的数据,并且必须使用唯一的键来避免与其他扩展冲突。 要持久化设置,请使用 `saveSettingsDebounced()` 函数,该函数将设置保存到服务器。 ```js const { extensionSettings, saveSettingsDebounced } = SillyTavern.getContext(); // Define a unique identifier for your extension const MODULE_NAME = 'my_extension'; // Define default settings const defaultSettings = Object.freeze({ enabled: false, option1: 'default', option2: 5 }); // Define a function to get or initialize settings function getSettings() { // Initialize settings if they don't exist if (!extensionSettings[MODULE_NAME]) { extensionSettings[MODULE_NAME] = structuredClone(defaultSettings); } // Ensure all default keys exist (helpful after updates) for (const key of Object.keys(defaultSettings)) { if (!Object.hasOwn(extensionSettings[MODULE_NAME], key)) { extensionSettings[MODULE_NAME][key] = defaultSettings[key]; } } return extensionSettings[MODULE_NAME]; } // Use the settings const settings = getSettings(); settings.option1 = 'new value'; // Save the settings saveSettingsDebounced(); ``` ### 聊天元数据 要将某些数据绑定到特定聊天,您可以使用 `getContext()` 函数中的 `chatMetadata` 对象。此对象允许您存储与聊天关联的任意数据,这对于存储特定于扩展的状态很有用。 要持久化元数据,请使用 `saveMetadata()` 函数,该函数将元数据保存到服务器。 !!!warning 不要在长期变量中保存对 `chatMetadata` 的引用,因为切换聊天时引用会改变。始终使用 `SillyTavern.getContext().chatMetadata` 来访问当前聊天元数据。 !!! ```js const { chatMetadata, saveMetadata } = SillyTavern.getContext(); // Set some metadata for the current chat chatMetadata['my_key'] = 'my_value'; // Get the metadata for the current chat const value = chatMetadata['my_key']; // Save the metadata to the server await saveMetadata(); ``` !!!tip 切换聊天时会发出 `CHAT_CHANGED` 事件,因此您可以监听此事件以相应地更新扩展的状态。请参阅[监听事件](#listening-to-events)部分了解更多信息。 !!! ### 角色卡片 SillyTavern 完全支持 [Character Cards V2 规范](https://github.com/malfoyslastname/character-card-spec-v2/blob/main/spec_v2.md),允许在角色卡片 JSON 数据中存储任意数据。 这对于需要存储与角色关联的附加数据并在导出角色卡片时使其可共享的扩展很有用。 要将数据写入角色卡片 [extensions](https://github.com/malfoyslastname/character-card-spec-v2/blob/main/spec_v2.md#extensions) 数据字段,请使用 `getContext()` 函数中的 `writeExtensionField` 函数。此函数接受角色 ID、字符串键和要写入的值。该值必须是 JSON 可序列化的。 !!!warning 注意奇怪的地方 尽管被称为 `characterId`,但它不是"真正的"唯一标识符,而是 `characters` 数组中角色的索引。 当前角色的索引由上下文中的 `characterId` 属性提供。如果要将数据写入当前选择的角色,请使用 `SillyTavern.getContext().characterId`。如果需要为另一个角色存储数据,请通过在 `characters` 数组中搜索角色来找到索引。 **注意:`characterId` 在群聊或未选择角色时为 `undefined`!** !!! ```js const { writeExtensionField, characterId } = SillyTavern.getContext(); // Write some data to the character card await writeExtensionField(characterId, 'my_extension_key', { someData: 'value', anotherData: 42 }); // Read the data back from the character card const character = SillyTavern.getContext().characters[characterId]; // The data is stored in the `extensions` object of the character's data const myData = character.data?.extensions?.my_extension_key; ``` ### 设置预设 任意 JSON 数据可以存储在主要 API 类型的设置预设中。它将与预设 JSON 一起导出和导入,因此您可以使用它来存储预设的扩展特定设置。以下 API 类型支持设置预设中的数据扩展: * Chat Completion * Text Completion * NovelAI * KoboldAI / AI Horde 要读取或写入数据,您首先需要从上下文获取 PresetManager 实例: ```js const { getPresetManager } = SillyTavern.getContext(); // Get the preset manager for the current API type const pm = getPresetManager(); // Write data to the preset extension field: // - path: the path to the field in the preset data // - value: the value to write // - name (optional): the name of the preset to write to, defaults to the currently selected preset await pm.writePresetExtensionField({ path: 'hello', value: 'world' }); // Read data from the preset extension field: // - path: the path to the field in the preset data // - name (optional): the name of the preset to read from, defaults to the currently selected preset const value = pm.readPresetExtensionField({ path: 'hello' }); ``` !!!tip 切换预设或主 API 时会发出 `PRESET_CHANGED` 和 `MAIN_API_CHANGED` 事件,因此您可以监听这些事件以相应地更新扩展的状态。请参阅[监听事件](#listening-to-events)部分了解更多信息。 !!! ## 国际化 !!! 有关提供翻译的一般信息,请参阅[国际化](/For_Contributors/i18n.md)页面。 !!! 扩展可以提供额外的本地化字符串,以便与 `t`、`translate` 函数和 HTML 模板中的 `data-i18n` 属性一起使用。 在此处查看支持的语言环境列表(`lang` 键): ### 直接调用 `addLocaleData` 将语言环境代码和包含翻译的对象传递给 `addLocaleData` 函数。*不*允许覆盖现有键。如果传递的语言环境代码不是当前选择的语言环境,数据将被静默忽略。 ```js SillyTavern.getContext().addLocaleData('fr-fr', { 'Hello': 'Bonjour' }); SillyTavern.getContext().addLocaleData('de-de', { 'Hello': 'Hallo' }); ``` ### 通过扩展 manifest 将包含支持的语言环境列表及其对应 JSON 文件路径(相对于扩展目录)的 i18n 对象添加到 manifest 中。 ```json { "display_name": "Foobar", "js": "index.js", // rest of the fields "i18n": { "fr-fr": "i18n/french.json", "de-de": "i18n/german.json" } } ``` ## 注册 slash 命令(新方法) 虽然 `registerSlashCommand` 仍然存在以实现向后兼容,但现在应该通过 `SlashCommandParser.addCommandObject()` 注册新的 slash 命令,以向解析器(进而向自动完成和命令帮助)提供有关命令及其参数的扩展详细信息。 ```javascript SlashCommandParser.addCommandObject(SlashCommand.fromProps({ name: 'repeat', callback: (namedArgs, unnamedArgs) => { return Array(namedArgs.times ?? 5) .fill(unnamedArgs.toString()) .join(isTrueBoolean(namedArgs.space.toString()) ? ' ' : '') ; }, aliases: ['example-command'], returns: 'the repeated text', namedArgumentList: [ SlashCommandNamedArgument.fromProps({ name: 'times', description: 'number of times to repeat the text', typeList: ARGUMENT_TYPE.NUMBER, defaultValue: '5', }), SlashCommandNamedArgument.fromProps({ name: 'space', description: 'whether to separate the texts with a space', typeList: ARGUMENT_TYPE.BOOLEAN, defaultValue: 'off', enumList: ['on', 'off'], }), ], unnamedArgumentList: [ SlashCommandArgument.fromProps({ description: 'the text to repeat', typeList: ARGUMENT_TYPE.STRING, isRequired: true, }), ], helpString: `
Repeats the provided text a number of times.
Example:
  • /repeat foo
    returns "foofoofoofoofoo"
  • /repeat times=3 space=on bar
    returns "bar bar bar"
`, })); ``` 所有注册的命令都可以在 [STscript](/For_Contributors/st-script.md) 中以任何可能的方式使用。 ## 事件 ### 监听事件 使用 `eventSource.on(eventType, eventHandler)` 来监听事件: ```js const { eventSource, event_types } = SillyTavern.getContext(); eventSource.on(event_types.MESSAGE_RECEIVED, handleIncomingMessage); function handleIncomingMessage(data) { // Handle message } ``` 主要事件类型: * `APP_READY`: 应用完全加载并准备使用。应用准备就绪后,每次附加新监听器时都会自动触发。 * `MESSAGE_RECEIVED`: LLM 消息已生成并记录到 `chat` 对象中,但尚未在 UI 中渲染。 * `MESSAGE_SENT`: 消息由用户发送并记录到 `chat` 对象中,但尚未在 UI 中渲染。 * `USER_MESSAGE_RENDERED`: 用户发送的消息在 UI 中渲染。 * `CHARACTER_MESSAGE_RENDERED`: 生成的 LLM 消息在 UI 中渲染。 * `CHAT_CHANGED`: 聊天已切换(例如,切换到另一个角色,或加载了另一个聊天)。 * `GENERATION_AFTER_COMMANDS`: 在处理 slash 命令后即将开始生成。 * `GENERATION_STOPPED`: 生成被用户停止。 * `GENERATION_ENDED`: 生成已完成或出错。 * `SETTINGS_UPDATED`: 应用程序设置已更新。 其余可以在[源代码](https://github.com/SillyTavern/SillyTavern/blob/staging/public/scripts/events.js)中找到。 !!!info 事件数据 每个事件将数据传递给监听器的方式不统一。有些事件不发出任何数据;有些传递对象或原始值。请参阅发出事件的源代码以查看它传递的数据,或使用调试器检查。 !!! ### 发出事件 您可以通过调用 `eventSource.emit(eventType, ...eventData)` 从扩展产生任何应用程序事件,包括自定义事件: ```js const { eventSource } = SillyTavern.getContext(); // Can be a built-in event_types field or any string. const eventType = 'myCustomEvent'; // Use `await` to ensure all event handlers complete before continuing execution. await eventSource.emit(eventType, { data: 'custom event data' }); ``` ## Prompt Interceptors Prompt Interceptors 提供了一种方式,允许扩展在发出文本生成请求之前执行任何活动,例如修改聊天数据、添加注入或中止生成。 来自不同扩展的 interceptors 按顺序运行。顺序由其各自 `manifest.json` 文件中的 `loading_order` 字段确定。`loading_order` 值较低的扩展较早运行。如果未指定 `loading_order`,则使用 `display_name` 作为后备。如果两者都未指定,则顺序未定义。 ### 注册 Interceptor 要定义 prompt interceptor,请在扩展的 `manifest.json` 文件中添加 `generate_interceptor` 字段。该值应该是 SillyTavern 将调用的全局函数的名称。 ```json { "display_name": "My Interceptor Extension", "loading_order": 10, // Affects execution order "generate_interceptor": "myCustomInterceptorFunction", // ... other manifest properties } ``` ### Interceptor 函数 `generate_interceptor` 函数是一个全局函数,将在非试运行的生成请求时调用。它必须在全局作用域中定义(例如,`globalThis.myCustomInterceptorFunction = async function(...) { ... }`),并且如果需要执行任何异步操作,可以返回 `Promise`。 interceptor 函数接收以下参数: * `chat`: 表示将用于构建 prompt 的聊天历史的消息对象数组。您可以直接修改此数组(例如,添加、删除或更改消息)。请注意,消息是可变的,因此您对数组所做的任何更改都将反映在实际聊天历史中。如果您希望更改是临时的,请使用 `structuredClone` 创建消息对象的深层副本。 * `contextSize`: 表示为即将进行的生成计算的当前上下文大小(以 tokens 为单位)的数字。 * `abort`: 调用时将发出信号以阻止文本生成继续进行的函数。它接受一个布尔参数,如果为 `true`,则阻止任何后续 interceptors 运行。 * `type`: 表示生成的类型或触发器的字符串(例如,`'quiet'`、`'regenerate'`、`'impersonate'`、`'swipe'` 等)。这有助于 interceptor 根据生成的启动方式有条件地应用逻辑。 **示例实现:** ```javascript globalThis.myCustomInterceptorFunction = async function(chat, contextSize, abort, type) { // Example: Add a system note before the last user message const systemNote = { is_user: false, name: "System Note", send_date: Date.now(), mes: "This was added by my extension!" }; // Insert before the last message chat.splice(chat.length - 1, 0, systemNote); } ``` ## 生成文本 SillyTavern 提供了几个函数,可以使用当前选择的 LLM API 在不同上下文中生成文本。这些函数允许您在聊天上下文中生成文本、无需任何上下文的原始生成,或使用结构化输出。 ### 在聊天上下文中 `generateQuietPrompt()` 函数用于在后台(输出不在 UI 中渲染)在聊天上下文中使用添加的"quiet" prompt(历史后指令)生成文本。这对于在不中断用户体验的同时生成文本很有用,同时还保持相关的聊天和角色数据完整,例如生成摘要或图像 prompt。 ```js const { generateQuietPrompt } = SillyTavern.getContext(); const quietPrompt = 'Generate a summary of the chat history.'; const result = await generateQuietPrompt({ quietPrompt, }); ``` ### 原始生成 `generateRaw()` 函数用于在没有任何聊天上下文的情况下生成文本。当您想要完全控制 prompt 构建过程时,它很有用。 它接受 `prompt` 作为 Text Completion 字符串或 Chat Completion 对象数组,根据所选 API 类型以适当的格式构造请求,例如,在 chat/text 模式之间转换、应用 instruct 格式等。您还可以将额外的 `systemPrompt` 和 `prefill` 传递给函数,以更好地控制生成过程。 ```js const { generateRaw } = SillyTavern.getContext(); const systemPrompt = 'You are a helpful assistant.'; const prompt = 'Generate a story about a brave knight.'; const prefill = 'Once upon a time,'; /* In Chat Completion mode, will produce a prompt like this: [ {role: 'system', content: 'You are a helpful assistant.'}, {role: 'user', content: 'Generate a story about a brave knight.'}, {role: 'assistant', content: 'Once upon a time,'} ] */ /* In Text Completion mode (no instruct), will produce a prompt like this: "You are a helpful assistant.\nGenerate a story about a brave knight.\nOnce upon a time," */ const result = await generateRaw({ systemPrompt, prompt, prefill, }); ``` ### 结构化输出 !!!info 目前仅 Chat Completion API 支持。可用性因所选源和模型而异。如果所选模型不支持结构化输出,生成将失败或返回空对象(`'{}'`)。请查看您使用的特定 API 的文档以查看是否支持结构化输出。 !!! 您可以使用结构化输出功能来确保模型生成符合提供的 [JSON Schema](https://json-schema.org/learn) 的有效 JSON 对象。这对于需要结构化数据的扩展很有用,例如状态跟踪、数据分类等。 要使用结构化输出,您必须将 JSON schema 对象传递给 `generateRaw()` 或 `generateQuietPrompt()`。然后,模型将生成与 schema 匹配的响应,并将其作为字符串化的 JSON 对象返回。 !!!warning 输出不会根据 schema 进行验证,您必须自己处理生成输出的解析和验证。如果模型无法生成有效的 JSON 对象,函数将返回空对象(`'{}'`)。 [Zod](https://zod.dev/json-schema) 是一个流行的库,用于生成和验证 JSON schemas。这里不会涉及其使用。 !!! ```js const { generateRaw, generateQuietPrompt } = SillyTavern.getContext(); // Define a JSON schema for the expected output const jsonSchema = { // Required: a name for the schema name: 'StoryStateModel', // Optional: a description of the schema description: 'A schema for a story state with location, plans, and memories.', // Optional: the schema will be used in strict mode, meaning that only the fields defined in the schema will be allowed strict: true, // Required: a definition of the schema value: { '$schema': 'http://json-schema.org/draft-04/schema#', 'type': 'object', 'properties': { 'location': { 'type': 'string' }, 'plans': { 'type': 'string' }, 'memories': { 'type': 'string' } }, 'required': [ 'location', 'plans', 'memories' ], }, }; const prompt = 'Generate a story state with location, plans, and memories. Output as a JSON object.'; const rawResult = await generateRaw({ prompt, jsonSchema, }); const quietResult = await generateQuietPrompt({ quietPrompt: prompt, jsonSchema, }); ``` ## 注册自定义宏 您可以注册自定义宏,这些宏可以在支持宏替换的任何地方使用,例如在角色卡片字段、STscript 命令、prompt 模板等中。 要注册宏,请使用 `SillyTavern.getContext()` 对象中的 `registerMacro()` 函数。该函数接受一个宏名称(应该是唯一的字符串)和一个字符串或返回字符串的函数。该函数将使用唯一的 `nonce` 字符串调用,该字符串在每次 `substituteParams` 调用之间都会不同。 ```js const { registerMacro } = SillyTavern.getContext(); // Simple string macro registerMacro('fizz', 'buzz'); // Function macro registerMacro('tomorrow', () => { return new Date(Date.now() + 24 * 60 * 60 * 1000).toLocaleDateString(); }); ``` 当不再需要自定义宏时,使用 `unregisterMacro()` 函数删除它: ```js const { unregisterMacro } = SillyTavern.getContext(); // Unregister the 'fizz' macro unregisterMacro('fizz'); ``` **有关自定义宏的重要详细信息和已知限制:** 1. 目前仅支持简单的字符串替换宏。我们正在努力在未来添加对更复杂宏的支持。 2. 使用函数提供值的宏*必须*是同步的。返回 `Promise` 将不起作用。 3. 注册时不需要用双花括号(`{{ }}`)包装宏名称。SillyTavern 会为您执行此操作。 4. 由于宏是纯正则表达式替换,注册大量宏会导致性能问题,因此请谨慎使用。 ## 执行 Extras 请求 !!!warning Extras API 已弃用。不建议在新扩展中使用它。 !!! `doExtrasFetch()` 函数允许您向 SillyTavern Extras API 服务器发出请求。 例如,要调用 `/api/summarize` 端点: ```js import { getApiUrl, doExtrasFetch } from "../../extensions.js"; const url = new URL(getApiUrl()); url.pathname = '/api/summarize'; const apiResult = await doExtrasFetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Bypass-Tunnel-Reminder': 'bypass', }, body: JSON.stringify({ // Request body }) }); ``` `getApiUrl()` 返回 Extras 服务器的基本 URL。 `doExtrasFetch()` 函数: * 添加 `Authorization` 和 `Bypass-Tunnel-Reminder` headers * 处理获取结果 * 返回结果(响应对象) 这使得从扩展调用 Extras API 变得容易。 您可以指定: * 请求方法: GET、POST 等。 * 附加 headers * POST 请求的 body * 任何其他 fetch 选项 ===== For_Contributors/i18n.md (https://sillytaverncn.net/for-contributors/i18n/) ===== --- templating: false icon: globe order: -40 --- # 国际化 (i18n) SillyTavern 支持多种语言。本指南解释如何添加和管理翻译。 您可能来到这里是因为某些文本在您的语言中未翻译,这让您感到困扰。首先,我将向您展示我是如何修复繁体中文语言环境中的一些缺失翻译的。每个翻译缺失的原因都不同,这样您就能很好地了解如何修复自己的缺失翻译。 在第二部分,我们将探讨 - SillyTavern 中的 [i18n 工作原理](#翻译的工作原理), - [编写翻译](#语言文件)和使用它们的代码, - [查找缺失翻译](#查找缺失的翻译)的调试功能, - 添加[新语言](#adding-a-new-language), - 以及[贡献您的更改](#contributing)。 如果您正在开发扩展或修改核心代码,请在编写 HTML 和 JavaScript 时考虑 i18n。这样,其他人就可以将您的工作翻译成他们的语言。 没有人能自己掌握 15 种语言。我们一起努力让 SillyTavern 对每个人都可访问。 **世界上的每个人都应该能够在手机和电脑上使用自己的语言。** --- ## 让我们修复一些缺失的翻译! !!! info 这 3 个问题都需要代码更改才能修复。如果您要添加新翻译,可能根本不需要修改代码。只需将翻译添加到 JSON 文件中即可。恰好最近有人向繁体中文 JSON 文件添加了大量缺失的翻译,所以剩下的问题都在代码中。在其他语言环境中,有很多缺失的翻译可以在不修改代码的情况下修复。 !!! ### `Generate Image` "Generate Image"(生成图像)在繁体中文语言环境中未翻译。为什么? ![generate-image-pre.png](../static/i18n/generate-image-pre.png) 右键点击元素并检查它。您会看到 HTML: ```html
Generate Image
``` 它的 `data-i18n` 属性在哪里?它缺失了!让我们添加它。我们在源代码中找到它: ```html
Generate Image
Stop Image Generation
``` 我们很幸运,字符串 `Generate Image` 在许多语言文件中都有,包括繁体中文。 ![generate-image-lang.png](../static/i18n/generate-image-lang.png) ```json { "Generate Image": "生成图片" } ``` 为什么它没有显示出来?我们必须正确连接元素: ```html
Generate Image
Stop Image Generation
``` 现在它可以工作了!重新加载页面看看。 ![generate-image-post.png](../static/i18n/generate-image-post.png) 但是当我们打开 HTML 时,下面的 `Stop Image Generation` 是怎么回事?HTML 看起来不对。 如果我们生成图像,然后在生成时打开魔杖菜单,我们会看到未翻译的文本。 ![stop-generating-image-pre.png](../static/i18n/stop-generating-image-pre.png) 首先修复 HTML: ```html
Generate Image
Stop Image Generation
``` 这还不足以解决问题。繁体中文文件中没有"Stop Image Generation"的翻译。我们可以添加它!这是一个可能的翻译: ```json { "Stop Image Generation": "停止生成图片" } ``` ...我们可以将其添加到 JSON 文件中的"Generate Image"翻译之后。 ```json { "Generate Image": "生成图片", "Stop Image Generation": "停止生成图片" } ``` 经过与 Claude 的讨论,我们实际上将使用以下翻译: - 繁体中文:"Stop Image Generation": "終止圖片生成" - 简体中文:"Stop Image Generation": "中止图像生成" - 日语:"Stop Image Generation": "画像生成を停止" ![stop-generating-post-2.png](../static/i18n/stop-generating-post-2.png) ### `Generate Caption` "Generate Caption"(生成说明)在繁体中文语言环境中未翻译。让我们修复它! ![generate-image-post.png](../static/i18n/generate-image-post.png) 它在哪里?检查元素。 ```html
Generate Caption
``` 原来这个 HTML 是由 JavaScript 生成的。让我们找到源代码。 ```js // public/scripts/extensions/caption/index.js const sendButton = $(`
Generate Caption
`); ``` 我们首先要修复代码: ```js // public/scripts/extensions/caption/index.js const sendButton = $(`
Generate Caption
`); ``` 繁体中文文件中也没有"Generate Caption"的翻译。让我们添加它! ```json { "Generate Caption": "生成圖片說明" } ``` 我们将使用以下翻译: - 繁体中文:"Generate Caption": "生成圖片說明" - 简体中文:"Generate Caption": "生成图片说明" - 日语:"Generate Caption": "画像説明を生成" ![generate-caption-post.png](../static/i18n/generate-caption-post.png) ### `Inspect Prompts` "Inspect Prompts"(检查提示词)在繁体中文语言环境中未翻译。为什么? 这个有点复杂。文本是由 JavaScript 生成的,而且翻译缺失。 ```js // Extension-PromptInspector/index.js const enabledText = 'Stop Inspecting'; const disabledText = 'Inspect Prompts'; ``` 好吧,您知道吗...这两个短语都不在 i18n 文件中。让我们添加它们。 ```json { "Stop Inspecting": "停止檢查", "Inspect Prompts": "檢查提示詞" } ``` 现在我们必须修复 JavaScript 代码。它必须使用 `t` 函数来获取翻译。 ```js // Extension-PromptInspector/index.js import {t} from '../../../i18n.js'; const enabledText = t`Stop Inspecting`; const disabledText = t`Inspect Prompts`; ``` 我们从 Claude 那里得到了这些建议。保留字符串,忽略代码。它们必须添加到 JSON 文件中。 ```js // 1. 简体中文 (zh-cn): const enabledText = t`停止检查`; const disabledText = t`检查提示词`; // 2. 繁体中文 (zh-tw): const enabledText = t`停止檢查`; const disabledText = t`檢查提示詞`; // 3. 日语 (ja-jp): const enabledText = t`検査を停止`; const disabledText = t`プロンプトを検査`; ``` 我们将把这些合并到 JSON 文件中。 ```json { "Stop Inspecting": "停止检查", "Inspect Prompts": "检查提示词" } ``` ```json { "Stop Inspecting": "停止檢查", "Inspect Prompts": "檢查提示詞" } ``` ```json { "Stop Inspecting": "検査を停止", "Inspect Prompts": "プロンプトを検査" } ``` ![toggle-prompt-inspection-post-tt.png](../static/i18n/toggle-prompt-inspection-post-tt.png) 关于那个工具提示很遗憾。问题在于代码没有使用 `t` 函数。 ```js launchButton.title = 'Toggle prompt inspection'; ``` 我们必须在扩展代码中修复这个问题。 ```js launchButton.title = t`Toggle prompt inspection`; ``` 我们还需要将翻译添加到 JSON 文件中。 ```json { "Toggle prompt inspection": "切换提示检查" } ``` ```json { "Toggle prompt inspection": "切换提示词检查" } ``` ```json { "Toggle prompt inspection": "プロンプト検査の切り替え" } ``` 提示检查器是一个独立的扩展,所以我们会向该仓库提交代码修复:https://github.com/SillyTavern/Extension-PromptInspector/pull/1 翻译将添加到主 SillyTavern 仓库。https://github.com/SillyTavern/SillyTavern/pull/3198 ![start-inspecting-post.png](../static/i18n/start-inspecting-post.png) ## 语言文件 每种语言在 `public/locales/` 目录下都有一个以其语言代码命名的 JSON 文件(例如,`ru-ru.json`)。 该文件包含键值对,其中: - 键是原始英文文本或唯一标识符 - 值是翻译后的文本 示例: ```json { "Save": "Сохранить", "Cancel": "Отмена", "Could not find proxy with name '${0}'": "Не удалось найти прокси с названием '${0}'" } ``` ## 翻译的工作原理 应用程序中有两种使用翻译的方式: 1. **HTML 元素**:使用 `data-i18n` 属性 ```html
默认文本
``` 如果有可用的翻译,HTML 中的默认文本将被替换为翻译后的文本。 2. **模板字符串**:在 JavaScript 代码中使用 `t` 函数 ```javascript t`Some text with ${variable}` ``` 这些字符串应该在保持 `${0}`、`${1}` 等占位符不变的情况下进行翻译。 SillyTavern 使用带有 `data-i18n` 属性的 HTML 元素来标记可翻译的内容。使用这个属性有几种方式: ### 1. 翻译元素文本 对于简单的文本内容: ```html Role: ``` ```json { "Role:": "Роль:" } ``` 这会将元素的文本内容替换为"Role:"的翻译。 ### 2. 翻译属性 要翻译标题或占位符等属性: ```html ``` ```json { "Insert prompt": "Вставить промпт" } ``` `[title]` 前缀指示要翻译哪个属性。属性值的其余部分是将用作 JSON 文件中查找键的文本。程序员通常使用英文文本作为键,但这不是必需的。键可以是任何唯一标识符。 不过,原始英文文本必须存在于相应的属性中(`title="Insert prompt"`)。如果缺少翻译,它将用作后备。最值得注意的是,英语没有翻译文件。 这里是一个使用唯一标识符 `no_items_text` 作为键而不是英文文本的示例: ```html
``` ```json { "openai_logit_bias_no_items": "没有相关产品" } ``` ### 3. 每个元素的多个翻译 某些元素需要同时翻译内容和属性,用分号分隔。最常见的模式是同时翻译元素的文本内容和其标题属性: ```html ``` ```json { "Authorize": "Авторизоваться", "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Получите свой OpenRouter API токен используя OAuth. У вас будет открыта вкладка openrouter.ai" } ``` 这会翻译: - 使用键"Authorize"翻译元素的文本内容 - 使用键"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai"翻译标题属性 注意,`title` 属性和元素的文本内容都以英语提供作为后备。 您也可以翻译多个属性: ```html ``` 您的语言文件中相应的翻译看起来像这样: ```json { "Not connected to API!": "Нет соединения с API!", "Type a message, or /? for help": "Введите сообщение или /? для помощи" } ``` 当页面加载时,系统会: 1. 查找所有带有 `data-i18n` 属性的元素 2. 解析任何属性前缀,如 `[title]` 或 `[placeholder]` 3. 在您的语言的 JSON 文件中查找每个键 4. 用翻译后的文本替换元素的内容或属性 ### 动态文本 对于 JavaScript 代码中的动态文本,翻译使用以下方式之一: 1. 带有 `t` 函数的模板字面量: ```javascript toastr.warn(t`Tag ${tagName} not found.`); ``` 2. 直接翻译函数: ```javascript translate("Some text", "optional_key") ``` ### 变量占位符 某些字符串包含使用 `${0}`、`${1}` 等的动态值占位符: ```js toastr.error(t`Could not find proxy with name '${presetName}'`); ``` ```json { "Could not find proxy with name '${0}'": "Не удалось найти прокси с названием '${0}'" } ``` 在键和翻译中保持占位符相同。系统将用 `presetName` 的值替换 `${0}` 等。 ## 查找缺失的翻译 如果您不仅想修复某个特定的翻译问题,而是希望全面查找并修复所有缺失的翻译,这无疑是一个更具挑战性的任务。 虽然修复单个翻译已经很有价值,但若您希望系统性地解决所有翻译缺失问题,您将需要借助专门的工具来完成这项工作。 ### SillyTavern-i18n https://github.com/SillyTavern/SillyTavern-i18n 用于处理前端本地化文件的工具。 功能: - 自动从 HTML 文件添加新的待翻译项。 - 从本地化文件中删除缺失的项。 - 使用自动 Google 翻译来自动填充缺失的值。 - 按键对 JSON 文件进行排序。 ### Inbuilt debug functions 这些工具位于 **用户设置** > **调试菜单** 下。 #### 获取缺失的翻译 检测当前语言环境中缺失的本地化数据,并将数据输出到浏览器控制台。如果当前语言环境是英语,则搜索所有其他语言环境。 控制台将显示一个缺失翻译的表格,包含: - key:需要翻译的文本或标识符 - language:您当前的语言代码 - value:需要翻译的英文文本 #### 应用语言环境 重新应用当前选择的语言环境到页面 !!! warning 这两个工具都不是完美的 - 它们无法捕获 JavaScript 代码中缺失的翻译 - 它们无法捕获 HTML 中缺失的 data-i18n 属性,它们只能捕获未翻译的键 - `getMissingTranslations` 的代码中存在错误:键不应该带有 `[title]` 或 `[placeholder]` 前缀 !!! ## Adding a new language 要添加对新语言的支持: 1. 将您的语言添加到 `public/locales/lang.json`: ```json { "lang": "xx-xx", "display": "语言名称(英文名称)" } ``` 2. 创建 `public/locales/xx-xx.json` 并添加您的翻译 ## Contributing 当您的翻译准备就绪时: 1. 验证您的 JSON 文件是否有效 2. 在应用程序中进行彻底测试 3. 通过 GitHub 拉取请求提交 ===== For_Contributors/index.md (https://sillytaverncn.net/for-contributors/) ===== --- order: 30 label: 开发和自动化 icon: command-palette expanded: true route: /for-contributors/ --- # 开发和自动化 SillyTavern 的默认包只提供了一个基础平台,可以通过多种方式进行扩展。 :::callout **[STscript](st-script)** STscript 是一种强大的脚本语言,基于批处理聊天命令,无需任何编程知识即可上手。 ::: :::callout **[Function Calling](Function-Calling)** 通过让 LLM 使用外部数据源或触发扩展的特定功能来添加更多动态功能。 ::: :::callout **[UI Extensions](Writing-Extensions)** UI 扩展在浏览器环境中运行,通过挂钩其事件和 API 来扩展 SillyTavern 的功能。 ::: :::callout **[Server Plugins](Server-Plugins)** 服务器插件允许通过在 NodeJS 环境中运行代码来添加新的 API 端点等功能。 ::: :::callout **[Internationalization (i18n)](i18n)** 了解如何将 SillyTavern 的 UI 翻译成您的语言。 ::: ===== For_Contributors/st-script.md (https://sillytaverncn.net/for-contributors/st-script/) ===== --- order: 0 icon: file-symlink-file route: /usage/st-script --- # STscript 语言参考 ## 什么是 STscript? 这是一个简单但功能强大的脚本语言,可用于在不需要严格编程的情况下扩展 SillyTavern 的功能,允许您: - 创建迷你游戏或速通挑战 - 构建 AI 驱动的聊天洞察 - 释放您的创造力并与他人分享 STscript 是基于斜杠命令引擎构建的,利用命令批处理、数据管道、宏和变量。 这些概念将在以下文档中详细描述。 ### 安全注意事项 能力越大,责任越大。在执行脚本之前,请务必仔细检查。 ## Hello, World! 要运行您的第一个脚本,打开任何 SillyTavern 聊天并在聊天输入栏中输入以下内容: ```stscript /pass Hello, World! | /echo ``` | ![Hello World](/static/scripts/hello-world.png) | |-------------------------------------------------| 您应该会在屏幕顶部看到一条提示消息。现在让我们逐步分析。 脚本是一批命令,每个命令都以斜杠开头,可以带有或不带有命名和未命名参数,并以命令分隔符结束:`|`。 命令按顺序依次执行,并在彼此之间传输数据。 1. `/pass` 命令接受一个常量值 "Hello, World!" 作为未命名参数并将其写入管道。 2. `/echo` 命令通过管道从前一个命令接收值并将其显示为提示通知。 > **提示:** 要查看所有可用命令的列表,请在聊天中输入 `/help slash`。 由于常量未命名参数和管道是可互换的,我们可以简单地将这个脚本重写为: ```stscript /echo Hello, World! ``` ## 用户输入 现在让我们为脚本添加一些交互性。我们将接受用户的输入值并在通知中显示它。 ```stscript /input Enter your name | /echo Hello, my name is {{pipe}} ``` 1. `/input` 命令用于显示一个输入框,其中包含未命名参数中指定的提示,然后将输出写入管道。 2. 因为 `/echo` 已经有一个设置输出模板的未命名参数,我们使用 `{{pipe}}` 宏来指定管道值将被渲染的位置。 | ![Slim Shady Input](/static/scripts/slim-input.png) | ![Slim Shady Output](/static/scripts/slim-output.png) | |-----------------------------------------------------|-------------------------------------------------------| ### 其他输入/输出命令 - `/popup (text)` — 显示一个阻塞弹出窗口,支持简单的 HTML 格式,例如:`/popup I'm red!`。 - `/setinput (text)` — 用提供的文本替换用户输入栏的内容。 - `/speak voice="name" (text)` — 使用选定的 TTS 引擎和语音映射中的角色名称朗读文本,例如 `/speak name="Donald Duck" Quack!`。 - `/buttons labels=["a","b"] (text)` — 显示一个带有指定文本和按钮标签的阻塞弹出窗口。`labels` 必须是 JSON 序列化的字符串数组或包含此类数组的变量名。将点击的按钮标签返回到管道中,如果取消则返回空字符串。文本支持简单的 HTML 格式。 #### `/popup` 和 `/input` 的参数 `/popup` 和 `/input` 支持以下附加命名参数: - `large=on/off` - 增加弹出窗口的垂直大小。默认:`off`。 - `wide=on/off` - 增加弹出窗口的水平大小。默认:`off`。 - `okButton=string` - 添加自定义"确定"按钮文本的功能。默认:`Ok`。 - `rows=number` - (仅用于 `/input`) 增加输入控件的大小。默认:1。 示例: ```stscript /popup large=on wide=on okButton="Accept" Please accept our terms and conditions.... ``` #### `/echo` 的参数 `/echo` 支持以下 `severity` 附加参数值,用于设置显示消息的样式。 - `warning` - `error` - `info` (默认) - `success` 示例: ```stscript /echo severity=error Something really bad happened. ``` ## 变量 变量用于在脚本中存储和操作数据,可以使用命令或宏。变量可以是以下类型之一: - 本地变量 — 保存到当前聊天的元数据中,对其唯一。 - 全局变量 — 保存到 settings.json 中,在整个应用程序中都存在。 1. `/getvar name` 或 `{{getvar\:\:name}}` — 获取本地变量的值。 2. `/setvar key=name value` 或 `{{setvar::name::value}}` — 设置本地变量的值。 3. `/addvar key=name increment` 或 `{{addvar::name::increment}}` — 将 `increment` 添加到本地变量的值中。 4. `/incvar name` 或 `{{incvar::name}}` — 将本地变量的值增加 1。 5. `/decvar name` 或 `{{decvar::name}}` — 将本地变量的值减少 1。 6. `/getglobalvar name` 或 `{{getglobalvar::name}}` — 获取全局变量的值。 7. `/setglobalvar key=name` 或 `{{setglobalvar::name::value}}` — 设置全局变量的值。 8. `/addglobalvar key=name` 或 `{{addglobalvar::name:increment}}` — 将 `increment` 添加到全局变量的值中。 9. `/incglobalvar name` 或 `{{incglobalvar::name}}` — 将全局变量的值增加 1。 10. `/decglobalvar name` 或 `{{decglobalvar::name}}` — 将全局变量的值减少 1。 11. `/flushvar name` — 删除本地变量的值。 12. `/flushglobalvar name` — 删除全局变量的值。 - 之前未定义的变量的默认值是空字符串,或者如果首次在 `/addvar`、`/incvar`、`/decvar` 命令中使用,则为零。 - `/addvar` 命令中的增量如果增量和变量值都可以转换为数字,则执行加法或减法,否则执行字符串连接。 - 如果命令参数接受变量名,并且同名的本地和全局变量都存在,则*本地变量*优先。 - 所有用于变量操作的*斜杠命令*都将结果值写入管道供下一个命令使用。 - 对于*宏*,只有 "get"、"inc" 和 "dec" 类型的宏返回值,"add" 和 "set" 则替换为空字符串。 现在,让我们考虑以下示例: ```stscript /input What do you want to generate? | /setvar key=SDinput | /echo Requesting an image of {{getvar::SDinput}} | /getvar SDinput | /imagine ``` 1. 用户输入的值保存在名为 `SDinput` 的本地变量中。 2. `getvar` 宏用于在 `/echo` 命令中显示值。 3. `getvar` 命令用于检索变量的值并通过管道传递。 4. 该值传递给 `/imagine` 命令(由图像生成插件提供)作为其输入提示。 由于变量在脚本执行之间保存且不会被清除,您可以在其他脚本中和通过宏引用该变量,它将解析为与示例脚本执行期间相同的值。要确保值被丢弃,请在脚本中添加 `/flushvar` 命令。 ### 数组和对象 变量值可以包含 JSON 序列化的数组或键值对(对象)。 示例: - 数组:`["apple","banana","orange"]` - 对象:`{"fruits":["apple","banana","orange"]}` 以下修改可以应用于命令以处理这些变量: - `/len` 命令获取数组中的项目数。 - `index=number/string` 命名参数可以添加到 `/getvar` 或 `/setvar` 及其全局对应项,以通过数组的从零开始的索引或对象的字符串键获取或设置子值。 - 如果在不存在的变量上使用数字索引,该变量将被创建为空数组 `[]`。 - 如果在不存在的变量上使用字符串索引,该变量将被创建为空对象 `{}`。 - `/addvar` 和 `/addglobalvar` 命令支持将新值推送到数组类型的变量。 ## 流程控制 - 条件语句 您可以使用 `/if` 命令创建基于定义规则分支执行的条件表达式。 `/if left=valueA right=valueB rule=comparison else="(command on false)" "(command on true)"` 让我们看看以下示例: ```stscript /input What's your favorite drink? | /if left={{pipe}} right="black tea" rule=eq else="/echo You shall not pass \| /abort" "/echo Welcome to the club, \{\{user\}\}" ``` 这个脚本根据用户输入评估所需值,并根据输入值显示不同的消息。 ### `/if` 的参数 1. `left` 是第一个操作数。让我们称之为 A。 2. `right` 是第二个操作数。让我们称之为 B。 3. `rule` 是要应用于操作数的操作。 4. `else` 是可选的子命令字符串,如果布尔比较结果为 false 则执行。 5. 未命名参数是如果布尔比较结果为 true 则执行的子命令。 操作数值按以下顺序评估: 1. 数字字面量 2. 本地变量名 3. 全局变量名 4. 字符串字面量 命名参数的字符串值可以用引号转义以允许多词字符串。然后丢弃引号。 ### 布尔运算 支持以下布尔比较规则。应用于操作数的操作结果为 true 或 false 值。 1. `eq`(等于)=> A = B 2. `neq`(不等于)=> A != B 3. `lt`(小于)=> A < B 4. `gt`(大于)=> A > B 5. `lte`(小于或等于)=> A <= B 6. `gte`(大于或等于)=> A >= B 7. `not`(一元否定)=> !A 8. `in`(包含子字符串)=> A 包含 B,不区分大小写 9. `nin`(不包含子字符串)=> A 不包含 B,不区分大小写 ### 子命令 子命令是包含要执行的斜杠命令列表的字符串。 1. 要在子命令中使用命令批处理,命令分隔符字符应该被转义(见下文)。 2. 由于宏值在进入条件时执行,而不是在执行子命令时执行,因此可以额外转义宏以延迟其评估到子命令执行时间。 3. 子命令执行的结果通过管道传递给 `/if` 之后的命令。 4. 遇到 `/abort` 命令时中断脚本执行。 `/if` 命令可以用作三元运算符。 以下示例将在变量 `a` 等于 5 时将 "true" 字符串传递给下一个命令,否则传递 "false" 字符串。 ```stscript /if left=a right=5 rule=eq else="/pass false" "/pass true" | /echo ``` ## 转义序列 ### 宏 宏的转义工作方式与以前一样。但是,使用闭包时,您需要转义宏的频率会大大降低。可以转义两个开始的大括号,或者同时转义开始和结束的大括号对。 ```stscript /echo \{\{char}} | /echo \{\{char\}\} ``` ### 管道 在闭包中不需要转义管道(当用作命令分隔符时)。在任何想要使用字面管道字符而不是命令分隔符的地方,都需要转义它。 ```stscript /echo title="a\|b" c\|d | /echo title=a\|b c\|d | ``` 使用解析器标志 `STRICT_ESCAPING` 时,不需要在引用值中转义管道。 ```stscript /parser-flag STRICT_ESCAPING | /echo title="a|b" c\|d | /echo title=a\|b c\|d | ``` ### 引号 要在引号值内使用字面引号字符,必须转义该字符。 ```stscript /echo title="a \"b\" c" d "e" f ``` ### 空格 要在命名参数的值中使用空格,您必须用引号括起该值,或者转义空格字符。 ```stscript /echo title="a b" c d | /echo title=a\ b c d ``` ### 闭包分隔符 如果要使用用于标记闭包开始或结束的字符组合,必须使用单个反斜杠转义该序列。 ```stscript /echo \{: | /echo \:} ``` ## 管道中断符 ```stscript || ``` 要防止前一个命令的输出自动注入到下一个命令的未命名参数中,请在两个命令之间放置双管道符。 ```stscript /echo we don't want to pass this on || /world ``` ## 闭包 ```stscript {: ... :} ``` 闭包(块语句、lambda、匿名函数,随你怎么称呼)是包装在 `{:` 和 `:}` 之间的一系列命令,只有在执行到代码的该部分时才会被评估。 ### 子命令 闭包使子命令的使用变得更加容易,并且不再需要转义管道符和宏。 ```stscript // if without closures | /if left=1 rule=eq right=1 else=" /echo not equal \| /return 0 " /echo equal \| /return \{\{pipe}} ``` ```stscript // if with closures | /if left=1 rule=eq right=1 else={: /echo not equal | /return 0 :} {: /echo equal | /return {{pipe}} :} ``` ### 作用域 闭包有自己的作用域并支持作用域变量。作用域变量使用 `/let` 声明,使用 `/var` 设置和检索其值。获取作用域变量的另一种方法是使用 `{{var::}}` 宏。 ```stscript /let x | /let y 2 | /var x 1 | /var y | /echo x is {{var::x}} and y is {{pipe}}. ``` 在闭包内,您可以访问在同一闭包或其祖先之一中声明的所有变量。您无法访问在闭包的后代中声明的变量。 如果声明了与在闭包的祖先之一中声明的变量同名的变量,则在此闭包及其后代中无法访问祖先变量。 ```stscript /let x this is root x | /let y this is root y | /return {: /echo called from level-1: x is "{{var::x}}" and y is "{{var::y}}" | /delay 500 | /let x this is level-1 x | /echo called from level-1: x is "{{var::x}}" and y is "{{var::y}}" | /delay 500 | /return {: /echo called from level-2: x is "{{var::x}}" and y is "{{var::y}}" | /let x this is level-2 x | /echo called from level-2: x is "{{var::x}}" and y is "{{var::y}}" | /delay 500 :}() :}() | /echo called from root: x is "{{var::x}}" and y is "{{var::y}}" ``` ### 命名闭包 ```stscript /let x {: ... :} | /:x ``` 闭包可以分配给变量(仅作用域变量),以便稍后调用或用作子命令。 ```stscript /let myClosure {: /echo this is my closure :} | /:myClosure ``` ```stscript /let myClosure {: /echo this is my closure | /delay 500 :} | /times 3 {{var::myClosure}} ``` `/:` 也可用于执行快速回复,因为它只是 `/run` 的简写。 ```stscript /:QrSetName.QrButtonLabel | /run QrSetName.QrButtonLabel ``` ### 闭包参数 命名闭包可以接受命名参数,就像斜杠命令一样。参数可以有默认值。 ```stscript /let myClosure {: a=1 b= /echo a is {{var::a}} and b is {{var::b}} :} | /:myClosure b=10 ``` ### 闭包和管道参数 父闭包的管道值不会自动注入到子闭包的第一个命令中。 您仍然可以使用 `{{pipe}}` 显式引用父闭包的管道值,但如果将闭包内第一个命令的未命名参数留空,该值将*不会*被自动注入。 ```stscript /* This used to attempt to change the model to "foo" because the value "foo" from the /echo outside of the loop was injected into the /model command inside of the loop. Now it will simply echo the current model without attempting to change it. *| /echo foo | /times 2 {: /model | /echo | :} | ``` ```stscript /* You can still recreate the old behavior by explicitly using the {{pipe}} macro. *| /echo foo | /times 2 {: /model {{pipe}} | /echo | :} | ``` ### 立即执行的闭包 ```stscript {: ... :}() ``` 闭包可以立即执行,这意味着它们将被替换为其返回值。这在没有明确支持闭包的地方很有用,并且可以缩短一些否则需要大量中间变量的命令。 ```stscript // a simple length comparison of two strings without closures | /len foo | /var lenOfFoo {{pipe}} | /len bar | /var lenOfBar {{pipe}} | /if left={{var::lenOfFoo}} rule=eq right={{var:lenOfBar}} /echo yay! ``` ```stscript // the same comparison with immediately executed closures | /if left={:/len foo:}() rule=eq right={:/len bar:}() /echo yay! ``` 除了运行保存在作用域变量中的命名闭包外,`/run` 命令还可用于立即执行闭包。 ```stscript /run {: /add 1 2 3 4 | :} | /echo | ``` ## 注释 ```stscript // ... | /# ... ``` 注释是脚本代码中人类可读的解释或标注。注释不会中断管道。 ```stscript // this is a comment | /echo foo | /# this is also a comment ``` ### 块注释 块注释可用于快速注释掉多个命令。它们不会在管道符处终止。 ```stscript /echo foo | /* /echo bar | /echo foobar | *| /echo foo again | ``` ## 流程控制 ### 循环:`/while` 和 `/times` 如果需要在循环中运行某些命令直到满足特定条件,请使用 `/while` 命令。 ```stscript /while left=valueA right=valueB rule=operation guard=on "commands" ``` 在循环的每一步中,它会将变量 A 的值与变量 B 的值进行比较,如果条件为真,则执行引号中的任何有效斜杠命令,否则退出循环。此命令不会向输出管道写入任何内容。 #### `/while` 的参数 **可用的布尔比较集、变量处理、字面值和子命令与 `/if` 命令相同。** 可选的 `guard` 命名参数(默认为 `on`)用于防止无限循环,将迭代次数限制为 100 次。 要禁用并允许无限循环,请设置 `guard=off`。 此示例将 `i` 的值加 1 直到达到 10,然后输出结果值(在这种情况下为 10)。 ```stscript /setvar key=i 0 | /while left=i right=10 rule=lt "/addvar key=i 1" | /echo {{getvar::i}} | /flushvar i ``` #### `/times` 的参数 运行子命令指定的次数。 `/times (repeats) "(command)"` — 引号中的任何有效斜杠命令重复多次,例如 `/setvar key=i 1 | /times 5 "/addvar key=i 1"` 将 "i" 的值加 1 共 5 次。 - {{timesIndex}} 被替换为迭代编号(从零开始),例如 `/times 4 "/echo {{timesIndex}}"` 回显数字 0 到 4。 - 循环默认限制为 100 次迭代,传递 `guard=off` 以禁用。 ### 跳出循环和闭包 ```stscript /break | ``` `/break` 命令可用于提前跳出循环(`/while` 或 `/times`)或闭包。`/break` 的未命名参数可用于传递与当前管道不同的值。 `/break` 目前在以下命令中实现: - `/while` - 提前退出循环 - `/times` - 提前退出循环 - `/run`(带闭包或通过变量的闭包)- 提前退出闭包 - `/:`(带闭包)- 提前退出闭包 ```stscript /times 10 {: /echo {{timesIndex}} /delay 500 | /if left={{timesIndex}} rule=gt right=3 {: /break :} | :} | ``` ```stscript /let x {: iterations=2 /if left={{var::iterations}} rule=gt right=10 {: /break too many iterations! | :} | /times {{var::iterations}} {: /delay 500 | /echo {{timesIndex}} | :} | :} | /:x iterations=30 | /echo the final result is: {{pipe}} ``` ```stscript /run {: /break 1 | /pass 2 | :} | /echo pipe will be one: {{pipe}} | ``` ```stscript /let x {: /break 1 | /pass 2 | :} | /:x | /echo pipe will be one: {{pipe}} | ``` ## 数学运算 - 以下所有运算都接受一系列数字或变量名,并将结果输出到管道。 - 无效运算(例如除以零)以及导致 NaN 值或无穷大的运算返回零。 - 乘法、加法、最小值和最大值接受无限数量的参数,用空格分隔。 - 减法、除法、指数运算和模运算接受用空格分隔的两个参数。 - 正弦、余弦、自然对数、平方根、绝对值和四舍五入接受一个参数。 **运算列表:** 1. `/add (a b c d)` — 对值集进行加法运算,例如 `/add 10 i 30 j` 2. `/mul (a b c d)` — 对值集进行乘法运算,例如 `/mul 10 i 30 j` 3. `/max (a b c d)` — 从值集中返回最大值,例如 `/max 1 0 4 k` 4. `/min (a b c d)` — 从值集中返回最小值,例如 `/min 5 4 i 2` 5. `/sub (a b)` — 对两个值进行减法运算,例如 `/sub i 5` 6. `/div (a b)` — 对两个值进行除法运算,例如 `/div 10 i` 7. `/mod (a b)` — 对两个值进行模运算,例如 `/mod i 2` 8. `/pow (a b)` — 对两个值进行幂运算,例如 `/pow i 2` 9. `/sin (a)` — 对值进行正弦运算,例如 `/sin i` 10. `/cos (a)` — 对值进行余弦运算,例如 `/cos i` 11. `/log (a)` — 对值进行自然对数运算,例如 `/log i` 12. `/abs (a)` — 对值进行绝对值运算,例如 `/abs -10` 13. `/sqrt (a)` — 对值进行平方根运算,例如 `/sqrt 9` 14. `/round (a)` — 对值进行四舍五入到最接近整数的运算,例如 `/round 3.14` 15. `/rand (round=round|ceil|floor from=number=0 to=number=1)` — 返回介于 from 和 to 之间的随机数,例如 `/rand` 或 `/rand 10` 或 `/rand from=5 to=10`。范围是包含的。返回的值将包含小数部分。使用 `round` 命名参数获取整数值,例如 `/rand round=ceil` 向上舍入,`round=floor` 向下舍入,`round=round` 舍入到最接近的值。 ### 示例 1:获取半径为 50 的圆的面积。 ```stscript /setglobalvar key=PI 3.1415 | /setvar key=r 50 | /mul r r PI | /round | /echo Circle area: {{pipe}} ``` ### 示例 2:计算 5 的阶乘。 ```stscript /setvar key=input 5 | /setvar key=i 1 | /setvar key=product 1 | /while left=i right=input rule=lte "/mul product i \| /setvar key=product \| /addvar key=i 1" | /getvar product | /echo Factorial of {{getvar::input}}: {{pipe}} | /flushvar input | /flushvar i | /flushvar product ``` ## 使用 LLM 脚本可以使用以下命令向当前连接的 LLM API 发出请求: - `/gen (prompt)` — 使用提供的提示词为所选角色生成文本,并包含聊天消息。 - `/genraw (prompt)` — 仅使用提供的提示词生成文本,忽略当前角色和聊天。 - `/trigger` — 触发正常生成(相当于单击"发送"按钮)。如果在群组聊天中,您可以选择提供基于 1 的群组成员索引或角色名称让他们回复,否则根据群组设置触发群组回合。 ### `/gen` 和 `/genraw` 的参数 ```stscript /genraw lock=on/off stop=[] instruct=on/off (prompt) ``` - `lock` — 可以是 `on` 或 `off`。指定在生成进行时是否应阻止用户输入。默认值:`off`。 - `stop` — JSON 序列化的字符串数组。仅为此生成添加自定义停止字符串(如果 API 支持)。默认值:无。 - `instruct`(仅 `/genraw`)— 可以是 `on` 或 `off`。允许在输入提示词上使用指令格式(如果启用了指令模式并且 API 支持)。设置为 `off` 以强制纯提示词。默认值:`on`。 - `as`(用于文本补全 API)— 可以是 `system`(默认)或 `char`。定义最后一行提示词的格式。`char` 将使用角色名称,`system` 将不使用或使用中性名称。 然后,生成的文本通过管道传递到下一个命令,并可以保存到变量或使用 I/O 功能显示: ```stscript /genraw Write a funny message from Cthulhu about taking over the world. Use emojis. | /popup

Cthulhu says:

{{pipe}}
``` | ![Cthulhu Says](/static/scripts/cthulhu-says.png) | |---------------------------------------------------| 或将生成的消息作为角色的回应插入: ```stscript /genraw You have been memory wiped, your name is now Lisa and you're tearing me apart. You're tearing me apart Lisa! | /sendas name={{char}} {{pipe}} ``` ## 提示词注入 脚本可以添加自定义 LLM 提示词注入,使其本质上相当于无限的作者注释。 - `/inject (text)` — 将任何文本插入到当前聊天的正常 LLM 提示词中,并需要唯一标识符。保存到聊天元数据。 - `/listinjects` — 在系统消息中显示脚本为当前聊天添加的所有提示词注入的列表。 - `/flushinjects` — 删除脚本为当前聊天添加的所有提示词注入。 - `/note (text)` — 设置当前聊天的作者注释值。保存到聊天元数据。 - `/interval` — 设置当前聊天的作者注释插入间隔。 - `/depth` — 设置聊天内位置的作者注释插入深度。 - `/position` — 设置当前聊天的作者注释位置。 ### `/inject` 的参数 ```stscript /inject id=IdGoesHere position=chat depth=4 My prompt injection ``` - `id` — 标识符字符串或对变量的引用。使用相同 ID 的 `/inject` 的后续调用将覆盖以前的文本注入。**必需参数。** - `position` — 设置注入的位置。默认值:`after`。可能的值: - `after`:在主提示词之后。 - `before`:在主提示词之前。 - `chat`:聊天内。 - `depth` — 设置聊天内位置的注入深度。0 表示在最后一条消息之后插入,1 - 在最后一条消息之前,等等。默认值:4。 - 未命名参数是要注入的文本。空字符串将取消设置所提供标识符的先前值。 ## 访问聊天消息 ### 读取消息 您可以使用 `/messages` 命令访问当前选定聊天中的消息。 ```stscript /messages names=on/off start-finish ``` - `names` 参数用于指定是否要包含角色名称,默认值:`on`。 - 在未命名参数中,它接受 `start-finish` 格式的消息索引或范围。范围是包含的! - 如果范围无法满足,即请求的索引无效或消息数量超过存在的消息数量,则返回空字符串。 - 从提示词中隐藏的消息(由幽灵图标表示)将从输出中排除。 - 如果您想知道最新消息的索引,请使用 `{{lastMessageId}}` 宏,`{{lastMessage}}` 将为您获取消息本身。 要计算范围的起始索引,例如,当您需要获取最后 N 条消息时,请使用变量减法。 此示例将为您获取聊天中的最后 3 条消息: ```stscript /setvar key=start {{lastMessageId}} | /addvar key=start -2 | /messages names=off {{getvar::start}}-{{lastMessageId}} | /setinput ``` ### 发送消息 脚本可以以用户、角色、人设、中立叙述者的身份发送消息,或添加注释。 1. `/send (text)` — 以当前选定的人设添加消息。 2. `/sendas name=charname (text)` — 以任何角色添加消息,按其名称匹配。`name` 参数是必需的。使用 `{{char}}` 宏以当前角色发送。 3. `/sys (text)` — 添加来自中立叙述者的消息,该消息不属于用户或角色。显示的名称纯粹是装饰性的,可以使用 `/sysname` 命令自定义。 4. `/comment (text)` — 添加在聊天中显示但对提示词不可见的隐藏注释。 5. `/addswipe (text)` — 向最后一条角色消息添加滑动。无法向用户或隐藏消息添加滑动。 6. `/hide (message id or range)` — 根据提供的消息索引或 `start-finish` 格式的包含范围从提示词中隐藏一条或多条消息。 7. `/unhide (message id or range)` — 根据提供的消息索引或 `start-finish` 格式的包含范围将一条或多条消息返回到提示词。 `/send`、`/sendas`、`/sys` 和 `/comment` 命令可选择接受命名参数 `at`,其值为从零开始的数值(或包含此类值的变量名),用于指定消息插入的确切位置。默认情况下,新消息插入到聊天日志的末尾。 这将在对话历史的开头插入一条用户消息: ```stscript /send at=0 Hi, I use Linux. ``` ### 删除消息 **这些命令具有潜在破坏性,并且没有"撤消"功能。如果您不小心删除了重要内容,请检查 /backups/ 文件夹。** 1. `/cut (message id or range)` — 根据提供的消息索引或 `start-finish` 格式的包含范围从聊天中剪切一条或多条消息。 2. `/del (number)` — 从聊天中删除最后 N 条消息。 3. `/delswipe (1-based swipe id)` — 根据提供的基于 1 的滑动 ID 从最后一条角色消息中删除滑动。 4. `/delname (character name)` — 删除当前聊天中属于具有指定名称的角色的所有消息。 5. `/delchat` — 删除当前聊天。 ## World Info 命令 World Info(也称为 Lorebook)是一个高度实用的工具,用于动态地将数据插入提示词中。有关更详细的说明,请参阅专用页面:[World Info](/Usage/Characters/index.md#world-info)。 1. `/getchatbook` — 获取聊天绑定的 World Info 文件的名称,如果未绑定则创建一个新文件,并将其传递到管道。 2. `/findentry file=bookName field=fieldName [text]` — 使用字段值与提供的文本的模糊匹配从指定文件(或指向文件名的变量)中查找记录的 UID(默认字段:`key`),并将 UID 传递到管道,例如 `/findentry file=chatLore field=key Shadowfang`。 3. `/getentryfield file=bookName field=field [UID]` — 从指定的 World Info 文件(或指向文件名的变量)中获取具有 UID 的记录的字段值(默认字段:`content`),并将值传递到管道,例如 `/getentryfield file=chatLore field=content 123`。 4. `/setentryfield file=bookName uid=UID field=field [text]` — 从指定的 World Info 文件(或指向文件名的变量)中设置具有 UID(或指向 UID 的变量)的记录的字段值(默认字段:`content`)。要为关键字字段设置多个值,请使用逗号分隔的列表作为文本值,例如 `/setentryfield file=chatLore uid=123 field=key Shadowfang,sword,weapon`。 5. `/createentry file=bookName key=keyValue [content text]` — 在指定文件(或指向文件名的变量)中创建具有关键字和内容(这两个参数都是*可选的*)的新记录,并将 UID 传递到管道,例如 `/createentry file=chatLore key=Shadowfang The sword of the king`。 ### 有效的条目字段 | 字段 | UI 元素 | 值类型 | |:-------------------|:------------------|:----------------| | `content` | 内容 | 字符串 | | `comment` | 标题 / 备注 | 字符串 | | `key` | 主要关键字 | 字符串列表 | | `keysecondary` | 可选过滤器 | 字符串列表 | | `constant` | 常量状态 | 布尔值 (1/0) | | `disable` | 禁用状态 | 布尔值 (1/0) | | `order` | 顺序 | 数字 | | `selectiveLogic` | 逻辑 | (见下文) | | `excludeRecursion` | 非递归 | 布尔值 (1/0) | | `probability` | 触发% | 数字 (0-100) | | `depth` | 深度 | 数字 (0-999) | | `position` | 位置 | (见下文) | | `role` | 深度角色 | (见下文) | | `scanDepth` | 扫描深度 | 数字 (0-100) | | `caseSensitive` | 区分大小写 | 布尔值 (1/0) | | `matchWholeWords` | 匹配整个单词 | 布尔值 (1/0) | **逻辑值** - 0 = AND ANY(任一) - 1 = NOT ALL(非全部) - 2 = NOT ANY(非任一) - 3 = AND ALL(全部) **位置值** - 0 = 在主提示词之前 - 1 = 在主提示词之后 - 2 = 作者注释顶部 - 3 = 作者注释底部 - 4 = 聊天内指定深度 - 5 = 示例消息顶部 - 6 = 示例消息底部 **角色值**(仅位置 = 4) - 0 = 系统 - 1 = 用户 - 2 = 助手 ### 示例 1:通过关键字从聊天 lorebook 中读取内容 ```stscript /getchatbook | /setvar key=chatLore | /findentry file={{getvar::chatLore}} field=key Shadowfang | /getentryfield file={{getvar::chatLore}} field=key | /echo ``` ### 示例 2:创建带有关键字和内容的聊天 lorebook 条目 ```stscript /getchatbook | /setvar key=chatLore | /createentry file={{getvar::chatLore}} key="Milla" Milla Basset is a friend of Lilac and Carol. She is a hush basset puppy who possesses the power of alchemy. | /echo ``` ### 示例 3:使用聊天中的新信息扩展现有 lorebook 条目 ```stscript /getchatbook | /setvar key=chatLore | /findentry file={{getvar::chatLore}} field=key Milla | /setvar key=millaUid | /getentryfield file={{getvar::chatLore}} field=content | /setvar key=millaContent | /gen lock=on Tell me more about Milla Basset based on the provided conversation history. Incorporate existing information into your reply: {{getvar::millaContent}} | /setvar key=millaContent | /echo New content: {{pipe}} | /setentryfield file={{getvar::chatLore}} uid=millaUid field=content {{getvar::millaContent}} ``` ## 文本操作 有多种有用的文本操作实用命令可在各种脚本场景中使用。 1. `/trimtokens` — 从开始或结束处将输入修剪为指定数量的文本 token,并将结果输出到管道。 2. `/trimstart` — 将输入修剪到第一个完整句子的开始,并将结果输出到管道。 3. `/trimend` — 将输入修剪到最后一个完整句子的结束,并将结果输出到管道。 4. `/fuzzy` — 对输入文本与字符串列表执行模糊匹配,将最佳字符串匹配输出到管道。 5. `/regex name=scriptName [text]` — 为指定文本执行 Regex 扩展中的正则表达式脚本。脚本必须启用。 ### `/trimtokens` 的参数 ```stscript /trimtokens limit=number direction=start/end (input) ``` 1. `direction` 设置修剪方向,可以是 `start` 或 `end`。默认值:`end`。 2. `limit` 设置输出中剩余的 token 数量。也可以指定包含数字的变量名。**必需参数。** 3. 未命名参数是要修剪的输入文本。 ### `/fuzzy` 的参数 ```stscript /fuzzy list=["candidate1","candidate2"] (input) ``` 1. `list` 是包含候选项的 JSON 序列化字符串数组。也可以指定包含列表的变量名。**必需参数。** 2. 未命名参数是要匹配的输入文本。输出是与输入最匹配的候选项之一。 ## 自动完成 - 自动完成在聊天输入和大型快速回复编辑器中都已启用。 - 自动完成在您输入的任何地方都有效。即使使用多个管道命令和嵌套闭包也是如此。 - 自动完成支持三种查找匹配命令的方式(*用户设置* -> *STscript 匹配*)。 1. **开头匹配** "旧"方式。只有精确以键入值开头的命令才会显示。 2. **包含匹配** 所有*包含*键入值的命令都会显示。示例:输入 `/delete` 时,命令 `/qr-delete` 和 `/qr-set-delete` 将显示在自动完成列表中(/qr-**delete**,/qr-set-**delete**)。 3. **模糊匹配** 所有可以与键入值进行模糊匹配的命令都会显示。示例:输入 `/seas` 时,命令 `/sendas` 将显示在自动完成列表中(/**se**nd**as**)。 - 自动完成也支持命令参数。列表将自动显示必需参数。对于可选参数,按 *Ctrl*+*Space* 打开可用选项列表。 - 输入 `/:` 以执行闭包或 QR 时,自动完成将显示作用域变量和 QR 的列表。 - 自动完成对宏(在斜杠命令中)的支持有限。输入 `{{` 以获取可用宏的列表。 - 使用*向上*和*向下*箭头键从自动完成选项列表中选择选项。 - 按 *Enter* 或 *Tab* 或*单击*选项以将选项放置在光标处。 - 按 *Escape* 关闭自动完成列表。 - 按 *Ctrl*+*Space* 打开自动完成列表或切换所选选项的详细信息。 ## 解析器标志 ```stscript /parser-flag ``` 解析器接受标志以修改其行为。这些标志可以在脚本中的任何时候打开和关闭,所有后续输入都将相应地进行评估。 您可以在用户设置中设置默认标志。 ### 严格转义 ```stscript /parser-flag STRICT_ESCAPING on | ``` 启用 `STRICT_ESCAPING` 后的更改如下。 #### 管道符 引号值中的管道符不需要转义。 ```stscript /echo title="a|b" c\|d ``` #### 反斜杠 符号前面的反斜杠可以被转义,以提供后跟功能符号的字面反斜杠。 ```stscript // this will echo "foo \", then echo "bar" | /echo foo \\| /echo bar ``` ```stscript /echo \\| /echo \\\| ``` ### 替换变量宏 ```stscript /parser-flag REPLACE_GETVAR on | ``` 此标志有助于避免当变量值包含可以解释为宏的文本时的双重替换。`{{var::}}` 宏最后被替换,并且不会对生成的文本/变量值进行进一步的替换。 将所有 `{{getvar::}}` 和 `{{getglobalvar::}}` 宏替换为 `{{var::}}`。 在幕后,解析器将在带有替换宏的命令之前插入一系列命令执行器: - 调用 `/let` 将当前 `{{pipe}}` 保存到作用域变量 - 调用 `/getvar` 或 `/getglobalvar` 获取宏中使用的变量 - 调用 `/let` 将检索到的变量保存到作用域变量 - 使用保存的 `{{pipe}}` 值调用 `/return` 以恢复下一个命令的正确管道值 ```stscript // the following will echo the last message's id / number | /setvar key=x \{\{lastMessageId}} | /echo {{getvar::x}} ``` ```stscript // this will echo the literal text {{lastMessageId}} | /parser-flag REPLACE_GETVAR | /setvar key=x \{\{lastMessageId}} | /echo {{getvar::x}} ``` ## Quick Replies:脚本库和自动执行 Quick Replies 是 SillyTavern 的内置扩展,提供了一种简单的方法来存储和执行您的脚本。 ### 配置 Quick Replies 要开始使用,请打开扩展面板(堆叠方块图标),然后展开 Quick Replies 菜单。
![Quick Reply](/static/scripts/quick-reply.png)
**Quick Replies 默认是禁用的,您需要先启用它们。** 然后您会看到聊天输入栏上方出现一个栏。 您可以设置显示的按钮文本标签(我们建议使用表情符号以保持简洁)以及单击按钮时将执行的脚本。 按钮数量由**插槽数量**设置控制(最大 = 100),根据您的需要进行调整,完成后单击"应用"。 **自动注入用户输入**在使用 STscript 时建议禁用,否则可能会干扰您的输入,请改用 `{{input}}` 宏在脚本中获取输入栏的当前值。 **Quick Reply 预设**允许多组预定义的 Quick Replies,并可以手动切换或使用 `/qrset (预设名称)` 命令切换。 在切换到不同的预设之前,不要忘记单击"更新"以将您的更改写入当前使用的预设! ### 手动执行 现在您可以将第一个脚本添加到库中。选择任何空闲插槽(或创建一个),在左侧框中输入"Click me"以设置标签,然后将以下内容粘贴到右侧框中: ```stscript /addvar key=clicks 1 | /if left=clicks right=5 rule=eq else="/echo Keep going..." "/echo You did it! \| /flushvar clicks" ``` 然后在聊天栏上方出现的按钮上单击 5 次。 每次单击都会将变量 `clicks` 加 1,当值等于 5 时显示不同的消息并重置变量。 ### 自动执行 通过单击已创建命令的 `⋮` 按钮打开模态菜单。 | ![Automatic execution](/static/scripts/autoexecute.png) | |---------------------------------------------------------| 在此菜单中,您可以执行以下操作: - 在方便的全屏编辑器中编辑脚本 - 从聊天栏隐藏按钮,使其仅可用于自动执行。 - 在以下一个或多个条件下启用自动执行: * 应用启动 * 向聊天发送用户消息 * 在聊天中接收 AI 消息 * 打开角色或群组聊天 * 触发群组成员的回复 * 使用相同的自动化 ID 激活 World Info 条目 - 为快速回复提供自定义工具提示(在 UI 中将鼠标悬停在快速回复上时显示的文本) - 为测试目的执行脚本 只有在启用 Quick Replies 扩展时,命令才会自动执行。 例如,您可以通过添加以下脚本并将其设置为在用户消息上自动执行,在发送五条用户消息后显示一条消息。 ```stscript /addvar key=usercounter 1 | /echo You've sent {{pipe}} messages. | /if left=usercounter right=5 rule=gte "/echo Game over! \| /flushvar usercounter" ``` ### 调试器 扩展的 Quick Reply 编辑器中存在一个基本调试器。在脚本中的任何位置使用 `/breakpoint |` 设置断点。从 QR 编辑器执行脚本时,执行将在该点中断,允许您检查当前可用的变量、管道、命令参数等,并逐步执行其余代码。 ```stscript /let x {: n=1 /echo n is {{var::n}} | /mul n n | :} | /breakpoint | /:x n=3 | /echo result is {{pipe}} | ``` | ![QR Editor Debugger](/static/scripts/st-debugger.png) | |--------------------------------------------------------| ### 调用过程 `/run` 命令可以通过标签调用在 Quick Replies 中定义的脚本,基本上提供了定义过程并从中返回结果的能力。这允许拥有可重用的脚本块,其他脚本可以引用这些脚本块。过程的最后一个管道结果会传递给其后的下一个命令。 ```stscript /run ScriptLabel ``` 让我们创建两个 Quick Replies: *** **标签:** `GetRandom` **命令:** ```stscript /pass {{roll:d100}} ``` *** **标签:** `GetMessage` **命令:** ```stscript /run GetRandom | /echo Your lucky number is: {{pipe}} ``` *** 单击 `GetMessage` 按钮将调用 `GetRandom` 过程,该过程将解析 `{{roll}}` 宏并将数字传递给调用者,向用户显示。 - 过程不接受命名或未命名参数,但可以引用与调用者相同的变量。 - 调用过程时避免递归,因为如果处理不当,可能会产生"调用堆栈超出"错误。 #### 从不同的 Quick Reply 预设调用过程 您可以使用 `a.b` 语法从不同的快速回复预设调用过程,其中 a = QR 预设名称,b = QR 标签名称 ```stscript /run QRpreset1.QRlabel1 ``` 默认情况下,系统将首先查找快速回复标签 `a.b`,因此如果您的标签之一是字面上的 "QRpreset1.QRlabel1",它将尝试运行该标签。如果未找到此类标签,它将搜索名为 "QRpreset1" 的 QR 预设,其中包含标记为 "QRlabel1" 的 QR。 ### Quick Replies 管理命令 #### 创建 Quick Reply * `/qr-create (arguments, [message])` – 创建新的 Quick Reply,示例:`/qr-create set=MyPreset label=MyButton /echo 123` 参数: - `label` - string - 按钮上的文本,例如 `label=MyButton` - `set` - string - QR 集的名称,例如 `set=PresetName1` - `hidden` - bool - 按钮是否应隐藏,例如 `hidden=true` - `startup` - bool - 在应用启动时自动执行,例如 `startup=true` - `user` - bool - 在用户消息时自动执行,例如 `user=true` - `bot` - bool - 在 AI 消息时自动执行,例如 `bot=true` - `load` - bool - 在聊天加载时自动执行,例如 `load=true` - `title` - bool - 要在按钮上显示的标题/工具提示,例如 `title="My Fancy Button"` #### 删除 Quick Reply * `/qr-delete (set=string [label])` – 删除 Quick Reply #### 更新 Quick Reply * `/qr-update (arguments, [message])` – 更新 Quick Reply,示例:`/qr-update set=MyPreset label=MyButton newlabel=MyRenamedButton /echo 123` 参数: - `newlabel` - string - 按钮的新文本,例如 `newlabel=MyRenamedButton` - `label` - string - 按钮上的文本,例如 `label=MyButton` - `set` - string - QR 集的名称,例如 `set=PresetName1` - `hidden` - bool - 按钮是否应隐藏,例如 `hidden=true` - `startup` - bool - 在应用启动时自动执行,例如 `startup=true` - `user` - bool - 在用户消息时自动执行,例如 `user=true` - `bot` - bool - 在 AI 消息时自动执行,例如 `bot=true` - `load` - bool - 在聊天加载时自动执行,例如 `load=true` - `title` - bool - 要在按钮上显示的标题/工具提示,例如 `title="My Fancy Button"` #### 获取 Quick Reply * `/qr-get` - 检索 Quick Reply 的所有属性,示例:`/qr-get set=myQrSet id=42` #### 创建或更新 QR 预设 * `/qr-presetupdate (arguments [label])` 或 `/qr-presetadd (arguments [label])` 参数: - `enabled` - bool - 启用或禁用预设 - `nosend` - bool - 禁用发送/插入到用户输入(对斜杠命令无效) - `before` - bool - 将 QR 放置在用户输入之前 - `slots` - int - 插槽数量 - `inject` - bool - 自动注入用户输入(如果禁用,请使用 `{{input}}`) 创建新预设(覆盖现有预设),示例:`/qr-presetadd slots=3 MyNewPreset` #### 添加 QR 上下文菜单 * `/qr-contextadd (set=string label=string chain=bool [preset name])` – 向 QR 添加上下文菜单预设,示例:`/qr-contextadd set=MyPreset label=MyButton chain=true MyOtherPreset` #### 删除所有上下文菜单 * `/qr-contextclear (set=string [label])` – 从 QR 中删除所有上下文菜单预设,示例:`/qr-contextclear set=MyPreset MyButton` #### 删除一个上下文菜单 * `/qr-contextdel (set=string label=string [preset name])` – 从 QR 中删除上下文菜单预设,示例:`/qr-contextdel set=MyPreset label=MyButton MyOtherPreset` ### Quick Reply 值转义 在 QR 消息/命令中,`|{}` 可以用反斜杠转义。 例如,使用 `/qr-create label=MyButton /getvar myvar \| /echo \{\{pipe\}\}` 创建一个调用 `/getvar myvar | /echo {{pipe}}` 的 QR。 ## 扩展命令 SillyTavern 扩展(内置、可下载和第三方)可以添加自己的斜杠命令。下面只是官方扩展功能的示例。该列表可能不完整,请确保检查 `/help slash` 以获取最完整的可用命令列表。 1. `/websearch (query)` — 在线搜索网页片段以查找指定查询,并将结果返回到管道中。由 Web Search 扩展提供。 2. `/imagine (prompt)` — 使用提供的提示词生成图像。由 Image Generation 扩展提供。 3. `/emote (sprite)` — 通过模糊匹配名称为活动角色设置精灵。由 Character Expressions 扩展提供。 4. `/costume (subfolder)` — 为活动角色设置精灵集覆盖。由 Character Expressions 扩展提供。 5. `/music (name)` — 按名称强制更改正在播放的背景音乐文件。由 Dynamic Audio 扩展提供。 6. `/ambient (name)` — 按名称强制更改正在播放的环境声音文件。由 Dynamic Audio 扩展提供。 7. `/roll (dice formula)` — 向聊天添加一条隐藏消息,其中包含骰子掷骰的结果。由 D&D Dice 扩展提供。 ## UI 交互 脚本还可以与 SillyTavern 的 UI 交互:在聊天之间导航或更改样式参数。 ### 角色导航 1. `/random` — 打开与随机角色的聊天。 2. `/go (name)` — 打开与指定名称角色的聊天。首先搜索精确名称匹配,然后按前缀,然后按子字符串。 ### UI 样式 1. `/bubble` — 将消息样式设置为"气泡聊天"样式。 2. `/flat` — 将消息样式设置为"扁平聊天"样式。 3. `/single` — 将消息样式设置为"单个文档"样式。 4. `/movingui (name)` — 按名称激活 MovingUI 预设。 5. `/resetui` — 将 MovingUI 面板状态重置为其原始位置。 6. `/panels` — 切换 UI 面板的可见性:顶部栏、左侧和右侧抽屉。 7. `/bg (name)` — 使用模糊名称匹配查找并设置背景。尊重聊天背景锁定状态。 8. `/lockbg` — 锁定当前聊天的背景图像。 9. `/unlockbg` — 解锁当前聊天的背景图像。 ## 更多示例 ### 生成聊天摘要(由 @IkariDevGIT 提供) ```stscript /setglobalvar key=summaryPrompt Summarize the most important facts and events that have happened in the chat given to you in the Input header. Limit the summary to 100 words or less. Your response should include nothing but the summary. | /setvar key=tmp | /messages 0-{{lastMessageId}} | /trimtokens limit=3000 direction=end | /setvar key=s1 | /echo Generating, please wait... | /genraw lock=on instruct=off {{instructInput}}{{newline}}{{getglobalvar::summaryPrompt}}{{newline}}{{newline}}{{instructInput}}{{newline}}{{getvar::s1}}{{newline}}{{newline}}{{instructOutput}}{{newline}}The chat summary:{{newline}} | /setvar key=tmp | /echo Done! | /setinput {{getvar::tmp}} | /flushvar tmp | /flushvar s1 ``` ### 按钮弹出窗口用法 ```stscript /setglobalvar key=genders ["boy", "girl", "other"] | /buttons labels=genders Who are you? | /echo You picked: {{pipe}} ``` ### 获取第 N 个斐波那契数(使用 Binet 公式) > **提示**:将 `fib_no` 的值设置为所需的数字 ```stscript /setvar key=fib_no 5 | /pow 5 0.5 | /setglobalvar key=SQRT5 | /setglobalvar key=PHI 1.618033 | /pow PHI fib_no | /div {{pipe}} SQRT5 | /round | /echo {{getvar::fib_no}}th Fibonacci's number is: {{pipe}} ``` ### 递归阶乘(使用闭包) ```stscript /let fact {: n= /if left={{var::n}} rule=gt right=1 else={: /return 1 :} {: /sub {{var::n}} 1 | /:fact n={{pipe}} | /mul {{var::n}} {{pipe}} :} :} | /input Calculate factorial of: | /let n {{pipe}} | /:fact n={{var::n}} | /echo factorial of {{var::n}} is {{pipe}} ``` ===== Installation/Android.md (https://sillytaverncn.net/installation/android/) ===== --- label: Android (Termux) route: /installation/android-(termux)/ --- # Android (Termux) 安装 SillyTavern 可以使用 Termux 在 Android 设备上原生运行。 !!!success :beer: 有电脑的话,推荐用一键启动器 **macOS / Windows 双平台**,零依赖安装。手机党也可以先用启动器在电脑上跑起来,再用手机浏览器远程连接。 :arrow_right: [下载一键启动器](https://launch.deepseektavern.com) --- ## 安装 Termux !!!tip 避免从 Google Play Store 安装 Termux,该版本已不再维护。 建议使用 F-Droid(推荐)或 GitHub releases 获取最新版本。 !!! 1. 从 [F-Droid](https://f-droid.org/en/packages/com.termux/) 或 [GitHub releases](https://github.com/termux/termux-app/releases) 下载 Termux。 2. 安装下载的 APK 文件。 3. 打开 Termux 并运行您的第一个命令: ```bash termux-change-repo ``` 4. 选择 "Mirror group" 并选择离您最近的服务器。您可以触摸屏幕或使用 [Unexpected Keyboard](https://play.google.com/store/apps/details?id=juloo.keyboard2&hl=en) 进行滑动手势操作。 5. 更新 Termux: ```bash pkg update && pkg upgrade ``` ## 安装依赖项 安装所需的软件包: ```bash pkg install git nodejs-lts nano ``` !!!warning 如果您运行的是 32-bit Android,请查看下面的[常见错误](#common-errors)部分以了解额外的步骤。 !!! ## 安装 SillyTavern 克隆 SillyTavern 仓库([如何选择分支](/Installation/index.md#branches)): - **Release 分支:** ```bash git clone https://github.com/SillyTavern/SillyTavern -b release ``` - **Staging 分支:** ```bash git clone https://github.com/SillyTavern/SillyTavern -b staging ``` ## 运行 SillyTavern 要运行 SillyTavern,导航到克隆的目录并运行启动脚本: ```bash cd ~/SillyTavern bash start.sh ``` 要更新 SillyTavern,导航到 SillyTavern 目录并运行: ```bash cd ~/SillyTavern git pull --rebase --autostash ``` 请参阅下面的[别名](#optional-create-aliases)部分以创建快捷方式来简化此过程。 ## 常见错误 ### Unsupported platform: android arm LEtime-web 32-bit Android 需要一个无法通过 npm 安装的外部依赖项。 使用以下命令安装它: ```bash pkg install esbuild ``` 然后继续执行上述安装步骤。 ### 性能调优 !!!info 有关提高性能的一般提示,请参阅相应的 [FAQ 部分](/Usage/faq.md#performance-tips)。 !!! 由于 Android 设备的硬件限制,您可能需要调整以下 SillyTavern [config.yaml](/Administration/config-yaml.md) 设置以获得更好的内存、存储和 CPU 使用率: ```yaml performance: # 避免加载所有角色数据直到需要时 lazyLoadCharacters: true # 禁用磁盘缓存以减少存储使用 useDiskCache: false backups: chat: # 可选:禁用自动聊天备份以节省存储空间 enabled: false ``` !!!tip 使用 Termux 附带的 `nano` 文本编辑器来编辑 `config.yaml` 文件:`nano ~/SillyTavern/config.yaml` !!! ## 可选:创建别名 您可以为常用命令创建快捷方式,以便更轻松地工作。 1. 打开编辑器修改您的 `.bashrc` 文件: ```bash nano ~/.bashrc ``` 2. 添加以下行来创建别名: ```bash # 更新 Termux 软件包 alias pkgup="pkg update && pkg upgrade" # 启动 SillyTavern alias st='cd ~/SillyTavern && bash start.sh' # 更新 SillyTavern alias stup='cd ~/SillyTavern && git pull --rebase --autostash' ``` 3. 保存文件并退出编辑器(在 nano 中,按 `CTRL + X`,然后按 `Y`,然后按 `Enter`)。 4. 要应用更改,运行: ```bash source ~/.bashrc ``` 现在您可以使用以下命令: - `st` 启动 SillyTavern - `stup` 更新 SillyTavern - `pkgup` 更新 Termux 软件包 ## 延伸阅读 !!!info 以下链接的指南不由 SillyTavern 团队维护。 !!! - ArroganceComplex#2659 的 SillyTavern in Termux 指南: - 使用 Material Files 访问 Termux 文件: - 防止 Termux 进程深度睡眠: ===== Installation/Docker.md (https://sillytaverncn.net/installation/docker/) ===== --- # icon: container label: Docker route: /installation/docker/ --- # Docker 安装指南 !!! info 本指南假设您在非 root(非管理员)文件夹中安装 SillyTavern。如果您在 root 文件夹中安装 SillyTavern,您可能需要使用管理员权限运行某些命令[`sudo`、`doas`、Command Prompt (Administrator)]。 !!! !!!success :beer: 不想折腾 Docker?试试一键启动器 Docker 很强大,但如果你只是想在本地流畅玩酒馆,一键启动器更省心 — 零依赖、原生运行、自动更新。 :arrow_right: [下载一键启动器](https://launch.deepseektavern.com) --- ## 安装 ### Linux 1. 请按照[此处](https://docs.docker.com/engine/install/)的 Docker 安装指南安装 Docker。 !!! danger **不要**安装 Docker Desktop。 !!! 2. 按照 Docker [安装后配置指南](https://docs.docker.com/engine/install/linux-postinstall/)中的**以非 root 用户身份管理 Docker**部分进行操作。 3. 使用包管理器安装 [Git](https://git-scm.com/download/linux)。 - Debian (Ubuntu/Pop! OS/等) ```sh sudo apt install git ``` - Arch Linux (Manjaro/EndeavourOS/等) ```sh sudo pacman -S git ``` - Fedora, Red Hat Enterprise Linux (RHEL), 等 ```sh sudo dnf install git ``` 4. 克隆 SillyTavern 仓库。 - Release (稳定分支) ```sh git clone https://github.com/SillyTavern/SillyTavern && cd SillyTavern/docker ``` - Staging (开发分支) ```sh git clone https://github.com/SillyTavern/SillyTavern -b staging && cd SillyTavern/docker ``` 5. 在 Docker 文件夹中运行以下命令执行 `docker compose`。 ```sh docker compose up -d ``` 6. 执行以下 Docker 命令获取 SillyTavern Docker 容器的 IP 地址。 ```sh docker network inspect docker_default ``` 您应该会看到类似下面的输出: ```json [ { "Name": "docker_default", "IPAM": { "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] } } ] ``` 记下您在 _Gateway_ 中看到的 IP 地址,这很重要。 7. 使用 `sudo` 打开 `nano` 并运行以下命令: ```sh sudo nano config/config.yaml ``` 在 `nano` 中,找到 `whitelist`。您应该会看到类似下面的内容: ```yaml whitelist: - 127.0.0.1 ``` 在 _127.0.0.1_ 下面添加一行,输入您从 Docker 复制的 IP 地址。完成后应该类似这样: ```yaml whitelist: - 127.0.0.1 - 172.18.0.1 ``` 按 _Ctrl+S_ 保存文件,然后按 _Ctrl+X_ 退出 `nano`。 !!! info 注意,如果您将 Docker 网络配置为桥接模式,您也可以像往常一样将外部 IP 地址添加到白名单中。 !!! 8. 重启 Docker 容器以应用新配置。 ```sh docker compose restart sillytavern ``` 9. 打开新的浏览器并访问 [http://localhost:8000](http://localhost:8000)。几分钟后您应该就能看到 SillyTavern 加载完成。 10. 尽情享用! :D ### Windows !!! warning 关于 Windows 上的 Docker 在 Windows 上使用 Docker **非常**复杂。您不仅需要在"启用或关闭 Windows 功能"中激活 _Windows Subsystem for Linux_,还需要为虚拟化配置系统(Intel VT-d/AMD SVM),这因 PC 制造商(或主板制造商)而异。有时,某些系统上甚至没有这个选项。 强烈建议您按照我们的 [Windows](/Installation/Windows.md) 指南安装 SillyTavern。本节仅是在 Windows 上安装的一个_粗略_思路。 !!! 1. 按照[此处](https://docs.docker.com/desktop/setup/install/windows-install/)的 Docker 安装指南安装 Docker Desktop。 2. 安装 [Git for Windows](https://git-scm.com/download/win)。 3. 克隆 SillyTavern 仓库。 - Release (稳定分支) ```sh git clone https://github.com/SillyTavern/SillyTavern && cd SillyTavern/docker ``` - Staging (开发分支) ```sh git clone https://github.com/SillyTavern/SillyTavern -b staging && cd SillyTavern/docker ``` 4. 在 Docker 文件夹中运行以下命令执行 `docker compose`。 ```sh docker compose up -d ``` 5. 执行以下 Docker 命令获取 SillyTavern Docker 容器的 IP 地址。 ```sh docker network inspect docker_default ``` 您应该会看到类似下面的输出: ```json [ { "Name": "docker_default", "IPAM": { "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] } } ] ``` 记下您在 _Gateway_ 中看到的 IP 地址,这很重要。 6. 以管理员权限运行 _Notepad_ 或您选择的代码编辑器,进入 `config` 目录并打开 _config.yaml_。 在您选择的编辑器中,您应该会看到类似下面的内容: ```yaml whitelist: - 127.0.0.1 ``` 在 _127.0.0.1_ 下面添加一行,输入您从 Docker 复制的 IP 地址。完成后应该类似这样: ```yaml whitelist: - 127.0.0.1 - 172.18.0.1 ``` 按 _Ctrl+S_ 保存文件,然后退出编辑器。 !!! info 注意,如果您将 Docker 网络配置为桥接模式,您也可以像往常一样将外部 IP 地址添加到白名单中。 !!! 7. 重启 Docker 容器以应用新配置。 ```sh docker compose restart sillytavern ``` 8. 打开新的浏览器并访问 [http://localhost:8000](http://localhost:8000)。几分钟后您应该就能看到 SillyTavern 加载完成。 9. 尽情享用! :D ### macOS !!! 尽管 macOS 与 Linux 类似,但它没有 Docker Engine。您需要像 Windows 一样安装 Docker Desktop。 您还需要安装 [Homebrew](https://brew.sh/) 以在 Mac 上安装 Git。本节仅是在 macOS 上安装的一个_粗略_思路。 !!! 1. 按照[此处](https://docs.docker.com/desktop/setup/install/mac-install/)的 Docker 安装指南安装 Docker Desktop。 2. 使用 Homebrew 安装 `git`。 ```sh brew install git ``` 3. 克隆 SillyTavern 仓库。 - Release (稳定分支) ```sh git clone https://github.com/SillyTavern/SillyTavern && cd SillyTavern/docker ``` - Staging (开发分支) ```sh git clone https://github.com/SillyTavern/SillyTavern -b staging && cd SillyTavern/docker ``` 4. 在 Docker 文件夹中运行以下命令执行 `docker compose`。 ```sh docker compose up -d ``` 5. 执行以下 Docker 命令获取 SillyTavern Docker 容器的 IP 地址。 ```sh docker network inspect docker_default ``` 您应该会看到类似下面的输出: ```json [ { "Name": "docker_default", "IPAM": { "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] } } ] ``` 记下您在 _Gateway_ 中看到的 IP 地址,这很重要。 6. 使用 `sudo` 打开 `nano` 并运行以下命令。 ```sh sudo nano config/config.yaml ``` !!! 如果无法运行 `nano`,请通过 Homebrew 安装,或改用 TextEdit。 !!! 在 `nano` 中向下找到 `whitelist`,你应该会看到类似下面的内容。 ```yaml whitelist: - 127.0.0.1 ``` 在 _127.0.0.1_ 下面新增一行,填入从 Docker 复制的 IP 地址。完成后应类似如下。 ```yaml whitelist: - 127.0.0.1 - 172.18.0.1 ``` 按 _Ctrl+S_ 保存文件,然后按 _Ctrl+X_ 退出 `nano`。 !!! info 注意:如果你将 Docker 网络配置为 bridge 模式,也可以像平时一样把外部 IP 地址加入白名单。 !!! 7. 重启 Docker 容器以应用新配置。 ```sh docker compose restart sillytavern ``` 8. 打开一个新浏览器并访问 [http://localhost:8000](http://localhost:8000)。稍等片刻即可看到 SillyTavern 加载完成。 9. 享受吧!:D ## 配置 SillyTavern SillyTavern 的配置文件(config.yaml)位于 `config` 文件夹内。配置方式与非 Docker 安装没有区别,但保存修改时需要以管理员权限运行 `nano` 或代码编辑器。 !!! warning 别忘了重启 SillyTavern 的 Docker 容器以应用更改!请确保在 `docker` 文件夹内执行此命令。 ```sh docker compose restart sillytavern ``` !!! ## 查找用户数据 SillyTavern 的数据目录位于 `data` 文件夹中。备份文件很容易,但恢复或添加内容时可能需要管理员权限。 ## 运行服务端插件 在 Docker 中运行 [HoYoWiki-Scraper-TS](https://github.com/Bronya-Rand/HoYoWiki-Scraper-TS) 或 [SillyTavern-Fandom-Scraper](https://github.com/SillyTavern/SillyTavern-Fandom-Scraper) 等插件,与不使用 Docker 时没有区别,但需要对 Docker Compose 脚本做一点小修改。 !!! Note 如果在 `docker` 文件夹内已看到 _plugins_ 文件夹,可跳过步骤 1-2。 !!! 1. 使用 `nano` 或代码编辑器打开 _docker-compose.yml_,在 `volumes` 下添加如下内容。 ```sh volumes: - "./config:/home/node/app/config" - "./data:/home/node/app/data" - "./plugins:/home/node/app/plugins" ``` 2. 在 `docker` 文件夹中创建一个名为 _plugins_ 的新文件夹。 3. 按插件的说明进行安装。 4. 使用 `nano` 或具备管理员权限的代码编辑器打开 `config` 文件夹内的 _config.yaml_,并启用 `enableServerPlugins` ```sh enableServerPlugins: true ``` 5. 重启 Docker 容器。 ```sh docker compose restart sillytavern ``` 6. 完成。 ===== Installation/LinuxMacOS.md (https://sillytaverncn.net/installation/linuxmacos/) ===== --- label: MacOS & Linux order: 5 route: /installation/linuxmacos/ --- # Linux/MacOS 安装指南 !!!success :beer: Mac 用户推荐用一键启动器 **macOS 原生支持**,下载解压双击即可运行。不用装 Homebrew,不用装 Node,不用敲终端命令。 :arrow_right: [下载 macOS 版一键启动器](https://launch.deepseektavern.com) --- ## 手动 Git 安装 对于 MacOS / Linux,所有这些操作都将在终端(Terminal)中完成。 1. 安装 git 和 nodeJS(具体方法将根据您的操作系统而异) 2. 克隆仓库 - Release 分支:`git clone https://github.com/SillyTavern/SillyTavern -b release` - Staging 分支:`git clone https://github.com/SillyTavern/SillyTavern -b staging` 3. 使用 `cd SillyTavern` 进入安装文件夹。 4. 使用以下任一命令运行 `start.sh` 脚本: - `./start.sh` - `bash start.sh` ## SillyTavern Launcher ### Linux 用户 1. 打开您喜欢的终端并安装 git 2. 使用以下命令下载 Sillytavern Launcher:`git clone https://github.com/SillyTavern/SillyTavern-Launcher.git` 3. 使用以下命令进入 SillyTavern-Launcher:`cd SillyTavern-Launcher` 4. 使用以下命令启动安装程序:`chmod +x install.sh && ./install.sh` 并选择您想要安装的内容 5. 安装完成后,使用以下命令启动启动器:`chmod +x launcher.sh && ./launcher.sh` ### Mac 用户 1. 打开终端并使用以下命令安装 brew:`/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` 2. 然后使用以下命令安装 git:`brew install git` 3. 使用以下命令下载 Sillytavern Launcher:`git clone https://github.com/SillyTavern/SillyTavern-Launcher.git` 4. 使用以下命令进入 SillyTavern-Launcher:`cd SillyTavern-Launcher` 5. 使用以下命令启动安装程序:`chmod +x install.sh && ./install.sh` 并选择您想要安装的内容 6. 安装完成后,使用以下命令启动启动器:`chmod +x launcher.sh && ./launcher.sh` ===== Installation/Updating/ST-1.12.0-Migration-Guide.md (https://sillytaverncn.net/installation/updating/st-1.12.0-migration-guide/) ===== --- order: 112 route: /installation/st-1.12.0-migration-guide/ --- # 1.12.0 迁移指南 SillyTavern 1.12.0(代号 "Neo Server" 更新)包含几个可能影响您使用 SillyTavern 方式的关键更改。 本指南将帮助您为更新做好准备并提供进一步的指导。 ## 数据存储更新 1.12.0 改变了 SillyTavern 处理用户数据的方式。 之前,所有持久数据都与前端部分一起存储在 `/public` 目录中,这造成了混乱和潜在的故障点,同时也使容器化和系统级应用程序安装变得相当具有挑战性。 ### 有什么变化? 所有来自 `/public` 的持久信息,如设置和聊天记录(完整列表见下文)都被移动到一个可配置路径的单独目录中,使其可移植且独立于 Web 服务器本身。当出于兼容性目的需要时,例如托管扩展、全尺寸角色卡片、用户图片上传等,已设置智能重定向以自动从数据目录托管用户文件。 ### 设置数据根目录 您可以通过 `config.yaml` 或使用 `--dataRoot` 控制台参数启动服务器,提供数据根目录的绝对路径或相对路径(相对于 ST 仓库目录)。 > YAML 示例 ```yaml # -- 数据配置 -- # 用户数据存储的根目录 dataRoot: C:\Users\Harry\Documents\ST-Data ``` > 控制台示例 ```bash node server.js --dataRoot="/Users/harry/ST-Data" # 或 npm run start -- --dataRoot="/Users/harry/ST-Data" ``` 默认的数据根路径是 `./data`,即 SillyTavern 仓库中的 `data` 目录。 !!! info 注意 数据根路径应该是**完整的绝对路径**或**完整的相对路径**。您_不能_使用路径快捷方式,如 `~` 或 `%APP_DATA%`,因为这些是由 shell 解析的,而不是操作系统。 !!! ### 迁移 #### **重要!** 开始之前 1. **仅当您想要从默认位置移动 dataRoot 时。否则,请跳过此部分。** 在首次运行更新后的服务器之前设置数据根目录。运行 `npm install` 使 `config.yaml` 填充新值,或传递控制台参数。 2. 所有数据将迁移到 `default-user` 账户中。更多信息请参见下面的[用户](#用户)部分。 #### 非容器(裸机)安装 您不需要做任何事情!当您启动 ST 服务器并检测到旧的存储格式(通过检查 `/public/characters` 目录是否存在)时,自动迁移将为您处理一切。 移动任何文件时,将在 `/backups/_migration/YYYY-MM-DD`(解析为当前日期)目录中创建自动备份,但在运行迁移之前进行完整的手动备份始终是一个好习惯。 #### 容器化(Docker)安装 在 Docker 卷中迁移数据稍微复杂一些,但也很直接。虽然仓库提供的 `docker-compose.yml` 已更新以反映这些更改,但您可能需要调整自定义工作流程/部署。 **第 1 步。** 创建一个新卷,并将其挂载到容器内的 "/home/node/app/data" 路径。不要删除 `config` 卷。 ```yaml volumes: - "./config:/home/node/app/config" - "./data:/home/node/app/data" ``` **第 2 步。** 将除 `config.yaml` 文件外的所有内容从 `config` 卷移动到 `data` 卷的 `default-user` 子目录中。 **第 3 步。** 重建容器并启动它。 !!! info 注意 `/public` 目录和 `config` 卷之间的软链接不再需要,也不会内置到 Docker 容器中! !!! #### 需要迁移什么? 以下文件和目录需要进行数据迁移。假设使用默认配置,下表提供了迁移前后的路径。 | 迁移前 | 迁移后 | |----------------------------------------|--------------------------------------| | /secrets.json | /data/default-user/secrets.json | | /thumbnails | /data/default-user/thumbnails | | /vectors | /data/default-user/vectors | | /public/settings.json | /data/default-user/settings.json | | /public/stats.json | /data/default-user/stats.json | | /public/assets | /data/default-user/assets | | /public/backgrounds | /data/default-user/backgrounds | | /public/characters | /data/default-user/characters | | /public/chats | /data/default-user/chats | | /public/context | /data/default-user/context | | /public/scripts/extensions/third-party | /data/default-user/extensions | | /public/group chats | /data/default-user/group chats | | /public/groups | /data/default-user/groups | | /public/instruct | /data/default-user/instruct | | /public/KoboldAI Settings | /data/default-user/KoboldAI Settings | | /public/movingUI | /data/default-user/movingUI | | /public/NovelAI Settings | /data/default-user/NovelAI Settings | | /public/OpenAI Settings | /data/default-user/OpenAI Settings | | /public/QuickReplies | /data/default-user/QuickReplies | | /public/TextGen Settings | /data/default-user/TextGen Settings | | /public/themes | /data/default-user/themes | | /public/worlds | /data/default-user/worlds | | /default/content/content.log | /data/default-user/content.log | ## 用户 1.12.0 添加了(完全可选的)在同一服务器上创建多用户设置的功能,允许多个用户甚至同时使用他们自己完全隔离的 SillyTavern 实例。用户账户还可以通过密码保护,提供额外的隐私层。 更多信息请参阅[用户](/Administration/multi-user.md)文档。 ===== Installation/Updating/index.md (https://sillytaverncn.net/installation/updating/) ===== --- label: 如何更新 SillyTavern icon: repo-pull order: -1 expanded: false route: /installation/updating/ --- # 如何更新 SillyTavern 找到您的操作系统并按照说明更新 ST。 !!! 有关安装说明,请参阅[安装](/Installation/index.md)页面。 本指南假设您已经至少安装并运行过一次 SillyTavern。 !!! ---- ## Linux/Termux 或 MacOS 您肯定是通过 git 安装的,所以只需在 SillyTavern 目录中执行 'git pull'。 - 使用 `cd SillyTavern` 进入正确的文件夹。 - 使用 `git pull` 获取更新。 - 使用 `./start.sh` 或 `bash start.sh` 启动 ST。 ---- ## Windows >首先尝试使用位于 SillyTavern 安装根文件夹中的 `UpdateAndStart.bat`。 如果失败,请返回此处继续阅读。 ### 方法 1 - GIT 我们始终建议用户使用 'git' 安装。原因如下: 当您通过 `git clone` 安装时,要更新只需[在 ST 文件夹的命令行中](https://www.google.com/search?q=how+to+open+command+prompt+in+a+folder)输入 `git pull`。 或者,如果命令提示符出现问题(并且您已安装 GitHub Desktop),您可以使用 `Repository` 菜单并选择 `Pull`。 更新会自动安全地应用。 #### "帮助!我最初是通过 Zip 安装的,现在想转换为 Git 安装" 您选择了一条明智的道路。 由于您的安装是通过 Zip 完成的,您需要使用 git 进行新的安装。 幸运的是,我们有[相关说明](/Installation/Windows.md)。 一旦您使用 git 在不同的文件夹中安装了新的 SillyTavern,请返回此页面并继续执行下面 'Zip 更新' 说明中的**第 4 步**。 ### 方法 2 - ZIP 如果您坚持通过 zip 安装,以下是更新的繁琐过程: 1. 下载新的发布 zip。 2. 将其解压到当前 ST 安装目录之外的文件夹中。 3. 按照您的操作系统的常规设置程序安装 NodeJS 要求。 4. 根据需要(*)从旧的 ST 安装中复制以下文件/文件夹: (*) '根据需要' = "如果您创建了与这些文件夹相关的任何自定义内容"。 #### 更新到 >=1.12.0 将 `/data` 目录和 `config.yaml` 文件从一个安装复制到另一个安装。 #### 从 <1.12.0 更新到 >1.12.0 1.12.0 包含自动迁移程序。仅在迁移被中断或出错时才需要执行以下步骤。 5. 至少运行一次更新后的服务器安装以创建 `/data/default-user` 目录。 6. 根据需要将文件从旧的 `/public` 转移到新的 `/data/default-user`。 所有文件夹都不是强制性的,只复制您需要的内容。 **注意:不要复制整个 /PUBLIC/ 文件夹** 这样做可能会破坏新安装并阻止新功能的出现。 ```plaintext Assets Backgrounds Characters Chats Context Groups Group chats Instruct movingUI KoboldAI Settings NovelAI Settings OpenAI Settings QuickReplies TextGen Settings (textgen = ooba) Themes User Avatars Worlds User settings.json secrets.json <---- 这个在根文件夹中,不在 /public/ 中 ``` 7. 一旦这些文件夹/文件被复制,将它们粘贴到新安装的 /data/default-user 文件夹中(secrets.json 放在文件夹根目录中)。 8. 使用适合您操作系统的方法再次启动 SillyTavern,并祈祷一切正常。 9. 如果一切都显示正常,您可以安全地删除旧的 ST 文件夹。 ### 常见更新问题 #### 我使用 Docker,更新后所有数据都消失了! 如果您使用的是 Docker 容器,请参阅[容器化 Docker 安装](/Installation/Updating/ST-1.12.0-Migration-Guide.md#容器化docker安装)。 #### "工作目录中有未解决的冲突。" 这意味着您修改了在远程仓库中已更改的默认文件(如设置预设)。 要修复此问题,请在终端中运行以下命令。请谨慎使用,因为它可能具有破坏性。如有需要,请确保有备份。 ```bash git merge --abort git reset --hard git pull --rebase --autostash ``` #### 文件更改阻止 git pull - 如果您更改 SillyTavern 系统文件,`git pull` 可能无法工作。 - 有时更新可能需要我们更改重要文件,这可能导致相同的问题。 - 通常是默认预设文件或 `package-lock.json`。 - 在这种情况下,您可以尝试将文件移动到不同的文件夹(或删除文件),然后执行 `git pull`。 - 另一个解决方案是使用 `git pull --rebase --autostash` #### 启动服务器时出现错误:找不到模块 "***" - 这意味着 SillyTavern 添加了新的 npm 包要求。 - 在 SillyTavern 目录中运行 `npm install` 可以修复此问题。提供的 Start.bat 和 start.sh 脚本会自动执行此操作。 - 没有帮助?删除 node_modules 文件夹 **Windows** ```bash rmdir /s /q node_modules npm cache clean --force npm install ``` **Unix/Linux** ```bash rm -rf node_modules npm cache clean --force npm install ``` ===== Installation/Updating/migration-guide-1-09.md (https://sillytaverncn.net/installation/updating/migration-guide-1-09/) ===== --- order: 109 route: /installation/updating/migration-guide-1-09/ --- # 1.9.0 迁移指南 ## 如果我使用 main/dev,如何迁移到新分支? _**建议进行全新安装。**_ 但是,如果您希望使用现有的 SillyTavern 副本,请按照以下说明操作。 **重要!** 在做任何事情之前,请对您的安装进行*完整备份*。在此过程中,您可能会*丢失数据*,所以不要忽视这个警告。 有关更新说明,请参阅[从 1.12.0 更新到 1.12.0](/Installation/Updating/index.md#从-1120-更新到-1120)。 不确定需要备份哪些文件?请参阅此处的列表:[如何更新 SillyTavern](/Installation/Updating/index.md#updating-from-1120-to-1120) ### git 安装 1. 在您的 SillyTavern 安装文件夹中打开终端提示符(cmd、PowerShell、Termux 等)。 2. 输入 `git fetch` 然后 `git pull` 以拉取更新。 3. 您可能会丢失设置。您做了备份吗?`git switch release` 或 `git switch staging` 将分别切换您的分支 4. 如果没有错误,请跳到下一项。您可能会遇到类似这样的情况: ``` error: Your local changes to the following files would be overwritten by checkout: config.conf public/css/bg_load.css public/settings.json ``` 您将看到受影响文件的列表。如果您不在意这些设置文件被替换,`git switch -f release` 或 `git switch -f staging` 将设置您的分支。 如果您想保存这些更改,请从备份中恢复。 5. 输入 `npm install` 然后 `npm run start` 以测试一切是否正常运行。 6. 尽情享用!如果需要,从备份中恢复数据。 ### fatal: invalid reference: release 如果您只从旧的远程仓库(在迁移到组织仓库之前)克隆了单个分支,可能会发生这种情况。要修复此问题,您需要从新的远程仓库添加并获取分支: ``` git remote add st https://github.com/SillyTavern/SillyTavern git fetch st git checkout -t st/release ``` 然后从第 5 步继续。 ### ZIP 安装 对您来说没有任何变化。像往常一样下载分支/发布 ZIP 即可。 ===== Installation/Updating/node.md (https://sillytaverncn.net/installation/updating/node/) ===== --- order: -50 route: /installation/updating/node/ --- # 如何更新 Node.js 出于安全和性能原因,保持 Node.js 运行时的更新非常重要。以下是根据您的操作系统更新 Node.js 的步骤。 我们推荐使用最新的长期支持(LTS)版本,您可以在 [Node.js 官方网站](https://nodejs.org/en/about/previous-releases) 上找到。 ## 如何检查当前的 Node.js 版本 1. 打开您的终端或命令提示符。 2. 输入以下命令并按回车: ```bash node -v ``` ## nvm(Node 版本管理器)- 跨平台 如果您正在使用 `nvm`: 1. 打开您的终端。 2. 输入以下命令: [**Unix/Linux/macOS:**](https://github.com/nvm-sh/nvm) ```bash nvm install --lts nvm use --lts ``` [**Windows:**](https://github.com/coreybutler/nvm-windows) ```bash nvm install lts nvm use lts ``` ## Windows - 常规安装 1. 前往 Node.js [下载页面](https://nodejs.org/en/download/)。 2. 下载 LTS 版本的 Windows 安装程序。 3. 运行安装程序并按照提示完成安装。 ## Windows - SillyTavern 启动器 如果您使用 SillyTavern 启动器安装: 1. 打开 SillyTavern 启动器。 2. 导航到 `工具箱 / 应用安装器 / 核心工具 / 安装 Node.js`。 **或者:** 在 PowerShell 中使用 winget 手动操作: ```powershell winget install --id=OpenJS.NodeJS.LTS -e ``` ## Android - Termux 1. 打开 Termux 应用。 2. 输入以下命令: ```bash pkg update pkg upgrade nodejs-lts ``` 不要忘记在更新过程中通过在虚拟键盘上按 `Y` 来接受可能出现的任何提示。 ## macOS - 常规安装 1. 前往 Node.js [下载页面](https://nodejs.org/en/download/)。 2. 下载 LTS 版本的 macOS 安装程序。 3. 运行 `.pkg` 文件并按照提示完成安装。 ## macOS - Homebrew 如果您已安装 Homebrew,可以使用以下命令更新 Node.js: ```bash brew update brew upgrade node ``` ## Linux - 包管理器 在 Linux 上更新 Node.js 的方法取决于您的发行版。 但由于官方软件源中的 Node.js 版本可能不是最新的,我们推荐使用 [Node 版本管理器(nvm)](https://github.com/nvm-sh/nvm) 或 [NodeSource 软件源](https://github.com/nodesource/distributions)。 ## Docker 无需操作。我们提供的预构建 Docker 镜像已使用最新版本的 Node.js 编译。 ===== Installation/Windows.md (https://sillytaverncn.net/installation/windows/) ===== --- order: 10 label: Windows route: /installation/windows/ --- # Windows 安装指南 !!!warning 不要安装在任何 Windows 控制的文件夹中(Program Files、System32 等)。 不要以管理员权限运行 START.BAT 由于 Windows 7 无法运行 NodeJS 18.16,因此无法在 Windows 7 上安装 !!! !!!success :beer: 不想折腾?Windows 用户推荐用一键启动器 **下载、解压、双击 — 3 步搞定**,不用装 Node.js,不用装 Git,不用敲命令行。 :arrow_right: [下载 Windows 版一键启动器](https://launch.deepseektavern.com) --- ## 通过 Git 安装 1. 安装 [NodeJS](https://nodejs.org/en)(推荐使用最新的 LTS 版本) 2. 安装 [Git for Windows](https://gitforwindows.org/) 3. 打开 Windows 资源管理器(`Win+E`) 4. 浏览或创建一个不受 Windows 控制或监视的文件夹(例如:C:\MySpecialFolder\) 5. 通过点击顶部的"地址栏",输入 `cmd` 并按回车键,在该文件夹中打开命令提示符。 6. 当黑色框(命令提示符)弹出后,输入以下其中一个命令并按回车: - Release 分支:`git clone https://github.com/SillyTavern/SillyTavern -b release` - Staging 分支:`git clone https://github.com/SillyTavern/SillyTavern -b staging` 7. 克隆完成后,双击 `Start.bat` 让 NodeJS 安装所需的依赖。 8. 服务器随后将启动,SillyTavern 将在您的浏览器中打开。 ## 通过 SillyTavern Launcher 安装 1. 在键盘上:按 **`WINDOWS + R`** 打开运行对话框。然后运行以下命令安装 git: ```shell cmd /c winget install -e --id Git.Git ``` 2. 在键盘上:按 **`WINDOWS + E`** 打开文件资源管理器,然后导航到您想要安装启动器的文件夹。进入目标文件夹后,在地址栏中输入 `cmd` 并按回车。然后运行以下命令: ```shell git clone https://github.com/SillyTavern/SillyTavern-Launcher.git && cd SillyTavern-Launcher && start installer.bat ``` ## 通过 GitHub Desktop 安装 (这种方法仅允许在 GitHub Desktop 中使用 git,如果您也想在命令行中使用 `git`,您还需要安装 [Git for Windows](https://gitforwindows.org/)) 1. 安装 [NodeJS](https://nodejs.org/en)(推荐使用最新的 LTS 版本) 2. 安装 [GitHub Desktop](https://central.github.com/deployments/desktop/desktop/latest/win32) 3. 安装 GitHub Desktop 后,点击 `Clone a repository from the internet....`(注意:这一步**不需要**创建 GitHub 账户) ![image](/static/windows-1.png) 4. 在菜单中,点击 URL 标签页,输入此 URL `https://github.com/SillyTavern/SillyTavern`,然后点击 Clone。您可以更改本地路径来改变 SillyTavern 的下载位置。 ![image](/static/windows-2.png) 5. 要打开 SillyTavern,使用 Windows 资源管理器浏览到您克隆仓库的文件夹。默认情况下,仓库将被克隆到:`C:\Users\[您的 Windows 用户名]\Documents\GitHub\SillyTavern` 6. 双击 `start.bat` 文件。(注意:文件名中的 `.bat` 部分可能被您的操作系统隐藏,在这种情况下,它看起来像一个名为 "`Start`" 的文件。这就是您需要双击运行 SillyTavern 的文件) ![image](/static/windows-3.png) 7. 双击后,一个大的黑色命令控制台窗口将打开,SillyTavern 将开始安装运行所需的内容。 8. 安装过程完成后,如果一切正常,命令控制台窗口应该如下所示,并且 SillyTavern 标签页应该在您的浏览器中打开: ![image](/static/windows-4.png) 9. 连接到任何[支持的 API](/Usage/API_Connections/index.md) 并开始聊天! ===== Installation/index.md (https://sillytaverncn.net/installation/) ===== --- order: 50 icon: package expanded: true route: /installation/ --- # 酒馆一键启动器 !!!success :beer: 推荐:酒馆一键启动器 **零依赖、零配置、一键启动** — 玩酒馆最省心的方式。 !!! ## 为什么选一键启动器? | 手动安装 | 一键启动器 | |:---|:---| | :x: 装 Python | :white_check_mark: 不需要 | | :x: 装 Node.js | :white_check_mark: 不需要 | | :x: 装 Git | :white_check_mark: 不需要 | | :x: 敲命令行 | :white_check_mark: 不需要 | | :x: 到处找角色卡 | :white_check_mark: 内置 1000+ 张 | | :x: 配 API | :white_check_mark: 内置酒馆大模型 | | :x: 配预设/正则 | :white_check_mark: 全部内置 | | 30 分钟起步 | **2 分钟开聊** | ## 三步开始 1. :arrow_down: [下载一键启动器](https://launch.deepseektavern.com) — macOS / Windows 双平台 2. :key: [注册 DeepSeek Tavern](https://deepseektavern.com) 获取 API Key 3. :rocket: 填入 Key,点「一键启动」— 酒馆自动运行 ## 内置功能 - :card_index: **角色卡** — 1000+ 张精选角色卡,秋叶/原神/FGO/崩铁等热门角色 - :books: **世界书** — 世界观和背景设定,开箱即用 - :gear: **预设** — 角色扮演调优预设,多种风格可选 - :scroll: **正则** — 常用正则脚本,对话效果优化 - :key: **API 配置** — DeepSeek Tavern Pro 酒馆专属大模型,三档创作风格 - :loud_sound: **TTS 语音** — 内置语音合成,角色开口说话 - :arrow_up: **版本管理** — 一键更新酒馆版本 - :electric_plug: **插件管理** — 扩展插件即装即用 - :bookmark_tabs: **教程资源** — 内置使用教程和社区资源 --- ## 手动安装 如果你想从源码手动安装,请选择你的平台: * [Windows 手动安装](/Installation/Windows.md) * [Linux and Mac 手动安装](/Installation/LinuxMacOS.md) * [Android (Termux) 手动安装](/Installation/Android.md) * [Docker 手动安装](/Installation/Docker.md) ## 分支说明 SillyTavern 采用双分支开发系统: * `release` - :star: **推荐。** 最稳定分支,每月更新一次。 * `staging` - :warning: **不推荐普通用户。** 最新功能但可能不稳定。仅适合专业用户和发烧友。 ===== LicenseCredits.md (https://sillytaverncn.net/licensecredits/) ===== --- icon: law route: /licensecredits/ --- # License and credits **This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.** **See the GNU Affero General Public License for more details.** Original [TavernAI](https://github.com/TavernAI/TavernAI) 1.2.8 by Humi: MIT License ## Pre-v1.9.0 Contributors The git commit history was squashed to the state of release 1.9.0. Unfortunately, losing commit history also means losing the code contribution history. If you contributed to the SillyTavern development and want to see yourself credited in the README file and Docs website, please get in touch with us! ## Documentation Contributors Click the image below to see the full list of SillyTavern documentation contributors. [![Contributors](https://contrib.rocks/image?repo=SillyTavern/SillyTavern-Docs)](https://github.com/SillyTavern/SillyTavern-Docs/graphs/contributors) ===== Usage/API_Connections/Connection-Profiles.md (https://sillytaverncn.net/usage/api-connections/connection-profiles/) ===== --- icon: paperclip route: /usage/core-concepts/connection-profiles/ order: 100 --- # 连接配置文件 保存连接配置文件以快速切换不同的 API、模型和格式化模板。当您积极使用多个 API 连接或需要在不同配置之间切换而无需浏览菜单时,这很有用。 ## 访问连接配置文件 从 SillyTavern 1.12.6 或更高版本开始,此功能作为内置扩展默认启用,并在 API 连接菜单中可用。如果您希望*禁用*它,请打开扩展面板,点击"管理扩展",在列表中找到连接配置文件,取消选中"已启用"复选框,然后点击"关闭"。 ## 保存的内容 连接配置文件存储以下选项。 ### 通用 * [API 类型、模型和服务器 URL](/Usage/API_Connections/index.md) * [设置预设](/Usage/Common-Settings.md) ### 文本补全 API * [系统提示词及其状态](/Usage/Prompts/advancedformatting.md#系统提示词) * [指令模式状态和模板](/Usage/Prompts/instructmode.md) * [上下文模板](/Usage/Prompts/advancedformatting.md#上下文模板) * [分词器](/Usage/Prompts/advancedformatting.md#分词器) ### 聊天补全 API * 代理预设 ## 管理连接配置文件 !!! info 注意 配置文件只保存下拉字段中的选择,而不了解底层设置。这意味着通过切换到不同的配置文件,您将丢失未保存的更改。为了防止这种情况,如果您不想丢失临时更改,请确保更新所有预设和模板。 !!! * 要保存配置文件,请设置所有必需的设置并点击"创建"按钮。然后检查设置并为配置文件提供名称。**名称应该是唯一的。** * 要查看所选配置文件的详细信息,请点击"信息"按钮。再次点击以隐藏详细信息。 * 连接配置文件设置保存在 `settings.json` 中,在您按下"更新"按钮之前不会更改关联的配置文件保存文件。这意味着如果您设置了一个配置文件,但在更新之前切换到另一个配置文件,您将丢失所有先前的更改。 * 要从保存的配置文件恢复更改的选择,请点击"重新加载"按钮。 * 要删除配置文件,请点击"删除"按钮并确认删除。**此操作不可逆。** ## 斜杠命令 可以使用以下斜杠命令管理连接配置文件。 1. `/profile [name]` - 如果提供了参数,则切换到该配置文件;如果没有提供参数,则获取当前配置文件的名称。 2. `/profile-create [name]` - 将当前设置保存为具有提供名称的新配置文件。 3. `/profile-list` - 返回可用配置文件名称的 JSON 序列化数组。 4. `/profile-get [name]` - 获取具有提供名称的配置文件的详细信息,作为 JSON 序列化对象。 5. `/profile-update` - 使用当前设置更新所选配置文件。 ===== Usage/API_Connections/DreamGen.md (https://sillytaverncn.net/usage/api-connections/dreamgen/) ===== --- route: /usage/api-connections/dreamgen/ --- # DreamGen DreamGen 是一个由 AI 驱动的角色扮演和故事创作应用程序和 API。他们提供免费套餐,以及付费订阅,允许无限制地每月访问他们专门为可控 AI 角色扮演和故事创作而设计的高质量内部文本生成模型。创建账户开始使用:。 (免费)信用额度在每个日历月初重置。请参阅[定价](https://dreamgen.com/pricing)查看每个模型的信用成本,以及[用量](https://dreamgen.com/account/usage)查看您的剩余信用额度。 ## 连接到 DreamGen ### 获取 API Key 前往 [DreamGen API keys](https://dreamgen.com/account/api-keys) 页面并点击 "New API Key" 按钮。确保将 API Key 复制到剪贴板。 ![Create New DreamGen API key](/static/dreamgen/dreamgen_api_keys_new.jpg) ![Copy DreamGen API key](/static/dreamgen/dreamgen_api_keys_copy.jpg) ### 连接 1. 前往 SillyTavern 连接设置。 2. 选择 API: Text Completion 3. 选择 API Type: DreamGen 4. 输入 API key 5. (可选)选择一个模型 ![Connecting to DreamGen](/static/dreamgen/dreamgen_st_connection.png) ## 模型 DreamGen API 提供多个不同大小的模型。 - Lucid Max (在 API 中称为 `lucid-v1-max` 或 `lucid-v1-extra-large`) - Lucid Base (在 API 中称为 `lucid-v1-base` 或 `lucid-v1-medium`) -- 对应于权重可用的 [Lucid V1 Nemo](https://dreamgen.com/docs/models/lucid-v1/huggingface)。 Lucid Base 使用更少的信用额度且速度更快,而 Lucid Max 更具创造力,能够处理更复杂的指令和叙事。 ## 设置 Lucid V1 DreamGen 模型使用针对角色扮演和写作优化的 Llama 3 chat template 扩展。它们在特定的 system prompt 下效果最佳。 我们强烈建议从以下 master presets 之一开始: - 确保启用 instruct mode 并在导入时选择所有复选框。 - [DreamGen Lucid V1 Role-Play preset](https://dreamgen.com/docs/models/lucid-v1/sillytavern/master-preset/role-play) - [DreamGen Lucid V1 Story preset](https://dreamgen.com/docs/models/lucid-v1/sillytavern/master-preset/story) 这些 presets 内置了对 `/sys` 的支持,用于向模型发送指令。您可以使用它们来引导情节或控制角色的行动。 ![DreamGen preset selected](/static/dreamgen/dreamgen_st_preset.png) 其他资源: - [**详细的 DreamGen + SillyTavern 指南**](https://dreamgen.com/docs/models/lucid-v1/sillytavern) - [详细的 Lucid V1 prompt format 文档](https://dreamgen.com/docs/models/lucid-v1)。 - [DreamGen + SillyTavern role-play 演示](https://imgur.com/a/dreamgen-lucid-sillytavern-roleplay-demo-bhzQpto) - [DreamGen + SillyTavern story-writing 演示](https://imgur.com/a/dreamgen-lucid-sillytavern-writing-demo-JLv5iO3) - [制作自己场景的技巧](https://v2.dreamgen.com/docs/scenario-editor) ## FAQ ### 如何使响应更长或更短? 您可以在 formatting presets 中设置 `Last Assistant Prefix`。 对于长消息: ```txt <|start_header_id|>user<|end_header_id|> The next message is from {{char}} and is at least 100 words long<|eot_id|><|start_header_id|>writer character {{char}}<|end_header_id|> ``` 对于短消息: ```txt <|start_header_id|>user<|end_header_id|> The next message is from {{char}} and is at most 50 words long<|eot_id|><|start_header_id|>writer character {{char}}<|end_header_id|> ``` 确保保留所有换行符,包括末尾的两个换行符。 ![Long Message Prefix](/static/dreamgen/dreamgen_st_long_response_prefix.png) 您还可以在您的 card 或 system prompt 中包含写作风格描述,例如: ```txt ## Style ``` 请参阅 ["Style" 文档](https://v2.dreamgen.com/docs/scenario-editor#style)了解更多信息并查看一些示例。 ### 如何引导角色扮演/故事? 使用 `/sys` 选项向模型发送指令。一些示例: > The inkeeper offers Daria and the others a pint of ale. > The next message is from Draco and should be at least 200 words, focusing on his inner conflict about the decision. [查看实际效果。](https://imgur.com/a/dreamgen-lucid-sillytavern-roleplay-demo-bhzQpto) ===== Usage/API_Connections/OpenRouter.md (https://sillytaverncn.net/usage/api-connections/openrouter/) ===== --- order: 10 route: /usage/api-connections/openrouter/ --- # OpenRouter 由于地理限制或等待列表而无法访问 OpenAI / Claude API?使用 OpenRouter。 OpenRouter 的工作原理是让您使用他们拥有的密钥来访问 GPT-4 和 Claude 2 等模型,所有服务都在一个共享的积分池中。 它有免费试用(约 1 美元)和之后的付费访问。没有订阅或月费 - 您只需为实际使用的部分付费。某些模型在上下文大小有限的情况下可以免费访问。 - [OpenRouter 定价详情](https://openrouter.ai/models?o=pricing-high-to-low) - 创建 OpenRouter 账户:[openrouter.ai](https://openrouter.ai/) ![OpenRouter-连接面板](/static/openrouter-connection.png) 从上到下(见上图): 1. 选择"聊天补全" API 2. 选择 OpenRouter 来源 3. 点击"授权"使用 OAuth 流程获取密钥。或者,在[这里](https://openrouter.ai/keys)生成 API 密钥并将其粘贴到框中。 4. 点击"连接"并选择一个模型 5. (可选)使用"测试消息"按钮验证您的连接 ## WindowAI [WindowAI](https://windowai.io) 是 OpenRouter 制作者开发的浏览器扩展,允许您在任何启用的网站或网络应用程序中控制 OpenRouter 连接。 您也可以在那里使用您自己的 Claude 和 OpenAI API 密钥。 ===== Usage/API_Connections/Scale.md (https://sillytaverncn.net/usage/api-connections/scale/) ===== # Scale Scale 是一种通过部署充当 API 端点的"应用程序"来访问 GPT-4 和其他 LLM 的简单方法。 目前,Scale 不支持通过 SillyTavern 的 UI 进行 token 流式传输和配置温度等参数。 **Scale API 不是免费的,但如果您绑定信用卡,可以获得 5 美元的试用额度。** ## 快速开始 - 在 创建 Scale Spellbook 账户(如果您所在的国家不受支持,请使用 VPN) - 创建一个具有任意名称和描述的"应用程序" - 创建一个"变体",用于设置参数(系统提示词、模型、温度、响应 token 限制等) - 选择要部署的适当语言模型(推荐使用 GPT-4) - 将提示词的"用户"部分内容替换为以下内容: >在这个虚构的聊天中完成下一个回复。 > >\{\{ input \}\} - 配置模型参数。 - **模型:** GPT-4 - **温度:** ~0.6 - 0.9 - **最大 Token 数:** 400 - 600(取决于消息长度偏好) - 点击"保存新变体" - 转到您的新变体并点击部署 - 这将为您的机器人创建一个 API 密钥和 URL - 导航到 SillyTavern,选择"聊天补全" API 和 Scale 来源 - 将 API 密钥和 URL 粘贴到相应的字段中,然后点击"连接" ## 致谢 实现和文档的灵感来自 khanon 在 TavernAIScale 上的工作。 ===== Usage/API_Connections/google.md (https://sillytaverncn.net/usage/api-connections/google/) ===== --- route: /usage/api-connections/google/ --- # Google Gemini Gemini 是 Google 最先进的多模态大语言模型,可通过多个 API 访问,包括 Google Vertex AI 和 Google AI Studio(前身为 MakerSuite)。本指南将帮助您在 SillyTavern 中设置 Gemini API 连接。 ## Google AI Studio AI Studio 是试用最新 Google AI 模型最快捷、最友好的方式,无需设置 Google Cloud Platform (GCP) 项目。它提供了一个简单的 API 密钥,您可以使用它来访问 Gemini 模型。 ### 步骤 1:创建 Google AI Studio 密钥 1. 前往 [Google AI Studio](https://aistudio.google.com/apikey) 页面并使用您的 Google 账户登录。 2. 点击"获取 API 密钥",接受条款和条件。 3. 点击"创建 API 密钥"以生成您的 API 密钥。 4. 将 API 密钥复制到剪贴板。 ### 步骤 2:将 API 密钥输入 SillyTavern 1. 在 SillyTavern 中,前往"API 连接"页面。 2. 选择"聊天补全"作为 API 类型。 3. 从下拉菜单中选择"Google AI Studio"。 4. 将您之前复制的 API 密钥输入到"API 密钥"文本框中。 5. 点击"连接"按钮保存密钥。 现在您应该能够在 SillyTavern 中使用 Google AI Studio API 了。 ## Google Vertex AI Vertex AI 是 Google Cloud Platform (GCP) 提供的服务。它提供对各种 AI 模型的访问,包括 Gemini 系列。 Vertex AI API 有多种设置方式,可用的模型可能因使用的方法而异。 ### 服务账户 Google Cloud Platform (GCP) 需要服务账户才能访问 Vertex AI,简单的 API 密钥无法使用。将从服务账户 JSON 文件生成令牌,然后用于对 Vertex AI API 的请求进行身份验证。 您可以按照以下步骤创建服务账户: **前提条件:** 1. 您必须拥有 Google Cloud Platform (GCP) 账户。 2. 您必须在 GCP 账户中创建了项目。 3. 您必须为该项目启用了计费。 #### 步骤 1:启用 Vertex AI API 在密钥可以工作之前,必须为您的项目启用 API。 1. 前往 Google Cloud 控制台: 2. 确保在顶部栏中选择了正确的项目。 3. 导航到 Vertex AI API 页面: 4. 如果尚未启用,请点击"启用"按钮。 #### 步骤 2:创建服务账户 这是将用于访问 Vertex AI API 的身份。 1. 在 Google Cloud 控制台中,导航到"服务账户"页面。您可以在顶部搜索栏中搜索它,或使用此直接链接: 2. 选择您的 GCP 项目,然后点击"+ 创建服务账户"。 3. 服务账户名称:给它一个描述性的名称,例如 `my-vertex-ai-client`。 4. 点击"创建并继续"。 5. 授予此服务账户对项目的访问权限:在"角色"下拉菜单中,搜索并选择 Vertex AI 用户。此角色授予运行模型所需的必要权限,而不会授予过多的访问权限。 6. 点击"继续",然后点击"完成"。 #### 步骤 3:生成 JSON 密钥 这是您需要的"密码"文件。它包含敏感信息,因此不要分享或上传到任何公共位置。 1. 您现在应该回到服务账户列表。找到您刚刚创建的账户(例如,sillytavern-vertex-ai)。 2. 点击该行最右侧的三点菜单 (⋮),然后选择"管理密钥"。 3. 点击"添加密钥" -> "创建新密钥"。 4. 确保密钥类型设置为 JSON。 5. 点击"创建"。 一个 .json 文件将立即下载到您的计算机。请妥善保管,因为如果丢失,此密钥无法恢复。 #### 步骤 4:将 JSON 内容输入 SillyTavern 您下载的 JSON 文件包含与 Vertex AI API 进行身份验证所需的所有信息。它看起来像这样: ```json { "type": "service_account", "project_id": "your-gcp-project-name", "private_key_id": "...", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n", "client_email": "sillytavern-vertex-ai@your-gcp-project-name.iam.gserviceaccount.com", "client_id": "...", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "..." } ``` 1. 使用简单的文本编辑器(如 Windows 上的记事本、Mac 上的 TextEdit 或 VS Code)打开您刚下载的 .json 文件。 2. 选择文件中的所有文本(Ctrl+A 或 Cmd+A)。 3. 将文本复制到剪贴板(Ctrl+C 或 Cmd+C)。 4. 在 SillyTavern 中,前往"API 连接"页面,选择"聊天补全"作为 API 类型,然后从下拉菜单中选择"Google Vertex AI"。将身份验证方法切换为"服务账户"。 5. 将整个复制的内容粘贴到"服务账户 JSON 内容"文本框中。 6. 点击"验证 JSON"按钮以确保您正确复制了它。 7. 最后,向下滚动并点击 API 设置页面底部的"连接"。 现在您应该能够在 SillyTavern 中使用 Google Vertex AI API 了。 ### 快速模式 快速模式是开始在 Google Cloud 上使用生成式 AI 的最快方式。它允许您使用 Gemini API,而无需设置服务账户。相反,您可以直接使用 API 密钥。 有关更多详细信息,请参阅官方文档:[快速模式下的 Vertex AI 概述](https://cloud.google.com/vertex-ai/generative-ai/docs/start/express-mode/overview)。 #### 步骤 1:确保您的账户符合快速模式的资格 您必须拥有之前未用于创建 Google Cloud 项目的 Google 账户。 如果您有现有的 Google Cloud 项目(包括免费试用),可以为此目的创建一个新项目。 #### 步骤 2:激活 Vertex AI 快速模式 1. 前往以下网页:[Vertex AI Studio](https://cloud.google.com/generative-ai-studio)。 2. 点击"免费试用"。 3. 接受条款和条件,并使用您的 Google 账户登录。 4. 选择您的国家/地区,然后点击"同意并免费开始"。等待设置完成。 #### 步骤 3:创建 API 密钥 1. 验证您的 Google Cloud 控制台是否以快速模式运行。您应该在页面左上角看到一个横幅。 2. 点击左侧边栏中的"API 密钥"链接。 3. 点击"创建 API 密钥"按钮。 4. 将生成一个新的 API 密钥。将此密钥复制到剪贴板。 #### 步骤 4:将 API 密钥输入 SillyTavern 1. 在 SillyTavern 中,前往"API 连接"页面。 2. 选择"聊天补全"作为 API 类型。 3. 从下拉菜单中选择"Google Vertex AI"。 4. 将身份验证方法切换为"快速模式(API 密钥)"。 5. 将您之前复制的 API 密钥粘贴到"API 密钥"文本框中。 6. 点击"连接"按钮保存密钥。 现在您应该能够在 SillyTavern 中以快速模式使用 Google Vertex AI API 了。 ===== Usage/API_Connections/horde.md (https://sillytaverncn.net/usage/api-connections/horde/) ===== --- route: /usage/api-connections/horde/ --- # AI Horde ## 免责声明 - AI Horde 是一个完全由志愿者运行的众包分布式 GPU 集群。 - 默认情况下,您的输入是匿名发送的,运行 Horde Worker 的人无法看到响应。 - 但是,由于它是一个开源程序,恶意 Worker 可能会修改代码以: - 记录您的活动(输入提示词、AI 响应)。 - 产生不良或冒犯性的响应。 !!!warning 使用 Horde 时**切勿发送**任何个人信息,如姓名、电子邮件地址等。 !!! 打开"仅限可信 Worker"复选框将限制可用 Worker 的选择,只选择那些已在 Horde 上托管一段时间且通常被认为是可信的 Worker。但他们仍然可能会看到提示词,例如通过使用未记录的软件进行托管。 为了帮助减少这个问题,SillyTavern 内置了以下功能: - 当 Horde Worker 生成聊天响应时,SillyTavern 会记录 Worker 的 ID 和他们使用的模型。 - 将鼠标光标悬停在聊天项目上可以看到这些信息(见下图)。 - 如果您认为收到了恶意响应,可以将这些信息传递给 [AI Horde Discord](https://discord.gg/3DxrhksKzn) 上的 Horde 管理员进行审查,并可能对该 Worker 采取纪律处分。 ![Horde Worker 信息弹窗](/static/horde-worker.png) ## 设置 - SillyTavern 可以开箱即用地连接 Horde,无需额外设置。 - 在 ST API 面板中的 API 下拉选择器中选择"AI Horde"。 - 从面板底部的模型选择器中选择一个或多个模型(角色的"AI 大脑")。 - 选择一个角色并开始聊天。 ![ST Kobold Horde API 连接面板](/static/horde-config.png) !!!warning 默认情况下,您的 SillyTavern 实例连接到 Horde 的低优先级"访客账户"。 这意味着您可能需要等待很长时间才能得到回复。 要减少等待时间,请遵循下面的提示。 !!! ## 提示 - [在 Horde 网站上注册账户](https://aihorde.net/register),然后将您的 Horde 密钥添加到 SillyTavern Horde API 密钥框中。 - [设置 Horde Worker](https://github.com/Haidra-Org/AI-Horde-Worker#readme) 为他人提供您的 GPU。 - 让他人使用您的 GPU 可以赚取["Kudos",一种仅限 Horde 的货币](https://github.com/Haidra-Org/AI-Horde/blob/main/FAQ.md#kudos)。 - 您的账户拥有的 kudos 越多,从其他 Horde Worker 获得聊天响应的速度就越快。 - Kudos 也可以用于在 [Stable Horde](https://stablehorde.net) 上创建 AI 图像。 - SillyTavern 开箱即支持 Stable Horde 图像生成。 - 如果您的 GPU 不够强大无法运行 AI,或者您没有电脑,您仍然可以[通过各种方式参与 Horde 社区以赚取 Kudos](https://github.com/Haidra-Org/AI-Horde/blob/main/FAQ.md#i-dont-have-a-powerful-gpu-how-can-i-get-kudos)。 ===== Usage/API_Connections/index.md (https://sillytaverncn.net/usage/api-connections/) ===== --- order: 150 icon: repo-forked expanded: false route: /usage/api-connections/ --- # API 连接 SillyTavern 可以连接到多种 LLM API。 以下是对它们各自的优势、劣势和使用场景的描述。 ## 简单解释:聊天补全与文本补全的区别 当您第一次进入 ST 的"API 连接"页面时,您会注意到有一个下拉选项,可以在"聊天补全"和"文本补全"等选项之间选择。了解这些概念很有帮助。 它不是:很容易把"文本补全"理解为本地模型,把"聊天补全"理解为基于云的 LLM,但事实并非如此。同样,例如"Novel AI"或"Kobold"实际上也不是完全不同类型的模型,尽管它们在 ST 的 API 下拉菜单中是单独的选项。您可以通过适当的后端强制模型使用不同的 API 结构,但这不是本节的重点。 当您使用 ST 发送消息时,您的聊天、角色描述和其他提示词(如知识库或作者注释)会被构建成一个单一的"提示词"发送给模型。您使用的模型的 API"类型"决定了这个提示词将如何构建(ST 在后台会自动为您处理这些 - 您可以打开 ST 终端,看到发送给 AI 的提示词的确切内容)。 ### 聊天补全 顾名思义,聊天补全模型会将您的提示词构建成用户(您)和助手(AI)或系统(中立)之间的一系列消息。为聊天补全训练的模型有助于营造"聊天"的感觉,让 AI"回应"最后一条消息。当您使用 ChatGPT 网站时,您在后台使用的就是聊天补全 API。 ### 文本补全(又称"补全") 另一方面,文本补全(同样顾名思义)会将您的提示词转换为一个长字符串,模型只是试图继续这个字符串(就像,字面上想象您所有的文本、数百条消息、所有格式、换行符等都被压缩成一个很长的句子)。 如果您在 ST 中的消息恰好被格式化为 YourPersona: 和 Character: 之间的一系列消息,文本补全模型会尝试继续这个模式,ST 会将其呈现为新的聊天消息,但实际上模型只是在尝试继续文本。如果您输入"太阳从东方",文本补全模型很可能会用"升起"来完成这条消息。 大多数文本补全模型都有推荐的"指令模板"(通常在模型的文档或下载页面中提到),这些模板帮助它们像聊天补全模型一样"回应"消息和指令。ST 通常在"高级格式设置"页面中提供了大多数(如果不是全部)指令模板供您选择。 ## 本地 API - 这些 LLM API 可以在您的电脑上运行。 - 它们免费使用且没有内容过滤。 - 安装过程可能比较复杂(**SillyTavern 开发团队不提供此方面的支持**)。 - 需要从 [HuggingFace](https://huggingface.co/models?other=LLM) 单独下载 LLM 模型,每个模型可能有 5-50GB。 - 大多数模型不如云端 LLM API 强大。 ### KoboldCpp - 易于使用的 API,支持 CPU 卸载(对低 VRAM 用户有帮助)和流式传输 - 在 Windows、Mac 和 Linux 上可以从单个二进制文件运行 - 支持 GGUF 模型 - 比仅 GPU 加载器(如 AutoGPTQ 和 Exllama/v2)慢 - [GitHub](https://github.com/LostRuins/koboldcpp),[设置说明](/Usage/API_Connections/koboldcpp.md) ### llama.cpp - KoboldCpp 和 Ollama 的原始源代码 - 提供预编译二进制文件和从源代码编译的选项 - 支持 GGUF 模型 - 轻量级 CLI 接口 llama-server - [GitHub](https://github.com/ggml-org/llama.cpp) ### Ollama - 所有基于 llama.cpp 的 API 中最容易设置和使用的 - 一个精巧的模型[目录](https://ollama.com/library),可一键下载 - 支持以 Ollama 自己的格式包装的 GGUF 模型 - [GitHub](https://github.com/ollama/ollama),[网站](https://ollama.com/) ### Oobabooga TextGeneration WebUI - 带有流式传输的一体化 Gradio UI - 对量化模型(AWQ、Exl2、GGML、GGUF、GPTQ)和 FP16 模型的最广泛支持 - 提供一键安装程序 - 定期更新,有时可能会破坏与 SillyTavern 的兼容性 - [GitHub](https://github.com/oobabooga/text-generation-webui#one-click-installers) **正确连接 SillyTavern 到 Ooba 新 OpenAI API 的方法:** 1. 确保您使用的是 Oobabooga's TextGen 的最新更新(截至 2023 年 11 月 14 日)。 2. 编辑 CMD_FLAGS.txt 文件,在其中添加 `--api` 标志。然后重启 Ooba 的服务器。 3. 将 ST 连接到 `http://localhost:5000/`(默认),不要勾选"Legacy API"框。您可以删除 Ooba 控制台提供的 URL 中的 `/v1` 后缀。 *您可以使用 `--api-port 5001` 标志更改 API 托管端口,其中 5001 是您的自定义端口。* ### TabbyAPI - 基于 [Exllamav2](https://github.com/turboderp/exllamav2) 的轻量级 API,支持流式传输 - 支持 Exl2、GPTQ 和 FP16 模型 - [官方扩展](https://github.com/theroyallab/ST-tabbyAPI-loader) 允许直接从 SillyTavern 加载/卸载模型 - 不推荐给低 VRAM 用户(无 CPU 卸载) - [GitHub](https://github.com/theroyallab/tabbyAPI),[设置说明](/Usage/API_Connections/tabbyapi.md) ### KoboldAI Classic(已弃用,已放弃) - 在您的电脑上运行,100% 私密,可使用多种模型 - 提供对 AI 生成设置的最直接控制 - 需要 GPU 中大量的 VRAM(6-24GB,取决于 LLM 模型) - 模型限制在 2k 上下文 - 不支持流式传输 - 流行的 KoboldAI 版本: - [Henky's United](https://github.com/henk717/KoboldAI) - [0cc4m's 4bit-supporting United](https://github.com/0cc4m/KoboldAI) ## 云端 LLM API - 这些 LLM API 作为云服务运行,不需要您电脑的资源 - 它们比大多数本地 LLM 更强大/更智能 - 但它们都有不同程度的内容过滤,大多数需要付费 ### AI Horde - SillyTavern 可以开箱即用地访问此 API,无需额外设置 - 使用个人志愿者(Horde Workers)的 GPU 来处理您的聊天输入的回应 - 在生成等待时间、AI 设置和可用模型方面受制于 Worker - [网站](https://aihorde.net/),[设置说明](./horde.md) ### OpenAI (ChatGPT) - 易于设置和获取 API 密钥 - 需要预付费购买积分,按提示词收费 - 非常逻辑化。创意风格可能重复和可预测 - 大多数较新的模型(gpt-4-turbo、gpt-4o)支持多模态 - [网站](https://platform.openai.com/),[设置说明](/Usage/API_Connections/openai.md#openai) ### Claude (by Anthropic) - 推荐给希望 AI 聊天具有创意、独特写作风格的用户 - 需要预付费购买积分,按提示词收费 - 最新的模型(Claude 3)支持多模态 - 需要特定的提示词风格和使用 [prefills](https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/prefill-claudes-response) 进行回复引导 - [网站](https://console.anthropic.com/),[设置说明](/Usage/API_Connections/openai.md#claude) ### Google AI Studio 和 Vertex AI - 有带速率限制的免费层(Gemini Flash),可能需要账单信息 - [AI Studio](https://aistudio.google.com/) 通常拥有最新的模型和功能 - [Vertex AI](https://console.cloud.google.com/vertex-ai/studio) 设置起来比较棘手,但更稳定 - [设置说明](/Usage/API_Connections/google.md) ### Mistral (by Mistral AI) - 各种规模和用例的高效模型。您可以在[他们的平台](https://console.mistral.ai/api-keys/)上创建账户和 API 密钥。 - 一般用途的上下文大小从 32k 到 128k,编码用途的上下文大小从 32k 到 256k。 - 有限制的免费层级。 - 合理的审核,Mistral 的主要原则是保持中立并赋能用户,更多信息[在此](https://mistral.ai/terms/)。 - [网站](https://console.mistral.ai/),[设置说明](/Usage/API_Connections/openai.md#mistral-ai) ### OpenRouter - 提供统一的 API 来访问市场上所有主要的 LLM - 按 token 付费的积分系统,以及每日请求有限的免费模型 - 没有强制审核,除非 LLM 供应商要求 - [网站](https://openrouter.ai),[设置说明](/Usage/API_Connections/OpenRouter.md) ### DeepSeek - 提供对非常流行的 DeepSeek V4(`deepseek-v4-flash`和`deepseek-v4-pro`)模型的最新版本的访问 - 需要付费购买积分(最低 $2),但模型的价格相对质量来说相当便宜 - API 上没有审核,但模型可能会拒绝某些提示词 - [网站](https://platform.deepseek.com/),[设置说明](/Usage/API_Connections/openai.md#deepseek) ### AI21 - 提供对 Jamba Family 开放模型的访问 - 有免费试用(三个月 $10),然后需要按 token 每月付费 - [网站](https://ai21.com/),[设置说明](/Usage/API_Connections/openai.md#ai21) ### Cohere - 提供对 Cohere 最新模型(command-r、command-a、c4ai-aya 等)的访问 - 有免费层(Trial Keys),对于休闲使用有足够的速率限制 - [网站](https://cohere.com/),[设置说明](/Usage/API_Connections/openai.md#cohere) ### Perplexity - 通过其 API 提供对独特的 Perplexity Sonar 在线启用模型的访问 - 需要配置账单并购买积分 - [网站](https://perplexity.ai/),[设置说明](/Usage/API_Connections/openai.md#perplexity) ### Mancer AI - 托管各种系列的无约束模型的服务 - 使用"积分"为各种模型的 token 付费 - 默认不记录提示词,但您可以启用它以获得 token 积分折扣 - 使用类似于 `Oobabooga TextGeneration WebUI` 的 API,详情请参见 [Mancer 文档](https://mancer.tech/docs/clients/#sampling-parameters) - [网站](https://mancer.tech/),[设置说明](/Usage/API_Connections/mancer.md) ### DreamGen - 针对可控创意写作调优的无审查模型 - 提供免费月度积分和付费订阅 - 模型范围从 7B 到 70B - [设置说明](DreamGen.md) ### Pollinations - 无需设置,可以开箱即用 - 免费提供对各种模型的访问 - 输出可能偶尔包含带有第三方服务链接的广告 ### NovelAI - 无内容过滤,最新模型基于 Llama 3 - 需要付费订阅,tier 决定最大上下文长度 - [网站](https://novelai.net/),[设置说明](/Usage/API_Connections/novelai.md) ### Electron Hub - 一个 API 密钥解锁来自多个供应商(OpenAI、Anthropic、DeepSeek 等)的模型,用于文本和图像生成 - 每天 $0.25 的免费积分,提供付费计划 - [网站](https://www.electronhub.ai/),[设置说明](/Usage/API_Connections/openai.md#electron-hub) ### AI/ML API - 统一的 API,支持 300 多个模型,包括 Claude、GPT-4o、Gemini、LLaMA 3、Mistral 等 - 有带速率限制的免费层、订阅计划和按需付费选项 - [网站](https://aimlapi.com),[文档](https://docs.aimlapi.com),[模型](https://aimlapi.com/models) ===== Usage/API_Connections/koboldcpp.md (https://sillytaverncn.net/usage/api-connections/koboldcpp/) ===== --- route: /usage/api-connections/koboldcpp/ --- # KoboldCpp KoboldCpp 是一个用于 GGML 和 GGUF 模型的独立 API。 这个 [VRAM Calculator](https://huggingface.co/spaces/NyxKrage/LLM-Model-VRAM-Calculator) by Nyx 将告诉你模型大约需要多少 RAM/VRAM。 ## Nvidia GPU Quickstart 本指南假设你使用的是 Windows。 * 下载最新版本: * 启动 KoboldCpp。你可能会看到 Microsoft Defender 的弹出窗口,点击 `Run Anyway`。 * 截至 1.58 版本,KoboldCpp 应该是这样的: ![KoboldCpp 1.58](/static/koboldcpp.png) * 在 `Quick Launch` 标签下,选择模型和你首选的 `Context Size`。 * 选择 `Use CuBLAS` 并确保 `GPU ID` 旁边的黄色文本与你的 GPU 匹配。 * 即使你的 VRAM 很低,也不要勾选 `Low VRAM`。 * 除非你使用的是 Nvidia 10 系列或更旧的 GPU,否则取消勾选 `Use QuantMatMul (mmq)`。 * 当你加载模型时,`GPU Layers` 应该已经填充。暂时保持不变。 * 在 `Hardware` 标签下,勾选 `High Priority`。 * 点击 `Save`,这样你就不必在每次启动时都配置 KoboldCpp。 * 点击 `Launch` 并等待模型加载。 你应该看到类似这样的内容: ```txt Load Model OK: True Embedded Kobold Lite loaded. Starting Kobold API on port 5001 at http://localhost:5001/api/ Starting OpenAI Compatible API on port 5001 at http://localhost:5001/v1/ ====== Please connect to custom endpoint at http://localhost:5001 ``` 现在你可以在 SillyTavern 中使用 `http://localhost:5001` 作为 API URL 连接到 KoboldCpp 并开始聊天。 **恭喜!你完成了!** 差不多吧。 ### GPU Layers KoboldCpp 正在工作,但你可以通过确保尽可能多的层卸载到 GPU 来提高性能。你应该在终端中看到类似这样的内容: ```txt llm_load_tensors: offloading 9 repeating layers to GPU llm_load_tensors: offloaded 9/33 layers to GPU llm_load_tensors: CPU buffer size = 25215.88 MiB llm_load_tensors: CUDA0 buffer size = 7043.34 MiB .................................................................................................... llama_kv_cache_init: CUDA_Host KV buffer size = 1479.19 MiB llama_kv_cache_init: CUDA0 KV buffer size = 578.81 MiB ``` 不要害怕数字;这部分比看起来更容易。`CPU buffer size` 指的是正在使用的系统 RAM 数量。忽略它。`CUDA0 buffer size` 指的是正在使用的 GPU VRAM 数量。`CUDA_Host KV buffer size` 和 `CUDA0 KV buffer size` 指的是为模型的 context 专门分配的 GPU VRAM 数量。在这种情况下,KoboldCpp 使用了大约 9 GB 的 VRAM。 我有 12 GB 的 VRAM,只有 2 GB 的 VRAM 用于 context,所以我还剩下大约 10 GB 的 VRAM 来加载模型。因为 9 层使用了大约 7 GB 的 VRAM,而 `7000 / 9 = 777.77`,所以我们可以假设每层使用大约 `777.77 MIB` 的 VRAM。`10,000 MIB / 777.77 = 12.8`,所以我会向下取整,从现在开始用这个模型加载 12 层。 现在使用你系统的模型、context 大小和 VRAM 进行自己的计算,并重启 KoboldCpp: * 如果你很聪明,之前点击了 `Save`,现在你可以用 `Load` 加载你之前的配置。否则,选择你之前选择的相同设置。 * 将 `GPU Layers` 更改为你新的、VRAM 优化的数字(在我的情况下是 12 层)。 * 点击 `Save` 以保存你更新的配置。 你现在应该看到类似这样的内容: ```txt llm_load_tensors: offloading 12 repeating layers to GPU llm_load_tensors: offloaded 12/33 layers to GPU llm_load_tensors: CPU buffer size = 25215.88 MiB llm_load_tensors: CUDA0 buffer size = 9391.12 MiB .................................................................................................... llama_kv_cache_init: CUDA_Host KV buffer size = 1286.25 MiB llama_kv_cache_init: CUDA0 KV buffer size = 771.75 MiB ``` KoboldCpp 使用了我 12 GB VRAM 中的大约 11.5 GB。这应该比 KoboldCpp 自动生成的设置表现得更好。 **恭喜!你(真的)完成了!** 要更深入地了解 KoboldCpp 设置,请查看 Kalomaze 的 [Simple Llama + SillyTavern Setup Guide](https://rentry.org/llama_v2_sillytavern)。 ===== Usage/API_Connections/mancer.md (https://sillytaverncn.net/usage/api-connections/mancer/) ===== --- route: /usage/api-connections/mancer/ --- # Mancer Mancer 是一个大语言模型推理服务,让您可以运行任何您想要的提示词,并且不会审查响应。截至撰写时(2024-11-28),大多数模型需要预先充值余额才能开始聊天,但有一个免费模型。 - [模型](https://mancer.tech/models) - [定价](https://mancer.tech/pricing) ## 如何开始 1. 在 [mancer.tech](https://mancer.tech/) 注册账户。 2. 点击仪表板并复制您的 API 密钥。 ![2024/2/27 的 Mancer 仪表板](/static/mancer-dashboard.png) 3. 在 SillyTavern 中,选择文本补全 API,然后在 API 类型下选择 Mancer。 4. 输入您的 Mancer API 密钥并点击连接。 ![API 密钥](/static/mancer-key.png) 现在您应该可以与任何您选择的 Mancer 模型聊天了。 ## 匿名日志记录 如果您不介意您的聊天可能被用于训练模型、改进 Mancer 的服务、发布数据集或他们可能决定用它做的*其他任何事情*,您可以选择加入匿名日志记录,以获得特定模型 25% 的 token 折扣。只需前往您的 [Mancer 仪表板](https://mancer.tech/dashboard.html)并勾选"启用匿名日志记录"。 ## 支持 还需要帮助?前往 SillyTavern Discord 的 [#mancer](https://discord.gg/Ze9UyNu3) 支持频道。 ===== Usage/API_Connections/novelai.md (https://sillytaverncn.net/usage/api-connections/novelai/) ===== --- route: /usage/api-connections/novelai/ --- # NovelAI NovelAI 是一个付费订阅服务,允许每月无限制访问他们高质量的内部文本生成、图像生成和文本转语音模型。在此注册账户以开始使用: 你只能获得 *50 次生成* 的免费试用来评估模型。当出现 **"Not eligible for this model"** 错误时,这意味着你已经用完了试用期,需要订阅付费计划。 ## API 密钥 要获取 NovelAI API 密钥,请按以下步骤操作: 1. 选择左侧边栏顶部的齿轮图标。 ![Left Sidebar](/static/novel-side.png) 2. 在 "User Settings" 下选择 "Account"。 ![User Settings](/static/novel-user.png) 3. 选择 "Get Persistent API Token"。 ![Account](/static/novel-account.png) 4. 点击复制图标将 NovelAI API 令牌复制到剪贴板。 ![Persistent API Token](/static/novel-token.png) ## 模型 如果你订阅了 Opus 套餐,那么 Erato 是最佳选择。如果没有 Opus,那么 Kayra 是最好的可用模型。 Clio 在 Tablet/scroll 套餐下有更大的上下文大小,但 Kayra 的性能通常可以弥补这个差异。 ## 设置 设置文件位于这里(`SillyTavern/data//NovelAI Settings`)。 你也可以手动添加自己的设置文件。 ### 响应长度 你希望每条消息生成多少文本。请注意,NovelAI 每次响应的限制是 150 个令牌。 ### 上下文大小 在任何时候保持在上下文中的聊天令牌数量。最大上下文大小取决于模型和你的订阅等级: - Kayra (Tablet) - 3072 个令牌 - Kayra (Scroll) - 6144 个令牌 - Erato(Opus 专属)、Kayra (Opus) 和 Clio(所有等级)- 8192 个令牌 ### 前言 插入在聊天内容正上方的文本,用于修改写作风格。推荐的格式是简短标签列表,如 "[ Style: chat, detailed, sensory ]"。 ## 预设描述 根据 Novel AI 的说明,以下是默认预设的适用场景。 ### Erato * Golden Arrow - 一个全能型预设。 * Wilder - 词汇选择更加多样,重新生成时差异更大,更容易出错。 * Zany Scribe - 避免错误和重复。优先使用更复杂的词汇。 * Dragonfruit - 语言丰富复杂,很少重复。更容易出现错误和矛盾。 * Shosetsu - 为日语写作设计。也适用于英语。 ### Kayra * Asper - 用于创意写作。期待意想不到的转折。 * Carefree - 一个全能型预设 * Fresh-Coffee - 保持故事在轨道上。很好地处理指令。 * Pro_Writer - 模仿畅销小说的节奏和感觉 * Stelenes - 更倾向于选择合理的替代方案。重试时有更多变化。 * Tea_Time - 开始后会越来越好。 * Writers-Daemon - 极具想象力,有时过于丰富。 ### Clio * Edgewise - 能很好地处理各种生成风格 * Fresh Coffee - 保持故事在轨道上。 * Long-Press - 适用于创意散文。 * Talker Chat - 为聊天风格生成设计。 * Vingt-Un - 一个偏向散文的优秀通用默认预设。 ## 在 SillyTavern 中使用 NovelAI 的提示和常见问题 从其他 ST 后端 API 切换到 NovelAI 时,会出现许多常见问题和疑问。这些差异源于模型的训练目的不同。很可能你之前使用的是 OpenAI 或 Anthropic 模型(或模仿这些的本地模型),这些模型是围绕遵循用户指令而构建的。NovelAI 的模型纯粹围绕文本补全构建:它们不是将你的输入作为消息并制定响应,而是试图继续输入的提示。由于这种差异,适用于其他 API 的许多提示和常识可能不适用于 NAI。 ### 调整 NovelAI 的设置 在高级格式设置(A 图标)下: - 将 "Context Template" 设置为 "NovelAI" - 将 "Tokenizer" 设置为 "Best match" - 勾选 "Always add character's name to prompt" - 勾选 "Collapse Consecutive Newlines" - 在 "Instruct Mode" 下取消勾选 "Enabled" 在用户设置(带齿轮的人像)下: - 开启 "Swipes"(虽然不是 NAI 特有的,但非常有用,建议开启) ### 为 NovelAI 构建/调整角色卡 要为 NovelAI 优化你的角色卡,有两种推荐的方法来编写角色描述:散文式和属性式。 散文式简单到让人觉得不可能有效:"Sylpheed 是一个看起来年轻但实际上 900 岁的精灵。她身材矮小娇小,有着长长的白发,在她编成侧马尾的发辫处渐变成绿色,眼睛是十字形的祖母绿色。[...]" 没错,就是这样。只需用普通句子写出角色的外貌、行为等,AI 就会理解。 如果你不信任自己的写作能力或想要一个更有结构的方法,可以使用在 NovelAI 训练数据中存在的属性方法。这是一个简单的不同类型角色特征列表。以下是经过测试证明对 NovelAI 模型有效的可能属性: ``` Name: AKA: Type: character Setting: Nationality: Species: Gender: Age: Height: Weight: Appearance: Clothing: Attire: Personality: Mind: Mental: Likes: Dislikes: Sexuality: Speech: Voice: Abilities: Skills: Quote: Affiliation: Occupation: Reputation: Secret: Family: Allies: Enemies: Background: Description: Attributes: ``` "Type: character" 是用来告诉 AI 这是在描述一个角色(而不是位置、物品或其他类型的东西)。其余的属性是可选的,有些是重复的(例如,Personality、Mind 和 Mental 基本上意思相同),但这些都经过测试,与 NovelAI 的模型配合良好。填写与你的角色相关的属性即可。属性应该用小写字母书写,用逗号分隔,不需要在单词周围加引号。例如: ``` Skills: lockpicking, stealth, running away very fast ``` 推荐这些方法是因为它们存在于 NovelAI 的训练数据中,所以特别适合这个模型。 #### 示例角色卡 这里有几个专门为 NovelAI 制作的示例角色卡,展示了不同的创建方法。第一个角色卡 Valka 使用属性方法描述角色,而第二个角色卡 Eris 使用散文描述,并包含大量对话示例。
[![Valka](/static/Valka.png)](/static/Valka.png) [![Eris](/static/Eris.png)](/static/Eris.png)
#### 不应该做什么 大多数现有的角色卡格式都不太适合 NovelAI。它们可能会给你一些结果,甚至一些不错的结果,但存在很多问题。W++ 是最大的问题之一,它与 NovelAI 模型的训练内容完全不同,而且经常使用方括号/大括号/引号消耗了大量令牌,增加了卡片的大小但没有实际好处。 在现有的非 NovelAI 原生格式中,AliChat 最有可能有效,因为它依靠使用示例消息来同时传达角色信息和他们的语气,采用你希望 AI 输出的消息格式。 对于大多数其他格式,由于它们通常是列出特定角色的不同特征的方式,可以相当直接地转换为属性方法。 ### 我应该使用哪个模块? 可能是 No Module(无模块)。如果你希望角色说话更加华丽,Prose Augmenter 很有用,但要注意不要过度使用。Text Adventure 可能适用于文字冒险风格的角色卡/故事。 ### 不用 instruct 模块吗? 你可以在需要时调用 Instruct 模块。在消息中创建新行,并将指令放在大括号中,如:`{ CharName is offended by that seemingly innocuous statement }`(文本和括号之间的空格是 _必需的_)。这样做会自动让 AI 短暂切换到 Instruct 模块。你不会想一直使用 Instruct 模块,因为它往往比其他模块产生的输出创意性更低,只在你需要强烈引导 AI 朝特定方向发展时使用。 ### 为什么我的响应总是被截断? NovelAI 将响应长度限制在总共约 150 个令牌,即使你将滑块设置得更高。当达到滑块中的令牌数或 150 个(以较低者为准)时,它将生成最多 20 个额外的令牌,寻找停止序列或句子结尾,所以响应的有效限制是 170 个令牌,到达这个点时它就会停止,导致截断。 如果被截断,你可以选择继续选项(文本框左侧的三线菜单中)让角色继续他们的响应。 如果你经常想要超过 170 个令牌的响应,可以这样绕过限制: - 将响应长度保持在 150 个令牌。 - 在高级格式设置中启用 Auto-continue。 - 将 "Target length" 设置为所需长度。 这将链接多个生成以给你更长的消息,但如果模型决定停止,不能保证回复一定是所需长度的 100%。 ### 如何让机器人写出更长的响应? 阅读上面关于响应被截断的内容。这将帮助确保响应不会因为达到生成长度限制而过早截断。 如果你的响应没有被截断但仍然太短,很可能是"垃圾进垃圾出"的问题 - 如果你给模型不好的例子,它会产生不好的输出。如果角色卡没有对话示例或只有简短的对话示例,而且你发送给机器人的消息很短,模型会认为这是可接受的方式,响应也会很短。所以,写更长的示例对话和更长的消息给机器人。(你可以让 NovelAI 为你写一些示例对话,而不是自己写。) ### 如何让机器人停止替我说话? - 检查角色卡的第一条消息和示例对话是否包含角色替你采取行动 - 如果有,重写它们以去除替你行动的部分 - 确保勾选了 "Always add character's name to prompt" - 确保你当前使用的用户角色与聊天的其余部分相同。如果你更改了用户角色但没有改回(或没有将角色锁定到该聊天),通常用于阻止为你生成的规则将失效 - 在 Custom Stopping Strings 中添加 ["\n\{\{user\}\}:"](通常不需要,但有时有帮助) ### 为什么我的角色没有回应? 这可能有很多原因,所以我们需要检查几个地方: - 确保在高级格式设置中勾选了 "Always add character's name to prompt" - 检查是否有来自 API 的错误。虽然你可以使用 NAI 免费试用版的 SillyTavern,但一旦用完,就只会收到错误 - 检查 "Custom Stopping Strings" 中有什么 - 如果这些在响应开始时被生成,可能会过早截断 ### 我应该如何使用 Author's Note? 一般来说,你可能不应该使用。它被插入在上下文的非常靠近末尾的位置,使用 NAI 的模型时,它经常会压倒上下文中的其他所有内容。它主要是较旧、较弱的模型中的产物,当时更有必要使用。 ### 如何进行场景转换/时间跳跃? 将以下内容作为系统消息或在下一条消息开头的新行中: ``` *** [ 2 days later ] ``` 然后在下一行放置你的消息其余部分。方括号中的文本可以是时间跳跃、新位置或任何其他内容。"***"(有趣的是被称为 "dinkus")告诉 AI 场景已经改变,方括号中的文本为此提供更多上下文。 ### AI 一直重复特定词语/短语,该怎么办? 如上所述,你可以稍微提高重复惩罚滑块,但推得太远可能会使输出变得不连贯。 要更彻底地解决问题,回顾上下文,特别是最近的消息,删除重复的词语/短语。从上下文中删除它会让 AI 减少开始说它的理由。 ===== Usage/API_Connections/openai.md (https://sillytaverncn.net/usage/api-connections/openai/) ===== --- order: 20 route: /usage/api-connections/openai/ --- !!!success :beer: 推荐:DeepSeek Tavern Pro — 酒馆专属大模型 **专为 SillyTavern 酒馆角色扮演打磨的 AI 大模型**,零配置开箱即用。 - :fire: 基于 DeepSeek V4 Pro 专家微调,文学级写作质量 - :book: 100 万上下文窗口,长篇创作不丢失细节 - :art: 三档创作风格:自由创作 / 均衡 / 严谨 - :moneybag: **输入 3 元,输出 6 元**(每百万 token),缓存仅 0.3 元 - :package: 配 [一键启动器](https://launch.deepseektavern.com) 零依赖安装 - :card_index: [角色卡资源库](https://cards.deepseektavern.com) 上千张免费角色卡 :arrow_right: [立即注册 DeepSeek Tavern](https://deepseektavern.com) 获取 API Key !!! # 聊天补全 ## 特定来源的说明 !!!warning **重要!** 大多数 API 平台只允许你在创建时查看一次生成的 API key。如果你丢失了它,你需要生成一个新的 key。确保妥善保管! !!! ### OpenAI 使用 OpenAI 的开发者平台访问各种 OpenAI 模型,包括 gpt-4o、gpt-4.1、o3 等。 **如何获取 API key:** 1. 前往 [OpenAI](https://platform.openai.com/) 并登录。 2. 使用 "[View API keys](https://platform.openai.com/account/api-keys)" 选项创建一个新的 API key。 ### Claude Claude 是由 Anthropic 开发的 AI 模型系列。你可以通过 Anthropic 控制台访问 Claude 模型。 **如何获取 API key:** 1. 前往 [Anthropic Console](https://console.anthropic.com/) 并登录。 2. 使用 "[Get API Key](https://console.anthropic.com/settings/keys)" 部分创建一个新的 API key。 ### Mistral AI Mistral AI 是一个团队,以高科学标准和对开放性的关注开发开放和专有模型。你可以在本地运行他们的模型,或通过他们的 API 服务 La Plateforme 访问。 **如何获取 API key:** 1. 第一步是在 [La Plateforme](https://console.mistral.ai/) 上创建账户。 2. 完成后,你可以选择一个[计划](https://console.mistral.ai/billing/plans)并设置付款信息,或选择免费层。 3. 接下来,你可以创建你的 [API key](https://console.mistral.ai/api-keys/)。你可能需要等待几分钟,key 才会生效! ### DeepSeek DeepSeek Platform 通过 API 提供对最新 DeepSeek 模型的访问。它们提供一系列模型,包括 DeepSeek V3 和 DeepSeek R1。 **如何获取 API key:** 1. 在 [DeepSeek Platform](https://platform.deepseek.com/) 上注册。 2. 注册并充值账户后,你可以在 "[API keys](https://platform.deepseek.com/api_keys)" 部分创建 API key。 ### AI21 AI21 Labs 提供一系列 AI 模型,包括他们的旗舰 Jamba 系列。你可以通过 AI21 Studio API 访问他们的模型。 **如何获取 API key:** 1. 前往 [AI21 Studio](https://studio.ai21.com/) 并登录。 2. 导航到 "Settings => API Keys" 部分创建一个新的 API key。 ### Cohere Cohere 为各种任务提供一套 AI 模型,包括文本生成和 embeddings。你可以通过 Cohere API 访问他们的模型。 **如何获取 API key:** 1. 前往 [Cohere](https://cohere.com/) 并登录。 2. 在账户设置中导航到 "[API Keys](https://dashboard.cohere.com/api-keys)" 部分创建一个新的 API key。 ### Perplexity Perplexity AI 通过其 API 提供对在线启用的 Sonar 模型的访问,用于实时研究和信息检索。 官方入门指南:[Perplexity Quickstart](https://docs.perplexity.ai/getting-started/quickstart) **如何获取 API key:** 1. 前往 [Perplexity](https://perplexity.ai/) 并登录。 2. 前往 "[API billing](https://www.perplexity.ai/account/api/billing)" 部分购买 API 使用的 credits。 3. 在设置中导航到 "[API keys](https://www.perplexity.ai/account/api/keys)" 部分创建一个新的 API key。 ### Fireworks AI Fireworks AI 是一个高性能平台,提供对最先进的开源语言模型的快速、经济高效的访问。该平台提供具有 OpenAI 兼容 API 的无服务器部署,并支持高达 256,000 tokens 的 context 窗口。 **如何获取 API key:** 1. 前往 [Fireworks AI](https://fireworks.ai/) 并创建账户或登录。 2. 在账户设置中导航到 [API Keys 页面](https://app.fireworks.ai/settings/users/api-keys)。 3. 点击 "Create API key" 并提供一个描述性名称(例如,"SillyTavern")。 ## Electron Hub Electron Hub 是一个统一的 OpenAI 兼容平台,通过单个 API key 提供对来自多个供应商的模型的访问。 **如何获取 API key:** 1. 在 [Electron Hub](https://playground.electronhub.ai/console) 创建账户。 2. 从 **Console → API Keys** 页面生成 API key。 ## 自定义 OpenAI 兼容 endpoint !!!warning 重要的是要注意,我们不为你可能遇到的问题提供支持! 我们不保证与每个可能的 API endpoint 的兼容性! !!! !!! 如果你打算使用此功能来使用本地 endpoint,如 TabbyAPI、Oobabooga、Aphrodite 或任何类似的,你可能想要查看[内置兼容性](/Usage/API_Connections/index.md)。自定义 endpoint 功能主要用于与公开 OpenAI 兼容的 API Chat Completion endpoint 的其他服务和程序一起使用。 大多数 Text Completion API 支持比 OpenAI 标准允许的更多自定义选项。这些更多的自定义选项,如 Min-P sampler,对于 SillyTavern 用户来说可能值得查看,这可以大大提高生成的质量。 !!! 你可以为 Chat Completions 后端配置替代 endpoint。此自定义 endpoint 可以连接到任何支持通用 OpenAI API schema 的服务器。 兼容后端的示例包括: * [LM Studio](https://lmstudio.ai/) * [LiteLLM](https://www.litellm.ai/) * [LocalAI](https://localai.io/) ### 连接 要访问此功能: 1. 切换到 'Chat Completion' API 类型 2. 为 'Chat Completion Source' 选择 'Custom (OpenAI-compatible)' 输入自定义 endpoint URL 和 API key(如果需要)。例如,TabbyAPI 需要 API key 进行身份验证。 !!!tip **提示:** 如果你遇到连接问题,尝试在 endpoint URL 末尾添加 `/v1`。不要添加 `/chat/completions` 后缀。 !!! ### 选择模型 如果自定义 API 实现了 `/v1/models` endpoint 以提供可用模型列表,你可以从下拉列表中选择。否则,使用文本字段手动输入模型 ID。 勾选 'Bypass API status check' 以防止 SillyTavern 提醒你 API endpoint 无法正常工作。如果你的 API endpoint 工作正常但 SillyTavern 继续显示警告,请启用此选项。 点击 "Test Message" 通过向模型发送一个简单的提示来验证连接性。 ## Prompt 后处理 !!!warning **注意:** 当使用带 "no tools" 的后处理选项时,不支持 Tool Calling! !!! 某些 endpoint 可能对传入提示的格式施加特定限制,例如只需要一条系统消息或严格交替角色。 SillyTavern 提供内置提示转换器来帮助满足这些要求(从最少到最多限制): 1. None - 除非 API 严格要求,否则不应用显式处理 2. Merge consecutive messages from the same role 3. Semi-strict - 合并角色并只允许一条可选系统消息 4. Strict - 合并角色,只允许一条可选系统消息,并要求用户消息优先 5. Single user message - 将所有角色的所有消息合并为单个用户消息 Merge、semi-strict 和 strict 还会从提示中删除任何 tool calls,除非选择了 "with tools" 变体。这对于不支持 tool calling 且你现有的提示包含 tool calls 的 API 很有用。 除了"Custom OpenAI-compatible"之外,更少限制的选项对 SillyTavern 中实现的更多限制 endpoint 没有影响;Custom 可能会在无效请求时出错。 在 strict 模式下,如果在第一条助手消息之前不存在用户消息,则将插入 `config.yaml` 中的 `promptPlaceholder`,默认为"\[Start a new chat]"。 ===== Usage/API_Connections/self-hosted.md (https://sillytaverncn.net/usage/api-connections/self-hosted/) ===== --- order: 90 icon: desktop-download route: /usage/how-to-use-a-self-hosted-model/ --- # 自托管 AI 模型 !!! warning 本指南基于作者的个人经验和知识,并不是绝对真理。所有陈述都应该谨慎对待。如果您有任何更正或建议,请在 Discord 上联系我们或向 [SillyTavern 文档仓库](https://github.com/SillyTavern/SillyTavern-Docs)发送 PR。 !!! ## 简介 本指南旨在帮助您在自己的电脑上使用 SillyTavern 运行本地 AI(从现在开始,我们将使用正确的术语,称之为 LLM)。在询问技术支持问题之前,请先阅读本指南。 ### 哪些大语言模型最好? 这个问题无法回答,因为没有标准化的"最佳"衡量标准。社区在 Reddit 和 Discord 上有足够的资源和讨论,可以形成对首选/常用模型的一些看法。您的体验可能会有所不同。 ### 什么是最佳配置? 如果存在最佳或显而易见的设置,还需要配置吗?最佳配置是适合您的配置。这是一个反复试验的过程。 ## 硬件要求和方向 这是一个复杂的主题,所以我会坚持基本要点并进行概括。 * 您可以从互联网上下载数千个免费的 LLM,类似于 Stable Diffusion 有大量可用于生成图像的模型。 * 运行未经修改的 LLM 需要具有大量 VRAM(GPU 内存)的强大 GPU。比您能拥有的还要多。 * 可以通过使用 GPTQ 或 AWQ 等量化技术来压缩模型,从而减少 VRAM 要求。这使模型的能力略有下降,但大大减少了运行它所需的 VRAM。突然间,这让拥有 3080 等游戏 GPU 的人也能运行 13B 模型。虽然它不如未量化的模型好,但仍然不错。 * 更好的是:还存在一种称为 GGUF(以前称为 GGML)的模型格式和量化方法,它已成为没有强大 GPU 的普通用户的首选格式。这允许您完全不使用 GPU 就能运行 LLM。它只会使用 CPU 和 RAM。这比在 GPU 上使用 GPTQ/AWQ 运行 LLM 要慢得多(可能慢 15 倍),特别是在提示词处理期间,但模型的能力同样出色。然后 GGUF 创建者通过添加一个配置选项进一步优化了 GGUF,该选项允许拥有游戏级 GPU 的用户将模型的部分内容卸载到 GPU,使他们能够以 GPU 速度运行部分模型(注意,这不会减少 RAM 要求,它只会提高您的生成速度)。 * 有不同大小的模型,根据它们训练时使用的参数数量命名。您会看到像 7B、13B、30B、70B 等名称。您可以将这些视为模型的大脑大小。来自同一模型系列的 13B 模型将比 7B 更强大:它们在相同的数据上训练,但更大的大脑可以更好地保留知识并思考得更连贯。更大的模型也需要更多的 VRAM/RAM。 * 有几种量化程度(8 位、5 位、4 位等)。位数越低,模型退化越严重,但硬件要求也越低。因此,即使在性能较差的硬件上,您也可能能够运行所需模型的 4 位版本。甚至还有 3 位和 2 位量化,但在这一点上,您已经在浪费时间了。还有进一步的量化子类型,命名为 k_s、k_m、k_l 等。k_m 比 k_s 好,但需要更多资源。 * 上下文大小(您的对话在模型丢弃部分内容之前可以变得多长)也会影响 VRAM/RAM 要求。幸运的是,这是一个可配置的设置,允许您使用较小的上下文来减少 VRAM/RAM 要求。(注意:基于 Llama2 的模型的上下文大小是 4k。Mistral 宣传为 8k,但实际上是 4k。) * 2023 年的某个时候,NVIDIA 更改了他们的 GPU 驱动程序,如果您需要的 VRAM 超过 GPU 所拥有的,任务不会崩溃,而是会开始使用常规 RAM 作为备用。这会降低 LLM 的写入速度,但模型仍然可以工作并提供相同质量的输出。幸运的是,这种行为[可以禁用](https://nvidia.custhelp.com/app/answers/detail/a_id/5490)。 考虑到以上所有因素,硬件要求和性能完全取决于模型系列、模型类型、模型大小、量化方法等。 #### 模型大小计算器 您可以使用 [Nyx 的模型大小计算器](https://huggingface.co/spaces/NyxKrage/LLM-Model-VRAM-Calculator)来确定需要多少 RAM/VRAM。 记住,您想要运行可以适应您内存的最大、最少量化的模型,即不会导致[磁盘交换](https://serverfault.com/a/48487)。 ## 下载 LLM 要开始,您需要下载一个 LLM。找到和下载 LLM 最常见的地方是 HuggingFace。那里有数千个可用的模型。查找 GGUF 模型的好方法是查看 bartowski 的账户页面:。如果您不想要 GGUF,他会链接到原始模型页面,在那里您可能会找到该模型的其他格式。 在给定模型的页面上,您会找到一堆文件。 * 您可能不需要所有这些文件!对于 GGUF,您只需要 .gguf 模型文件(通常 4-11GB)。如果您找到多个大文件,通常都是同一模型的不同量化版本,您只需要选择一个。 * 对于 .safetensors 文件(可以是 GPTQ 或 AWQ 或 HF 量化或未量化),如果您在文件名中看到像 model-00001-of-00003.safetensors 这样的数字序列,那么您需要所有 3 个 .safetensors 文件 + 仓库中的所有其他文件(分词器、配置等)才能获得完整的模型。 * 截至 2024 年 1 月,Mixtral MOE 8x7B 被广泛认为是本地 LLM 的最新技术。如果您有 32GB 的 RAM 来运行它,一定要尝试一下。如果您的 RAM 少于 32GB,那么使用 Kunoichi-DPO-v2-7B,尽管它的大小较小,但一开始就表现出色。 ### 下载 Kunoichi-DPO-v2-7B 的步骤 我们将在本指南的其余部分使用 Kunoichi-DPO-v2-7B 模型。它是一个基于 Mistral 7B 的出色模型,只需要 7GB RAM,并且表现远超其规模。注意:Kunoichi 使用 Alpaca 提示。 * 前往 * 点击"Files and versions"。您会看到几个文件的列表。这些都是同一个模型,但提供了不同的量化选项。点击文件"kunoichi-dpo-v2-7b.Q6_K.gguf",这给我们一个 6 位量化。 * 点击"download"按钮。您的下载应该开始了。 ### 如何识别模型类型 像 TheBloke 这样优秀的模型上传者会给出描述性的名称。但如果他们没有: * 文件名以 .gguf 结尾:GGUF CPU 模型(显然) * 文件名以 .safetensors 结尾:可以是未量化的,或 HF 量化的,或 GPTQ,或 AWQ * 文件名是 pytorch-***.bin:与上面相同,但这是一个较旧的模型文件格式,允许在加载模型时执行任意 Python 脚本,被认为是不安全的。如果您信任模型创建者,或者别无选择,您仍然可以使用它,但如果有选择,请选择 .safetensors。 * 存在 config.json?查看它是否有 quant_method。 * q4 表示 4 位量化,q5 是 5 位量化,等等 * 您看到像 -16k 这样的数字?那是增加的上下文大小(即您的对话在模型忘记聊天开始之前可以变得多长)!注意,更高的上下文大小需要更多的 VRAM。 ## 安装 LLM 服务器:Oobabooga 或 KoboldAI 现在 LLM 在您的电脑上了,我们需要下载一个工具,作为 SillyTavern 和模型之间的中间人:它将加载模型,并将其功能作为本地 HTTP Web API 暴露出来,供 SillyTavern 使用,就像 SillyTavern 与 OpenAI GPT 或 Claude 等付费网络服务通信一样。您使用的工具应该是 KoboldAI 或 Oobabooga(或其他兼容工具)。 本指南涵盖了这两个选项,您只需要一个。 !!! warning 如果您在 Docker 上托管 SillyTavern,请使用 **http://host.docker.internal:** 而不是 **http://127.0.0.1:**。这是因为 SillyTavern 从运行在 Docker 容器中的服务器连接到 API 端点。Docker 的网络栈与主机的网络栈是分开的,因此回环接口不共享。 !!! ### 下载和使用 KoboldCpp(无需安装,GGUF 模型) 1. 访问 https://koboldai.org/cpp,您将看到最新版本和各种可下载的文件。 在撰写本文时,他们列出的最新 CUDA 版本是 cu12,这将在现代 Nvidia GPU 上运行最好,如果您有较旧的 GPU 或不同品牌,您可以使用常规的 koboldcpp.exe。如果您有旧 CPU,KoboldCpp 可能会在您尝试加载模型时崩溃,在这种情况下,尝试 _oldcpu 版本看看是否能解决您的问题。 2. KoboldCpp 不需要安装,一旦您启动 KoboldCpp,您就可以使用"Model"字段旁边的"Browse"按钮立即选择您的 GGUF 模型,如上面链接的模型。 3. 默认情况下,KoboldCpp 的最大上下文为 4K,即使您在 SillyTavern 中设置更高,如果您希望以更高的上下文运行模型,请确保在启动模型之前调整此屏幕上的上下文滑块。请记住,更多的上下文大小意味着更高的(视频)内存要求,如果您设置得太高或加载的模型对您的系统来说太大,KoboldCpp 将自动开始使用您的 CPU 来处理无法放入 GPU 的层,这将慢得多。 4. 点击"Launch",如果一切顺利,将打开一个新的网页,显示 KoboldAI Lite,您可以在那里测试一切是否正常工作。 5. 打开 SillyTavern 并点击 API 连接(顶部栏中的第二个按钮) 6. 将 API 设置为"文本补全",API 类型设置为 KoboldCpp。 7. 将服务器 URL 设置为 或 KoboldCpp 给您的链接(如果它不在同一系统上运行)(您可以激活 KoboldCpp 的远程隧道模式以获取可从任何地方访问的链接)。 8. 点击连接。它应该成功连接并检测到 kunoichi-dpo-v2-7b.Q6_K.gguf 作为模型。 9. 与角色聊天以测试它是否工作。 ### 优化 KoboldCpp 速度的提示 1. Flash Attention 将帮助减少内存要求,根据您的系统,它可能更快或更慢,并且将允许您在 GPU 上放置比默认更多的层。 2. KoboldCpp 会为其他软件留出一些空间,当它猜测层以防止问题时,如果您打开的程序很少,并且无法将模型完全放入 GPU,您可能可以添加一些额外的层。 3. 如果模型对上下文大小使用了太多内存,您可以通过量化 KV 来减少这个问题。这将降低输出质量,但可以帮助您在 GPU 上放置更多层。要做到这一点,您需要转到 KoboldCpp 中的 Tokens 标签,然后禁用 Context Shifting 并启用 Flash Attention。这将解锁量化 KV 缓存滑块,数字越低意味着模型的内存/智能越少。 4. 在较慢的系统上运行 KoboldCpp,处理提示词需要很长时间?当您避免使用知识库、随机化或其他动态更改输入的功能时,Context Shifting 效果最好。保持启用 context shifting,KoboldCpp 将帮助您避免长时间的重新处理。 ### 安装 Oobabooga 这是一个更正确/傻瓜式的安装程序: 1. git clone (或在浏览器中将他们的仓库下载为 .zip,然后解压) 2. 运行 start_windows.bat 或您的操作系统对应的文件 3. 当被问及时,选择您的 GPU 类型。即使您打算使用 GGUF/CPU,如果您的 GPU 在列表中,现在就选择它,因为它将给您一个称为 GPU 分片的速度优化选项(无需从头重新安装)。如果您没有游戏级 dGPU(NVIDIA、AMD),选择 None。 4. 等待安装完成 5. 将 kunoichi-dpo-v2-7b.Q6_K.gguf 放在 text-generation-webui/models 中 6. 打开 text-generation-webui/CMD_FLAGS.txt,删除里面的所有内容并写入:--api 7. 重启 Oobabooga 8. 访问 。它是否加载了一个 FastAPI 页面?如果没有,您在某个地方出错了。 ### 在 Oobabooga 中加载我们的模型 1. 在浏览器中打开 2. 点击 Model 标签 3. 在下拉菜单中,选择我们的 Kunoichi DPO v2 模型。它应该已经自动选择了 llama.cpp 加载器。 4. (可选)我们之前多次提到"GPU 卸载":那就是这个页面上的 n-gpu-layers 设置。如果您想使用它,在加载模型之前设置一个值。作为基本参考,将其设置为 30 对于 13B 及以下的模型使用不到 6GB VRAM。(它随模型架构和大小而变化) 5. 点击 Load ### 配置 SillyTavern 与 Oobabooga 通信 1. 点击 API 连接(顶部栏中的第二个按钮) 2. 将 API 设置为"文本补全" 3. 将 API 类型设置为"默认(Oobabooga)" 4. 将服务器 URL 设置为 5. 点击连接。它应该成功连接并检测到 kunoichi-dpo-v2-7b.Q6_K.gguf 作为模型。 6. 与角色聊天以测试它是否工作 ## 结论 恭喜,您现在应该有一个正常工作的本地 LLM 了。 ===== Usage/API_Connections/tabbyapi.md (https://sillytaverncn.net/usage/api-connections/tabbyapi/) ===== --- route: /usage/api-connections/tabbyapi/ --- # TabbyAPI 一个基于 FastAPI 的应用程序,使用 Exllamav2 后端生成文本,支持 Exl2、GPTQ 和 FP16 模型。 * [GitHub](https://github.com/theroyallab/tabbyAPI) ### 快速开始 1. 按照官方 TabbyAPI GitHub 上的[安装说明](https://github.com/theroyallab/tabbyAPI/wiki/01.-Getting-Started)进行操作。 2. [创建您的 config.yml](https://github.com/theroyallab/tabbyAPI/wiki/02.-Server-options) 来设置您的模型路径、默认模型、序列长度等。如果您愿意,可以忽略大部分(如果不是全部)这些设置。 3. 启动 TabbyAPI。如果成功,您应该看到类似这样的内容: ![TabbyAPI 终端](/static/tabby-terminal.png) 4. 在 SillyTavern 的文本补全 API 下,选择 TabbyAPI。 5. 从 TabbyAPI 终端复制您的 API 密钥到"Tabby API key",并确保您的"API URL"正确(默认应该是 `http://127.0.0.1:5000`)。 如果您正确完成了所有操作,您应该在 SillyTavern 中看到类似这样的内容: ![TabbyAPI SillyTavern](/static/tabby-config.png) 现在您可以使用 TabbyAPI 进行聊天了! ### TabbyAPI 加载器 TabbyAPI 的开发者创建了一个官方扩展,可以直接从 SillyTavern 加载/卸载模型。安装很简单: 1. 在 SillyTavern 中,点击扩展标签并导航到"下载扩展和资源"。 2. 将 `https://raw.githubusercontent.com/theroyallab/ST-repo/main/index.json` 复制到"资源 URL"中,并点击右侧的插头按钮。 3. 您应该看到类似这样的内容。点击 Tabby Loader 旁边的下载按钮。 ![Tabby 加载器](/static/tabby-assets.png) 4. 如果安装成功,您应该在屏幕顶部看到一个绿色的弹出消息。在扩展标签下,导航到 TabbyAPI 加载器,并将您的管理员密钥从 TabbyAPI 终端复制到"管理员密钥"中。 5. 点击"模型选择"旁边的刷新按钮。当您点击它下面的文本框时,您应该看到模型目录中的所有模型。 ![Tabby 加载器扩展](/static/tabby-loader.png) 现在您可以直接从 SillyTavern 加载和卸载您的模型了! ### 支持 还需要帮助?访问 [TabbyAPI GitHub](https://github.com/theroyallab/tabbyAPI) 获取开发者官方 Discord 服务器的链接,并[阅读 wiki](https://github.com/theroyallab/tabbyAPI/wiki/1.-Getting-Started)。 ===== Usage/Characters/Author's-Note.md (https://sillytaverncn.net/usage/characters/author's-note/) ===== --- order: 50 route: /usage/core-concepts/authors-note/ --- # 作者注释 ## 这是什么? 作者注释是一个强大的工具,用于自定义 AI 回应,它可以在您想要的任何位置和频率将一段文本插入到提示词中。 ## 使用方法 作者注释可以在聊天输入栏左侧的选项菜单中找到。 | 选项菜单 | 作者注释面板 | |---------------------------------------|----------------------------------------| | ![](/static/extensions/note-menu.png) | ![](/static/extensions/note-panel.png) | ## 配置作者注释 ### 特定聊天的作者注释 作者注释面板顶部的框包含当前聊天的作者注释。 **此框的内容不会自动转移到任何新的聊天中。** ### 放置选项 #### 场景之后 这会将作者注释放在靠近上下文顶部的位置,位于角色定义的"场景"部分之后。如果没有指定场景,它将被放在角色定义的最后部分之后,示例消息之前。 #### 聊天中 这会将作者注释放在指定深度的聊天历史中。 深度 0 = 放在聊天历史的最末端。 深度 4 = 放在最近 3 条聊天历史消息之前,使其成为聊天历史中的第 4 个实体。 _作者注释越接近提示词底部,对下一个 AI 回应的影响就越大。_ ### 插入频率 这是您希望作者注释被包含在聊天中的频率。 频率 0 = 作者注释永远不会被插入。 频率 1 = 作者注释将在每个用户输入提示词中插入。 频率 4 = 作者注释将在每第 4 个用户输入提示词中插入。 ### 默认作者注释 面板底部的框包含默认作者注释,它将应用于每个新的聊天。 ## 常见用例 ### 提醒 AI 回应格式 作者注释可用于指定 AI 应如何写其回应。 - [您的下一个回应必须是 300 个 token 长度。] - [用爱伦·坡的风格写下一个回复] - [使用 markdown 斜体表示未说出的动作,使用引号表示说出的话。] ### 强化指令 - [记住您在这次聊天开始时收到的指令。] ### 作为临时世界信息、角色倾向或非指令模型的指令 - [\{\{char\}\} 在图书馆里] - [\{\{user\}\} 腿上有一处新伤,所以无法逃跑。] - [\{\{char\}\} 无法说话,必须使用手势交流。] ===== Usage/Characters/characterdesign.md (https://sillytaverncn.net/usage/characters/characterdesign/) ===== --- order: 100 route: /usage/core-concepts/characterdesign/ templating: false --- # 角色设计 ## 角色描述 用于添加 AI 应该知道的角色描述和其他信息。这将始终出现在提示词中,所以所有重要的事实都应该包含在这里。 例如,您可以添加关于行动发生的世界的信息,并描述您正在扮演的角色的特征。 它可以是任何长度(无论是 200 还是 2000 个 token)并以任何风格格式化(自由文本、W++、对话风格等)。 ### 方法和格式 角色格式化方法是一个复杂的主题,超出了本文档页面的范围。 推荐的经过测试或依赖于 SillyTavern 功能的指南: * Trappu 的 PLists + Ali:Chat 指南: * AliCat 的 Ali:Chat 指南: * kingbri 的简约指南: ## 角色 token **简而言之:如果您使用的 AI 模型的上下文 token 限制为 2048,那么您的 1000 token 角色定义会将 AI 的"记忆"减半。** 为了说明这一点,一个好的 AI 的优质回应很容易达到 200-300 个 token。在这种情况下,AI 只能"记住"大约 3 次对话交流的聊天历史。 ### 为什么我的角色的 token 计数器变红了? 当我们看到您的角色在其定义中的 token 超过了模型定义的上下文长度的一半时,我们会为您突出显示它,因为这可能会降低 AI 提供愉快对话的能力。 ### 如果我的角色有太多 token 会发生什么? 不用担心 - 它不会破坏任何东西。最坏的情况是,如果角色的永久 token 太多,这仅意味着上下文中留给其他内容的空间会更少(见下文)。 这唯一可能产生的负面影响是 AI 的"记忆"会更少,因为它可以处理的聊天历史更少。 这是因为每个 AI 模型都有一次可以处理的上下文量的限制。 ## "上下文"? 这是每次您要求 AI 生成回应时发送给它的信息: * 角色定义 * 聊天历史 * 作者注释 * 特殊格式字符串 * [方括号命令] SillyTavern 会在发送信息给 AI 模型之前自动计算分配可用上下文 token 的最佳方式。 ### 什么是角色的"永久 Token"? 这些内容将始终在每次生成请求时发送给 AI: * 角色名称(保持名称简短!在每条角色消息的开头发送) * 角色描述框 * 角色个性框 * 场景框 ### 角色定义的哪些部分不是永久的? * 第一条消息框 - 仅在聊天开始时发送一次。 * 示例消息框 - 仅保留到聊天历史填满上下文(可选择强制保留在上下文中) ### 流行 AI 模型的上下文 Token 限制 * LLaMA 3 及其微调版本 - 8192 * OpenAI GPT-4 - 最高 128k * Anthropic 的 Claude - 200k(Claude 3)或 100k(Claude 2) * NovelAI - 8192(Erato 和 Kayra,Opus 级别;Clio,所有级别),6144(Kayra,Scroll 级别),或 3072(Kayra,Tablet 级别) ## 个性概述 简短的个性描述。 示例: * `开朗,狡黠,挑逗` * `阿库娅喜欢什么都不做,也喜欢喝醉` ## 第一条消息 第一条消息是一个重要的内容,它确切地设定了角色将如何以及以什么风格进行交流。 角色的第一条消息应该很长,这样之后角色回应很短消息的可能性就会更小。 您也可以使用星号 ** 来描述角色的动作。 例如: ```txt *我注意到你进来了,我走过去直接站在你面前* 欢迎。很高兴在这里见到你。*我带着一个露齿的得意阳光笑容直视着你的眼睛说* 是什么风把你... ``` ## 对话示例 描述角色如何说话。在每个示例之前,您需要添加 \ 标签。只有在上下文中有空闲空间时才会插入示例对话块,并且会按块从上下文中推出。\ 不会出现在提示词中,因为它只是一个标记 - 它将被文本补全 API 的高级格式设置中的"示例分隔符"和聊天补全 API 的"新示例聊天"实用程序提示词的内容替换。 * 使用 \{\{char\}\} 代替角色名称。 * 使用 \{\{user\}\} 代替用户名称。 示例: ```txt {{user}}: 嗨,阿库娅,我听说你喜欢在酒馆消磨时间。 {{char}}: *兴奋地* 哦天哪,是的!我就是喜欢在酒馆消磨时间!和所有冒险者聊天,听他们讲述刺激的冒险故事真是太有趣了!你是? {{user}}: 我是新来的,我想请教你一些建议。 {{char}}: *咯咯笑* 哦,建议!我喜欢给建议!作为感谢,请我喝一杯吧!*向酒保打手势* {{user}}: 你好 {{char}}: *兴奋地* 你好啊,亲爱的!你是阿克塞尔的新人吗?别担心,我,水之女神阿库娅在这里帮助你!你需要任何帮助吗?而且我要说,我今天看起来简直光彩照人!*摆出姿势,用小狗般的眼神看着你* ``` ## 场景 对话的情境和背景。 ## 收藏角色 将角色标记为收藏,通过选择"收藏"排序选项可以在侧边菜单栏中快速筛选。收藏的角色在列表中有金色高亮显示。这也会使角色头像出现在快速切换区域(如果在用户设置中启用)。 ===== Usage/Characters/chatfilemanagement.md (https://sillytaverncn.net/usage/characters/chatfilemanagement/) ===== --- order: 80 route: /usage/core-concepts/chatfilemanagement/ --- # 聊天文件管理 本页描述了管理 AI 聊天文件的各种方法。 !!! info 注意 这些选项中的一些可以在底部左侧选项菜单中的"管理聊天文件"对话框中找到。 !!! ## 单人聊天与群组聊天 使用角色卡片最简单的方式是单人聊天;只需点击他们的卡片并开始聊天。 一旦您有了几个角色卡片,您也可以使用"创建新聊天群组"按钮来创建包含多个角色的[群组聊天](/Usage/Characters/groupchats.md),这些角色将相互交流并与您互动。 ## 聊天导入 **将 Character.AI 的聊天导入到 SillyTavern。** 要导入 Character.AI 的聊天和机器人,请使用 CAI Tools 浏览器扩展:[https://github.com/irsat000/CAI-Tools](https://github.com/irsat000/CAI-Tools)。 其他可以导入聊天的程序和工具包括: * TavernAI(原版): * Text Generation WebUI (oobabooga): * Agnai: * KoboldAI Lite: * RisuAI: ## 导出为 .jsonl 点击"管理聊天文件"时,聊天文件列表中的每个条目都有一个按钮,可以将其导出为可以原样重新导入的格式。使用此功能来共享或迁移聊天,包括所有元数据(但不包括图像和文件附件)。 如果您注重隐私,请务必检查导出的 JSONL 文件并删除任何您不想共享的内容。 ## 导出为 .txt 您也可以使用"将聊天下载为纯文本文档"按钮导出简化的纯文本版本。由于失去了重要的元数据,它不能再次导入! ## 检查点 "检查点"是当前聊天的克隆,它们会复制给定聊天中直到某个点的所有消息,并存储到源的链接(通过聊天文件名)。 从每条聊天消息右侧的三个点按钮,您有两种创建检查点的方式: * "创建分支"将克隆当前聊天直到该消息并切换到它 * "创建检查点"将克隆当前聊天直到该消息,询问名称并创建它,但不会切换到它 您可以将它们大致理解为浏览器中的"在新标签页中打开链接"和"在后台新标签页中打开链接"。 您可以通过点击消息文本框左侧的汉堡菜单按钮,然后点击"返回父聊天"从检查点返回到父聊天。 ## 重命名聊天 默认情况下,聊天文件会以它们开始的日期和时间命名。 您可以通过点击铅笔图标并输入新名称来更改这个。 请注意,这将破坏检查点到该聊天的链接(因为它们是通过聊天文件名链接的)。 ===== Usage/Characters/data-bank.md (https://sillytaverncn.net/usage/characters/data-bank/) ===== --- order: 30 route: /usage/core-concepts/data-bank/ tags: [ vector storage, RAG, retrieval-augmented generation, vectors, documents, files, attachments, ] --- # 数据库(RAG) 检索增强生成(RAG)是一种为 LLM 提供外部知识来源的技术。它通过访问模型训练数据之外的信息来帮助提高 AI 回答的准确性。 SillyTavern 提供了一套工具,用于从多种来源构建多用途知识库,以及在 LLM 提示词中使用收集的数据。 ## 访问数据库 内置的聊天附件扩展(在 1.12.0 及更高版本中默认包含)在"魔法棒"菜单中添加了一个新选项 - 数据库。这是您管理 SillyTavern 中用于 RAG 的文档的中心。 ## 关于文档 数据库存储文件附件,也称为文档。文档分为三个可用范围。 1. 全局附件 - 在每个聊天中都可用,无论是单人还是群组。 2. 角色附件 - 仅对当前选择的角色可用,包括他们在群组中回复时。_附件保存在本地,不会随角色卡片导出!_ 3. 聊天附件 - 仅在当前打开的聊天中可用。聊天中的每个角色都可以从中获取信息。 !!! info 注意 虽然不是数据库的正式组成部分,但您甚至可以将文件附加到单个消息。使用"魔法棒"菜单中的附加文件选项,或消息操作行中的回形针图标。 !!! 什么可以成为文档?实际上任何可以用纯文本形式表示的内容! 示例包括但不限于: - 本地文件(书籍、科学论文等) - 网页(维基百科、文章、新闻) - 视频转录 各种扩展和插件也可以提供新的方式来收集和处理数据,下面会详细介绍。 ## 数据来源 要将文档添加到任何范围,点击"添加"并选择一个可用的来源。 ### 记事本 从头创建文本文件,或编辑现有附件。 ### 文件 从您的计算机硬盘上传文件。SillyTavern 为常见文件格式提供内置转换器: - PDF(仅文本) - HTML - Markdown - ePUB - TXT 您也可以附加任何带有非标准扩展名的文本文件,如 JSON、YAML、源代码等。如果所选文件类型没有已知的转换方式,并且文件无法解析为纯文本文档,文件上传将被拒绝,这意味着不允许原始二进制文件。 !!! info 注意 导入 Microsoft Office(DOCX、PPTX、XLSX)和 LibreOffice 文档(ODT、ODP、ODS)需要安装并加载[服务器插件](https://github.com/SillyTavern/SillyTavern-Office-Parser)。有关安装说明,请参阅插件的 README 页面。 !!! ### 网页 通过 URL 从网页抓取文本。然后通过 [Readability](https://github.com/mozilla/readability) 库处理 HTML 文档以提取可用文本。 某些 Web 服务器可能会拒绝获取请求,受 Cloudflare 保护,或严重依赖 JavaScript 来运行。如果您遇到任何特定网站的问题,请通过网络浏览器手动下载页面并使用文件上传器附加它。 ### YouTube 通过 ID 或 URL 下载 YouTube 视频的转录文本,可以是创作者上传的或由 Google 自动生成的。某些视频可能已禁用转录,同时由于需要登录,无法解析年龄限制视频。 脚本以视频的默认语言加载。您也可以选择指定两个字母的语言代码,尝试获取特定语言的转录。此功能并非总是可用,可能会失败,因此请谨慎使用。 ### 网页搜索 !!! info 注意 此来源需要安装并正确配置[网页搜索](/extensions/WebSearch.md)扩展。有关详细信息,请参阅链接页面。 !!! 执行网页搜索并从搜索结果页面下载文本。这类似于网页来源但完全自动化。将从扩展设置中继承所选搜索引擎,因此请提前设置。 首先,指定搜索查询、要访问的最大链接数,以及输出类型:一个组合文件(根据扩展规则格式化)或每个页面一个单独的文件。您也可以选择保存页面摘要。 ### Fandom !!! info 注意 此来源需要安装并加载[服务器插件](https://github.com/SillyTavern/SillyTavern-Fandom-Scraper)。有关安装说明,请参阅插件的 README 页面。 !!! 通过 ID 或 URL 从 [Fandom](https://www.fandom.com/) wiki 抓取文章。由于某些 wiki 非常大,使用过滤正则表达式限制范围可能会有帮助,它将针对文章标题进行测试。如果没有提供过滤器,则所有页面都将被导出。您可以将它们保存为每个页面的单独文件,或合并为一个文档。 ### Bronie 解析器扩展(第三方) !!! warning 注意 此来源来自第三方,与 SillyTavern 团队**无关**。此来源需要您安装 Bronya Rand 的 [Bronie 解析器扩展](https://github.com/Bronya-Rand/Bronie-Parser-Extension)以及需要解析器工作的服务器插件。 !!! Bronya Rand 的 Bronie 解析器扩展允许使用第三方抓取器,如米哈游/HoYoverse 的 [HoYoLab](https://wiki.hoyolab.com) 到 SillyTavern,类似于其他数据来源。 目前,Bronya Rand 的 Bronie 解析器扩展支持以下内容: - 米哈游/HoYoverse 的 HoYoLab(用于原神/崩坏:星穹铁道)通过 [HoYoWiki-Scraper-TS](https://github.com/Bronya-Rand/HoYoWiki-Scraper-TS) 首先,按照其[安装指南](https://github.com/Bronya-Rand/Bronie-Parser-Extension?tab=readme-ov-file#installation)安装 Bronya Rand 的 Bronie 解析器扩展,并在 SillyTavern 中安装支持的服务器插件。重启 SillyTavern 并进入_数据库_菜单。点击`+ 添加`,您应该会看到您最近安装的抓取器已添加到可能的信息来源列表中。 ## 向量存储 好的,您已经为您的特定主题建立了一个不错且全面的信息库。接下来呢? 要将文档用于 RAG,您需要使用兼容的扩展,它将相关数据插入到 LLM 提示词中。 向量存储,它与 SillyTavern 捆绑在一起,是这种扩展的参考实现。它使用嵌入(也称为向量)来搜索与您正在进行的聊天相关的文档。 !!! info 有趣的事实 1. 嵌入是抽象表示一段文本的数字数组,由专门的语言模型生成。更相似的文本在它们各自的向量之间有更短的距离。 2. 向量存储扩展使用 [Vectra](https://github.com/Stevenic/vectra) 库来跟踪文件嵌入。它们存储在用户数据目录的 `/vectors` 文件夹中的 JSON 文件中。每个文档在内部由其自己的索引/集合文件表示。 !!! 由于向量功能默认是禁用的,您需要打开扩展面板(顶部栏上的"堆叠立方体"图标),然后导航到"向量存储"部分,并在"文件向量化设置"下勾选"为文件启用"复选框。 向量存储本身不生成任何向量,您需要使用兼容的嵌入提供者。 ## 向量提供者 ### 本地 这些来源是免费且无限制的,使用您的 CPU/GPU 计算嵌入。 1. 本地(Transformers)- 在 Node 服务器上运行。SillyTavern 将自动从 HuggingFace 下载兼容的 ONNX 格式模型。默认模型:[jina-embeddings-v2-base-en](https://huggingface.co/Cohee/jina-embeddings-v2-base-en)。 2. Extras - 使用 SentenceTransformers 加载器在 [Extras API](https://github.com/SillyTavern/SillyTavern-extras) 下运行。默认模型:[all-mpnet-base-v2](https://huggingface.co/sentence-transformers/all-mpnet-base-v2)。 3. Ollama - 从 获取。在 API 连接菜单中设置 API URL(在文本补全下,默认:`http://localhost:11434`)。必须先下载兼容的模型,然后在扩展设置中设置其名称。示例模型:[mxbai-embed-large](https://ollama.com/library/mxbai-embed-large)。可选择勾选选项以将模型保持在内存中。 4. llama.cpp 服务器 - 从 [ggerganov/llama.cpp](https://github.com/ggerganov/llama.cpp) 获取并使用 `--embedding` 标志运行服务器可执行文件。从 HuggingFace 加载兼容的 GGUF 嵌入模型,例如 [nomic-ai/nomic-embed-text-v1.5-GGUF](https://huggingface.co/nomic-ai/nomic-embed-text-v1.5-GGUF)。 5. vLLM - 从 [vllm-project/vllm](https://github.com/vllm-project/vllm) 获取。首先在 API 连接菜单中设置 API URL 和 API 密钥。 ### API 来源 所有这些来源都需要相应服务的 API 密钥,通常有使用成本,但一般来说计算嵌入的成本相当低。 1. OpenAI 2. Cohere 3. Google MakerSuite 4. TogetherAI 5. MistralAI 6. NomicAI !!! warning 警告 嵌入只有在使用生成它们的相同模型检索时才可用。更改嵌入模型或来源时,建议清除并重新计算文件向量。 !!! ## 向量化设置 在选择了嵌入提供者之后,不要忘记配置其他设置,这些设置将定义处理和检索文档的规则。 !!! info 注意 附件的分割、向量化和信息检索需要一些时间。虽然文件的初始摄取可能需要一段时间,但 RAG 搜索查询通常足够快,不会造成明显的延迟。 !!! ### 消息附件 这些设置控制直接附加到消息的文件。 适用以下规则: 1. 只有适合 LLM 上下文窗口的消息才能检索其附件。 2. 当向量存储扩展被禁用时,文件附件及其附带的消息将完全插入到提示词中。 3. 当启用文件向量化时,文件将被分割成块,只有最相关的部分会被插入,节省上下文空间并让模型保持专注。 - 大小阈值(KB)- 设置分块分割阈值。只有大于指定大小的文件才会被分割。 - 块大小(字符)- 设置单个块的目标大小(以文本字符为单位,而不是模型 token!)。 - 块重叠(%)- 设置相邻块之间共享的块大小百分比。这允许块之间更平滑的过渡,但也可能引入一些冗余。 - 检索块数 - 设置要检索的最相关文件块的最大数量。它们将按原始顺序插入。 ### 数据库文件 这些设置控制数据库文档的处理方式。 适用以下规则: 1. 当文件向量化被禁用时,数据库不会被使用。 2. 否则,当前范围内的所有可用文档(见上文)都会被考虑用于查询。只有所有文件中最相关的块会被检索。同一文件的多个块按原始顺序插入。 3. 插入的块将在适应聊天消息之前保留部分上下文。 - 大小阈值(KB)- 设置分块分割阈值。只有大于指定大小的文件才会被分割。 - 块大小(字符)- 设置单个块的目标大小(以文本字符为单位,而不是模型 token!)。 - 块重叠(%)- 设置相邻块之间共享的块大小百分比。这允许块之间更平滑的过渡,但也可能引入一些冗余。 - 检索块数 - 设置要检索的文件块的最大数量。这个限额在所有文件之间共享。 - 注入模板 - 定义如何将检索到的信息插入到提示词中。您可以使用特殊的 \{\{text\}\} 宏来指定检索文本的位置,以及任何其他宏。 - 注入位置 - 设置在哪里插入提示词注入。适用与作者注释和世界信息相同的规则。 ### 共享设置 - 查询消息 - 用于查询文档块的最新聊天消息数量。 - 分数阈值 - 调整以允许根据块的相关性分数(0 - 完全不匹配,1 - 完全匹配)筛选块的检索。较高的值允许更准确的检索并防止完全随机的信息进入上下文。合理的值范围在 0.2(更宽松)到 0.5(更专注)之间。 - 包含在世界信息扫描中 - 如果您希望注入的内容激活知识库条目,请勾选。 - 向量化全部 - 强制摄取所有未处理文件的嵌入。 - 清除向量 - 清除文件嵌入,允许重新计算它们的向量。 !!! info 注意 有关"聊天向量化"设置,请参阅[聊天向量化](/extensions/Chat-vectorization.md)。 !!! ## 结论 恭喜!借助 RAG 技术,您的聊天体验已得到显著提升。其潜力无限,全凭您的创意发挥。大胆尝试,勇于探索,让您的聊天体验更上一层楼! ===== Usage/Characters/groupchats.md (https://sillytaverncn.net/usage/characters/groupchats/) ===== --- order: 70 route: /usage/core-concepts/groupchats/ --- # 群组聊天 ### 回复顺序策略 决定群组聊天中的角色如何被选择进行回复。 ### 手动 您可以从菜单中或使用 `/trigger` 命令手动选择要回复的角色。被选中的群组成员将是唯一回复的角色。用户消息不会自动触发任何回复。在用户输入为空的情况下触发生成将随机选择一个未静音的群组成员进行回复。 #### 自然顺序 尝试模拟真实人类对话的流程。算法如下: 1. 从聊天中的最后一条消息中提取群组成员名字的提及。 只有完整的词才会被识别为提及!如果您的角色名字是"御坂美琴",他们只会对"御坂"或"美琴"做出回应,但永远不会对"御"、"炮姐"等做出回应。 除非启用了"允许自我回应"设置,否则角色不会对自己消息中提到的名字做出回应! 2. 角色根据"健谈程度"因素被激活。 健谈程度定义了在没有被提及时角色说话的频率。在角色编辑器的"高级定义"屏幕中调整此值。滑块值在线性范围内从 **0% / 害羞**(角色除非被提及否则不说话)到 **100% / 健谈**(角色总是回复)。新角色的默认值是 50% 几率。 3. 随机选择一个角色。 如果在前面的步骤中没有角色被激活,则随机选择一个发言者,忽略所有其他条件。 #### 列表顺序 角色根据它们在群组成员列表中的顺序被选择。不适用其他规则。 ### 群组生成处理模式 此设置决定如何处理群组聊天成员的角色信息。无论选择什么,群组聊天历史始终在所有成员之间共享。 #### 切换角色卡片 默认模式。每次生成消息时,只有当前发言者的角色卡片信息会包含在上下文中。 #### 合并角色卡片 所有群组成员的信息按照他们在列表中的顺序合并成一个联合提示词。这在不希望改变大块上下文的情况下很有帮助,例如使用 llama.cpp 提示词缓存时。 此模式有两个子模式(您必须选择其中一个): * 包含静音 - 静音的角色将始终包含在联合提示词中。 * 排除静音 - 如果静音的角色不是当前发言者,则不会被包含。 以下字段会被合并: 1. 描述 2. 场景(如果没有为聊天覆盖) 3. 个性 4. 示例消息 5. 角色注释 / 深度提示词 **重要!** 请注意,由于典型角色卡片的结构方式,使用此模式可能导致意外行为,包括但不限于:角色对自己感到困惑、个性合并、特征不确定等。 #### 合并前缀和后缀 当选择"合并角色卡片"时,角色的所有相应字段都会被合并在一起。这意味着在结果提示词中,所有角色描述将被合并成一大块文本。如果您希望这些字段被分开,您可以定义前缀和/或后缀。 这些选项支持普通宏,并且还会将 \{\{char\}\} 替换为相关角色的名字,将 \ 替换为部分的名称(例如:描述、个性、场景等)。 ### 其他群组聊天菜单选项 #### 静音角色 群组聊天菜单中角色头像旁边的划掉的对话气泡图标可以禁用或启用特定角色在聊天中的回复。 #### 强制发言 群组聊天菜单中角色头像旁边的对话气泡图标将只触发特定角色的回复,绕过回复顺序策略。即使群组成员被静音,它也会生效。 #### 自动模式 当启用自动模式时,群组聊天将遵循回复顺序并在没有用户交互的情况下触发消息生成。当最后一个被选中的角色发送其消息后,下一个自动模式回合将在 5 秒延迟后触发。当用户开始在发送消息文本区域中输入时,自动模式将被禁用,但已经排队的生成不会自动停止。 #### 允许自我回应 当选择自然顺序时,如果由于在自己的消息中提到自己而被触发,将允许每个回合最后一条消息的角色连续回复。对列表顺序没有影响。 #### 群组聊天场景覆盖 所有群组成员将使用输入的场景文本,而不是他们角色卡片中指定的内容。分支聊天从其父聊天继承场景覆盖,之后可以单独更改。 #### 查看角色定义 点击群组聊天菜单中头像旁边的角色卡片图标将快速导航到常规角色定义屏幕。在这里所做的任何更改都将保存到卡片本身。 要返回群组聊天,点击群组名称标题链接。 #### 成员管理 您可以在群组聊天中添加、删除、静音或重新排序任何现有角色。默认情况下,新成员会被添加到群组成员列表的顶部,然后可以使用箭头图标重新排序。 #### 群组聊天弹出窗口 通过点击"当前成员"字段旁边的图标可以激活群组聊天菜单弹出窗口。这会创建群组聊天菜单的弹出窗口。通过从用户设置启用 MovingUI,此菜单可以调整大小并拖动到界面内的任何位置,功能与常规群组聊天菜单相同。 ===== Usage/Characters/index.md (https://sillytaverncn.net/usage/characters/) ===== --- order: 100 icon: person-fill route: /usage/characters/ --- # 角色 角色是您可以创建和管理的 AI 身份,用于塑造 AI 在对话中的角色。每个角色都有名字、个性和对话历史。您可以创建任意数量的角色,并随时在它们之间切换。 角色可以用于单独聊天,或者添加多个角色到群组聊天中,让它们相互交流。 ## 角色管理面板 从导航栏打开 **角色** 面板以访问角色列表。点击一个角色或群组来与其聊天或编辑,或选择 **创建新角色** 来添加新角色。 ### 面板控制 * **固定面板**:在交互时保持面板打开 * **角色列表**:返回角色列表视图 * **快速切换栏**:快速访问收藏的角色 ### 角色列表 * **创建新角色**:添加新角色 * **导入角色**:从文件加载角色 * **外部导入**:从 URL 导入 * **创建群组**:开始新的群组聊天 #### 搜索和排序 * **搜索栏**:按名称或属性筛选角色 * **排序下拉菜单**:多种排序选项: - 字母顺序(A-Z,Z-A) - 时间顺序(最新,最旧) - 使用情况(最近,最多/最少聊天) - 大小(最多/最少 token) - 特殊(收藏,随机) #### 按类型或标签筛选角色 * **收藏筛选**:显示收藏的角色 * **群组筛选**:仅显示群组聊天 * **标签作为文件夹**:按标签层级组织 * **管理标签**:[标签配置](/Usage/Characters/Tags.md) * **标签列表**:查看所有可用标签 * **清除筛选**:重置所有筛选器 ### 角色创建/编辑面板 * **头像图片**:上传和预览角色头像 * **Token 数量**:角色的 [Token 使用量](characterdesign.md#角色-token) * **统计**:聊天历史和使用统计 * [标签管理](/Usage/Characters/Tags.md) #### 快速操作 - 收藏切换 - 高级定义 - 角色设定 - 聊天设定:将聊天链接到 [世界信息](/Usage/Characters/index.md#world-info) - 导出角色 - 复制 - 删除 #### 扩展选项 * 世界信息链接 * 卡片设定导入 * 场景覆盖 * 个性转换 * 角色重命名 * 源链接 * 替换/更新 * 标签导入 * 图库视图 #### 内容字段 * **[角色描述](characterdesign.md#角色描述)**:简短的角色概述 * **[第一条消息](characterdesign.md#第一条消息)**:开始新聊天时的初始问候或提示 * **替代问候语**:定义多个第一条消息,在开始聊天时可以滑动切换 ### 高级定义面板 点击 **高级定义** 按钮访问扩展角色设置。 #### 提示词覆盖(聊天补全/指令模式) * **主提示词**:替换默认的 [主/系统提示词](/Usage/Prompts/prompts.md#主提示词系统提示词),可以使用 \{\{original\}\} 占位符包含原始提示词 * **历史后指令**:覆盖默认的 [历史后指令](/Usage/Prompts/prompts.md#历史后指令) #### 创建者元数据 关于角色的非提示词信息: - 创建者名称/联系方式 - 角色版本 - 创建者注释 - 嵌入的标签列表 #### 角色个性 * **[个性概述](characterdesign.md#个性概述)**:角色特征的简要概述 * **[场景](characterdesign.md#场景)**:对话的背景和情境 * **角色注释**:自定义消息,可选择深度和消息角色(另见 [作者注释](/Usage/Characters/Author's-Note.md)) * **健谈程度**(群组聊天):滑块从 害羞 → 正常 → 健谈 * **示例消息**:角色写作风格的示例 ### 群组聊天管理 如果这是一个群组聊天,您可以从此面板管理群组成员和设置。 更多详情请参见 [群组聊天](/Usage/Characters/groupchats.md)。 ===== Usage/Characters/macros.md (https://sillytaverncn.net/usage/characters/macros/) ===== --- order: 90 route: /usage/core-concepts/macros/ --- # 宏(替换标签) !!! 注意 此列表可能不完整或已过时。在任何 SillyTavern 聊天中使用 `/help macros` 斜杠命令来获取您的实例中可用的宏列表。 !!! 宏可以在角色描述、作者注释、世界信息和许多其他地方使用,并在生成回应时替换为相应的值。它们可以用于在提示词中插入动态内容,如用户名称、角色描述或当前时间。宏用双大括号括起来,例如 `{{user}}`,通常不区分大小写。**请注意,目前不支持宏嵌套。** 注意:某些扩展可能还会添加特定于上下文的特殊宏,这些宏只在某些区域有效(即扩展提示词的特殊占位符)。除非该宏不绑定到特定功能,否则这里不会记录这些宏。 ## 通用宏 | 宏 | 描述 | |-------|-------------| | `{{pipe}}` | 仅用于斜杠命令批处理。替换为前一个命令的返回结果。 | | `{{newline}}` | 插入换行符。 | | `{{trim}}` | 修剪此宏周围的换行符。 | | `{{noop}}` | 无操作,只是一个空字符串。 | | `{{user}}` 或 `` | 用户名称。 | | `{{charPrompt}}` | 角色的主提示词覆盖。 | | `{{charJailbreak}}` | 角色的历史后指令提示词覆盖。 | | `{{group}}` 或 `{{charIfNotGroup}}` | 群组成员名称的逗号分隔列表,或单人聊天中的角色名称。 | | `{{groupNotMuted}}` | 与 `{{group}}` 相同但不包括已静音的成员。 | | `{{char}}` 或 `` | 角色名称。 | | `{{description}}` | 角色描述。 | | `{{scenario}}` | 角色场景或聊天场景覆盖(如果已设置)。 | | `{{personality}}` | 角色个性。 | | `{{persona}}` | 用户的个性描述。 | | `{{mesExamples}}` | 角色的对话示例(未更改和未分割)。 | | `{{char_version}}` | 角色的版本号。 | | `{{model}}` | 当前选择的 API 的文本生成模型名称。**可能不准确!** | | `{{lastMessageId}}` | 最后一条聊天消息的 ID。 | | `{{lastMessage}}` | 最后一条聊天消息的文本。 | | `{{firstIncludedMessageId}}` | 上下文中包含的第一条消息的 ID。需要在当前会话中至少运行一次生成。 | | `{{lastCharMessage}}` | 角色发送的最后一条聊天消息。 | | `{{lastUserMessage}}` | 用户发送的最后一条聊天消息。 | | `{{currentSwipeId}}` | 当前显示的最后一条消息滑动的基于 1 的 ID。 | | `{{lastSwipeId}}` | 最后一条聊天消息的滑动次数。 | | `{{lastGenerationType}}` | 最后一个排队的生成请求的类型。值:normal(正常)、impersonate(扮演)、regenerate(重新生成)、quiet(静默)、swipe(滑动)、continue(继续)。 | | `{{original}}` | 可以在提示词覆盖字段中使用,以包含系统设置中的默认提示词。仅适用于聊天补全 API 和指令模式。 | | `{{time}}` | 当前系统时间。 | | `{{time_UTC+X}}` 或 `{{time_UTC-X}}` | 指定 UTC 偏移(时区)的当前时间,例如对于 UTC+02:00 使用 `{{time_UTC+2}}`。 | | {{timeDiff::(time1)::(time2)}} | time1 和 time2 之间的时间差。接受时间和日期宏。 | | `{{date}}` | 当前系统日期。 | | `{{input}}` | 用户输入栏的内容。 | | `{{weekday}}` | 当前星期几。 | | `{{isotime}}` | 当前 ISO 时间(24 小时制)。 | | `{{isodate}}` | 当前 ISO 日期(YYYY-MM-DD)。 | | `{{datetimeformat ...}}` | 指定格式的当前日期/时间(例如 `{{datetimeformat DD.MM.YYYY HH:mm}}`)。 | | `{{idle_duration}}` | 插入自上次发送用户消息以来的时间范围的人性化字符串(示例:4 小时,1 天)。 | | `{{random:(args)}}` | 从列表中返回一个随机项(例如 `{{random:1,2,3,4}}` 将随机返回 4 个数字中的 1 个)。 | | `{{random::arg1::arg2}}` | random 的替代语法,支持其参数中的逗号。 | | `{{pick::(args)}}` | random 的替代方案,但如果源字符串保持不变,则在当前聊天的后续评估中选择的参数是稳定的。 | | `{{roll:(formula)}}` | 使用 D&D 骰子语法生成随机值:XdY+Z(例如 `{{roll:d6}}` 生成 1-6 的值)。 | | `{{bias "text here"}}` | 为 AI 设置行为偏差,直到下一个用户输入。文本周围需要引号。 | | `{{// (note)}}` | 允许留下将被替换为空内容的注释。AI 不可见。 | | `{{banned "text here"}}` | 动态将引号中的文本添加到 Text Generation WebUI 后端的禁用词序列中。对其他后端无效。需要引号。 | | `{{reverse:(content)}}` | 反转宏的内容。 | ## 指令模式和上下文模板宏 (在高级格式设置中启用) | 宏 | 描述 | |-------|-------------| | `{{exampleSeparator}}` | 上下文模板示例对话分隔符。 | | `{{chatStart}}` | 上下文模板聊天开始行。 | | `{{instructSystemPrompt}}` | 指令系统提示词。 | | `{{instructSystemPromptPrefix}}` | 系统提示词前缀序列。 | | `{{instructSystemPromptSuffix}}` | 系统提示词后缀序列。 | | `{{instructUserPrefix}}` | 用户消息前缀序列。 | | `{{instructAssistantPrefix}}` | 助手消息前缀序列。 | | `{{instructSystemPrefix}}` | 系统消息前缀序列。 | | `{{instructUserSuffix}}` | 用户消息后缀序列。 | | `{{instructAssistantSuffix}}` | 助手消息后缀序列。 | | `{{instructSystemSuffix}}` | 系统消息后缀序列。 | | `{{instructFirstAssistantPrefix}}` | 助手第一个输出序列。 | | `{{instructLastAssistantPrefix}}` | 助手最后一个输出序列。 | | `{{instructFirstUserPrefix}}` | 指令用户第一个输入序列。 | | `{{instructLastUserPrefix}}` | 指令用户最后一个输入序列。 | | `{{instructSystemInstructionPrefix}}` | 系统指令前缀序列。 | | `{{instructUserFiller}}` | 用户填充消息文本。 | | `{{instructStop}}` | 指令停止序列。 | | `{{maxPrompt}}` | 提示词的最大 token 数(上下文长度减去回应长度)。 | | `{{systemPrompt}}` | 系统提示词内容,如果允许且可用,包括角色提示词覆盖。 | | `{{defaultSystemPrompt}}` | 系统提示词内容(不包括角色提示词覆盖)。 | ## 聊天变量宏 - 本地变量 = 仅在当前聊天中唯一 - 全局变量 = 在任何角色的任何聊天中都有效 | 宏 | 描述 | |-------|-------------| | `{{getvar::name}}` | 替换为本地变量"name"的值。 | | `{{setvar::name::value}}` | 替换为空字符串,将本地变量"name"设置为"value"。 | | `{{addvar::name::increment}}` | 替换为空字符串,将数值"increment"添加到本地变量"name"。 | | `{{incvar::name}}` | 替换为变量"name"的值加 1 的结果。 | | `{{decvar::name}}` | 替换为变量"name"的值减 1 的结果。 | | `{{getglobalvar::name}}` | 替换为全局变量"name"的值。 | | `{{setglobalvar::name::value}}` | 替换为空字符串,将全局变量"name"设置为"value"。 | | `{{addglobalvar::name::value}}` | 替换为空字符串,将数值"increment"添加到全局变量"name"。 | | `{{incglobalvar::name}}` | 替换为全局变量"name"的值加 1 的结果。 | | `{{decglobalvar::name}}` | 替换为全局变量"name"的值减 1 的结果。 | | `{{var::name}}` | 替换为作用域变量"name"的值(仅限 STscript)。 | | `{{var::name::index}}` | 替换为作用域变量"name"中索引处的值(用于 STscript 中的数组/对象)。 | ## 扩展特定宏 由扩展添加,仅在特定条件下工作。 | 宏 | 描述 | |-------|-------------| | `{{summary}}` | 替换为当前聊天会话的摘要(如果可用)。 | ===== Usage/Characters/tags.md (https://sillytaverncn.net/usage/characters/tags/) ===== --- order: 60 route: /usage/core-concepts/tags/ --- # 标签 角色卡和群组可以分配零个或多个标签。它们对于按主题、质量、来源或您喜欢的任何方式快速组织不断增长的收藏非常有用。 ## 打标签 有几种方法可以向角色卡添加或删除标签: - 在导入期间导入嵌入的标签。 - 从角色管理面板打开一张卡片。从那里您可以为角色卡分配标签。 - 批量打标签。 要进行批量打标签,请点击"批量编辑角色"按钮(铅笔图标),选择您要打标签的卡片,右键点击其中任何一张,然后在上下文菜单中点击"标签"。 !!!info 注意 请注意,群组无法批量打标签。 !!! 从此屏幕您将能够: - 使用组合框添加或删除标签。 - 从选定的卡片中删除所有标签("全部")。 - 从这些卡片中删除所有选定卡片之间的标签交集("互相")。 - 导入(在本地创建)存储在角色卡中的所有标签,以防您导入了它("导入全部")。 - 导入(在本地创建)存储在角色卡中且本地也存在同名的标签("导入现有")。 ## 管理 要查看和管理所有现有标签,请打开角色管理面板,然后点击"管理标签"按钮(齿轮图标)。 您可以使用右上角的按钮备份和恢复此处的所有信息(标签列表、卡片的标签分配、颜色、文件夹设置等)。 您可以使用左侧的抓手按钮重新排序标签,因为它们将在角色管理的标签过滤器中以此顺序显示。 !!!warning 警告 标签备份 JSON 文件不适合与他人共享,因为它包含仅特定于您实例的信息,例如内部实体名称! !!! ## 导入角色卡时导入标签 当从下载的图像(或从"从外部 URL 导入内容"按钮)导入外部角色卡时,系统会提示您选择性地导入其中包含的标签。它们不是卡片运行所必需的;标签只是组织性的。 嵌入的卡片标签存储在角色编辑器的"高级定义"菜单的"创建者元数据"部分中。如果您希望向导入该角色的其他用户推荐一些标签,请在"要嵌入的标签"字段中填写以逗号分隔的标签列表。 !!!info 注意 仅当用户设置选项"导入卡片标签"设置为"询问"时,才会显示此弹出窗口。 !!! 在打开的"导入角色名称的标签"弹出窗口中,您将看到现有标签列表(您本地已有同名的标签)和新标签列表(您本地没有的标签)。 您可以: - 根据需要修剪列表,然后点击"导入" - 剩余的现有标签将添加到导入的角色卡中,剩余的新标签将在本地创建,然后添加到卡片中。 - 或者只需点击"不导入"以忽略角色卡中包含的标签,仅导入卡片。 - 或"导入全部"作为快捷方式导入角色卡中找到的所有标签(注意:包括您从上述列表中修剪的任何标签;如果您这样做了,请使用"导入"按钮)。 - 或"导入现有"作为快捷方式仅导入本地存在同名的标签。 ## 过滤角色卡 创建标签后,您将在角色管理面板的一行中看到它们。您可以点击这些来切换标签过滤状态;依次为: - 一次点击将显示带有此标签的卡片。 - 再次点击仅显示未带有此标签的卡片。 - 再次点击重置此标签的过滤。 您可以同时按任意数量的标签进行过滤。 ## 标签作为文件夹 !!!info 注意 要使用此功能,必须首先在用户设置的 UI 主题列下启用它。此切换的状态也会随 UI 主题一起保存。 !!! 从"管理标签"按钮(齿轮图标),每个标签条目都有一个多状态切换按钮,可在这些标签作为文件夹模式之间循环(在代码中称为"虚拟文件夹"): - 点击一次将此标签转换为"打开的文件夹"。它将作为虚拟条目出现在卡片列表中;点击进入它将仅显示带有该标签的卡片 - 再次点击将此标签转换为"关闭的文件夹"。如上所述,但带有此标签的卡片默认不会出现 - 您需要点击进入文件夹才能看到它们。 - 再次点击重置此标签的标签作为文件夹状态。 ===== Usage/Chatting/hotkeys.md (https://sillytaverncn.net/usage/chatting/hotkeys/) ===== --- order: -60 icon: key-asterisk route: /usage/hotkeys/ --- # 快捷键 **要获取您的 SillyTavern 实例中可用的最新快捷键列表,请在任何聊天中使用 `/help hotkeys` 斜杠命令。** **移动设备上禁用快捷键。** ## 聊天快捷键 * 上箭头 = 编辑聊天中的最后一条消息 * Ctrl+上箭头 = 编辑聊天中最后一条用户消息 * 左箭头 = 向左滑动 * 右箭头 = 向右滑动(注意:当聊天栏中有输入内容时,滑动快捷键被禁用) * 回车键(在选中聊天栏时)= 将您的消息发送给 AI * Ctrl+回车键 = 重新生成最后一条 AI 回复 * Alt+回车键 = 继续最后一条 AI 回复 * Esc 键 * *(在编辑消息时且启用了消息编辑自动保存)* = 关闭编辑框。 * *(在 AI 消息生成或流式传输时)* = 立即停止生成。 ## Markdown 快捷键 需要在"用户设置"标签下启用。在聊天栏和标有"M↓"图标的文本区域中有效: * Ctrl+B = \*\*粗体\*\* * Ctrl+I = \*斜体\* * Ctrl+U = \_\_下划线\_\_ * Ctrl+K = \`内联代码\` * Ctrl+Shift+~ = \~\~删除线\~\~ ===== Usage/Chatting/index.md (https://sillytaverncn.net/usage/chatting/) ===== --- icon: report order: 170 expanded: false route: /usage/chatting/ --- # 聊天 当您[连接到 API](/Usage/API_Connections/index.md) 后,可以通过在屏幕底部的聊天栏中输入消息来发送给 AI。然后点击 **发送** 或按回车键。 ![聊天栏](/static/chatbox.png) AI 将回复一条继续对话的消息。 ![聊天消息](/static/chatmessage.png) 现在您可以: * **发送另一条消息** * **滑动回复**:点击消息上的 **滑动** 按钮以生成不同的回复。 * **编辑消息**:点击任何消息上的 **编辑** 按钮来[编辑消息内容](#编辑消息内容)。 * **消息操作**:点击消息上的 **消息操作** 按钮,获取更多[消息选项](#消息操作面板),如[翻译](../../extensions/Translation.md)、图像生成和故事分支。 * **聊天选项**:点击聊天栏旁边的 **选项** 按钮,获取更多[聊天选项](#聊天选项面板),如作者注释和聊天文件管理。 !!! 编辑和滑动 如果您希望说些不同的话,您可以编辑您的消息,然后滑动 AI 的回复以获得新的回复。 !!! !!! 键盘快捷键 您也可以使用**右**箭头键来滑动,使用**上**箭头键来编辑聊天中的最后一条消息。要了解更多快捷键,请在聊天中使用 `/help hotkeys` [斜杠命令](/Usage/Chatting/slashcommands.md)或查看[快捷键](/Usage/Chatting/hotkeys.md)页面。 !!! ## 消息操作面板 通过消息上的省略号(•••)按钮管理单个聊天消息。 要在您的聊天中显示所有消息的这些选项,请在用户设置中启用[展开消息操作](/Usage/User_Settings/uicustomization.md#主题开关)设置。 ### 核心功能 * **翻译**:将消息转换为不同语言 * **生成图像**:从消息内容[创建图像](/extensions/Stable-Diffusion.md) * **朗读**:[文本转语音](/extensions/TTS.md)转换 * **提示词**:查看生成提示词和 token 使用情况 ### 消息可见性 * **包含**:AI 可以看到此消息;点击以排除 * **排除**:AI 看不到此消息;点击以包含 ### 内容管理 * **嵌入**:[附加文件或图像](/Usage/Characters/data-bank.md#关于文档) * **检查点**:创建故事检查点 * **检查点导航**:点击以打开检查点聊天,Shift+点击以更新现有检查点 * **分支**:开始替代故事路径 * **复制**:复制消息文本 * **编辑**:编辑消息内容 ## 编辑消息内容 当您 **编辑**聊天消息时出现的紧凑消息操作工具面板。 ### 核心操作 * **确认**:保存消息更改 * **取消**:放弃消息更改 ### 消息操作 * **复制**:复制消息内容 * **删除**:移除消息 ### 消息位置 * **上移**:将消息在聊天中向上移动 * **下移**:将消息在聊天中向下移动 注意:根据消息在聊天历史中的位置,移动控件可能被禁用。 ## 聊天选项面板 通过聊天界面左下角的 **选项** 按钮管理聊天设置和操作。 ### 显示控件 * **关闭聊天**:退出当前聊天会话 * **切换面板**:显示/隐藏[界面面板](/Usage/index.md#控制面板) ### 生成设置 * **[作者注释](/Usage/Characters/Author's-Note.md)**:自定义上下文指令 * **[CFG 比例](/Usage/Prompts/CFG.md)**:调整回复创造性 * **[Token 概率](#Token-概率面板)**:查看 token 生成统计 ### 聊天导航 * **返回父聊天**:返回主对话 * **保存检查点**:创建故事检查点 * **转换为群组**:转换为[群组聊天](/Usage/Characters/groupchats.md) ### 聊天管理 * **开始新聊天**:开始新的对话 * **管理聊天文件**:[聊天文件操作](/Usage/Characters/chatfilemanagement.md),如导入、导出和重命名 ### 消息控件 * **删除消息**:选择并移除多条消息 * **重新生成**:创建新的回复 * **扮演**:AI 以用户身份写消息 * **继续**:延伸最后一条消息 注意:根据上下文和聊天状态,某些选项可能被隐藏。 ## Token 概率面板 Token 概率面板让您深入了解 AI 的文本生成采样过程。它不仅显示 AI 写了什么,还显示它在文本的每个点上考虑的其他选项。 要打开它,请点击 **聊天选项**面板中的 **Token 概率**按钮。 ![示例消息](/static/token-probs/fling-msg.png){ width=500} ![示例消息的 Token 概率显示](/static/token-probs/fling-probs.png){ width=500} 当您点击生成文本中的任何 token(单词、标点符号或格式字符)时,面板会显示 AI 在该位置考虑的替代 token,以及它们的概率分数。这让您深入了解 AI 的"思考过程",并显示回复可能采取的其他方向。查看这些替代选项可以帮助您理解是有多个可能的选项还是只有一个明确的选择。 ![替代 token 和概率](/static/token-probs/fling-probs-logprob.png){ width=500} 如果您看到一个您认为 AI 应该选择不同的 token,选择一个替代选项,消息将从该点开始重新生成,可能会给您一个不同的回复。 ### 重新生成 如果您更改特定 token 并重新生成回复,新回复中更改 token 之前的部分将与原始回复相同。这部分显示为灰色。由于它没有被生成,这部分没有概率信息。 您可能想看到基于您的替代 token 可能生成的其他回复。 您可以点击灰色部分来"重新生成",给您文本的新变体。点击灰色部分的任何部分都会保留整个灰色部分并重新生成整个白色/着色部分。 在点击灰色部分中的 token 时按住 Ctrl 键将保留到被点击 token 的灰色部分并重新生成其余文本。在这种情况下,您选择的替代 token 不能被保留。 ### 控件 **Token 显示**: * 生成的文本被分割成单个 token * 每个 token 都是可交互的,点击 token 可以查看 AI 考虑的替代选项 * Token 被着色作为视觉辅助,但这并不表示概率 * 特殊字符(空格、换行)被明显标记 **Token 选择**: * 点击 token 查看替代选项 * 点击替代选项以替换 token 并重新生成回复 * 将鼠标悬停在 token 上可以查看其原始对数概率分数 **窗口控件**: * 用于面板重新定位的拖动手柄(仅限 MovingUI) * 最大化/还原面板大小 * 展开/折叠面板内容 * 关闭面板 ### 可用性 您必须在[用户设置](/Usage/User_Settings/User_Settings.md#聊天消息处理)中选择**请求 token 概率**以启用此功能。 Token 概率仅适用于最新消息,且不会保存到聊天中。如果消息的 token 概率信息不再可用,面板将显示一条指示此情况的消息。 使用平滑流式传输时,Token 概率不可用。 并非所有 API 都提供 Token 概率。如果您使用的 API 不支持 token 概率,面板将打开但不会显示任何信息。 #### 文本补全 * **LlamaCPP**:可用 * **Text Generation WebUI**(oobabooga):可用 * **TabbyAPI**:可用 * **NovelAI**:可用 * **KoboldCPP**:可用 * **Ollama**:似乎不可用 * **OpenRouter Text**:似乎不可用 #### 聊天补全 * **OpenAI** 或 **Custom**:可用,但不支持重新生成 * **Anthropic**:似乎不可用 * **Google AI Studio**:似乎不可用 * **OpenRouter Chat**:似乎不可用 ===== Usage/Chatting/slashcommands.md (https://sillytaverncn.net/usage/chatting/slashcommands/) ===== --- icon: rel-file-path route: /usage/core-concepts/slashcommands/ --- # 斜杠命令 !!!warning **这不是一个完整的列表,因为它很少更新。** 要获取您的实例中可用的最新命令列表,请在任何 SillyTavern 聊天中使用 `/help slash` 聊天命令。 !!! - `/help` – 显示帮助信息 - `/api` - 切换到不同的 API - `/sys` - 以系统叙述者的身份发送中立消息 - `/send` - 以用户身份发送消息而不触发生成 - `/sendas` – 以特定角色的身份发送消息 - `/comment` - 向聊天添加对 AI 不可见的注释 - `/impersonate` - 要求 AI 以您的身份写作,可选择添加提示词 - `/persona` - 设置您的用户个性 - `/imagine` - 从文本提示词生成图像 - `/bg` - 通过文件名设置背景图像 ===== Usage/Common-Settings.md (https://sillytaverncn.net/usage/common-settings/) ===== --- order: 160 icon: sliders route: /usage/common-settings/ --- # 常用设置 这些设置控制使用语言模型生成文本时的采样过程。这些设置的含义对所有支持的后端都是通用的。 ## 上下文设置 ### 回应长度(tokens) API 将生成的最大 token 数量。 - 回应长度越高,生成回应所需的时间就越长。 - 如果 API 支持,您可以启用 `流式传输` 来逐步显示正在生成的回应。 - 当 `流式传输` 关闭时,回应将在完成后一次性显示。 ### 上下文长度(tokens) SillyTavern 将作为提示词发送给 API 的最大 token 数量,减去回应长度。 - 上下文包括角色信息、系统提示词、聊天历史等。 - 消息之间的虚线表示聊天的上下文范围。该线以上的消息不会发送给 AI。 - 要在生成消息后查看上下文的组成,请点击 `提示词项目化` 消息选项(展开 `...` 菜单并点击带线条的方形图标)。 ## 采样参数 ### Temperature(温度) Temperature 控制 token 选择的随机性: - 低温度(<1.0)会产生更可预测的文本,倾向于选择概率更高的 token - 高温度(>1.0)通过给予低概率 token 更好的机会,增加输出的创造性和多样性。 设置为 1 以保持原始概率。 ### Repetition Penalty(重复惩罚) 尝试通过根据 token 在上下文中出现的频率来惩罚它们以抑制重复。 将值设置为 1 以禁用其效果。 #### Repetition Penalty Range(重复惩罚范围) 从最后生成的 token 开始,将考虑多少个 token 进行重复惩罚。如果设置得太高,可能会破坏回应,因为常用词如"的、了、和"等将受到最严重的惩罚。 将值设置为 0 以禁用其效果。 #### Repetition Penalty Slope(重复惩罚斜率) 如果这个值和 `重复惩罚范围` 都大于 0,重复惩罚在提示词的末尾将有更大的效果。值越高,效果越强。 将值设置为 0 以禁用其效果。 ### Top K Top K 设置可以选择的最大顶级 token 数量。例如,如果 Top K 是 20,这意味着只会保留排名最高的 20 个 token(无论它们的概率是多样的还是有限的)。 设置为 0(或 -1,取决于您的后端)以禁用。 ### Top P Top P(又称核采样)将所需的顶级 token 相加以达到目标百分比。如果前 2 个 token 都是 25%,而 Top P 是 0.50,则只考虑前 2 个 token。 将值设置为 1 以禁用其效果。 ### Typical P Typical P 采样基于 token 与集合平均熵的偏差来确定优先级。它保留累积概率接近预定阈值(例如 0.5)的 token,强调那些具有平均信息内容的 token。 将值设置为 1 以禁用其效果。 ### Min P 通过相对于最高 token 切断低概率 token 来限制 token 池。产生更连贯的回应,但如果设置得太高也可能加剧重复。 - 在低值如 `0.1-0.01` 时效果最好,但在高 `Temperature` 时可以设置更高。例如:`Temperature: 5, Min P: 0.5` 将值设置为 0 以禁用其效果。 ### Top A Top A 基于最高 token 概率的平方设置 token 选择的阈值。例如,如果 Top-A 值为 0.2,最高 token 的概率为 50%,则概率低于 5%(0.2 * 0.5^2)的 token 将被排除。 将值设置为 0 以禁用其效果。 ### Tail Free Sampling(尾部自由采样) Tail-Free Sampling (TFS) 通过使用导数分析 token 概率的变化率来搜索分布中的低概率 token 尾部。它根据归一化的二阶导数保留阈值(例如 0.3)以内的 token。越接近 0,丢弃的 token 越多。 将值设置为 1 以禁用其效果。 ### Smoothing Factor(平滑因子) 使用二次变换增加高概率 token 的可能性,同时降低低概率 token 的可能性。旨在无论 `Temperature` 如何都产生更有创意的回应。 - 在没有截断采样器(如 `Top K`、`Top P`、`Min P` 等)时效果最好。 将值设置为 0 以禁用其效果。 ### Dynamic Temperature(动态温度) 根据最高 token 的可能性动态调整温度。旨在产生更有创意的输出而不牺牲连贯性。 - 接受从最小到最大的温度范围。例如:`最小温度: 0.75` 和 `最大温度: 1.25` - `指数` 根据最高 token 应用指数曲线。 取消勾选以禁用其效果。 ### Epsilon Cutoff(Epsilon 截断) Epsilon 截断设置一个概率下限,低于该下限的 token 将被排除在采样之外。单位为 1e-4;合理的值是 3。 设置为 0 以禁用。 ### Eta Cutoff(Eta 截断) Eta 截断是特殊 Eta 采样技术的主要参数。单位为 1e-4;合理的值是 3。详情请参见论文 [Truncation Sampling as Language Model Desmoothing by Hewitt et al. (2022)](https://arxiv.org/abs/2210.15191)。 设置为 0 以禁用。 ### DRY Repetition Penalty(DRY 重复惩罚) DRY 惩罚那些会将输入的结尾扩展成先前在输入中出现过的序列的 token。如果您想允许逐字重复某些序列(例如名字),您可以将它们添加到序列中断器列表中。请参见[这里](https://github.com/oobabooga/text-generation-webui/pull/5677)的 Pull Request。 将乘数设置为 0 以禁用。 ### Exclude Top Choices (XTC)(排除顶级选择) XTC 采样算法移除最可能的 token,而不是修剪最不可能的 token。它以给定的概率移除除了满足给定阈值的最不可能的 token 之外的所有 token。这确保至少保留一个"可行"的选择,保持连贯性。请参见[这里](https://github.com/oobabooga/text-generation-webui/pull/6335)的 Pull Request。 将概率设置为 0 以禁用。 ### Mirostat Mirostat 将输出的困惑度与输入的困惑度匹配,从而避免重复陷阱(在自回归推理产生文本时,输出的困惑度趋向于零)和混乱陷阱(困惑度发散)。详情请参见论文 [Mirostat: A Neural Text Decoding Algorithm that Directly Controls Perplexity by Basu et al. (2020)](https://arxiv.org/abs/2007.14966)。 模式选择 Mirostat 版本。 - 0 = 禁用, - 1 = Mirostat 1.0(仅限 llama.cpp), - 2 = Mirostat 2.0。 ### Beam Search(束搜索) 一种贪婪的暴力算法,用于 LLM 采样以找到最可能的词序或 token 序列。它一次性扩展多个候选序列,在每一步保持固定数量(束宽)的顶级序列。 ### Top nsigma 一种基于 logits 统计特性的采样方法。它保留在最大 logit 值的 n 个标准差内的 token,为 top-p/top-k 采样提供了一个更简单的替代方案,同时保持不同温度下的采样稳定性。 ===== Usage/Prompts/CFG.md (https://sillytaverncn.net/usage/prompts/cfg/) ===== --- order: prompts-50 route: /usage/prompts/cfg/ --- # CFG(无分类器引导) 页面作者:kingbri 贡献者:kingbri, Guillaume "Vermeille" Sanchez, AliCat ## 这是什么? CFG(classifier-free guidance,无分类器引导)是一种用于帮助使提示词的某些部分变得更不突出或更突出的方法。 ### 支持的后端 API 目前支持的后端包括 oobabooga 的 textgen WebUI、NovelAI 和 TabbyAPI。 NovelAI 有其自己的 [CFG 文档](https://web.archive.org/web/20240917150051/https://docs.novelai.net/text/cfg.html)。 警告:由于需要处理多个提示词,CFG 会增加显存使用量!如果在使用 CFG 生成提示词时 GPU 内存耗尽,请考虑减小上下文大小、使用参数较少的模型或完全关闭 CFG。 --- ## 配置 访问 CFG 设置的方式与访问作者注释相同: ![CFGhamburgermenupng](/static/cfg-hamburger.png) 以下是 CFG 面板的样子: ![CFGchatpanelpng](/static/cfg-panel.png) CFG 面板中有四个下拉菜单: - 聊天 CFG - 将 CFG 比例和提示词的范围限定在当前聊天中 - 角色 CFG - 将 CFG 比例和提示词的范围限定在指定角色 - 全局 CFG - 全局覆盖 CFG 比例和提示词(也会覆盖模型预设!) - CFG 高级设置(以前称为 CFG 提示词级联) - 用于组合前三个下拉菜单中的提示词并设置插入深度的位置。 注意:如果引导比例设置为 1,由于这是 CFG 的"关闭"状态,因此不会发送任何内容。 #### 群聊 在群聊中,CFG 比例面板看起来是这样的: ![CFGpanelgcpng](/static/cfg-groups.png) 主要变化是移除了角色 CFG,并在聊天 CFG 下拉菜单中添加了一个名为"使用角色 CFG 比例"的复选框。这允许使用当前角色的引导比例,而不是聊天 CFG 比例设置的值。 此功能的主要用途是根据每个角色的个别需求来调整比例。 此外,在提示词级联中勾选"角色负面提示词"框将会在聊天提示词(如果启用)的基础上附加独立的角色负面提示词。 --- ## 概念 ### 这不是在 Stable Diffusion 中使用的吗? 是也不是。LLM 中的 CFG 的工作方式与 Stable Diffusion 中的不同。基于 LLM 的 CFG 基于"提示词混合"原理工作。CFG 公式接受一个正面提示词和一个负面提示词,然后混合它们之间的*差异*。之后,发送组合的提示词并生成响应! 这里有一个插图帮助理解这个概念。红色代表负面提示词,蓝色代表中性提示词,紫色代表被解释的混合结果。所有三个提示词中相同的白色空间不会用于 CFG 混合。 ![stcfgdiagrampng](/static/cfg-diagram.png) 如果您想了解更多关于 CFG 和 LLM 的信息,Vermifuge 的原始论文在这里。建议您阅读/收听: - 论文 - [[2306.17806] Stay on topic with Classifier-Free Guidance (arxiv.org)](https://arxiv.org/abs//2306.17806) - 音频版本 - [https://www.youtube.com/watch?v=MGY00YFcyco](https://www.youtube.com/watch?v=MGY00YFcyco) ### 我需要 CFG 提示词吗? 不需要!CFG 提示词完全是可选的。仅仅将引导比例调整到 `1` 以上也会对响应产生影响,这可以突出聊天和角色互动。 ### 什么是好的 CFG 提示词? 我们已经确定 CFG 提示词与 Stable Diffusion 的负面标签和嵌入不同。那么我们如何制作提示词呢? 警告:这假设您使用 PLists 和 Ali:Chat 创建了一个角色。如果没有,请随意尝试各种提示词技巧。 假设我有一个名叫"John"的角色。从他的示例对话中可以看出,John 应该一直感到快乐和兴奋。然而,在与 John 聊天时,他有时会表现得悲伤和沮丧。 为了消除这种情况,CFG 来救场!只需将负面提示词设为 `[John's feelings: sad, depressed]` 来帮助消除悲伤部分。您可以选择将正面提示词设为 `[John's feelings: happy, joyful]` 来进一步突出 John 的快乐部分。 ### 正面提示词 我在上一节中提到了这一点,但我想再详细说明一下。正面提示词用于进一步突出角色的某些部分。让我们再次以 John 为例。通过使用正面提示词 `[John's feelings: happy, joyful]` 使他更快乐,John 应该会开始输出比不包含正面提示词时更快乐的对话。 ### 但是... 这些只是基于特定角色格式经验的**宽松指南**。还有许多其他方法可以创建提示词,您应该进行实验。请随意与其他用户分享您的想法! ### 引导比例 这里有一个经验法则。引导比例为 `1` 意味着 CFG 被禁用。实际上,如果引导比例为 1,SillyTavern 不会向后端发送任何内容。引导比例 `>1` 将在不同程度上产生其他部分所示的结果。 然而,引导比例 `<1` 将产生*相反*的效果,因为这里负面提示词被用作主要提示词。 让我们再次以 John 为例。负面提示词是 `[John's feelings: sad, depressed]`,正面提示词是 `[John's feelings: happy, joyful]`,引导比例为 `0.8`。 这将反过来更多地突出*负面*提示词,您会看到 John 开始表现得比正常情况更悲伤,而不是更快乐。 简而言之:使用引导比例 `1.5`,然后根据您的输出向上或向下调整。 ### 提示词级联 负面和正面提示词可以在 CFG 类型之间级联(类型包括每次聊天、每个角色和全局覆盖)。有关更多信息,请参见配置标题。 ### 插入深度 遵循基本规则:在提示词中位置越低,对响应的影响就越大。对于聊天,我建议使用默认深度 `1`,因为它与 SillyTavern 的其他组件非常灵活。 然而,如果您想要实验,插入深度 `0` 是开放的。但是,这些可能会显著改变您的响应的外观,并且不建议在这里使用提示词级联! ===== Usage/Prompts/advancedformatting.md (https://sillytaverncn.net/usage/prompts/advancedformatting/) ===== --- order: 100 route: /usage/core-concepts/advancedformatting/ --- # 高级格式设置 本节提供的设置允许对 [提示词构建](prompts.md) 策略进行更多控制,主要针对文本补全 API。 本面板中的大多数设置不适用于聊天补全 API,因为它们由提示词管理器系统管理。 +++ 文本补全 API * [系统提示词](#系统提示词) * [上下文模板](#上下文模板) * [分词器](#分词器) * [自定义停止字符串](#自定义停止字符串) +++ 聊天补全 API * 系统提示词:不适用,请使用[提示词管理器](prompt-manager.md) * 上下文模板:不适用,请使用[提示词管理器](prompt-manager.md) * [分词器](#分词器) * [自定义停止字符串](#自定义停止字符串) +++ ## 后端定义的模板 !!! 适用于:文本补全 API 不适用于聊天补全 API,因为它们使用不同的提示词构建器。 !!! 一些文本补全源提供了自动选择模型作者推荐模板的功能。这通过比较模型的 `tokenizer_config.json` 文件中定义的聊天模板的哈希值与 SillyTavern 默认模板之一来实现。 1. 必须在 ** 高级格式设置** 菜单中启用 ** 派生模板** 选项。这可以应用于上下文、指令或两者。 2. 必须选择支持的后端作为文本补全源。目前只有 llama.cpp 和 KoboldCpp 支持派生模板。 3. 在建立与 API 的连接时,模型必须正确报告其元数据。如果这不起作用,请尝试将后端更新到最新版本。 4. 报告的聊天模板哈希值必须与 [已知的 SillyTavern 模板](https://github.com/SillyTavern/SillyTavern/blob/release/public/scripts/chat-templates.js) 之一匹配。这仅涵盖默认模板,如 Llama 3、Gemma 2、Mistral V7 等。 5. 如果哈希值匹配,且模板存在于模板列表中(即未重命名或删除),则会自动选择该模板。 ## 系统提示词 !!! 适用于:文本补全 API 对于聊天补全 API 中的等效设置,请使用[提示词管理器](prompt-manager.md)。**主提示词**是聊天补全 API 中系统提示词的等效项。 !!! 系统提示词定义了模型需要遵循的一般指令。它为对话设置基调和上下文。例如,它告诉模型充当 AI 助手、写作伙伴或虚构角色。 系统提示词是[故事字符串](context-template.md#故事字符串)的一部分,通常是模型接收的提示词的第一部分。 查看[提示词指南](prompts.md#主提示词系统提示词)以了解更多关于系统提示词的信息。 ## 上下文模板 !!! 适用于:文本补全 API 对于聊天补全 API 中的等效设置,请使用[提示词管理器](prompt-manager.md)。 !!! 通常,AI 模型需要您以某种特定方式提供角色数据。SillyTavern 包含了一系列针对不同模型的预制转换规则,但您可以根据需要自定义它们。 本节的选项在[上下文模板](context-template.md)中有详细说明。 ## 分词器 分词器是一个将文本分解成更小单位(称为 token)的工具。这些 token 可以是单个词,甚至是词的部分,如前缀、后缀或标点符号。一个经验法则是,一个 token 通常对应 3~4 个字符的文本。 本节的选项在[分词器](tokenizer.md)中有详细说明。 ## 自定义停止字符串 接受 JSON 序列化的停止字符串数组。示例:`["\n", "\nUser:", "\nChar:"]`。如果您不确定格式,请使用[在线 JSON 验证器](https://jsonlint.com/)。如果模型输出**以任何停止字符串结尾**,它们将从输出中移除。 支持的 API: 1. KoboldAI Classic(1.2.2 及更高版本)或 KoboldCpp 2. AI Horde 3. 文本补全 API:Text Generation WebUI (ooba)、Tabby、Aphrodite、Mancer、TogetherAI、Ollama 等 4. NovelAI 5. OpenAI(最多 4 个字符串)和兼容的 API 6. OpenRouter(文本和聊天补全) 7. Claude 8. Google AI Studio ===== Usage/Prompts/context-template.md (https://sillytaverncn.net/usage/prompts/context-template/) ===== --- order: 90 templating: false route: /usage/prompts/context-template/ --- # 上下文模板 !!! 适用于:文本补全 API 对于聊天补全 API 中的等效设置,请使用[提示词管理器](prompt-manager.md)。 !!! 通常,AI 模型需要您以某种特定方式提供角色数据。SillyTavern 包含了一系列针对不同模型的预制转换规则,但您可以根据需要自定义它们。 在"[高级格式设置](advancedformatting.md)"面板中编辑这些设置。 ## 故事字符串 此字段是聊天前角色数据的模板(在内部称为故事字符串)。 这是为文本补全和指令模型格式化角色卡片的主要方式。 模板支持 Handlebars 语法和任何自定义文本注入或格式化。请参阅此处的语言参考: 我们为 Handlebars 模版引擎提供以下参数(用双大括号包裹它们): 1. `description` - 角色的描述 2. `scenario` - 角色的场景 3. `personality` - 角色的个性 4. `system` - [系统提示词](advancedformatting.md#系统提示词) 或角色的主提示词覆盖(如果存在且在用户设置中启用了"优先使用角色提示词") 5. `persona` - 选定的个性描述 6. `char` - 角色名称 7. `user` - 选定的个性名称 8. `wiBefore` 或 `loreBefore` - 位置设置为"角色定义之前"的已激活世界信息条目的组合 9. `wiAfter` 或 `loreAfter` - 位置设置为"角色定义之后"的已激活世界信息条目的组合 10. `mesExamples` - (可选)角色的示例对话,使用分隔符进行指令格式化。将"示例消息行为"设置为"永不包含示例"以避免重复。 支持特殊的 \{\{trim\}\} 宏来移除其周围的任何换行符。如果您希望某些文本部分与前一行之间**不**用换行符分隔,请使用它(_空格**不会**被修剪_)。 **警告**:如果故事字符串模板中缺少上述某些参数,它们将完全不会被发送到提示词中。 ## 示例分隔符 用作示例对话块的块头和分隔符。示例对话中的任何 `` 标签实例都将被此字段的内容替换。 ## 聊天开始 在渲染的故事字符串之后和示例对话块之后,但在上下文中的第一条消息之前插入作为分隔符。 ## 将分隔符作为停止字符串 将"示例分隔符"和"聊天开始"添加到停止字符串列表中。 如果模型倾向于产生幻觉或泄露由分隔符前导的整个示例对话块,这很有帮助。 ## 将名称作为停止字符串 将角色和用户个性名称添加到停止字符串列表中。 建议保持开启以防止模型冒充。 ## 允许历史后指令 在提示词末尾包含历史后指令,格式化为最后一条用户消息。 历史后指令提示词应该在角色卡片中定义,并且应该启用"优先使用角色指令"设置。 应谨慎使用,因为在上下文中较低位置放置指令可能会导致较小模型的输出质量下降。 ## 始终在提示词中添加角色名称 将角色名称附加到提示词以强制模型以角色身份完成消息: ```txt ** 其他上下文在此 ** 角色: ``` ===== Usage/Prompts/index.md (https://sillytaverncn.net/usage/prompts/) ===== --- order: 140 icon: typography templating: false route: /usage/prompts/ --- # 提示词 当您向 AI 发送消息时,您编写的文本会与其他文本结合形成发送给 AI 的单个请求。这种组合的文本称为"提示词",有时也称为"请求"或"上下文"。 提示词可以包括各种不同类型的文本,包括: * [主要指令](#main-prompt-system-prompt)告诉 AI 如何生成响应 * [AI 应扮演的角色](/Usage/Characters/characterdesign.md)的定义 * [您扮演的角色](/Usage/User_Settings/User_Settings.md#personas)的定义 * [关于 AI 交互的"世界"的信息](/Usage/Characters/index.md#world-info) * [数据库](/Usage/Characters/data-bank.md)中的相关文档或信息 * 过去对话的[摘要](/extensions/Summarize.md) * [网络搜索](/extensions/WebSearch.md)或其他[外部数据源](/For_Contributors/Function-Calling.md)的结果 * 对话中的先前消息 * **您发给 AI 的消息** * AI 如何生成响应的[最终指令](#post-history-instructions) 这可能需要管理很多内容!为了帮助您了解如何构建和修改发送给 AI 的请求,SillyTavern 识别了您可能想要包含在提示词中的不同元素。然后,您可以构建提示词以包含对您想要与 AI 交互的方式有意义的内容。 这些元素中的许多在您更改它们的部分中进行了说明。例如,要描述您希望 AI 扮演的角色,您可以使用[角色设计](/Usage/Characters/characterdesign.md)中的[描述](/Usage/Characters/characterdesign.md#personality-summary)字段。 ## 查看提示词 阅读发送给 AI 的最终提示词对于理解 AI 被告知了什么以及为什么生成该响应非常有帮助。您可以通过多种方式查看提示词: * 使用 AI 回复消息上的提示词详细信息图标 * 使用 [Prompt Inspector](https://github.com/SillyTavern/Extension-PromptInspector) 扩展 * 检查您运行 SillyTavern 的终端窗口中的日志 * 检查浏览器开发者工具中的控制台 ## 更改提示词的构建方式 以正确的方式向 AI 呈现提示词的所有部分对于获得最佳响应至关重要。您可以控制提示词的构建方式。 +++ 文本补全 API 使用[高级格式化](advancedformatting.md)面板自定义文本补全 API 的提示词构建。 +++ 聊天补全 API 使用[提示词管理器](prompt-manager.md)自定义聊天补全 API 的提示词构建。 +++ ## 主提示词(系统提示词) 主提示词(或系统提示词)定义了模型要遵循的一般指令。它为对话设定了基调和上下文。例如,它告诉模型作为 AI 助手、写作伙伴或虚构角色行事。 +++ 文本补全 API [系统提示词](advancedformatting.md#system-prompt)是[故事字符串](context-template.md#story-string)的一部分,通常是模型接收的提示词的第一部分。 +++ 聊天补全 API 主提示词是[提示词管理器](prompt-manager.md)中的默认提示词之一。它通常是模型接收的上下文中的第一条消息,归属于("由...发送")系统角色。 +++ 默认的主提示词是: > Write \{\{char\}\}'s next reply in a fictional chat between \{\{char\}\} and \{\{user\}\}. \{\{char\}\} 和 \{\{user\}\} 占位符会替换为您在对话中定义的角色和人设的名称。 您可以在主提示词中使用任何支持的 [\{\{宏\}\}](/Usage/Characters/macros.md) 标签来包含可能在对话之间变化或随着对话进展而变化的信息。 ### 调整主提示词 默认的主提示词帮助模型理解它应该如何处理后续的角色和人设信息,如何解释过去的对话,以及应该生成什么样的响应。这是一个灵活的通用提示词,适用于许多情况,因为它确立了 AI 正在作为与您的人设对话的角色进行写作。 但是,您可以调整主提示词以更好地满足您的需求。以下是调整主提示词的一些常见原因: * **提供额外的指令**:例如,您希望 AI 解释其推理、遵循特定规则或避免某些主题 * **澄清 AI 的角色**:例如,您希望 AI 作为叙述者、讲故事的人或向导行事 * **更改对话的上下文**:例如,您希望 AI 的响应就像它是 AI 助手、文字冒险游戏或写作伙伴一样 !!! 尝试不同的方法,看看什么最适合您 本指南中的所有示例都对其他用户效果很好,但适合您的需求和您使用的模型的提示词可能有所不同。尝试不同的指令和提示风格,看看什么最适合您。如果您不确定要尝试什么,您可以随时在 [SillyTavern Discord](https://discord.gg/sillytavern) 中寻求帮助。 !!! 在主提示词中为 AI 提供额外的指令可以帮助它理解您想要从对话中得到什么。 > Write one reply only. Write at least one paragraph, up to four. > Markdown is enabled. Use it to format your response. Enclose code snippets in triple backticks. > Write character dialogue in quotation marks. Write \{\{char\}\}'s thoughts in parentheses. > You are an anime roleplay generation model for users aged 13 to 17. You always generate fun, age-appropriate responses. > Answer truthfully and write out your thinking step by step to be sure you get the right answer. AI 更容易遵循关于它应该做什么的指令,而不是它不应该做什么的指令。例如,如果您希望 AI 避免以某种方式写作,最好告诉它您希望它如何写作。虽然 *"Do not decide what \{\{user\}\} says or does"* 通常包含在提示词中以防止 AI 控制您的人设,但一些用户发现 *"Write \{\{char\}\}'s responses in a way that respects \{\{user\}\}'s autonomy"* 更有效。 通常有比主提示词更好的地方来包含有关用户或角色的信息、修改角色的写作和说话风格或提供其他特定指令。主提示词最适合用于关于整个对话的一般指令,或关于您想要进行的对话类型的指令。 ### 消息历史的影响 在调整主提示词以改善 AI 的响应时,请考虑 AI 从消息历史中获取了很多信息。历史是它对过去事件、角色互动和关系的记忆,以及它的词汇选择和写作风格的风格指南。 通过提供[对话示例](/Usage/Characters/characterdesign.md#examples-of-dialogue)来展示您希望 AI 如何响应,从而利用这一点。展示您想要的内容通常比试图解释它更容易! 当您的对话已经有历史记录时,更改主提示词对 AI 的响应影响有限。就事件和关系而言,AI 假设主提示词发生在遥远的过去,而消息历史会更新它。就写作风格和词汇选择而言,AI 假设历史中的所有消息都是根据*当前*主提示词中的规则生成的,并且它应该继续以相同的方式生成消息。处理此问题的一些建议包括: * 在消息历史结束附近或之后插入当前指令,例如通过使用[作者注释](/Usage/Characters/Author's-Note.md) * 通过开始新对话来测试对主提示词的更改 * 编辑消息历史以删除或纠正不需要的行为示例 * 使用[历史后指令](#post-history-instructions)向 AI 提供最终指令 !!! 第一次就做对! 永远不要让 AI"逃脱"您不希望它做的事情。如果您不喜欢 AI 的响应,不要像它是正确的那样继续对话。相反,修改提示词,重新生成消息,然后从那里继续。这将帮助 AI 学习您想要什么。 !!! ### 删除"虚构聊天"上下文 在某些情况下,"虚构聊天"可能不是您对话的正确上下文。 您可以从主提示词中删除"虚构"上下文: > Write \{\{char\}\}'s next reply in a conversation with \{\{user\}\}. 您可能不希望 AI 认为自己在角色扮演。您可以删除角色的想法,而不是删除 AI 的想法: > You are \{\{char\}\}, a helpful assistant. You provide useful information and help \{\{user\}\} with their questions. ### AI 作为叙述者或讲故事的人 如果您希望 AI 作为叙述者,从全知的角度描述事件,创造自己的角色和设定,该怎么办? 一种方法是为 AI 创建一个命名角色作为叙述者。此角色可以称为"叙述者"或"AI",表明 AI 是通用讲故事的人,或者可以根据特定场景或设定命名,赋予 AI 在该设定中叙述故事的任务。然后可以在[角色](/Usage/Characters/characterdesign.md)或[世界信息](/Usage/Characters/index.md#world-info)中定义设定的详细信息。 您需要调整默认的主提示词以反映 AI 的角色。对于通用叙述者,您可以使用: > You are \{\{char\}\}, a skilled and versatile storyteller. Narrate the story. 或者对于特定设定: > You are the narrator of a fantasy scenario. Play as the characters that visit \{\{char\}\}. 澄清用户在对话中的角色很有帮助。您的消息是故事的一部分,还是关于您的角色做什么或说什么的叙述者指令?包含用户在故事中的示例: > The story should progress by responding to the actions and dialogue of \{\{user\}\}. Narrate the story in third person. 将用户排除在故事之外的示例: > Enter Adventure Mode. Narrate the story based on \{\{user\}\}'s dialogue and actions after ">". Describe the surroundings in vivid detail. Be detailed, creative, verbose, and proactive. Move the story forward by introducing fantasy elements and interesting characters. 定义用户的角色不仅有助于 AI 理解如何响应您的消息,而且有助于了解它在多大程度上被允许控制您的人设。这避免了 AI 为您的人设做出您宁愿自己做的决定的情况。 ## 历史后指令 历史后指令(PHI)是在主提示词和用户消息之后发送给 AI 的额外指令。它们可用于根据消息历史向 AI 提供额外的上下文或指令。 由于历史后指令是在用户消息之后发送的,因此它们是 AI 在生成响应之前接收的最终指令。AI 通常赋予它们比主提示词更高的优先级,它们可以覆盖主提示词的指令。 要使用每个角色的历史后指令,请将它们添加到角色的[历史后指令](/Usage/Characters/characterdesign.md)中并启用[优先使用角色指令](/Usage/User_Settings/index.md)。要在使用特定于角色的指令的同时保留全局定义的 PHI,您可以在角色的历史后指令字段中使用 `{{original}}` 宏。 +++ 文本补全 API 历史后指令在系统提示词类别下的[高级格式化](/Usage/Prompts/advancedformatting.md)面板中定义。历史后指令被添加为不可见的用户角色注入,位于提示词的最后一行(通常包含响应消息"标题")之前。请注意,必须启用"启用系统提示词"切换才能应用历史后指令(即使系统提示词本身为空)。 +++ 聊天补全 API 历史后指令是[提示词管理器](prompt-manager.md)中的默认提示词之一。它通常是模型接收的上下文中的最后一条消息,归属于("由...发送")系统角色。如果您的聊天补全 API 不支持系统角色,它通常会归属于用户角色。 +++ ## 添加到提示词(世界信息) 您可以使用[世界信息](/Usage/Characters/index.md#world-info)功能在提示词的任何位置插入额外信息。通过设置何时应插入信息的条件,您可以引导 AI 包含特定详细信息、更改其响应方式或向对话添加新元素。 世界信息的一些常见用途包括: * 包含有关世界或设定信息的"传说书"或"百科全书" * 为各种角色和情况管理不同系统提示词的方法 * 存储 AI 应在对话中"回忆"的记忆的地方 * 用于创建、编辑和共享角色详细信息的更模块化的系统 * AI 要反应的随机事件和惊喜的来源,或让您做出反应! ===== Usage/Prompts/instructmode.md (https://sillytaverncn.net/usage/prompts/instructmode/) ===== --- order: 80 route: /usage/core-concepts/instructmode/ --- # 指令模式 指令模式允许您调整针对各种提示词格式训练的指令遵循模型的提示词,如 Alpaca、ChatML、Llama2 等。 !!! 适用于:Text Completion API 对于 Chat Completion API,请使用[提示词管理器](prompt-manager.md)获取等效设置。 !!! ## API 支持 ### Text Completion API 完全支持。这包括: * Text Completion 下的所有来源 * KoboldAI Classic * AI Horde #### 选择格式 选择的指令模板必须与后端运行的实际模型的期望相匹配。 这通常反映在 HuggingFace 上的模型卡片中,有些甚至提供 SillyTavern 兼容的 JSON 文件。 示例:[NeverSleep/Noromaid-13b-v0.1.1](https://huggingface.co/NeverSleep/Noromaid-13b-v0.1.1#prompt-template-custom-format-or-alpaca) ### Chat Completion API(OpenAI、Claude 等) 这不支持**(也不需要)**Chat Completion API。它们使用完全不同的提示词构建器。 ### NovelAI 虽然 NovelAI *技术上*支持,但他们的模型都没有经过训练来理解指令格式。NovelAI 模型可以使用一个特殊的指令模块,当在聊天消息中遇到用大括号包裹的指令时*自动*激活,因此对整个提示词使用指令模式将导致输出质量**降低**。 以下是自动激活 NovelAI 指令模块的示例: ```txt User: { Write a happy song about Nintendo Switch. } ``` ## 指令模式设置 ### 系统提示词 !!! warning 最近更改 系统提示词现在是一个独立的实体。有关更多详细信息,请参见[高级格式化](advancedformatting.md#系统提示词)页面。 !!! ### 模板 为一些知名的指令模型提供带有序列的现成模板。 *更改模板会将未保存的设置重置为最后保存的状态!如果您进行了任何不想丢失的更改,请记得保存您的模板。* ### 激活正则表达式 如果定义为有效的正则表达式,当连接到模型且其名称匹配此正则表达式时,将自动选择此模板。 需要预先启用指令模式。只有模板中的第一个正则表达式匹配会被选中(按字母顺序评估)。 ### 用换行符包装序列 在插入提示词时,每个序列文本都会用换行符包装。Alpaca 及其衍生品需要此功能。 如果您想完全控制行终止符,请禁用此功能。 ### 替换序列中的宏 如果启用,在消息包装序列中定义的已知 \{\{macro\}\} 替换将被替换。 此外,可以在消息前缀中使用特殊的 \{\{name\}\} 宏来引用附加到消息的实际名称(而不是当前活动的 \{\{char\}\} 或 \{\{user\}\}),这在使用群组聊天或 /sendas 命令时很有帮助。如果无法确定名称,则使用"System"作为后备占位符。 ### 包含名称 如果启用,在前缀序列后将角色和用户名添加到聊天历史记录中。 以下选项可用: * **从不**:不在消息内容前添加名称前缀。 * **群组和过去的个性**:仅为群组角色和过去的个性的消息添加名称前缀。 * **始终**:始终在消息内容前添加名称前缀。 ### 序列:系统提示词包装 定义系统提示词的包装方式。 #### 系统提示词前缀 插入在系统提示词之前。 #### 系统提示词后缀 插入在系统提示词之后。 **重要:**这*仅*适用于系统提示词本身,*不*适用于整个故事字符串!如果您想包装故事字符串,请将这些序列添加到上下文模板部分中的故事字符串模板。 ### 序列:聊天消息包装 这些设置定义了在构建提示词时如何包装属于不同角色的消息。 所有前缀序列也会自动用作停止字符串。 #### 用户消息前缀 在用户消息之前插入,并在扮演时作为最后一行提示词。 #### 用户消息后缀 在用户消息之后插入。 #### 助手消息前缀 在助手消息之前插入,并在生成 AI 回复时作为最后一行提示词。 #### 助手消息后缀 在助手消息之后插入。 #### 系统消息前缀 在系统(由斜杠命令或扩展添加)消息之前插入。 #### 系统消息后缀 在系统消息之后插入。 #### 系统与用户相同 如果选中为真,系统消息将使用用户角色消息序列。 否则,系统消息使用它们自己的序列(如果不为空)或根本不进行任何包装(如果为空)。 ### 其他序列 用于提示词构建的更精细调整的各种高级配置 #### 第一个助手前缀 在第一个助手的消息之前插入。 > 只有**聊天历史**中的第一条消息才算数,而不是实际首先进入提示词的消息! #### 最后一个助手前缀 在最后一个助手的消息之前插入,或在生成 AI 回复时作为最后一行提示词。 > 在后台生成文本时不使用(例如 Stable Diffusion 提示词或摘要)。将使用系统指令前缀或常规助手前缀。 #### 系统指令前缀 在后台生成中性/系统文本时(例如 Stable Diffusion 提示词或摘要)作为最后一行提示词插入。 #### 用户填充消息 如果聊天历史不是以用户消息开始,将在聊天历史开始时插入。 **用例:**当指令格式*严格要求*提示词必须以用户开始,并且消息角色只能交替出现时,例如:Llama 2 Chat、Mistral Instruct。 #### 停止序列 表示回复结束的文本。也作为停止字符串发送到后端 API。 如果生成了停止序列,输出中该序列之后的所有内容都将被删除(包括序列本身)。 ===== Usage/Prompts/prompt-manager.md (https://sillytaverncn.net/usage/prompts/prompt-manager/) ===== --- order: 50 templating: false route: /usage/prompts/prompt-manager/ --- # 提示词管理器 提示词管理器是一个系统,允许对 Chat Completion API 的[提示词构建](index.md)策略进行更多控制。 !!! 适用于:Chat Completion API 对于 Text Completion API,请使用[高级格式化](advancedformatting.md)获取等效设置。 !!! !!!tip 命名提示词管理器预设 请注意,如果预设与您的某个角色卡片共享名称,在与该特定角色开始聊天时,它将被自动选择。为预设命名一些独特的名称以避免这种行为。 !!! 通过点击导航栏中的"AI 回应配置"按钮访问提示词管理器。提示词管理器位于[常用设置](/Usage/Common-Settings.md)面板下方。 ## 快速提示词编辑 提供快速编辑常见提示词部分的空间,如 **主提示词**、**辅助提示词** 和 **历史后指令**。有关这些提示词的更多信息可以在[提示词构建](index.md)页面找到。 ## 实用提示词 这些提示词被发送到 Chat Completion 模型,以帮助它理解发送给它的信息,或在某些类型的交互中指示它以特定方式行动。 ### 格式模板 !!!tip 如果未设置格式模板,信息将按原样发送,不进行任何包裹。 !!! 这些是用于包裹从[世界信息](/Usage/Characters/index.md#world-info)和[角色卡片](/Usage/Characters/characterdesign.md)提取的信息的字符串模板。 使用特殊标记来指示应插入信息的位置: - `{0}` 用于世界信息格式模板。 - `{{scenario}}` 用于场景格式模板。 - `{{personality}}` 用于个性格式模板。 ### 群组提示模板 仅在群组聊天中使用。放置在提示词末尾以强制特定角色回复。 将此留空以禁用群组提示功能。 ### 新聊天、新群组聊天、新示例聊天 这些在聊天历史之前和每个[示例对话](/Usage/Characters/characterdesign.md#examples-of-dialogue)块之前发送,以告知模型背景信息在哪里结束,聊天历史在哪里开始。 - **新聊天:** 用于单独聊天。 - **新群组聊天:** 用于群组聊天。 - **新示例聊天:** 用于示例对话块。 将这些留空以禁用此功能。 ### 续写提示 在提示词末尾发送,以指示模型在触发续写时该做什么,例如当按下续写按钮或由 STScript 触发时。 !!! Chat Completion 模型的续写 请记住,Chat Completion 模型处理续写的方式与 **Text Completion** 模型不同,无论您的续写提示如何,可能并不总是提供无缝的结果。 !!! ### 替换空消息 当文本框为空且按下 **发送消息** 时,发送此字段的内容而不是空白消息。 ## 角色名称行为 提供不同的策略来指示模型如何将消息与角色关联。如果 Chat Completion 模型在确定哪些消息属于哪个角色时遇到困难,可能需要选择不同的策略。 ## 续写后缀 当触发续写时,模型返回的"续写"消息将在开头添加选定的续写后缀。例如,它可以在续写文本之前添加一个空格。 ## 附加设置 ### 用引号包裹 !!!warning 已弃用的选项。优先使用[正则表达式脚本](/extensions/Regex.md)。 !!! 在发送之前将整个用户消息包裹在隐藏的引号中。这对于角色不使用引号表示语言的会话很有用。如果您的会话使用引号表示语言,请不要选中此项。 ### 续写预填充 !!!warning 可能不适用于所有 Chat Completion 源。 !!! 将续写提示作为助手角色消息而不是系统消息发送。如果启用此选项,将不使用续写提示。 ### 压缩系统消息 !!!warning 已弃用的选项。优先使用[提示词后处理](/Usage/API_Connections/openai.md#prompt-post-processing)。 !!! 将连续的系统消息合并为单个组合消息(不包括示例对话)。 ### 启用网络搜索 !!! 不要与[网络搜索扩展](/extensions/WebSearch.md)混淆。 !!! 启用 Chat Completion 后端提供的网络搜索功能。提示词通常由模型提供商使用搜索结果丰富,可能会产生额外费用。 ### 启用函数调用 请参阅[函数调用](/For_Contributors/Function-Calling.md) ### 发送内联图像、发送内联视频 !!! 不要与[图像描述扩展](/extensions/captioning.md)混淆。 !!! 如果 Chat Completion 模型具有处理提交的图像和视频的多模态能力,这将切换其执行此操作的能力。要将媒体附加到提示词,请使用"魔杖"菜单中的 **附加文件** 选项。 ### 请求内联图像 !!! 不要与[图像生成扩展](/extensions/Stable-Diffusion.md)混淆。 !!! 允许模型返回图像附件。 ### 使用系统提示词 !!! 仅由 Google Gemini 和 Anthropic Claude 后端支持。 尽管这两者有非常相似的设置,但它们在技术上是单独的选项,因此可以分别配置。 !!! 将所有系统消息合并到第一条非系统角色(用户/助手)消息之前,并将它们作为单独的系统指令字段发送。 ## 推理设置 如果 Chat Completion 模型使用推理,这些设置会影响其可见性和功能。 ### 请求模型推理 请参阅[添加推理:按后端](/Usage/Prompts/reasoning.md#by-backend)。 ### 推理强度 请参阅[推理强度](/Usage/Prompts/reasoning.md#reasoning-effort)。 ## "提示词"部分 提示词管理器构成了发送到 Chat Completion 模型的提示词的骨干。它控制发送什么以及发送的 *顺序*。 ### 提示词下拉列表 包含当前 Chat Completion 预设包含的所有(非默认)提示词的下拉列表。要将这些提示词之一添加到传出消息中,需要从下拉列表中选择它,然后按 **插入提示词** 按钮将其添加到提示词管理器。要创建一个新的提示词添加到此下拉列表,请按 **新建提示词** 按钮。一旦新提示词被编写并保存,它就会被添加到下拉列表中,然后可以插入。 ### 提示词列表 这是一个拖放界面,列出了选择可能发送到 Chat Completion 模型的提示词。放置在界面 **顶部** 附近的提示词发送得更早。列表的 **底部** 是发送到模型的 **最后一件事**(通常,这将是您的 **历史后指令**)。 !!! "固定"提示词 = 默认提示词 默认提示词不能从选定的提示词列表中删除。这包括主提示词、世界信息(之前/之后)、人设描述、角色描述、角色个性、场景、增强定义、辅助提示词、聊天示例、聊天历史和历史后指令。如果不需要这些,可以将它们 **切换为"关闭"**,但不能直接删除。 !!! ## 编辑提示词 点击提示词上的 **铅笔按钮** 将带您到 **编辑界面**。在这里,您可以直接编辑提示词。 !!! 确保保存您的更改! 要将这些提示词的更改永久保存到您的 Chat Completion 预设中,您必须点击 **编辑界面** 右下角的 **保存** 按钮,并通过使用位于 **AI 回应配置** 部分顶部的 **保存** 按钮保存预设本身!否则,当 Chat Completion 预设切换到不同的预设时,所做的更改将丢失。 !!! ### 名称 提示词的名称。这不会发送到 Chat Completion 模型;它仅供您在提示词管理器中参考。 ### 角色 哪个角色发送提示词。您可以在系统、AI 助手或用户之间选择。 ### 触发器 发送此提示词的生成类型。如果未选择任何内容,则提示词将针对所有生成类型发送。如果选择了一个或多个,则提示词将仅针对这些特定生成类型发送: - **普通:** 常规消息生成请求。 - **续写:** 当按下续写按钮时。 - **扮演:** 当按下扮演按钮时。 - **滑动:** 当通过滑动触发生成时。 - **重新生成:** 当在单独聊天中按下重新生成按钮时。 - **安静:** 后台生成请求,通常由[扩展](/extensions/index.md)或[STscript](/For_Contributors/st-script.md)命令触发。 !!! "重新生成"触发器在群组聊天中不可用,因为它使用不同的再生成逻辑:从最后一次回复中删除所有消息,并根据选择的[群组回复策略](/Usage/Characters/groupchats.md#reply-order-strategies)使用"普通"生成类型排队消息。 !!! ### 位置 当位置设置为 **相对** 时,此提示词在拖放界面中与所有其他提示词一起发送到其所在的位置。当它设置为 **聊天内** 并给定 **深度** 时,它会以选定的角色在 **聊天历史内** 发送,并 **忽略** 拖放界面的顺序。 ### 深度 当位置设置为 **聊天内** 时,这定义了提示词在聊天历史中发送的深度。数字越大,发送得越深。例如,深度为 0 将在最后一条聊天消息之后发送,深度为 1 将在最后一条聊天消息之前发送,深度为 2 将在倒数第二条聊天消息之前发送,依此类推。 ### 顺序 !!! 具有相同角色和深度的提示词将被分组在一起,并按其顺序值排序。 顺序如下(从上到下):用户、AI 助手、系统。 !!! 当位置设置为 **聊天内** 时,这定义了提示词在聊天历史中发送的顺序。数字越小,发送得越早。 ## 构建您的提示词:提示和技巧 访问 SillyTavern 文档的[提示词构建](index.md)部分,了解有关如何编写有效提示词的更多信息。这些信息在很大程度上可以应用于 Chat Completion 预设。 ===== Usage/Prompts/prompts.md (https://sillytaverncn.net/usage/prompts/prompts/) ===== --- order: 140 icon: typography --- # 提示词 当您向 AI 发送消息时,您写的文本会与其他文本组合,形成发送给 AI 的单个请求。这个组合的文本被称为"提示词",有时也称为"请求"或"上下文"。 提示词可以包含各种不同类型的文本,包括: * 关于如何生成回应的[主要指令](#主提示词系统提示词) * [AI 应该扮演的角色](/Usage/Characters/characterdesign.md)的定义 * [您要扮演的角色](/Usage/User_Settings/User_Settings.md#personas)的定义 * 关于 AI 正在交互的[世界信息](/Usage/Characters/index.md#world-info) * 来自[数据库](/Usage/Characters/data-bank.md)的相关文档或信息 * 过去对话的[摘要](/extensions/Summarize.md) * [网络搜索](/extensions/WebSearch.md)或其他[外部数据源](/For_Contributors/Function-Calling.md)的结果 * 对话中的前几条消息 * **您给 AI 的消息** * 关于如何生成回应的[最终指令](#历史后指令) 这可能需要管理很多内容!为了帮助您理解如何构建和修改发送给 AI 的请求,SillyTavern 识别了您可能想要包含在提示词中的不同元素。然后,您可以构建您的提示词,包含适合您想要与 AI 交互方式的内容。 许多这些元素在您需要更改它们的部分中都有解释。例如,要描述您希望 AI 扮演的角色,您可以使用[角色设计](/Usage/Characters/characterdesign.md)中的[描述](/Usage/Characters/characterdesign.md#个性概述)字段。 ## 查看提示词 阅读发送给 AI 的最终提示词对于理解 AI 被告知了什么,以及为什么它生成了这样的回应非常有帮助。您可以通过以下几种方式查看提示词: * 使用 AI 回复消息上的提示词项目化图标 * 使用 [Prompt Inspector](https://github.com/SillyTavern/Extension-PromptInspector) 扩展 * 检查运行 SillyTavern 的终端窗口中的日志 * 检查浏览器开发者工具中的控制台 ## 更改提示词的构建方式 以正确的方式向 AI 呈现提示词的所有部分对于获得最佳回应至关重要。您可以控制提示词的构建方式。 +++ Text Completion API 使用[高级格式化](advancedformatting.md)面板为 Text Completion API 自定义提示词构建。 +++ Chat Completion API 使用[提示词管理器](prompt-manager.md)为 Chat Completion API 自定义提示词构建。 +++ ## 主提示词(系统提示词) 主提示词(或系统提示词)定义了模型要遵循的一般指令。它为对话设定了基调和上下文。例如,它告诉模型要充当 AI 助手、写作伙伴或虚构角色。 +++ Text Completion API [系统提示词](advancedformatting.md#系统提示词)是[故事字符串](context-template.md#故事字符串)的一部分,通常是模型接收的提示词的第一部分。 +++ Chat Completion API 主提示词是[提示词管理器](prompt-manager.md)中的默认提示词之一。它通常是模型接收的上下文中的第一条消息,归属于("发送自")系统角色。 +++ 默认的主提示词是: > Write \{\{char\}\}'s next reply in a fictional chat between \{\{char\}\} and \{\{user\}\}. \{\{char\}\} 和 \{\{user\}\} 占位符会被替换为您在对话中定义的角色和个性的名称。 您可以在主提示词中使用任何支持的 [\{\{macro\}\}](/Usage/Characters/macros.md) 标签来包含可能在对话之间变化或随对话进展而变化的信息。 ### 调整主提示词 默认的主提示词帮助模型理解它应该如何处理后续的角色和个性信息,如何解释过去的对话,以及生成什么样的回应。这是一个灵活的通用提示词,适用于许多情况,因为它确立了 AI 是作为一个角色在与您的个性进行对话。 但是,您可以调整主提示词以更好地满足您的需求。以下是调整主提示词的一些常见原因: * **提供额外指令**:例如,您希望 AI 解释其推理过程,遵循特定规则,或避免某些主题 * **明确 AI 的角色**:例如,您希望 AI 充当叙述者、讲故事者或向导 * **改变对话的上下文**:例如,您希望 AI 作为 AI 助手、文字冒险游戏或写作伙伴来回应 !!! 尝试并看看什么最适合您 本指南中的所有示例都对其他用户有效,但适合您的需求和您使用的模型的提示词可能不同。尝试不同的指令和提示词风格,看看什么最适合您。如果您不确定要尝试什么,您可以随时在 [SillyTavern Discord](https://discord.gg/sillytavern) 中寻求帮助。 !!! 在主提示词中给 AI 额外的指令可以帮助它理解您想要从对话中得到什么。 > Write one reply only. Write at least one paragraph, up to four. > Markdown is enabled. Use it to format your response. Enclose code snippets in triple backticks. > Write character dialogue in quotation marks. Write \{\{char\}\}'s thoughts in parentheses. > You are an anime roleplay generation model for users aged 13 to 17. You always generate fun, age-appropriate responses. > Answer truthfully and write out your thinking step by step to be sure you get the right answer. AI 更容易遵循关于它应该做什么的指令,而不是它不应该做什么的指令。例如,如果您希望 AI 避免以某种方式写作,最好告诉它您希望它如何写作。虽然 *"Do not decide what \{\{user\}\} says or does"* 经常包含在提示词中以防止 AI 控制您的个性,但一些用户发现 *"Write \{\{char\}\}'s responses in a way that respects \{\{user\}\}'s autonomy"* 更有效。 通常有比主提示词更好的地方来包含关于用户或角色的信息,修改角色的写作和说话风格,或给出其他具体指令。主提示词最适合用于关于整个对话的一般指令,或关于您想要进行的对话类型的指令。 ### 消息历史的影响 在调整主提示词以改善 AI 的回应时,请考虑 AI 从消息历史中获取了很多信息。历史是它对过去事件、角色互动和关系的记忆,也是它的词汇选择和写作风格的指南。 通过提供[示例消息](/Usage/Characters/characterdesign.md#对话示例)来展示您希望 AI 如何回应,利用这一点。展示您想要的通常比试图解释它更容易! 当您的对话已经有历史时,更改主提示词对 AI 的回应的影响是有限的。在事件和关系方面,AI 假设主提示词发生在遥远的过去,而消息历史更新了它。在写作风格和词汇选择方面,AI 假设历史中的所有消息都是根据*当前*主提示词中的规则生成的,并且它应该继续以相同的方式生成消息。处理这种情况的一些建议是: * 在消息历史的末尾或之后插入当前指令,例如使用[作者注释](/Usage/Characters/Author's-Note.md) * 通过开始新的对话来测试您对主提示词的更改 * 编辑消息历史以删除或纠正不想要的行为的示例 * 使用[历史后指令](#历史后指令)为 AI 提供最终指令 !!! 第一次就做对! 永远不要让 AI "逃脱"您不希望它做的事情。如果您不喜欢 AI 的回应,不要继续对话好像它是正确的。相反,修改提示词,重新生成消息,然后从那里继续。这将帮助 AI 学习您想要什么。 !!! ### 移除"虚构聊天"上下文 在某些情况下,"虚构聊天"可能不是您对话的正确上下文。 您可以从主提示词中移除"虚构"上下文: > Write \{\{char\}\}'s next reply in a conversation with \{\{user\}\}. 您可能不希望 AI 认为自己在角色扮演。与其移除角色的概念,您可以移除 AI 的概念: > You are \{\{char\}\}, a helpful assistant. You provide useful information and help \{\{user\}\} with their questions. ### AI 作为叙述者或讲故事者 如果您希望 AI 充当叙述者,从全知的角度描述事件,发明自己的角色和场景呢? 一种方法是为 AI 创建一个命名的角色作为叙述者。这个角色可以叫做"叙述者"或"AI",表明 AI 是一个通用的讲故事者,或者可以根据特定场景或设定命名,给 AI 在该设定中讲故事的任务。然后可以在[角色](/Usage/Characters/characterdesign.md)或[世界信息](/Usage/Characters/index.md#world-info)中定义设定的细节。 您需要调整默认的主提示词以反映 AI 的角色。对于通用叙述者,您可以使用: > You are \{\{char\}\}, a skilled and versatile storyteller. Narrate the story. 或者对于特定设定: > You are the narrator of a fantasy scenario. Play as the characters that visit \{\{char\}\}. 明确用户在对话中的角色很有帮助。您的消息是故事的一部分,还是对叙述者关于您的角色做什么或说什么的指令?包含用户在故事中的示例: > The story should progress by responding to the actions and dialogue of \{\{user\}\}. Narrate the story in third person. 将用户排除在故事之外的示例: > Enter Adventure Mode. Narrate the story based on \{\{user\}\}'s dialogue and actions after ">". Describe the surroundings in vivid detail. Be detailed, creative, verbose, and proactive. Move the story forward by introducing fantasy elements and interesting characters. 定义用户的角色不仅帮助 AI 理解如何回应您的消息,还帮助它理解它在多大程度上可以控制您的个性。这避免了 AI 为您的个性做出您宁愿自己做出的决定的情况。 ## 历史后指令 历史后指令是在主提示词和用户消息之后发送给 AI 的额外指令。它们可以用于根据消息历史为 AI 提供额外的上下文或指令。 由于历史后指令是在用户消息之后发送的,它们是 AI 在生成回应之前收到的最后指令。AI 通常给它们比主提示词更高的优先级,它们可以覆盖主提示词的指令。 +++ Text Completion API 历史后指令不能全局定义。您可以使用[作者注释](/Usage/Characters/Author's-Note.md)达到相同的效果。 要使用每个角色的历史后指令,将它们添加到角色的[历史后指令](/Usage/Characters/characterdesign.md)中,并启用**both** [优先使用角色指令](/Usage/User_Settings/User_Settings.md)和[允许历史后指令](context-template.md#允许历史后指令)。 历史后指令作为一个不可见的用户角色注入添加,位于提示词的最后一行之前(通常包含回应消息"标题")。 +++ Chat Completion API 历史后指令是[提示词管理器](prompt-manager.md)中的默认提示词之一。它通常是模型接收的上下文中的最后一条消息,归属于("发送自")系统角色。如果您的 Chat Completion API 不支持系统角色,它通常会归属于用户角色。 +++ ## 添加到提示词(世界信息) 您可以使用[世界信息](/Usage/Characters/index.md#world-info)功能在提示词的任何位置插入额外信息。通过设置何时应该插入信息的条件,您可以引导 AI 包含特定细节,改变它的回应方式,或向对话添加新元素。 世界信息的一些常见用途包括: * 关于世界或设定的"知识书"或"百科全书" * 管理各种角色和情况的不同系统提示词的方式 * 存储 AI 应该在对话中"回忆"的记忆的地方 * 创建、编辑和共享角色细节的更模块化系统 * AI 要反应的随机事件和惊喜的来源,或让您做出反应的来源! ===== Usage/Prompts/reasoning.md (https://sillytaverncn.net/usage/prompts/reasoning/) ===== --- order: 40 tags: ['>=1.12.12'] route: /usage/prompts/reasoning/ --- # 推理 在语言模型中,推理(也称为模型思考)指的是一种思维链(CoT)技术,通过逐步分析来模拟人类解决问题的过程。SillyTavern 提供了多项功能,使推理模型在支持的后端上的使用更加高效和一致。 ## 常见问题 1. 使用推理模型时,模型的内部推理过程会消耗部分响应令牌额度,即使此推理未在最终输出中显示(例如 o3-mini 或 Gemini Thinking)。如果您注意到响应不完整或为空,应尝试调整 ** AI 响应配置**面板中的最大响应长度设置。对于推理模型,通常使用明显更高的令牌限制 - 从 1024 到 4096 个令牌 - 相比标准对话模型。 ## 配置 !!! 大多数与推理相关的设置可以在 ** 高级格式化**面板的"推理"部分中配置。 !!! 推理块在聊天中显示为可折叠的消息部分。它们可以手动添加、由后端自动添加,或通过响应解析(见下文)。 默认情况下,推理块是折叠的以节省空间。点击块以展开并查看其内容。您可以通过在推理设置中启用**自动展开**来设置块自动展开。 当推理块展开时,您可以使用 ** 复制**和 ** 编辑**按钮复制或编辑其内容。 某些模型支持推理,但不会发回它们的思考。通过切换**显示隐藏**设置,仍然可以显示带有推理时间的推理块。 ## 添加推理 ### 手动添加 通过 ** 消息编辑**菜单向任何消息添加推理块。在编辑时点击 **** 以添加推理部分。第三方扩展也可以通过在将消息对象添加到聊天之前写入消息对象的 `extra.reasoning` 字段来添加推理。 ### 使用命令 使用 `/reasoning-set` STscript 命令向消息添加推理。该命令将 `at`(消息 ID,默认为最后一条消息)和推理文本作为参数。 ```stscript /reasoning-set at=0 This is the reasoning for the first message. ``` ### 通过后端 如果您选择的 LLM 后端和模型支持推理输出,在 ** AI 响应配置**面板中启用"请求模型推理"将添加包含模型思考过程的推理块。 支持的来源: - Claude - DeepSeek - Google AI Studio - Google Vertex AI - OpenRouter - xAI (Grok) - AI/ML API "请求模型推理"不决定模型是否进行推理。Claude 和 Google(2.5 Flash)允许切换思考模式;请参见[推理努力程度](#reasoning-effort)。 ### 通过解析 在 ** 高级格式化**面板中启用"自动解析"以自动从模型输出中解析推理。 响应必须包含包裹在配置的前缀和后缀序列中的推理部分。默认提供的序列对应于 DeepSeek R1 推理格式。 前缀 `` 和后缀 `` 的示例: ```txt This is the reasoning. This is the main content. ``` ## 带推理的提示 默认情况下,已识别的推理块内容不会发送回模型。要在提示词中包含推理,请在 ** 高级格式化**面板中启用"添加到提示词"。推理内容将包裹在配置的前缀和后缀序列中,并通过分隔符与主上下文分开。最大添加数量设置控制可以包含多少个推理块,从提示词末尾开始计数。 !!! 大多数模型提供商不建议在多轮对话中将 CoT 发送回模型。 !!! ### 从推理继续 当推理可以在不启用"添加到提示词"切换的情况下发送回模型的特殊情况是,当生成继续时(例如通过从 ** 选项**菜单按"继续"),但正在继续的消息仅包含推理而没有实际内容。这使模型有机会完成不完整的推理并开始生成主要内容。提示词将如下发送: ```txt Incomplete reasoning... ``` ## 正则表达式脚本 [正则表达式扩展](/extensions/Regex.md)中的正则表达式脚本可以应用于推理块的内容。在脚本编辑器的"影响"部分中选中"推理"以专门针对推理块。 不同的临时性选项以以下方式影响推理块: 1. 无临时性:推理内容被永久更改。 2. 编辑时运行:编辑推理块时将重新评估正则表达式脚本。 3. 更改聊天显示:正则表达式应用于推理块的显示文本,而不是底层内容。 4. 更改传出提示词:仅在将推理块发送到模型之前应用正则表达式。 ## 推理努力程度 推理努力程度是 ** AI 响应配置**面板中的聊天补全设置,它影响推理可能使用的令牌数量。每个选项的效果取决于连接的来源。对于下面的来源,Auto 简单地意味着相关参数不包含在请求中。 | 选项 | Claude(如果无流式传输则 ≤ 21333) | OpenAI(关键词) | OpenRouter(关键词) | xAI (Grok)(关键词) | Perplexity(关键词) | | --- | --- | --- | --- | --- | --- | | 模型 | Opus 4, Sonnet 4/3.7 | o4-mini, o3\*, o1\* | 适用的模型 | grok-3-mini | sonar-deep-research | | Auto | 未指定,**无思考** | 未指定 | 未指定,效果取决于 | 未指定 | 未指定 | | Minimum | 预算 1024 个令牌 | "low" | "low",或最大响应的 20% | "low" | "low" | | Low | 最大响应的 15%,最小 1024 | "low" | "low",或最大响应的 20% | "low" | "low" | | Medium | 最大响应的 25%,最小 1024 | "medium" | "medium",或最大响应的 50% | "low" | "medium" | | High | 最大响应的 50%,最小 1024 | "high" | "high",或最大响应的 80% | "high" | "high" | | Maximum | 最大响应的 95%,最小 1024 | "high" | "high",或最大响应的 80% | "high" | "high" | - 对于 Claude,如果禁用流式传输,预算上限为 21333。如果计算的预算少于 1024,则最大响应更改为 2048。 - 对于 OpenRouter、Perplexity 和 AI/ML API,仅发送 OpenAI 样式的关键词。 Google AI Studio 和 Vertex AI 如下: | 模型 | Auto(动态思考) | Minimum | Low | Medium | High | Maximum | | --- | --- | --- | --- | --- | --- | --- | | 2.5 Pro | thinkingBudget = -1 | 128 | 最大响应的 15%,最小 128 | 最大的 25% | 最大的 50% | 最大或 32768 中的较小值 | | 2.5 Flash | thinkingBudget = -1 | 0,**无思考** | 最大响应的 15% | 最大的 25% | 最大的 50% | 最大或 24576 中的较小值 | | 2.5 Flash Lite | thinkingBudget = -1 | 0,**无思考** | 最大响应的 15%,最小 512 | 最大的 25% | 最大的 50% | 最大或 24576 中的较小值 | - 对于 Gemini 2.5 Pro 和 2.5 Flash/Lite,预算分别上限为 32768 或 24576 个令牌,无论流式传输设置如何。 ===== Usage/Prompts/tokenizer.md (https://sillytaverncn.net/usage/prompts/tokenizer/) ===== --- order: prompts-40 route: /usage/prompts/tokenizer/ --- # 分词器 分词器是一个将文本分解成更小单位(称为 token)的工具。这些 token 可以是单个词,甚至是词的部分,如前缀、后缀或标点符号。一个经验法则是,一个 token 通常对应 3~4 个字符的文本。 SillyTavern 提供了一个"最佳匹配"选项,根据使用的 API 提供商使用以下规则尝试匹配分词器。 Text Completion API **(可覆盖)**: 1. NovelAI Clio:NerdStash 分词器。 2. NovelAI Kayra:NerdStash v2 分词器。 3. Text Completion:API 分词器(如果支持)或 Llama 分词器。 4. KoboldAI Classic / AI Horde:Llama 分词器。 5. KoboldCpp:模型 API 分词器。 如果您得到不准确的结果或想要实验,您可以设置一个_覆盖分词器_供 SillyTavern 在向 AI 后端发送请求时使用: 1. 无。每个 token 估计为 ~3.3 个字符,向上取整到最接近的整数。**如果您的提示词在高上下文长度时被截断,请尝试这个。** 这种方法被 KoboldAI Lite 使用。 2. Llama 分词器。由 Llama 1/2 模型家族使用:Vicuna、Hermes、Airoboros 等。**如果您使用 Llama 1/2 模型,请选择这个。** 3. Llama 3 分词器。由 Llama 3/3.1 模型使用。**如果您使用 Llama 3/3.1 模型,请选择这个。** 4. NerdStash 分词器。由 NovelAI 的 Clio 模型使用。**如果您使用 Clio 模型,请选择这个。** 5. NerdStash v2 分词器。由 NovelAI 的 Kayra 模型使用。**如果您使用 Kayra 模型,请选择这个。** 6. Mistral V1 分词器。由较旧的 Mistral 模型家族及其微调版本使用。**如果您使用较旧的 Mistral 模型,请选择这个。** 7. Mistral Nemo 分词器。由 Mistral Nemo 模型家族及其微调版本使用。**如果您使用 Mistral Nemo/Pixtral 模型,请选择这个。** 8. Yi 分词器。由 Yi 模型使用。**如果您使用 Yi 模型,请选择这个。** 9. Gemma 分词器。由 Gemini/Gemma 模型使用。**如果您使用 Gemma 模型,请选择这个。** 10. DeepSeek 分词器。由 DeepSeek 模型(如 R1)使用。**如果您使用 DeepSeek 模型,请选择这个。** 11. API 分词器。直接从模型查询生成 API 以获取 token 计数。已知支持的后端:Text Generation WebUI (ooba)、koboldcpp、TabbyAPI、Aphrodite API。**如果您使用支持的后端,请选择这个。** Chat Completion API **(不可覆盖)**: 1. OpenAI:通过 [tiktoken](https://github.com/openai/tiktoken) 的模型相关分词器。 2. Claude:通过 [WebTokenizers](https://github.com/mlc-ai/tokenizers-cpp) 的模型相关分词器。 3. OpenRouter:对应模型的 Llama、Mistral、Gemma、Yi 分词器。 4. Google AI Studio:Gemma 分词器。 5. Scale API:GPT-4 分词器。 6. AI21 API:Jamba 分词器(需要一次性下载)。 7. Cohere API:Command-R 分词器(需要一次性下载)。 8. MistralAI API:Mistral V1 或 V3 分词器(需要一次性下载)。 9. DeepSeek API:DeepSeek 分词器(需要一次性下载)。 10. 后备分词器:GPT-3.5 turbo 分词器。 #### 额外分词器 由于大小原因,这些分词器不包含在默认安装中。首次使用时需要一次性下载。 1. Qwen2 分词器。 2. Command-R 分词器。由 Chat Completion 中的 Cohere 源使用。 3. Mistral V3 (Nemo) 分词器。由 Chat Completion 中的 MistralAI 源使用(Nemo 和 Pixtral 模型)。 4. DeepSeek (deepseek-chat) 分词器。由 Chat Completion 中的 DeepSeek 源使用。 如果您不想使用互联网下载,可以在 config.yaml 中选择退出:`enableDownloadableTokenizers`。设置为 `false` 以禁用下载。 您也可以从 [SillyTavern-Tokenizers](https://github.com/SillyTavern/SillyTavern-Tokenizers) 仓库手动下载分词器。下载 JSON 文件并将它们放在数据根目录的 `_cache` 子目录中,默认路径是 `./data/_cache`。如果 `_cache` 目录不存在,请创建它。之后,重启 SillyTavern 服务器以重新初始化分词器。 如果所需的分词器模型未缓存且下载被禁用,将使用后备分词器(Llama 3)进行计数。 ### Token 填充 !!! 适用于:Text Completion API SillyTavern 将始终为 Chat Completion 模型使用匹配的分词器,因此不需要 token 填充。 !!! 除非 SillyTavern 使用由运行模型的远程后端 API 提供的分词器,否则在提示词生成期间假定的所有 token 计数都是基于所选[分词器](#分词器)类型的估计。 由于在接近模型定义的最大值的上下文大小上,分词结果可能不准确,提示词的某些部分可能会被修剪或删除,这可能会对角色定义的连贯性产生负面影响。 为了防止这种情况,SillyTavern 将上下文大小的一部分分配为填充,以避免添加超过模型容纳能力的聊天项。如果您发现即使选择了最匹配的分词器,提示词的某些部分仍被截断,请调整填充以确保描述不被截断。 您可以输入负值进行反向填充,这允许分配超过设定的最大 token 数量。 ===== Usage/User_Settings/User_Settings.md (https://sillytaverncn.net/usage/user-settings/user-settings/) ===== --- order: 120 icon: gear route: /usage/user-settings --- # 用户设置 :::callout **[UI 自定义](uicustomization.md)** 根据您的偏好更改聊天界面的主题、外观和感觉。 ::: :::callout **[视觉小说模式](Visual-Novel.md)** 像在《心跳文学部》等著名视觉小说游戏中那样,与带有精灵的角色聊天。 ::: ## 常规设置 这些是影响您整体 SillyTavern 体验的核心设置。 ### UI 语言 SillyTavern 的用户界面提供多种语言。语言选择器提供以下选项: * **默认**:如果可用,使用您的系统语言 * **英语**:无论系统设置如何,都强制使用英语界面 * 通过下拉菜单提供其他语言 注意:此设置仅影响用户界面文本。对于 AI 对话翻译,请使用 [聊天翻译](../../extensions/Translation.md) 扩展。 ### 软件版本 您当前的 SillyTavern 版本显示在右上角。此信息对以下方面至关重要: * 故障排除 * 确保与扩展的兼容性 * 确定是否有可用更新 要更新 SillyTavern 到最新版本,请参阅 [更新](/Installation/Updating) 文档。 ### 账户管理 控制您的 SillyTavern 用户账户,备份您的设置和用户数据,并在[多用户模式](/Administration/multi-user.md)下管理用户角色和权限。 #### 账户 在账户对话框中,您可以查看和编辑您的个人资料信息,更改密码,并管理账户设置。 **个人资料信息** * 显示名称(通过铅笔图标编辑) * 用户头像(也可以使用[角色](/Usage/User_Settings/User_Settings.md#personas)更改) * 账户标识 * 用户角色 * 账户创建日期 * 密码状态(锁定/解锁图标表示保护状态) **账户操作** * **设置快照**:创建、管理和恢复用户设置备份 * **下载备份**:导出所有用户数据的完整备份 * **更改密码**:更新您的账户安全凭证 **危险区域** 需谨慎使用的关键账户操作: * **重置设置**:将所有设置恢复为出厂默认值 * **重置所有**:完全清除账户并恢复出厂设置 #### 管理面板 !!! 适用于:[多用户模式](/Administration/multi-user.md) 多账户功能需要在 config.yaml 中将 `enableUserAccounts` 设置为 true。 !!! 选择**管理用户**以查看和管理现有用户账户。 ##### 用户资料 - 自定义头像管理(上传/删除) - 显示名称和标识 - 角色和状态信息 - 账户创建日期 - 密码保护状态 ##### 账户控制 - 编辑显示名称 - 启用账户 - 禁用账户 - 提升为管理员 - 降级为普通用户 ##### 管理操作 - 下载用户数据备份 - 更改用户密码 - 删除账户 ##### 新用户 选择**新用户**以创建新用户账户。 * 显示名称*(例如:"John Snow") * 用户标识*(仅限小写字母、数字和破折号) * 密码(可选) * 密码确认 创建新用户时会自动在 /data/ 目录中生成一个以用户标识为名的子文件夹。 #### 登出 !!! 适用于:[多用户模式](/Administration/multi-user.md) !!! 退出当前会话。 ### 设置搜索 一个方便的搜索栏,帮助您快速找到特定设置: * 输入任何关键词以过滤和突出显示用户设置中的任何位置的设置 * 搜索设置名称和描述 * 帮助更高效地导航复杂设置 ## UI 主题 根据您的偏好更改聊天界面的外观。 有关 **用户设置**中此部分设置的更多信息,请参阅 [UI 自定义](uicustomization.md#UI-主题)。 ## 角色处理 * **角色列表子标题**:选择在 [ 角色](/Usage/Characters/characterdesign.md) 列表中角色名称下显示的其他信息: - 角色版本 - 创建者 * **导入卡片标签**:控制导入角色卡片时如何处理标签: - 询问 - 每次导入时显示对话框 - 无 - 不导入任何标签 - 全部 - 导入所有标签 - 现有 - 仅导入已存在的标签 * **高级角色搜索**:启用时,使用模糊匹配并搜索所有角色数据字段,而不仅仅是名称。 * **优先使用角色提示词**:如果启用,在可用时使用角色卡片的系统提示词覆盖。 * **优先使用角色指令**:如果启用,在可用时使用角色卡片的历史后指令覆盖。 * **永不调整头像大小**:防止裁剪/调整导入的角色图像大小。禁用时,图像会调整为 512x768。 * **显示头像文件名**:在角色列表中显示角色头像的实际文件名。 * **防剧透模式**:在编辑器面板中将角色定义隐藏在剧透按钮后面。 ## 杂项 * **重新加载聊天**:重新加载并重绘当前聊天。 * **[调试菜单](#debug-menu)**:访问调试选项。 * **平滑流式传输**:实验性功能,用于更平滑的文本生成。包括速度控制滑块。 * **[消息声音](uicustomization.md#消息声音)**:在消息生成完成时播放声音。 - **仅背景声音**:仅在浏览器标签未聚焦时播放声音。 * **宽松 API URL**:减少 API URL 的格式要求。 * **知识库导入对话框**:导入带有嵌入知识的角色时显示世界信息/知识库导入对话框。 * **自动选择输入文本**:点击某些输入字段时自动选择文本。 * **Markdown 快捷键**:启用 markdown 格式化的键盘快捷键。 * **恢复用户输入**:在页面刷新时保留未保存的用户输入。 * **可移动 UI**:允许通过拖动重新定位 UI 元素(仅限 PC)。 - **重置**按钮以恢复默认位置 - 用于保存/加载 UI 布局的预设系统 ## 聊天/消息处理 ### 消息显示设置 控制如何在聊天界面中加载和显示消息。这些设置影响整体聊天体验和性能。 * **加载消息数量**:分页前加载的聊天历史消息数量(0 = 全部) * **流式传输 FPS**:流式文本的更新速度(5-100 FPS) * **示例消息行为**: - 逐步推出 - 始终包含示例 - 永不包含示例 ### 输入和响应控制 决定如何发送消息以及 AI 如何继续其响应的设置。 * **回车发送**:选择禁用、自动(PC)或启用 * **"发送"继续**:使用发送按钮继续 AI 响应 * **快速"继续"按钮**:显示扩展 AI 最后消息的按钮 * **快速"扮演"按钮**:显示单消息角色扮演的按钮 * **滑动**:显示替代 AI 响应的箭头按钮(PC 和移动设备) * **手势**:启用生成的滑动手势(仅限移动设备) ### 自动管理 帮助管理聊天流程和内容的自动化功能。 * **自动加载最后聊天**:启动时自动加载最近的聊天 * **自动滚动聊天**:自动滚动到最新消息 * **自动保存消息编辑**:无需确认即可保存消息编辑 * **确认删除消息**:删除消息前提示 * **自动修复 Markdown**:自动纠正 markdown 格式 #### 自动滑动 根据可配置的标准自动拒绝和重新生成 AI 消息。 * **启用自动滑动**:自动滑动功能的主开关 * **最小生成消息长度**:如果消息短于此值则触发自动滑动 * **黑名单词**:可触发自动滑动的词列表,用逗号分隔 * **触发滑动的黑名单词数**:必须检测到的最小黑名单词数以触发自动滑动 #### 自动继续 如果模型在达到特定长度之前停止,则自动继续响应。 这让您的 AI 可以分多个部分写长响应,因此您可以使用较短的[响应长度设置](/Usage/Common-Settings.md#回应长度tokens)同时仍获得长回复。 它不会让 AI 写出超出其原本会写的内容。要求 AI 继续一个它认为"已完成"的消息通常不会奏效。有关其他想法,请参阅[如何让 AI 写更多?](/Usage/faq.md#如何让-AI-写得更多)。 * **启用自动继续**:自动继续功能的主开关 * **允许聊天完成 API**:为聊天完成 API 端点启用自动继续功能 * **目标长度(tokens)**:所需的消息长度(以 tokens 为单位)- 如果消息短于此值将触发继续(0-1024) ### 消息格式和显示 控制如何格式化消息以及显示什么内容。 * **禁止外部媒体**:阻止来自外部域的嵌入媒体 * **在响应中显示 {\{char}}:**:如果生成则保留响应中的角色名称前缀 * **在响应中显示 {\{user}}:**:如果生成则保留响应中的用户名称前缀 * **在响应中显示标签**:允许在响应中将(某些)HTML 标签显示为 HTML * **在群组中放宽消息修剪**:允许 AI 在群组聊天中为其他角色发言,而不是停止响应生成 * **显示群组聊天队列**:在群组聊天的角色列表中显示响应顺序 ### 提示词检查和调试 * **将提示词记录到控制台**:将提示词输出到浏览器控制台 * **请求 token 概率**:从 API 请求 AI 响应的 token 概率。在可用的情况下,这些可以在 [Token 概率](../../Usage/Chatting/index.md#Token-概率面板)中查看。 ### 自动完成 - 自动隐藏详情 - 匹配样式(开头匹配/包含/模糊) - 视觉样式(主题/深色/浅色) - 键盘选择选项 - 字体缩放 - 宽度控制 ## STscript 设置 [STscript 解析器](/For_Contributors/st-script.md#parser-flags)的配置选项。 ### STRICT_ESCAPING * Pipes don't need to be escaped in quoted values. * A backslash in front of a symbol can be escaped to provide the literal backslash followed by the functional symbol. See [Strict Escaping](/For_Contributors/st-script.md#strict-escaping) for more information. ### REPLACE_GETVAR Helps to avoid double-substitutions when the variable values contain text that could be interpreted as macros. See [Replace Variable Macros](/For_Contributors/st-script.md#replace-variable-macros) for more information. ## Debug menu !!! warning These functions are intended for advanced users only. Do not use them unless you fully understand their consequences. !!! The Debug Menu provides functionality for troubleshooting, maintenance, and development purposes. These functions should be used with caution as they can significantly impact your SillyTavern installation. Because extensions can add debug functions, the available options will vary depending on the extensions you have installed. ### Translation & Locale Functions * **Get missing translations**: Analyzes the current locale (or all locales if English is selected) for missing translations and outputs results to browser console * **Apply locale**: Forces a refresh of the current language settings by reapplying the selected locale ### Cache & Storage Management * **Clear WebSearch cache**: Removes all stored search results from local cache * **Purge all vector indices**: Completely removes all stored vectors across all sources * **Reset token cache**: Clears stored token counts, forcing complete re-tokenization of all chats * **Delete itemized prompts**: Removes all itemized prompts from local storage ### Data & Statistics * **Refresh Stat File**: Rebuilds the statistics file using existing chat data * **Backfill token counters**: Recalculates token counts for all messages in current chat - Useful when switching between models with different tokenizers - Triggers chat reload after completion - Visual changes only, does not modify chat content ### API & Extension Testing * **Change Mancer base URL**: Modify the base URL for Mancer API server * **Test WebSearch extension**: Performs a test search using current settings * **Send a generation request**: Tests text generation using the currently selected API ### System & Debug Tools * **Force onboarding**: Restarts the onboarding process * **Toggle event tracing**: Enables/disables event tracking for debugging * **Copy ST setup**: [Work in Progress] Copies system configuration data to clipboard for bug reports Each function can be executed using the "Execute" button beneath its description. Consider backing up your data before using these tools, as some operations cannot be undone. ===== Usage/User_Settings/Visual-Novel.md (https://sillytaverncn.net/usage/user-settings/visual-novel/) ===== --- order: user-settings-10 tags: [ visual novel, vn, ] route: /usage/user-settings/visual-novel/ --- # 视觉小说(VN)模式 视觉小说模式是 SillyTavern 中的一种特殊屏幕布局,允许您与带有精灵图(或其角色卡片图像)的角色聊天,类似于《心跳文学部》、《灰色的果实》、《Fate: Stay/night》等著名视觉小说游戏的风格。 ## 切换视觉小说模式 ### 启用视觉小说模式 视觉小说模式是 SillyTavern 的内置功能,可以通过进入*用户设置*(用户设置图标)并在*无文本阴影*下方勾选**视觉小说模式**来切换。 ![用户设置](/static/vn/vn-mode-toggle.png) ### 禁用视觉小说模式 禁用视觉小说模式的步骤与启用相同。取消勾选视觉小说模式,您就会回到正常的聊天界面。 !!! warning 关于带有 VN 扩展的 VN 模式 某些扩展(如 Prome VN 扩展)在使用其各自的 VN 模式时会自动开启"视觉小说模式"。从*用户设置*菜单启用/禁用 VN 模式也会影响这些扩展。 !!! ## 视觉小说界面 ![VN 显示](/static/vn/vn-display.png) 在视觉小说模式下,界面略有改变以适应显示在中央的角色精灵图(或角色卡片图像)。然而,在多角色群聊中,角色精灵图会相互分散开来,如下图所示。 ![群组 VN 显示](/static/vn/group-vn-display.png) ### 带有 MovingUI 的 VN 模式 !!! info 要切换 MovingUI,请进入*用户设置*并勾选**MovingUI**。请注意,此功能**仅**适用于桌面设备。 !!! 如果在*用户设置*中启用了**MovingUI**,您可以移动精灵图(或角色卡片图像)到屏幕上的特定位置。 !!! warning 关于精灵图大小 如果您的角色精灵图相对较大,使用 MovingUI 移动某些精灵图可能会比较困难,因为拖动精灵图的按钮可能被现有精灵图覆盖。您可能需要多次移动它们,特别是当屏幕上有更多角色时,以获得更好的布局。 !!! ![群组 VN 显示(MovingUI)](/static/vn/vn-group-display-movingui.png) ## 获取角色精灵图 获取角色精灵图可以通过浏览网络寻找现有精灵图,比如来自视觉小说或使用视觉小说功能的游戏(如 DDLC 或 CounterSide)中的现有角色。如果您想要的角色还没有精灵图,您还有以下几个选择: 1. 在角色帖子中搜索精灵图 ZIP 包或精灵图包链接。 !!! info 一些机器人创建者可能会在发布机器人时附带精灵图包(可能在同一帖子中或在精灵图频道中)。搜索这些帖子,看看是否有人已经制作了您想要的角色的精灵图。 !!! 2. 使用 LoRAs 和 Stable Diffusion 创建自己的精灵图。 !!! warning 从头开始生成精灵图非常耗时(特别是如果您的角色没有现成的 LoRAs 和/或您想使用的 Stable Diffusion 模型),并且需要decent的硬件配置,如果您计划制作 28 个表情精灵图而不是 6 个,以及如果您使用 SDXL 和/或将精灵图提升到更高分辨率,这一点尤为重要。 !!! 3. 使用角色卡片图像。虽然它可能不像精灵图,但至少您有东西可以在屏幕上看。但是,VN 模式下不能使用多个角色卡片。 !!! 使用 Prome 视觉小说扩展的角色卡片图像 在 Prome 视觉小说扩展 1.0.6+ 版本中,有一个名为`将角色卡片模拟为精灵图`的功能,允许您通过将角色卡片用作聊天中的精灵图来进行同时包含精灵图和非精灵图角色的群组聊天。 ![角色卡片群组聊天](/static/vn/extensions/prome/card-emulation.png) !!! ## VN 扩展 ### Prome 视觉小说扩展 Prome 视觉小说扩展是由 Bronya Rand 和 Prometheus 开发的认可第三方扩展,它进一步增强了 SillyTavern 中的视觉小说体验,具有诸如信箱模式(使视觉小说界面更"电影化")、带有角色精灵图变暗的焦点模式、传统 VN 模式(聊天中只显示最后一条消息)等功能,并计划添加更多功能! | 信箱模式 | 传统 VN 模式 | |:------------------------------------------------------------------------:|:----------------------------------------------------------------------:| | ![水平信箱模式](/static/vn/extensions/prome/horizontal.png) | ![传统 VN 模式](/static/vn/extensions/prome/single-message.png) | | 隐藏对话框 | 焦点模式(带精灵图变暗) | |:---------------------------------------------------------:|:------------------------------------------------------------------------:| | ![对话框隐藏](/static/vn/extensions/prome/sheld_hide.png) | ![带精灵图变暗的焦点模式](/static/vn/extensions/prome/defocus.png) | 要安装 Prome 视觉小说扩展,您可以通过进入`下载扩展和资源`并找到*Prome 视觉小说扩展*来安装,或按照 [Prome 视觉小说扩展](https://github.com/Bronya-Rand/Prome-VN-Extension?tab=readme-ov-file#installation-and-usage) Github 页面上的安装说明进行操作。调整 Prome 的设置可以在*扩展* -> **Prome(视觉小说扩展)**中找到,或通过 🪄(魔杖)菜单访问。 ===== Usage/User_Settings/index.md (https://sillytaverncn.net/usage/user-settings/) ===== --- order: 120 icon: gear route: /usage/user-settings/ --- # 用户设置 :::callout **[UI 自定义](uicustomization.md)** 更改聊天界面的主题、外观和感觉以适应您的偏好。 ::: :::callout **[视觉小说模式](Visual-Novel.md)** 像在《心跳文学部》和其他著名视觉小说游戏中一样,与带有立绘的角色聊天。 ::: ## 常规设置 这些是影响您整体 SillyTavern 体验的核心设置。 ### UI 语言 SillyTavern 的用户界面支持多种语言。语言选择器提供以下选项: * **默认**:如果可用,使用您的系统语言 * **英语**:无论系统设置如何,强制使用英文界面 * 通过下拉菜单可选择其他语言 注意:此设置仅影响用户界面文本。要进行 AI 对话翻译,请使用[聊天翻译](../../extensions/Translation.md)扩展。 ### 软件版本 您当前的 SillyTavern 版本显示在右上角。此信息对于以下情况至关重要: * 排查问题 * 确保与扩展的兼容性 * 确定是否有可用更新 要将 SillyTavern 更新到最新版本,请参阅[更新](/Installation/Updating)文档。 ### 账户管理 控制您的 SillyTavern 用户账户,备份您的设置和用户数据,并在[多用户模式](/Administration/multi-user.md)中管理用户角色和权限。 #### 账户 在账户对话框中,您可以查看和编辑您的个人资料信息、更改密码以及管理账户设置。 **个人资料信息** * 显示名称(可通过铅笔图标编辑) * 用户头像(也可以使用[人格面具](/Usage/User_Settings/User_Settings.md#personas)进行更改) * 账户名称 * 用户角色 * 账户创建日期 * 密码状态(锁定/解锁图标表示保护状态) **账户操作** * **设置快照**:创建、管理和恢复用户设置的备份 * **下载备份**:导出所有用户数据的完整备份 * **更改密码**:更新您的账户安全凭证 **危险区域** 应谨慎使用的关键账户操作: * **重置设置**:将所有设置恢复为出厂默认值 * **重置所有内容**:完全清除账户并恢复出厂设置 #### 管理面板 !!! 适用于:[多用户模式](/Administration/multi-user.md) 多账户功能需要在 config.yaml 中将 `enableUserAccounts` 设置为 true。 !!! 选择**管理用户**以查看和管理现有用户账户。 ##### 用户配置文件 - 自定义头像管理(上传/删除) - 显示名称和账户名称 - 角色和状态信息 - 账户创建日期 - 密码保护状态 ##### 账户控制 - 编辑显示名称 - 启用账户 - 禁用账户 - 提升为管理员 - 降级为普通用户 ##### 管理操作 - 下载用户数据备份 - 更改用户密码 - 删除账户 ##### 新用户 选择**新用户**以创建新用户账户。 * 显示名称*(例如,"John Snow") * 用户名称*(仅限小写字母、数字和破折号) * 密码(可选) * 密码确认 创建新用户会自动在 /data/ 目录中生成一个子文件夹,使用用户的名称作为文件夹名称。 #### 登出 !!! 适用于:[多用户模式](/Administration/multi-user.md) !!! 退出当前会话。 ### 设置搜索 一个方便的搜索栏,可帮助您快速找到特定设置: * 输入任何关键字以在用户设置中过滤和突出显示设置 * 搜索设置名称和描述 * 帮助更有效地浏览复杂设置 ## UI 主题 更改聊天界面的外观以适应您的偏好。 有关 **用户设置**这一部分中的设置的更多信息,请参阅 [UI 自定义](uicustomization.md#ui-theme)。 ## 角色处理 * **角色列表副标题**:选择在[ 角色](/Usage/Characters/characterdesign.md)列表中角色名称下显示的附加信息: - 角色版本 - 创建者 * **导入角色卡标签**:控制导入角色卡时如何处理标签: - 询问 - 为每次导入显示对话框 - 无 - 不导入任何标签 - 全部 - 导入所有标签 - 现有 - 仅导入已存在的标签 * **高级角色搜索**:启用后,使用模糊匹配并搜索所有角色数据字段,而不仅仅是名称。 * **优先使用角色提示词**:如果启用,在可用时使用角色卡的系统提示词覆盖。 * **优先使用角色指令**:如果启用,在可用时使用角色卡的历史后指令覆盖。 * **从不调整头像大小**:防止裁剪/调整导入的角色图像大小。禁用时,图像将调整为 512x768。 * **显示头像文件名**:在角色列表中显示角色头像的实际文件名。 * **无剧透模式**:在编辑器面板中将角色定义隐藏在剧透按钮后面。 ## 杂项 * **重新加载聊天**:重新加载并重绘当前聊天。 * **[调试菜单](#debug-menu)**:访问调试选项。 * **平滑流式传输**:通过逐字母显示文本来平滑流式生成。包括速度控制滑块。 * **流式淡入**:对流式文本应用淡入效果。可以与平滑流式传输一起使用或单独使用。 * **[消息声音](uicustomization.md#message-sound)**:在消息生成完成时播放声音。 - **仅后台声音**:仅在浏览器标签未聚焦时播放声音。 * **宽松的 API URL**:降低 API URL 的格式要求。 * **Lorebook 导入对话框**:在导入带有嵌入式知识的角色时显示世界信息/Lorebook 的导入对话框。 * **自动选择输入文本**:单击某些输入字段时自动选择文本。 * **Markdown 热键**:启用 Markdown 格式化的键盘快捷键。 * **恢复用户输入**:刷新页面时保留未保存的用户输入。 * **MovingUI**:允许通过拖动重新定位 UI 元素(仅限 PC)。 - **重置**按钮以恢复默认位置 - 用于保存/加载 UI 布局的预设系统 ## 聊天/消息处理 ### 消息显示设置 控制消息在聊天界面中的加载和显示方式。这些设置会影响整体聊天体验和性能。 * **要加载的消息数**:分页前要加载的聊天历史消息数(0 = 全部) * **流式 FPS**:流式文本的更新速度(5-100 FPS) * **示例消息行为**: - 逐步推出 - 始终包含示例 - 从不包含示例 ### 输入和响应控制 确定消息如何发送以及 AI 如何继续其响应的设置。 * **回车发送**:在禁用、自动(PC)或启用之间选择 * **"发送"继续**:使用发送按钮继续 AI 响应 * **快速"继续"按钮**:显示按钮以扩展 AI 的最后一条消息 * **快速"模仿"按钮**:显示单消息角色模仿的按钮 * **滑动**:显示箭头按钮以获取备选 AI 响应(PC 和移动设备) * **手势**:启用用于生成的滑动手势(仅限移动设备) ### 自动管理 帮助管理聊天流程和内容的自动化功能。 * **自动加载最后聊天**:启动时自动加载最近的聊天 * **自动滚动聊天**:自动滚动到最新消息 * **自动保存消息编辑**:无需确认即保存消息编辑 * **确认消息删除**:删除消息前提示 * **自动修复 Markdown**:自动更正 Markdown 格式 #### 自动滑动 根据可配置的条件自动拒绝并重新生成 AI 消息。 * **启用自动滑动**:自动滑动功能的主开关 * **最小生成消息长度**:如果消息短于此值,则触发自动滑动 * **黑名单词汇**:可以触发自动滑动的词汇列表,用逗号分隔 * **触发滑动的黑名单词汇数量**:必须检测到的最小黑名单词汇数量才能触发自动滑动 #### 自动继续 如果模型在达到特定长度之前停止,则自动继续响应。 这让您的 AI 可以分多个部分写出长响应,这样您就可以使用较短的[响应长度设置](/Usage/Common-Settings.md#response-tokens),同时仍然获得长回复。 它不会让 AI 写得比原本更多。要求 AI 继续它认为"已完成"的消息通常不起作用。请参阅[如何让 AI 写得更多?](/Usage/faq.md#how-to-make-the-ai-write-more)了解其他想法。 * **启用自动继续**:自动继续的主开关 * **允许用于聊天补全 API**:为聊天补全 API 端点启用自动继续功能 * **目标长度(令牌)**:所需的消息长度(以令牌为单位)- 如果消息短于此值将触发继续(0-1024) ### 消息格式和显示 控制消息的格式和显示的内容。 * **禁止外部媒体**:阻止来自外部域的嵌入式媒体 * **在响应中显示 {\{char}}:**:如果生成,则在响应中保留角色名称前缀 * **在响应中显示 {\{user}}:**:如果生成,则在响应中保留用户名称前缀 * **在响应中显示标签**:允许响应中的(某些)HTML 标签显示为 HTML * **在群组中放宽消息修剪**:允许 AI 在群聊中为其他角色发言,而不是停止响应生成 * **显示群聊队列**:在群聊的角色列表中显示响应顺序 * **固定问候消息样式**:始终渲染问候语中的样式标签,即使由于延迟加载而卸载了消息。 ### 提示词检查和调试 * **将提示词记录到控制台**:将提示词输出到浏览器控制台 * **请求令牌概率**:从 API 请求 AI 响应的令牌概率。在可用的情况下,可以在 [令牌概率](../../Usage/Chatting/index.md#token-probabilities-panel)中查看这些内容。 ### 自动补全 - 自动隐藏详细信息 - 匹配样式(以...开头/包含/模糊) - 视觉样式(主题/深色/浅色) - 键盘选择选项 - 字体缩放 - 宽度控制 ## STscript 设置 [STscript 解析器](/For_Contributors/st-script.md#parser-flags)的配置选项。 ### STRICT_ESCAPING * 在引用值中不需要转义管道符。 * 符号前面的反斜杠可以被转义以提供字面反斜杠后跟功能符号。 有关更多信息,请参阅[严格转义](/For_Contributors/st-script.md#strict-escaping)。 ### REPLACE_GETVAR 帮助避免在变量值包含可能被解释为宏的文本时的双重替换。 有关更多信息,请参阅[替换变量宏](/For_Contributors/st-script.md#replace-variable-macros)。 ## 清理菜单 清理菜单提供了一个数据维护工具,可帮助您识别并从 SillyTavern 安装中删除不必要的文件。此功能有助于保持数据目录的组织性,并可以释放大量磁盘空间。 !!! warning "重要警告" 清理工具将永久删除文件。**此操作无法撤消!** 如果手动上传到 `/data/user/files/` 和 `/data/user/images/` 目录的文件未与聊天消息或数据库条目关联,则会被删除。 如果不确定,请在使用清理菜单之前备份您的数据。 !!! ### 如何使用清理 1. 单击**杂项**部分下的**清理**按钮 2. 单击**扫描**以分析您的安装。根据数据目录的大小,这可能需要一些时间 3. 查看找到的文件类别 4. 使用**查看**在删除前预览文件内容 5. 使用**下载**在删除前保存文件 6. 根据需要删除单个文件或整个类别 ### 清理类别 清理工具将散落的文件扫描为以下类别: #### 文件 * **它找到什么**:未与聊天消息或数据库条目关联的文件 * **位置**:`/data//user/files/` * **风险**:⚠️ **将删除未在聊天中引用的手动上传文件** * **何时清理**:如果您不需要未引用的文件,则可以安全删除 #### 图像 * **它找到什么**:未与聊天消息关联的图像 * **位置**:`/data//user/images/` * **风险**:⚠️ **将删除未在聊天中引用的手动上传图像** * **何时清理**:如果您不需要未引用的图像,则可以安全删除 #### 聊天 * **它找到什么**:与已删除角色关联的聊天文件 * **位置**:`data//chats/` * **风险**:⚠️ **孤立的聊天将永久丢失** * **何时清理**:如果您有意删除了角色并且不再需要其聊天历史记录,则可以安全删除 #### 群聊 * **它找到什么**:与已删除群组关联的聊天文件 * **位置**:`data//group chats/` * **风险**:⚠️ **孤立的群聊将永久丢失** * **何时清理**:如果您有意删除了群组并且不再需要其聊天历史记录,则可以安全删除 #### 头像缩略图 * **它找到什么**:缺失或已删除角色的头像缩略图 * **位置**:`data//thumbnails/avatar` * **风险**:✅ **可以安全删除** - 缩略图会在需要时自动重新生成 * **何时清理**:始终可以安全清理,有助于释放空间 #### 背景缩略图 * **它找到什么**:缺失或已删除背景的缩略图 * **位置**:`data//thumbnails/bg` * **风险**:✅ **可以安全删除** - 缩略图会在需要时自动重新生成 * **何时清理**:始终可以安全清理,有助于释放空间 #### 聊天备份 * **它找到什么**:自动生成的聊天备份 * **位置**:`data//backups/chat_*` * **风险**:⚠️ **备份文件将永久丢失** * **何时清理**:考虑保留最近的备份,但较旧的备份可以安全删除 #### 设置备份 * **它找到什么**:自动生成的设置备份 * **位置**:`data//backups/settings_*` * **风险**:⚠️ **设置备份文件将永久丢失** * **何时清理**:考虑保留最近的备份,但较旧的备份可以安全删除 ## 调试菜单 !!!warning 这些功能仅供高级用户使用。 除非您完全理解其后果,否则请勿使用它们。 !!! 调试菜单提供了用于故障排除、维护和开发目的的功能。这些功能应谨慎使用,因为它们可能会显著影响您的 SillyTavern 安装。 由于扩展可以添加调试功能,因此可用选项将根据您安装的扩展而有所不同。 ### 翻译和区域设置功能 * **获取缺失的翻译**:分析当前区域设置(如果选择英语,则分析所有区域设置)中缺失的翻译,并将结果输出到浏览器控制台 * **应用区域设置**:通过重新应用所选区域设置来强制刷新当前语言设置 ### 缓存和存储管理 * **清除 WebSearch 缓存**:从本地缓存中删除所有存储的搜索结果 * **清除所有向量索引**:完全删除所有来源的所有存储向量 * **重置令牌缓存**:清除存储的令牌计数,强制对所有聊天进行完全重新令牌化 * **删除逐项提示词**:从本地存储中删除所有逐项提示词 ### 数据和统计 * **刷新统计文件**:使用现有聊天数据重建统计文件 * **回填令牌计数器**:重新计算当前聊天中所有消息的令牌计数 - 在使用不同令牌化器的模型之间切换时很有用 - 完成后触发聊天重新加载 - 仅视觉更改,不修改聊天内容 ### API 和扩展测试 * **更改 Mancer 基础 URL**:修改 Mancer API 服务器的基础 URL * **测试 WebSearch 扩展**:使用当前设置执行测试搜索 * **发送生成请求**:使用当前选择的 API 测试文本生成 ### 系统和调试工具 * **强制引导**:重新启动引导过程 * **切换事件跟踪**:启用/禁用用于调试的事件跟踪 * **复制 ST 设置**:[进行中] 将系统配置数据复制到剪贴板以用于错误报告 每个功能都可以使用其描述下方的"执行"按钮来执行。在使用这些工具之前请考虑备份您的数据,因为某些操作无法撤消。 ===== Usage/User_Settings/uicustomization.md (https://sillytaverncn.net/usage/user-settings/uicustomization/) ===== --- order: 20 route: /usage/core-concepts/uicustomization/ --- --- ## Message Sound To play your own custom sound on receiving a new message from bot, replace the following MP3 file in your SillyTavern folder: `public/sounds/message.mp3` Plays at 80% volume. If the "[Background Sound Only](index.md#miscellaneous)" option is enabled, the sound plays only if SillyTavern window is **unfocused**. ## Formulas Rendering To enable math formulas rendering, use the [LaTeX extension](https://github.com/SillyTavern/Extension-LaTeX). To get the extension, you need to install it via the "Download Extensions & Assets" menu in SillyTavern. Type your formulas in code blocks with `latex` or `asciimath` language identifiers for LaTeX and AsciiMath respectively. The extension uses [KaTeX](https://katex.org/) for rendering.
```latex
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
```

```asciimath
int_{-oo}^{oo} e^{-x^2} dx = sqrt{pi}
```
!!!info Deprecation notice The legacy `$` and `$$` wrapper syntax is no longer supported. Please use the following regex scripts to polyfill the old syntax: * [$$ - LaTeX](https://github.com/SillyTavern/Extension-LaTeX/raw/refs/heads/main/assets/$$_-_latex.json) * [$ - AsciiMath](https://github.com/SillyTavern/Extension-LaTeX/raw/refs/heads/main/assets/$_-_asciimath.json) --- # UI 自定义 ## UI 主题 ### 主题管理 主题文件允许您保存、共享和重复使用您的 UI 自定义设置。您可以维护多个主题以适应不同的心情或用途,并在它们之间即时切换。 * 导入/导出主题文件 * 删除现有主题 * 保存对当前主题的更改 * 另存为新主题 本节中的所有设置都保存到当前主题。如果您切换主题,这些设置将被新主题的设置替换。 ### 显示设置 这些显示选项影响角色和消息在聊天界面中的呈现方式。 #### 头像样式 在圆形、方形或矩形之间选择。 #### 聊天样式 | 样式 | 描述 | [斜杠命令](/For_Contributors/st-script.md#ui-styling) | |--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------| | **平面** | 干净连续的"聊天日志"样式,一个让您的 AI 互动栩栩如生的平面画布。 | `/flat`
`/default` | | **气泡** | "即时通讯"样式,每条消息都有独特的气泡,令人愉悦的圆角和微妙的 3D 效果。 | `/bubble`
`/bubbles` | | **文档** | 紧凑的文档式外观,带有点击编辑模式和以文本为中心的布局。隐藏过去消息的头像、时间戳和消息控制按钮。 | `/single`
`/story` | ### 主题颜色 自定义每个 UI 元素的配色方案,创建您完美的主题。可以使用颜色选择器选择颜色,并在适用的情况下包括透明度选项。 * 主要文本 * 斜体文本 * 下划线文本 * 引用文本 * 文本阴影 * 聊天背景 * UI 背景 * UI 边框 * 用户消息 * AI 消息 ### 布局和视觉设置 使用这些滑块微调界面的视觉呈现。 * **聊天宽度**:调整聊天窗口宽度(屏幕的 25-100%) * **字体缩放**:自定义文本大小(0.5-1.5 倍) * **模糊强度**:控制 UI 面板模糊度(0-30) * **阴影宽度**:调整文本阴影强度(0-5) ### 主题开关 这些开关控制各种 UI 功能和行为。一些选项可以提高低端设备的性能,而其他选项则为聊天界面添加有用的信息或功能。 * **减少动画**:禁用动画和过渡效果 * **无模糊效果**:移除背景模糊以提高性能 * **无文本阴影**:禁用文本阴影效果 * **[视觉小说模式](Visual-Novel.md)**:带背景精灵的紧凑聊天 * **展开消息操作**:始终显示完整的消息上下文菜单 * **禅意滑块**:简化的参数控制 * **疯狂实验室模式**:无限制的参数范围 * **消息计时器**:显示 AI 回应生成时间 * **聊天时间戳**:显示消息时间戳 * **模型图标**:显示消息的 AI 模型图标 * **消息 ID**:显示顺序消息编号 * **隐藏聊天头像**:从聊天中移除头像 * **消息 Token 计数**:显示每条消息的 token 数 * **紧凑输入区域**:单行输入(仅限移动设备) * **所有消息显示滑动编号**:在所有消息上显示滑动编号(移动设备) * **角色快速切换**:收藏角色的快速选择按钮 * **头像悬停放大**:悬停时的头像缩放效果 * **标签作为文件夹**:使用标签作为文件夹组织角色 ### 自定义 CSS 允许您应用自定义 CSS 样式以进一步自定义聊天界面的外观。 使用 **展开** 来扩展编辑器窗口以获得更好的可见性和编辑体验。 如果您切换主题,您的自定义 CSS 将被新主题的自定义 CSS 替换。如果您想在切换主题时保留您的自定义 CSS,请确保将其保存到主题中。 如果您使用大量自定义 CSS,或想在多个主题中使用相同的自定义 CSS,非官方的 [CSS Snippets 扩展](https://github.com/LenAnderson/SillyTavern-CssSnippets) 可以帮助您管理和组织您的自定义 CSS。 ## 消息声音 要在收到机器人的新消息时播放您自己的自定义声音,请替换 SillyTavern 文件夹中的以下 MP3 文件: `public/sounds/message.mp3` 以 80% 音量播放。 如果启用了"[仅背景声音](User_Settings.md#杂项)"选项,则仅在 SillyTavern 窗口**未聚焦**时播放声音。 有关更多信息,请参阅[杂项](User_Settings.md#杂项)。 ## 公式渲染 要启用数学公式渲染,请使用 [LaTeX 扩展](https://github.com/SillyTavern/Extension-LaTeX)。要获取该扩展,您需要通过 SillyTavern 中的"下载扩展和资源"菜单安装它。 在代码块中使用 `latex` 或 `asciimath` 语言标识符分别输入 LaTeX 和 AsciiMath 公式。该扩展使用 [KaTeX](https://katex.org/) 进行渲染。
```latex
\int_{-\infty}^{\infty} e^{-x^2} dx = \sqrt{\pi}
```

```asciimath
int_{-oo}^{oo} e^{-x^2} dx = sqrt{pi}
```
!!! info 弃用通知 不再支持传统的 `$` 和 `$$` 包装语法。请使用以下正则表达式脚本来兼容旧语法: * [$$ - LaTeX](https://github.com/SillyTavern/Extension-LaTeX/raw/refs/heads/main/assets/$$_-_latex.json) * [$ - AsciiMath](https://github.com/SillyTavern/Extension-LaTeX/raw/refs/heads/main/assets/$_-_asciimath.json) !!! ===== Usage/branches.md (https://sillytaverncn.net/usage/branches/) ===== --- redirect: /installation/ visibility: hidden --- # 分支 此页面已移至[安装](/Installation/index.md)。您将很快被重定向到那里。如果没有被重定向,请点击[这里](/Installation)。 ===== Usage/index.md (https://sillytaverncn.net/usage/) ===== --- order: 40 icon: plus expanded: true --- # 使用指南 以您的方式与 AI 互动。构建您的世界、您的工作或您的梦想。 :::callout ## 入门指南 **[快速入门](/Usage/quick-start.md)** 向 AI 发送您的第一条消息并获得回应 **[聊天](/Usage/Chatting/index.md)** 如何与 AI 聊天并使用聊天界面 **[常见问题](/Usage/Common-Settings.md)** 关于 SillyTavern、AI 模型、创建角色、获得更好回应等常见问题 ::: :::callout ## 基础知识 **[API 连接](/Usage/API_Connections/index.md)** 连接到 AI 模型以生成文本、图像等 **[角色](/Usage/Characters/index.md)** 和 **[个性](/Usage/User_Settings/User_Settings.md#personas)** 创建和使用角色来塑造 AI 的角色,以及定义您的身份的个性 **[回应配置](/Usage/Common-Settings.md)** 和 **[提示词](/Usage/Prompts/prompts.md)** 控制您发送给 AI 的请求以及它如何回应 ::: :::callout ## 基于 SillyTavern 构建 **[世界信息](/Usage/Characters/index.md#world-info)** 管理信息以及何时将其插入提示词中 **[数据库](/Usage/Characters/data-bank.md)** 存储和检索信息以用于 AI 的回应 **[扩展](/extensions/index.md)** 为 AI 或界面添加新功能和能力 **[开发和自动化](/For_Contributors/index.md)** 自动化任务,让您的 AI 与世界互动,并编写您自己的扩展 ::: --- ## 控制面板 从左到右所有按钮的功能: :::callout **[回应配置](/Usage/Common-Settings.md)** 和 **[提示词管理器](/Usage/Prompts/prompt-manager.md)** 控制文本生成和采样。为 Chat Completion API 自定义提示词构建。 ::: :::callout **[API 连接](/Usage/API_Connections/index.md)** 连接到 AI 模型以生成文本、图像等 ::: :::callout **[高级格式化](/Usage/Prompts/advancedformatting.md)** 为 Text Completion API 自定义提示词构建 ::: :::callout **[世界信息](/Usage/Characters/index.md#world-info)** 管理信息以及何时将其插入提示词中 ::: :::callout **[用户设置](/Usage/User_Settings/User_Settings.md)** 更改主题,以及消息和聊天的外观和感觉 ::: :::callout **背景** 更改背景图片 ::: :::callout **[扩展](/extensions/index.md)** 为 AI 或界面添加新功能和能力 ::: :::callout **[个性](/Usage/User_Settings/User_Settings.md#personas)** 创建和管理用于 AI 的个性 ::: :::callout **[角色](/Usage/Characters/index.md)** 创建和管理 AI 使用的角色 ::: ===== Usage/quick-start.md (https://sillytaverncn.net/usage/quick-start/) ===== --- order: 190 icon: rocket route: /usage/quick-start/ --- # 快速入门 !!!light 我完全不知道从何下手。请告诉我使用 SillyTavern 最简单最快的方法。 -- *匿名用户* !!! 您只需几分钟就可以开始使用 SillyTavern。以下是两种简单的入门方式: * 您可以[使用 AI Horde](#使用-ai-horde-快速入门),这是免费的。AI Horde 是一个社区驱动的 AI 服务,提供各种 AI 模型的访问。 * 如果您有 OpenAI 账户或想注册一个,您可以[使用 OpenAI](#使用-openai-快速入门)。 !!!success :beer: 最简单的方式:DeepSeek Tavern 一键启动器 **零依赖、一键启动、开箱即用** — 专为酒馆角色扮演打造。 1. :arrow_down: [下载一键启动器](https://launch.deepseektavern.com) — macOS/Windows 双平台 2. :key: [注册 DeepSeek Tavern](https://deepseektavern.com) 获取 API Key(输入3元/输出6元每百万token) 3. :rocket: 将 API Key 填入启动器,点「一键启动」— 2 分钟开聊 启动器内置 1000+ 角色卡、预设、世界书、正则。去 [角色卡资源库](https://cards.deepseektavern.com) 还能浏览下载更多免费角色卡。 --- ## 使用 AI Horde 快速入门 1. 按照[安装指南](/Installation/index.md)安装并启动 SillyTavern。 2. 在 SillyTavern 的引导界面中,为您的角色输入一个名字。这个名字将在聊天中使用。 ![这是一个可选的标题](/static/quick-start/1_name.png) 3. 点击顶部栏中的 API 连接按钮。 ![这是一个可选的标题](/static/quick-start/2_api_conn.png) 4. 输入 AI Horde 的 API 密钥。您现在可以使用 `0000000000`,或者从 [AI Horde](https://aihorde.net/) 获取一个免费密钥。 ![这是一个可选的标题](/static/quick-start/3_horde_key.png) 5. 选择一些要使用的 AI 模型。只需从顶部选择几个即可。您以后随时可以更改它们。 ![这是一个可选的标题](/static/quick-start/4_horde_models.png) 6. 关闭 API 连接窗口。在底部的聊天框中输入消息并按回车键。 ![这是一个可选的标题](/static/quick-start/5_msg.png) 7. 您的 AI 将在几分钟内回复。您可以继续与它[聊天](/Usage/Chatting/index.md)。成功! ![这是一个可选的标题](/static/quick-start/6_success.png) ## 使用 OpenAI 快速入门 ### 安装 SillyTavern 按照[安装指南](/Installation/index.md)安装并启动 SillyTavern。 ### 获取 OpenAI 访问权限 1. 注册 OpenAI。 2. 访问 3. 点击右上角的账户图标,然后选择查看 API 密钥。 4. 点击"创建新的密钥"。立即将其复制到某处。**不要分享这个密钥。任何拥有它的人都可以使用您的账户使用 GPT,费用由您承担。** ### 配置 SillyTavern 使用您的 API 1. 在 SillyTavern 的顶部栏中,点击 API 连接。 2. 在 API 下,选择 Chat Completion (OpenAI)。 3. 在 Chat Completion Source 下,选择 OpenAI。 4. 粘贴您在上一步中保存的 API 密钥。 5. 点击连接按钮。确认显示有效。 6. 默认情况下,SillyTavern 将使用 GPT-4 Turbo。您可以选择不同的模型,但请了解相关定价。 ### 测试您的设置 1. 在 SillyTavern 的顶部栏中,点击最右侧的角色管理。 2. 选择一个现有角色,如 Seraphina。 3. 在底部的文本框中,向 Seraphina 写些什么,然后按回车键或点击发送按钮。 如果您一切设置正确,几秒钟后,Seraphina 应该会回复。 ===== Usage/update.md (https://sillytaverncn.net/usage/update/) ===== --- redirect: /installation/updating/ visibility: hidden --- # 更新 此页面已移至[安装 > 更新](/Installation/Updating)。您将很快被重定向到那里。如果没有被重定向,请点击[这里](/Installation/Updating)。 ===== Usage/welcome-assistants.md (https://sillytaverncn.net/usage/welcome-assistants/) ===== --- tags: ['>=1.13.0'] icon: people route: /usage/welcome-assistants/ --- # 欢迎页面助手 SillyTavern 具有欢迎屏幕功能,可以使用指定的"助手"角色迎接您。此屏幕在您启动 SillyTavern 而没有活动聊天或关闭最后一个聊天会话后显示。 !!! 注意 如果您在应用启动时看不到欢迎屏幕,请确保 ** 用户设置**面板的"聊天/消息处理"部分中的"自动加载最后的聊天"选项已禁用。如果启用此选项,SillyTavern 将自动加载您的最后一个聊天,而不是显示欢迎屏幕。 !!! ## 欢迎屏幕 当没有活动聊天时,欢迎屏幕提供几个有用的元素: * **SillyTavern 版本:**显示应用程序的徽标和当前版本。 * **快速链接:**便捷访问: * **文档:**打开官方 SillyTavern 文档(您已经在这里了!)。 * **GitHub:**带您前往 SillyTavern GitHub 仓库 ()。 * **Discord:**提供官方 SillyTavern Discord 服务器的链接 ()。 * **临时聊天按钮:**允许您快速开始与默认中性助手的新临时聊天会话,除非您明确保存,否则不会保存到聊天历史记录中。 * **最近聊天部分:**列出您最近的对话以便快速访问。您可以: * 显示或隐藏此部分。 * 如果有超过 3 个聊天可用,则展开列表(最多 15 个最近的聊天)。 ## 临时聊天 !!! 注意 由于技术限制,临时聊天功能不会使用您自定义的欢迎页面助手。它将始终开始一个没有任何额外提示或角色信息的空聊天。 !!! 临时聊天按钮允许您快速开始新的聊天会话,而无需将其保存到聊天历史记录中。这对于测试或随意对话非常有用,而不会使保存的聊天变得混乱。一旦您关闭它或切换到另一个聊天,此聊天将被删除。 * **保存**按钮将允许您将临时聊天导出为 JSONL 文件,稍后可以导入。 * **加载**按钮将允许您恢复之前保存的临时聊天文件。 ## 什么是欢迎页面助手? 欢迎页面助手是您选择在欢迎屏幕上展示的角色。这允许个性化的问候,并提供从一开始就与熟悉的角色开始聊天的快速方式。 ### 设置和取消设置助手 您可以选择您的任何角色作为您的欢迎页面助手。 **设置助手:** 1. 导航到**角色管理**面板(通常通过 图标在右侧边栏中找到)。 2. 在列表中找到您希望设置为助手的角色。 3. 点击"更多...",然后从下拉菜单中选择**"设置/取消设置为欢迎页面助手"**。 4. 角色名称旁边将出现一个小图标 (),表示他们现在是您的活动欢迎页面助手。 **取消设置助手:** 1. 前往角色管理面板。 2. 找到您当前的欢迎页面助手(他们将拥有 图标)。 3. 点击"更多...",然后再次选择**"设置/取消设置为欢迎页面助手"**。 4. 该角色将不再是您的助手, 图标将消失。 5. SillyTavern 将恢复使用默认助手(见下文)。 ### 与助手互动 一旦使用您选择的助手显示欢迎屏幕,只需在屏幕底部的聊天输入栏中输入您的消息并按 Enter 或点击发送按钮。这将开始与您的欢迎页面助手的新聊天会话。 要打开与助手的先前聊天,请使用最近聊天部分或在**管理聊天文件**对话框中找到聊天(可通过 ** 选项**菜单访问)。 ## 默认助手 当您首次与欢迎屏幕互动时,SillyTavern 将自动创建一个名为"Assistant"的默认角色。如果您尚未将特定角色设置为欢迎页面助手,此角色将作为备用选项。 默认助手没有附加任何特定提示,您可以根据需要自由自定义它(例如重命名、添加图片或设置个性)。 * 如果您尚未明确将角色设置为欢迎页面助手,将使用此默认助手。 * 如果您取消设置选择的助手,系统将恢复到此默认助手。 * 如果您设置为助手的角色被删除,系统也将恢复到默认助手。 **注意:**您不能像取消设置您选择的角色那样"取消设置"默认系统助手。要更改默认助手,您必须将您的其他角色之一设置为助手。 ===== api-setup.md (https://sillytaverncn.net/api-setup/) ===== --- title: API 接入指南 description: 如何获取和配置 DeepSeek Tavern Pro API Key --- # API 接入指南 ## 获取 API Key 1. 注册 [deepseektavern.com](https://deepseektavern.com) 2. 控制台 → 令牌管理 → 添加令牌 → 复制密钥 3. 填入启动器即可使用 ## 模型 | 模型名 | 说明 | |--------|------| | deepseek-tavern-v2-pro | 均衡模式 | | deepseek-tavern-v2-pro-low | 自由创作 | | deepseek-tavern-v2-pro-xhigh | 严谨模式 | ## API 端点 `https://deepseektavern.com/v1` 兼容 OpenAI SDK。 ## 价格 | 项目 | 价格(元/百万token) | |------|------| | 输入 | 3 | | 输出 | 6 | | 缓存 | 0.3 | ===== cardbuilder.md (https://sillytaverncn.net/cardbuilder/) ===== --- order: 80 title: 角色卡构建器 · 像素酒馆 Build description: 像素酒馆角色卡构建器(Build):从主题开始、AI 帮你建卡或自己填写,产出角色、封面、世界书与正则,下载后可导入像素酒馆聊天。附 1,238 张原创角色卡与精选示例。 icon: id-card --- # 🎴 角色卡构建器 · 像素酒馆 Build !!!success :beer: 制作你自己的角色卡 **[https://cardbuilder.xstavern.com/](https://cardbuilder.xstavern.com/){target="_blank"}** — 自己填写或让 AI 帮忙,做好后能下载,也能直接导入像素酒馆聊天。 !!! 角色卡构建器(像素酒馆 **Build**)是像素酒馆官方推出的建卡工具。它把过去需要手写 JSON、手动塞 PNG 元数据、自己配世界书和正则的流程,变成了一套**可视化、可撤销、能存草稿**的在线工作台。 不需要懂任何格式规范 —— 填名字、写设定、挑封面,剩下的交给工具。 ## 三种建卡方式 | 方式 | 适合谁 | 你会得到 | |:---|:---|:---| | :one: **从主题开始** | 有喜欢的作品或故事方向 | 选作品或故事主题,做**单张、系列,或挑几张备选** | | :two: **AI 帮我建卡** | 有想法但不想从零写 | 回答几个问题,**生成 2–4 张供你挑选** | | :three: **自己填写** | 想完全掌控设定 | 每一项都能修改,卡壳时也能**让 AI 帮你写** | 三种方式随时可以混用:先用 AI 生成一张草稿,再自己逐项精修;或者自己写主线,让 AI 补世界书和开场白。 ## 能产出什么 一次建卡流程会一起产出角色卡的**完整资源包**: - :bust_in_silhouette: **角色** — 名称、人设、性格、说话方式、开场白、示例对话 - :framed_picture: **封面** — 角色卡的外观形象 - :scroll: **世界书** — 人物、地点、规则和背景知识,随卡保存 - :abacus: **正则** — 处理发给模型的提示词,或整理模型输出的格式 !!!note :bulb: 世界书和正则跟随角色卡一起保存 导入带附件的卡片时,可以选择是否一并导入这些资源 —— 换角色不用重新配一遍。 !!! ## 工作台功能 | 功能区 | 说明 | |:---|:---| | **我的角色卡** | 草稿保存在当前浏览器,可以先存草稿、之后再慢慢补全 | | **下载与导入** | 支持导出,也支持导入已有的 **JSON / PNG** 角色卡 | | **公开角色卡** | 浏览像素酒馆集市上已公开的角色卡,找灵感或直接取用 | | **模型连接** | 连接酒馆账号或自己的模型接口,供 AI 建卡使用 | | **使用教程** | 第一次使用有分步引导 | !!!warning :bulb: 草稿只保存在这个浏览器 换设备前请先**下载备份**。草稿不会自动上云,清除浏览器数据会一并清掉。 !!! ## 原创角色卡示例 构建器产出的角色卡会进入像素酒馆集市。目前在[角色卡集市](/character-cards.md)已收录 **1,238 张**原创角色卡,分属 **115 个系列**: | 系列规模 | 系列数 | 代表系列 | |:---|---:|:---| | 100 张以上 | 3 | 苍蓝学园·星骸录(150)、绯红魔女·审判庭(150)、蔚蓝档案(142) | | 50–99 张 | 1 | 都市异象·术式战线(50) | | 11–49 张 | 2 | 咒术回战(41)、魔法少女的魔女审判(15) | | 10 张制式 | 29 | 校园青春、古风仙侠、陪伴日常、科幻末世、悬疑冒险…… | | 5 张小系列 | 80 | 午夜绒幕、星轨遗梦、霓虹异能局、药灯宫廷…… | ### 精选原创角色卡 下面是几张集市上口碑不错的原创卡,可以看到构建器能达到的设定深度: | 角色 | 系列 / 题材 | 一句话人设 | |:---|:---|:---| | **唐映雪 · 转校生** | 校园青春 | 礼貌、警惕,熟悉以后会变得很会吐槽。想在新学校找到一个不用伪装的朋友圈 | | **顾绮** | 午夜绒幕 | 35 岁剧院投资人。冷静、讲究分寸,擅长用一句话把谈判变成邀请 | | **叶澜** | 星轨遗梦 | 29 岁跃迁领航员。冷静、直接,遇到未知航线时反而最有精神 | | **夏临** | 霓虹异能局 | 33 岁异能犯罪顾问。成熟、强势,喜欢让对方先讲完自己的条件 | | **林晚星 · 夜班电台主持** | 陪伴日常 | 耐心,会把复杂的情绪说得很简单。愿意听你把一件小事从头说到尾 | | **七濑莉央** | 星雾偶像事务所 | 27 岁主唱,元气带头,排练迟到会认真道歉。开唱前敲两下麦架 | #### 设定深度示例 **顾绮 · 午夜绒幕** > 顾绮是「午夜绒幕」中的剧院投资人,35 岁。冷静、讲究分寸,擅长用一句话把谈判变成邀请。 > 目前最想做的是让旧剧院重新开幕 —— 但她收购剧院不是为了赚钱,而是为了找回一段被删掉的家族记录。 > 故事发生在临港旧剧院与雨夜码头。 **叶澜 · 星轨遗梦** > 叶澜是「星轨遗梦」中的跃迁领航员,29 岁。冷静、直接,遇到未知航线时反而最有精神。 > 目前最想做的是把列车带过一条只出现一次的跃迁缝隙 —— 但她曾把一名乘客留在过去的星球,这件事至今没有写进航海日志。 > 故事发生在穿行星海的远行列车与失重观景舱。 **唐映雪 · 转校生** > 唐映雪是「校园青春」里的转校生。礼貌、警惕,熟悉以后会变得很会吐槽。 > 现在最想做的是在新学校找到一个不用伪装的朋友圈 —— 但她离开的上一所学校留下了一段误会。 > 会认真记住你第一次主动叫她名字的时刻。 !!!note :sparkles: 好的原创卡有什么共同点 - **有想做的事** — 角色带着自己的目标进场,而不是等你推动 - **有藏起来的事** — 只有在建立足够信任、或你找到线索后才逐步公开 - **不替你做决定** — 会回应你的选择和情绪,但不会代替你行动 - **配好资源** — 世界书、正则与预设随卡附带,开局即用 !!! ## 建卡建议 1. **先填最小可用集** — 角色名称、设定和开场白,其他内容之后补 2. **让 AI 出草稿,自己定调** — AI 负责重复劳动,人设的方向和取舍由你决定 3. **用"从主题开始"做系列** — 想做一组同一世界观的角色,用系列模式保持设定一致 4. **公开前先自测** — 导入像素酒馆聊几轮,看看角色会不会跳戏、设定有没有前后矛盾 5. **草稿勤下载** — 本地草稿只在这个浏览器,重要作品记得备份 ## 立即开始 :card_index: [打开角色卡构建器](https://cardbuilder.xstavern.com/){target="_blank" .button} :beer: [逛角色卡集市](https://chat.xstavern.com/market){target="_blank" .button} --- !!!note 相关推荐 - [像素酒馆介绍](/pixel-tavern.md) — 角色卡能做什么 - [像素写作台](/novel-studio.md) — 用角色和世界观写长篇小说 - [角色卡集市](https://chat.xstavern.com/market){target="_blank"} — 12.9 万次下载的角色卡库 !!! ===== character-cards.md (https://sillytaverncn.net/character-cards/) ===== --- order: 100 title: 角色卡 · 像素酒馆角色卡集市 description: 像素酒馆角色卡集市收录 1,238 张原创角色卡、115 个系列,累计下载 129,249 次,全部免费。覆盖校园青春、古风仙侠、都市异象、科幻末世、悬疑推理等题材,每张卡自带世界书、正则与预设,支持一键导入 SillyTavern 与像素酒馆。 icon: id-card --- # :flower_playing_cards: 角色卡 · 像素酒馆角色卡集市 !!!success :beer: 上千张原创角色卡,点开就能聊 **[chat.xstavern.com/market](https://chat.xstavern.com/market){target="_blank"}** — 已收录 **1,238 张原创角色卡**、**115 个系列**,累计下载 **129,249** 次。全部免费,登录后即可导入,也能下载 PNG 拿到本地 SillyTavern 用。 !!! 角色卡(Character Card)是 AI 角色扮演的**灵魂文件** —— 它决定了 AI 是谁、什么性格、经历过什么、会怎样回应你。这张页面把像素酒馆角色卡集市里的原创角色卡全部摊开讲清楚:有多少、怎么分类、好在哪、怎么拿到手。 --- ## 一句话认识角色卡 | 你可能想问 | 简短回答 | |:---|:---| | **角色卡是什么?** | 一份描述 AI 角色身份、性格、背景与说话方式的文件,通常是一张内嵌数据的 PNG 图 | | **在哪找角色卡?** | [像素酒馆角色卡集市](https://chat.xstavern.com/market){target="_blank"},1,238 张原创卡 + 公开卡,全部免费 | | **需要付费吗?** | 不需要。角色卡免费,只需要一个能用的大模型接口 | | **能用在本地 SillyTavern 吗?** | 可以。集市里的卡能下载 PNG,直接拖进 SillyTavern 导入 | | **能自己做一张吗?** | 可以,用[角色卡构建器](/cardbuilder.md)可视化建卡,不需要写 JSON | ### 免费角色卡、AI 陪伴、AI 跑团 —— 说的都是这里 - **免费角色卡**:集市里 1,238 张原创角色卡**全部免费**,登录即可在线导入,也能下载 PNG 拿到本地 SillyTavern 用,没有付费墙、没有积分门槛。 - **AI 陪伴**:角色卡不是一次性的对话模板。世界书让角色记住自己的过去,正则与预设控制语气,关系随互动逐步推进 —— 这正是「陪伴」能成立的原因。 - **AI 跑团**:像素酒馆的跑团冒险模式支持多位角色同场推进剧情(最多 10 位),一张卡既是 NPC,也是故事的一环。 --- ## 集市现状:1,238 张原创角色卡 像素酒馆角色卡集市是**官方自建的原创角色卡库**。和到处抓卡聚合的第三方卡站不同,这里的卡是**系统性创作**的:按系列成批产出,统一世界观、统一人设质量、统一配套资源。 | 指标 | 数值 | 说明 | |:---|---:|:---| | **原创角色卡** | **1,238 张** | 全部免费,登录即可导入 | | **系列数量** | **115 个** | 每组 5–150 张,共享同一世界观 | | **累计下载** | **129,249 次** | 集市全站统计 | | **下载排行榜** | **TOP 100** | [独立榜单页](https://chat.xstavern.com/market/ranking){target="_blank"}实时排名 | | **成人向内容** | **200 张** | 需主动开启 NSFW 开关才会显示 | | **像素酒馆累计访问** | **60,540 次** | 站内统计 | !!!note 数据口径 以上数字为 2026-10-09 从集市页面实测抓取。角色卡仍在持续新增,最新数字以 [chat.xstavern.com/market](https://chat.xstavern.com/market){target="_blank"} 页面头部为准。 !!! ### 集市里能找到什么 | 板块 | 地址 | 内容 | |:---|:---|:---| | **角色卡集市** | [/market](https://chat.xstavern.com/market){target="_blank"} | 1,238 张原创卡 + 公开卡,可按系列、热度、评分、上线时间浏览 | | **预设 · 世界书 · 正则** | [/market/resources](https://chat.xstavern.com/market/resources){target="_blank"} | 与角色卡配套的预设、世界书、正则资源 | | **下载排行榜** | [/market/ranking](https://chat.xstavern.com/market/ranking){target="_blank"} | TOP 100 下载榜,按累计下载排序 | | **我的收藏** | [/me/favorites](https://chat.xstavern.com/me/favorites){target="_blank"} | 收藏的卡,跨设备同步 | | **角色卡制作** | [cardbuilder.xstavern.com](https://cardbuilder.xstavern.com/){target="_blank"} | 可视化建卡工具,见[角色卡构建器](/cardbuilder.md) | --- ## 原创角色卡凭什么不一样 翻过几十张卡之后会发现,这里的原创卡有一套**固定的设计规范**,不是随手写的人设。 ### 一、每张卡都带齐配套资源 一张原创角色卡不只是「人设文本」,而是**完整资源包**: - **角色设定** —— 身份、性格、说话方式、当前目标 - **世界书(World Info)** —— 角色私有的背景知识,按关键词触发 - **正则(Regex)** —— 控制输出格式与显示效果 - **预设(Preset)** —— 随卡附带的 `deepseek-tavern-pro` 写作预设 导入即用,不需要你再手动配一遍。 ### 二、角色有「想做的事」,也有「藏起来的事」 每张卡的人设都写了两个层次: | 层次 | 例子(卡「唐映雪 · 转校生」) | |:---|:---| | **表层动机** | 在新学校找到一个不用伪装的朋友圈 | | **私有信息** | 她离开的上一所学校留下了一段误会,需要你建立足够信任后才会逐步公开 | 这意味着**关系是逐步推进的** —— 角色不会一上来就把底牌全给你。你可以查线索、换计划,或者只留下来闲聊。 ### 三、不替你做决定 卡里明确写了行为边界:角色会**回应**你的选择和情绪,但**不会替你做决定**,也不会把亲密关系当成默认结果。这是很多随手写的卡最常翻车的地方。 ### 四、内容安全边界写得很清楚 | 类型 | 卡内声明 | |:---|:---| | **成人向(NSFW)** | 所有登场人物均为成年人;亲密关系以**明确同意、可随时停止、尊重边界**为前提 | | **全年龄向** | 角色不会假装自己能代替现实中的专业帮助 | 成人向内容默认隐藏,需要主动打开 NSFW 开关才会出现。 --- ## 按系列浏览:115 个系列 集市支持「按系列浏览」—— 每个系列是一个**独立世界观**,几张到上百张卡共享同一套设定。点开系列气泡可以看到系列介绍和全部角色卡。 ### 大型系列(100 张以上) | 系列 | 张数 | 题材 | |:---|---:|:---| | **苍蓝学园·星骸录** | 150 | 学园 × 异能 × 群像 | | **绯红魔女·审判庭** | 150 | 魔女 × 审判 × 奇幻 | | **蔚蓝档案** | 142 | 同人向 × 学院 × 战术 | | **都市异象·术式战线** | 50 | 都市异能 × 术式战斗 | | **咒术回战** | 41 | 同人向 × 咒术 × 战斗 | | **魔法少女的魔女审判** | 15 | 魔法少女 × 悬疑 | ### 10 张制式系列(29 个) 校园青春 · 古风仙侠 · 陪伴日常 · 恋爱日常 · 奇幻陪伴 · 生活模拟 · 世界群像 · 雾岬末班车 · 科幻末世 · 冒险旅伴 · 王城与魔女 · 治愈成长 · 童话逆旅 · 百花镜界 · 都市职场 · 浮光都市 · 海雾案卷 · 灰烬远征 · 江南案卷 · 金陵旧梦 · 霓虹深潜 · 人外幻想 · 山海拾遗 · 深空航线 · 时间邮局 · 星轨学园 · 悬疑冒险 · 月下妖市 · 云海剑歌 ### 5 张小系列(80 个) +++ 展开全部 80 个 5 张系列 午夜绒幕 · 星轨遗梦 · 霓虹异能局 · 星雾偶像事务所 · 月兔甜点列车 · 月影书库冒险队 · 白昼怪盗公馆 · 赤月温泉边境 · 雨港妖灯局 · 幻彩烟火师 · 霓虹梦街机 · 琥珀魔药铺 · 万象猫街侦探社 · 云鲸航路 · 绯色庭审魔法局 · 黑曜除灵电影院 · 红枫退魔美食团 · 黄昏魔女旅团 · 龙鳞条约 · 霜晶机甲歌剧 · 夜蝶裁缝社 · 银幕断奏 · 钟塔逆时局 · 星穹花邮 · 药灯宫廷 · 雪线旅店 · 金色牢笼 · 海雾航路 · 空洞圣歌 · 霓虹心跳 · 海雾与玫瑰 · 红潮议会 · 七域灵契 · 月下契约 · 灰烬呼吸 · 深渊猎人协会 · 巨墙防卫线 · 灵潮都市 · 霓虹边缘 · 潮汐之后 · 红狐公馆 · 火花协议 · 香槟与谎言 · 长生旅人 · 以太灯塔 · 英雄资格证 · 孢子之后 · 影阶试炼 · 冥河回廊 · 褪色王座 · 午夜面具社 · 白狼边契 · 博德门约稿 · 方块边境 · 海拉鲁迷航 · 黄昏球场 · 迷宫餐桌 · 群岛终点线 · 失落站台 · 星野巡礼 · 雨季星露 · 月桂庄园 · 城墙之后 · 对马风信 · 风印任务 · 黑风山记 · 灰烬广播 · 锯齿夜班 · 璃月潮汐 · 零号前锋 · 玫瑰星球 · 三日天穹 · 伪装家庭局 · 雾都侦探社 · 星痕旅团 · 星火远征 · 夜刀与灯笼 · 衣柜尽头 · 月塔学期 · 咒式回声 +++ --- ## 精选原创角色卡示例 下面这些卡是从集市实抓的真实条目,都能在 [角色卡集市](https://chat.xstavern.com/market){target="_blank"} 里搜到。 ### 全年龄向 | 角色卡 | 系列 | 人设速览 | |:---|:---|:---| | **唐映雪 · 转校生** | 校园青春 | 礼貌、警惕,熟悉以后变得很会吐槽;想在新学校找到不用伪装的朋友圈 | | **顾禾 · 美术社社长** | 校园青春 | 敏感、直觉强,习惯先画下来再解释;想把画笔递给你决定背景颜色 | | **白绫 · 守桥的狐仙** | 古风仙侠 | 俏皮、警觉,不轻易把真名告诉别人;想让被遗忘的桥重新连接两岸 | | **谢无尘 · 失去修为的剑客** | 古风仙侠 | 寡言、坦率,开始接受自己不必永远强大;把断剑藏起来是不想被同情 | | **苏晚棠 · 药庐医女** | 古风仙侠 | 古风日常与悬壶设定,适合慢节奏陪伴式对话 | | **林晚星 · 夜班电台主持** | 陪伴日常 | 耐心,会把复杂情绪说得很简单;愿意听你把一件小事从头说到尾 | | **白栀 · 花店老板娘** | 恋爱日常 | 日常向恋爱陪伴,节奏轻松 | | **闻溪 · 嘴硬的青梅竹马** | 恋爱日常 | 青梅竹马设定,熟人感与嘴上不承认的反差 | | **伊芙拉 · 水账官** | 红潮议会 | 奇幻设定下的记录者角色,适合调查与推演 | | **白昼梦 · 沉睡王庭的回声** | 空洞圣歌 | 奇幻史诗向,适合长线剧情推进 | ### 成人向(需开启 NSFW 开关) | 角色卡 | 系列 | 人设速览 | |:---|:---|:---| | **顾绮** | 午夜绒幕 | 35 岁剧院投资人,冷静讲究分寸,擅长把谈判变成邀请 | | **叶澜** | 星轨遗梦 | 29 岁跃迁领航员,冷静直接,遇到未知航线时最有精神 | | **夏临** | 霓虹异能局 | 33 岁异能犯罪顾问,强势,能力能读取谎言 | | **温妍** | 药灯宫廷 | 宫廷向,人物关系与权谋并行 | | **星野圆** | 月兔甜点列车 | 轻甜系,节奏舒缓 | !!!warning 关于成人向内容 成人向原创卡全部标注「所有登场人物均为成年人」,并在卡内声明亲密互动以明确同意与可随时停止为前提。该类内容默认隐藏,需主动开启 NSFW 开关。像素酒馆面向成年用户,请自行确认所在地法律法规。 !!! --- ## 怎么把角色卡用起来 ### 方式一:在线直接开聊(最快) 1. 打开 [chat.xstavern.com/market](https://chat.xstavern.com/market){target="_blank"} 2. 用「原创角色 / 公开角色」切换卡池,用系列气泡、搜索、排序筛选 3. 点开任意一张卡 → 导入 → 直接进入聊天 不需要下载任何东西,手机上也能用。 ### 方式二:下载 PNG 导入本地 SillyTavern 1. 在集市找到喜欢的卡 2. 下载角色卡 PNG 文件 3. 打开本地 [SillyTavern](/siltytavern-intro.md) → 角色管理 → 导入角色卡 4. 选择 PNG,自动读取内嵌的角色数据 想在本地跑酒馆,可以先看[安装指南](/install.md)和[快速开始](/Usage/quick-start.md)。 ### 方式三:自己做一张原创卡 不想只当使用者?用[角色卡构建器](/cardbuilder.md)可以可视化建卡 —— 从主题开始、让 AI 帮你写,或自己逐项填写,产出角色、封面、世界书与正则,做完直接导入。 --- ## 常见问题 **问:像素酒馆有多少张原创角色卡?** 答:截至 2026-10-09 为 **1,238 张**,分属 **115 个系列**,另有公开卡池可浏览。 **问:这些角色卡收费吗?** 答:不收费。角色卡本身免费,你只需要一个可用的模型接口。 **问:角色卡能用在原生 SillyTavern 上吗?** 答:可以。集市支持下载角色卡 PNG,拖进本地 SillyTavern 的角色管理面板即可导入,角色设定、世界书等数据都在文件里。 **问:有成人向内容吗?怎么屏蔽?** 答:有,共 200 张,全部标注「所有登场人物均为成年人」。成人向内容**默认隐藏**,不开启 NSFW 开关就不会出现在列表里。 **问:我想找特定题材,怎么筛选?** 答:集市支持按系列气泡浏览、关键词搜索,以及「最热 / 最新发布 / 评分最高」三种排序。系列本身带有题材属性(如古风仙侠、科幻末世、悬疑冒险),先挑系列再看卡通常更快。 **问:角色卡是谁做的?** 答:像素酒馆官方原创系列由「磊哥哥」主创,按系列成批产出,统一世界观与配套资源。 --- ## 相关页面 | 页面 | 内容 | |:---|:---| | [:beer: 像素酒馆](/pixel-tavern.md) | 平台完整功能一览 | | [:id_card: 角色卡构建器](/cardbuilder.md) | 自己做一张原创卡 | | [:book: 像素写作台](/novel-studio.md) | 把角色设定写成小说 | | [:repeat: 版本更新](/pixel-tavern-updates.md) | 集市与酒馆的功能演进 | | [:bookmark_tabs: 角色卡设计](/Usage/Characters/characterdesign.md) | 角色卡结构与写作技巧 | ===== extensions/AllTalk.md (https://sillytaverncn.net/extensions/alltalk/) ===== --- order: tts-alltalk route: /extensions/alltalk/ --- --- ## 🟩 Key Features in AllTalk V2 - **Multi-engine Support**: Easily switch between Coqui XTTS, VITS, Piper, Parler, F5, and custom engines. - **Voice Conversion (RVC)**: Enhanced retrieval-based voice cloning pipeline. - **Customizable Settings**: Adjust per-engine settings and save startup configurations. - **Narrator Functionality**: Specify separate voices for narration and characters. - **Standalone and Integrated Use**: Seamless integration with SillyTavern. - **DeepSpeed and Low VRAM Modes**: Performance optimization for resource-limited environments. - **Screenshots**: See AllTalk V2’s interface [here](https://github.com/erew123/alltalk_tts/discussions/237). --- --- ## 🟨 Using AllTalk within SillyTavern Once AllTalk is loaded, select it within SillyTavern on the TTS page, ensuring to select the correct AllTalk server version in the settings. - **Settings Management**: AllTalk may enable or disable specific settings based on your selected configuration. - **Loading Sequence**: If SillyTavern is loaded before AllTalk, reload the TTS extensions page. - **Performance Optimization**: Enable DeepSpeed and Low VRAM modes selectively to improve performance based on system resources. - **Narrator function**: Details of the Narrator function can be found on the [AllTalk Wiki](https://github.com/erew123/alltalk_tts/wiki/Narrator-Function). Full details of the SillyTavern AllTalk Extension will be updated on the [AllTalk Wiki page for SillyTavern](https://github.com/erew123/alltalk_tts/wiki/SillyTavern-Extension) TGWUI Users who user the AllTalk extension for TGWUI need to disable `Enable TGWUI TTS` in the TGWUI chat interface, otherwise you will have duplicate TTS audio generated. --- --- ### 🟪 Support, Assistance, and Feature Requests For further assistance: - Refer to the [Wiki](https://github.com/erew123/alltalk_tts/wiki) and built-in documentation. - Join discussions on the [Discussion Board](https://github.com/erew123/alltalk_tts/discussions/245). - Submit bugs or feature requests through the [Issue Tracker](https://github.com/erew123/alltalk_tts/issues). --- # AllTalk TTS V2 AllTalk 是一个基于 Coqui XTTS、F5-TTS、VITS、Piper 和其他 TTS 模型引擎的语音克隆系统,旨在产生高质量的语音复制(无论是零样本语音克隆还是内置语音)。在 AllTalk V2 中,重大更新增强了功能性和易用性,包括多个 TTS 引擎支持、扩展的自定义选项和性能优化。有关功能的完整列表,请参阅 [AllTalk Wiki](https://github.com/erew123/alltalk_tts/wiki)。 ## 🟩 AllTalk V2 的主要功能 - **多引擎支持**:轻松在 Coqui XTTS、VITS、Piper、Parler、F5 和自定义引擎之间切换。 - **语音转换 (RVC)**:增强的基于检索的语音克隆管道。 - **可自定义设置**:调整每个引擎的设置并保存启动配置。 - **叙述功能**:为叙述和角色指定不同的语音。 - **独立和集成使用**:与 SillyTavern 无缝集成。 - **DeepSpeed 和低 VRAM 模式**:针对资源受限环境的性能优化。 - **截图**:在[此处](https://github.com/erew123/alltalk_tts/discussions/237)查看 AllTalk V2 的界面。 ## 🟨 设置和安装选项 AllTalk 提供独立和集成的安装方法。最快的设置方法是使用提供的快速安装选项之一,这些脚本可以自动完成大部分过程。 - **独立安装**:推荐大多数用户使用([独立安装指南](https://github.com/erew123/alltalk_tts/wiki/Install-%E2%80%90-Standalone-Installation)) - **Text-generation-webui 集成**:用于集成到 Text-generation-webui([TGWUI 安装指南](https://github.com/erew123/alltalk_tts/wiki/Install-%E2%80%90-Text%E2%80%90generation%E2%80%90webui-Installation)) #### 🟩 手动安装 对于需要详细控制的高级用户,请按照[手动安装指南](https://github.com/erew123/alltalk_tts/wiki/Install-%E2%80%90-Manual-Installation-Guide)在 Windows、Linux 或 Mac(未测试)上进行逐步设置。 #### 🟩 Google Colab 安装 使用 [Google Colab 安装](https://github.com/erew123/alltalk_tts/wiki/Google-COLAB)在云环境中运行 AllTalk,适用于不想在本地安装的用户。 ## 🟨 在 SillyTavern 中使用 AllTalk 一旦 AllTalk 加载完成,在 TTS 页面中选择它,确保在设置中选择正确的 AllTalk 服务器版本。 - **设置管理**:AllTalk 可能会根据您选择的配置启用或禁用特定设置。 - **加载顺序**:如果在 AllTalk 之前加载了 SillyTavern,请重新加载 TTS 扩展页面。 - **性能优化**:根据系统资源有选择地启用 DeepSpeed 和低 VRAM 模式以提高性能。 - **叙述功能**:叙述功能的详细信息可以在 [AllTalk Wiki](https://github.com/erew123/alltalk_tts/wiki/Narrator-Function) 中找到。 SillyTavern AllTalk 扩展的完整详细信息将在 [AllTalk Wiki 的 SillyTavern 页面](https://github.com/erew123/alltalk_tts/wiki/SillyTavern-Extension)上更新。 使用 TGWUI 的 AllTalk 扩展的 TGWUI 用户需要在 TGWUI 聊天界面中禁用 `Enable TGWUI TTS`,否则会生成重复的 TTS 音频。 ## 🟨 故障排除 如果您遇到您认为是 SillyTavern 中 AllTalk 特有的问题,请参阅 [AllTalk Wiki 的 SillyTavern 页面](https://github.com/erew123/alltalk_tts/wiki/SillyTavern-Extension)获取最新信息。 ### 🟪 支持、帮助和功能请求 如需进一步帮助: - 参考 [Wiki](https://github.com/erew123/alltalk_tts/wiki) 和内置文档。 - 在[讨论板](https://github.com/erew123/alltalk_tts/discussions/245)上参与讨论。 - 通过[问题追踪器](https://github.com/erew123/alltalk_tts/issues)提交错误或功能请求。 ===== extensions/Blip.md (https://sillytaverncn.net/extensions/blip/) ===== # Blip 本指南将帮助您为 SillyTavern 设置和自定义 Blip 扩展。该扩展可以以可变速度为消息文本添加动画效果,并在动画播放时播放声音。您可以使用音频文件或生成声音。 ## 前提条件 在开始之前,请确保满足以下前提条件: - 确保您使用的是最新版本的 SillyTavern。 - 从扩展面板(堆叠块图标)的"Download Extensions & Assets"菜单中安装"Blip"扩展。 ## Blip 全局设置 1. **Blip user message**: - 启用复选框以在用户消息上播放动画。 - 为用户设置配置文件,或如果您想要用户的 blip 动画,则设置默认配置文件。 2. **Blip only for certain text**: - 启用复选框仅对引号内的文本进行 blip 处理。 - 启用复选框以忽略星号内的所有内容。 3. **Automatic scroll down**: - 启用复选框使聊天窗口跟随文本动画向下滚动,如果您想在动画播放期间自由滚动,请禁用此选项。 4. **Audio volume**: - 如果只需要文本动画效果,可以将音频静音。 - 您可以调整 blip 音频的全局音量。 ## 角色动画/语音配置文件 您可以为每个角色保存配置文件: - 包括用户和可选的默认配置文件(当角色没有配置文件时将使用)。 - 如果列表中只显示当前聊天的角色,请点击复选框显示所有角色。 1. **选择要分配/更新配置文件的角色**: - 选择一个角色,如果他有配置文件,将会加载。 - 如果还没有配置文件,当前参数将成为他的配置文件设置。 - 任何配置文件都可以使用删除按钮删除。 - 如果您的角色未出现在列表中,请使用刷新按钮。 2. **文本动画设置**: - 设置文本速度:每个字母打印之间的延迟(毫秒)。 - 设置最小/最大速度乘数不为 1.0 以实现速度动画的随机性。 - 设置逗号/短语延迟大于 0 以在打印特殊字符时添加暂停,可以为动画增加生动性。在这种情况下,音频也会暂停。 3. **音频参数**: - 如果需要,设置音量乘数,这只会影响此语音配置文件。 - 设置音频速度:每个 blip 声音之间的延迟,独立于文本速度。 4. **Blip 来源:生成的声音**: - 使用最小/最大频率滑块自定义播放的 blip 声音。 - 如果最小/最大值不同,每次都会在此范围内播放随机声音。 5. **Blip 来源:文件**: - 从列表中选择文件。 - 您可以从资源扩展菜单获取官方 ST blip 资源。 - 或直接将文件放入:`\SillyTavern\data\\assets\blip`。 - 如果需要,启用复选框以强制等待整个文件播放完毕后再次播放。 感谢您阅读本指南!您的 SillyTavern 体验现在已通过文本动画和 blip 语音得到增强。 ===== extensions/Chat-vectorization.md (https://sillytaverncn.net/extensions/chat-vectorization/) ===== --- route: /extensions/chat-vectorization/ tags: [ vector storage, RAG, retrieval-augmented generation, vectors, summarization, chats, messages ] --- # Chat Vectorization (聊天向量化) !!! warning 免责声明 使用此扩展不能保证更好的聊天体验或任何形式的改进记忆。仅在您完全理解向量数据库使用的所有含义时才使用。 !!! 聊天向量化会搜索当前聊天历史中与您最近消息相关的消息。 它会暂时将最相关的消息移动到聊天历史的开头或结尾。 这种移动发生在模型生成对您最后一条消息的回复时。 聊天历史开头和结尾的消息往往对模型的回复影响最大。 因此,将相关消息移动到这些位置可以帮助模型在回复中关注相关信息。 特别是,聊天向量化可以找到在消息历史中太靠后而无法放入请求上下文的相关消息。 将这些消息移入上下文为模型提供了原本无法获得的信息。 聊天向量化是一种检索增强生成(RAG)。检索增强生成通过在提示中提供额外的相关信息, 提高模型生成响应的质量。 * 检索:使用最近的消息来检索相关的过去消息 * 增强:通过以有用的方式插入过去的消息来增强模型的上下文 * 生成:指导模型在生成响应时使用过去的消息 !!! info 一些术语: *向量*是一组数字,可以表示一段文本的主题、内容、风格或其他特征。 *向量化*是计算表示一段文本的向量。这是由向量化模型完成的。 就像文本生成模型从文本生成文本一样,向量化模型从文本生成向量。 *向量搜索*通过比较向量而不是关键词来找到相关结果。如果我们计算搜索查询的向量, 我们可以将其与存储的文本集合的向量进行比较。这样可以找到我们集合中与搜索查询文本 最相似的文本。在聊天向量化的情况下,"搜索查询"是最近的 2 条消息,而"集合中的文本" 是聊天中的所有其他消息。 !!! ## 设置 要启用聊天向量化,选择 "Extensions" > "Vector Storage" > "Enabled for chat messages"。 配置向量化源和向量化模型。聊天向量化使用与 Data Bank 相同的向量源, 因此您可能已经设置好了。向量化源和向量化模型的设置在 [Data Bank](/Usage/Characters/data-bank.md) 中有文档说明。 聊天向量化使用与 Data Bank 相同的向量存储,但这不需要设置或配置。 [Data Bank](/Usage/Characters/data-bank.md) 中也有关于向量存储的信息。 聊天向量化不使用 Data Bank 来存储聊天消息。消息存储在聊天中。 ## 准备聊天消息以供搜索(向量存储) 为了使聊天消息可以被搜索,系统会为每条消息计算一个向量并存储。 向量化在后台进行,每当您发送或接收消息时都会发生。 每条消息都单独存储,这样在生成过程中可以单独找到和移动它们。 大型消息会被分割成"块",这样模型就可以获得长消息中最相关的部分。块大小为 400 个字符。 您可以通过"Chunk size (chars)"更改这个值。 消息通过寻找块边界(如段落分隔符、换行符或单词之间的空格)来分割。这是为了 使所有块尽可能有意义。如果您的聊天消息有其他标记自然分割点的方式,比如 `----`, 您可以将其添加到"Chunk boundary"中。"Chunk boundary"的设置与 Data Bank 共享。 ### 向量存储控制 要计算当前聊天中所有消息的向量,而不是等待它们在后台处理,从设置中选择"Vectorize All"。 要查看当前聊天中有多少消息已被向量化,选择"View Stats"。这会显示存储的向量总数。 它还会通过绿色圆点标记来指示已被向量化的特定聊天消息。 要删除当前聊天中所有消息的向量,选择"Purge Vectors"。 !!! **聊天向量化**中的"Vectorize All"和"Purge Vectors"控件只影响当前聊天的存储向量。 然而,文件向量化中也有相同的按钮,它们会影响 Data Bank 中文件的向量。确保您要清除的是您想要清除的向量。 !!! ## 查找相关消息以移动(向量检索) 要在聊天历史中找到最相关的消息,最近的消息会被转换(向量化)成查询向量。默认情况下,使用最近的 2 条消息。要更改这一点,更改"Query messages"的值。这个值在查找 Data Bank 中的相关内容时也会使用。 过去的消息必须至少有 25% 的相关性分数才会被包含。您可以通过"Score threshold"更改这一点。分数阈值的设置与 Data Bank 共享。 聊天历史中最相关的 3 条消息会被移动。您可以通过"Insert#"更改这一点。 为了避免打扰聊天中最近的事件,最近的 5 条消息不会被移动。要更改这一点,更改"Retain#"的值。 ## 移动消息(增强生成) 消息会被移动到以下 3 个位置之一: * 聊天顶部,在主提示/故事字符串之后(默认) * 聊天顶部,并且在主提示/故事字符串之前 * 聊天结尾,在最后 2 条消息之前("In-chat @ Depth 2")。由于您刚刚发送了一条消息,这个位置通常就在模型的上一个回复之前。 您可以通过"Injection Position"和"Depth"更改这一点。 消息按相关性顺序包含,相关性较高的消息显示在相关性较低的消息之后。 包含了发送每条消息的人或角色的名字。 这些消息作为"过去的事件"展示给模型。这有助于模型理解这些消息包含的信息来自聊天历史中不同于插入点的位置。您可以通过"Injection Template"更改这一点。 您可以使用 Prompt Itemization 弹出窗口、终端日志或浏览器控制台日志查看最终的模型提示。浏览器控制台日志对于理解聊天向量化中所有步骤的作用很有帮助。 ## 向量摘要 !!! warning 警告 向量摘要功能是实验性的。 **向量摘要不会创建您的聊天摘要。它不会将检索到的消息转换为摘要。它不会使您的聊天历史变短。它不是"像 [Summarize](/extensions/Summarize.md) 但更好"。** !!! 向量摘要旨在使聊天消息的向量搜索更有效。它通过在向量化之前引入摘要步骤来实现这一点。摘要步骤提取消息中最重要的部分,使得生成的向量能更好地指示消息的相关内容。 向量摘要可能会使向量搜索变得不那么有效。 要对聊天历史中的消息进行摘要,并为每个摘要消息生成向量,选择"Summarize chat messages for vector generation"。 摘要消息不会替换聊天中的原始消息。如果向量搜索匹配了摘要消息的向量,原始消息会从聊天历史中检索并移动到上下文中。消息的摘要版本保留在向量存储中,这可能对调试有帮助。 要对用于搜索聊天历史的消息内容(默认为最后 2 条消息)进行摘要,选择"Summarize chat messages when sending"。 每次为向量化摘要消息时,都会向摘要模型发出单独的请求。您可以通过"Summarize with"选择使用哪个摘要源。选择"Main API"将使用与生成聊天或文本补全相同的模型和连接设置来生成摘要。 请求包括原始消息内容和关于模型应如何生成摘要的指令。您可以通过"Summary Prompt"更改指令。 ===== extensions/Dynamic-Audio.md (https://sillytaverncn.net/extensions/dynamic-audio/) ===== # Dynamic Audio (动态音频) 本指南将帮助您为 SillyTavern 设置和自定义动态音频资源。 ## 前提条件 在开始之前,请确保满足以下前提条件: - 确保您使用的是最新版本的 SillyTavern。 - 从扩展面板(堆叠块图标)的"Download Extensions & Assets"菜单中安装"Dynamic Audio"扩展。 ## 动态音频设置(浏览器) 1. **连接到资源库**: - 启动 SillyTavern 并导航到 **Extensions** > **Assets**。 - 点击"Connect"按钮建立与官方资源库的连接。 - 下载所需的音频资源,如背景音乐(BGM)或环境音效,这些资源应与您打算使用的背景相对应。 2. **启用动态音频扩展**: - 在 SillyTavern 中,转到 **Extensions** > **Dynamic Audio**。 - 启用扩展,取消静音并根据您的偏好调整 BGM 和环境音效的音量。 - 当 BGM 结束时,将随机播放另一首,点击循环按钮可以保持当前 BGM 持续播放。 - 点击随机按钮可以随机选择另一首 BGM。 3. **基于表情的 BGM**: - 如果您希望 BGM 跟随角色表情变化,请启用表情 BGM 开关(需要在角色文件夹中有 BGM,详见下文)。 - 调整 BGM 更新之间的冷却时间(以秒为单位)。如果您发现在群聊中或使用基于情绪检测的角色特定 BGM 时音乐变化太频繁,请增加这个值。 ## 为角色导入音乐 要为角色的情绪设置自定义音乐,请按照以下步骤操作: 1. **导航到角色文件夹**: - 转到角色文件夹,例如 `\SillyTavern\data\\characters\Seraphina`。 2. **创建 BGM 文件夹**: - 在角色文件夹内,创建一个名为 `bgm` 的子文件夹。 3. **导入情绪音乐**: - 在 `bgm` 文件夹内,导入每种情绪的音乐文件。支持的音频扩展名包括 `.mp3`、`.ogg` 和 `.wav`。 - 命名规则:`[emotion]_[number].mp3`,例如 `anger_0.mp3`、`joy_0.mp3`。 4. **每种情绪的多个音轨**: - 您可以通过递增数字为同一情绪导入多个音轨,例如 `neutral_1.mp3`、`neutral_2.mp3`。 5. **默认音乐选择**: - 当未检测到情绪时,将随机播放一个中性音轨作为默认值。情绪检测的方式与更新精灵图类似;详情请参阅[表情图片文档](/extensions/Expression-Images.md)。 ## 更改默认 BGM 音乐 如果角色的文件夹中没有自定义 BGM,将播放默认音轨。以下是更改方法: 1. **导航到 BGM 文件夹**: - 转到以下文件夹:`\SillyTavern\data\\assets\bgm`。 2. **替换/添加音乐**: - 替换或添加音乐文件(`.mp3`、`.ogg`、`.wav`)到此文件夹。 - 这些是使用资源扩展下载的官方音频资源。 - 当找不到角色特定的 BGM 时(单人或群聊),将随机播放其中一个音轨。 ## 更改环境音效 环境音效为您的场景增添深度。以下是自定义方法: 1. **导航到环境音效文件夹**: - 转到以下文件夹:`\SillyTavern\data\\assets\ambient`。 2. **文件命名规则**: - 环境音频文件名与背景图片文件名对应,将空格替换为破折号。 - 示例:"bedroom-clean.mp3"对应"bedroom clean.jpg"背景。 - 如果锁定按钮未锁定,将播放与背景对应的音频文件。激活锁定将保持当前环境音效继续播放。 3. **自定义环境音效**: - 您可以按照相同的命名模式为自定义或现有背景添加自己的环境音效。 感谢您阅读本指南!您的 SillyTavern 体验现在已通过动态音频得到增强。 ===== extensions/EmulatorJS.md (https://sillytaverncn.net/extensions/emulatorjs/) ===== # EmulatorJS 此扩展允许您直接在 SillyTavern 聊天中玩复古游戏机游戏。 ## 安装 **前提条件:** - SillyTavern 的最新发布版本。 - 从网上下载的 ROM 文件。您可以在[任何地方](https://archive.org/details/ni-romsets)找到它们。 **如何安装:** 1. 使用 SillyTavern 的扩展下载器安装。 2. 或使用此链接:`https://github.com/SillyTavern/SillyTavern-EmulatorJS` ## 使用方法 - 打开"EmulatorJS"扩展菜单。 - 点击"Add ROM file"。ROM 保存在您的浏览器存储中,不会存储在服务器上。 - 选择要添加的游戏文件。输入名称和核心(如果未自动检测)。如果核心需要 BIOS 文件,也要添加它。 - 点击列表中的"Play"按钮或通过魔杖菜单启动。 - 启动游戏后,您可以在模拟器框架中自定义控制和其他设置。 - 如果需要休息,请使用保存/加载状态功能。 查看 EmulatorJS 文档以了解可用核心及其要求的列表:[Systems](https://emulatorjs.org/docs/systems)。 ## 评论模式 借助 GPT-4 Vision 等多模态模型的力量,您的 AI 机器人可以看到您的游戏画面并提供有趣的角色评论。 ### 要求 1. 支持 [ImageCapture](https://developer.mozilla.org/en-US/docs/Web/API/ImageCapture#browser_compatibility) 的浏览器。在桌面版 Chrome 上测试通过。Firefox 需要通过配置启用。Safari 无法工作。 2. 推荐使用带有图像内联模式的 Chat Completion API。需要 OpenAI 或 OpenRouter API 密钥,选择"gpt-4-turbo"或"gpt-4o"作为模型;Google AI Studio 使用 Gemini 1.5 Pro 或 Gemini 1.5 Flash 模型;Anthropic Claude(推荐 Opus 3 或 Sonnet 3.5 模型)。查看所选 API 的文档,以了解所选模型是否支持多模态提示。 3. 如果禁用了图像内联,请确保启用了"Image Captioning"扩展,然后选择"Multimodal"描述源: - OpenAI、Claude、MistralAI、Google AI Studio 使用任何支持视觉的模型。 - OpenRouter API 使用兼容的多模态模型。 - 在 Ollama、KoboldCpp、oobabooga TextGen WebUI 或 vLLM 中本地托管的 Llava 模型。 ### 如何启用评论 1. 确保在 EmulatorJS 扩展设置中设置了提供评论的间隔。此设置定义了使用当前游戏画面快照查询角色评论的频率。值为 0 表示不提供评论。 2. 选择角色聊天并启动游戏。为了获得最佳性能,请确保 ROM 文件正确命名,以便 AI 可以获得更多背景上下文。 3. 像平常一样开始玩游戏。视觉模型将定期查询,根据它"看到"的最新截图写评论。 ### 设置 1. Caption template - 用于描述游戏截图的提示。支持 \{\{game\}\} 和 \{\{core\}\} 额外宏。 2. Comment template - 用于根据生成的描述写评论的提示。支持 \{\{game\}\}、\{\{core\}\}、\{\{caption\}\} 额外宏。对于图像内联模式,\{\{caption\}\} 将替换为 `see included image`。 3. Force captions - 即使支持并启用了图像内联,也会强制使用多模态描述。 ### 为什么我看不到任何评论? 在以下情况下,评论会暂时暂停(跳过间隔步骤): 1. 模拟器已暂停(使用暂停按钮,而不是游戏内暂停)。 2. 浏览器窗口失去焦点。 3. 用户输入区域不为空。这是为了让您安静地输入回复。 4. 另一个回复生成当前正在进行中。 5. TTS 语音正在朗读。评论会暂停(最多 20 秒)直到语音结束,但不会跳过。 其他常见问题: 1. 确保在启动游戏之前设置了评论间隔。 2. 确保您已设置多模态 API 密钥,并且 ST 服务器控制台中没有错误。 仍然不工作?请发送您的浏览器调试控制台日志(按 F12)。 ## 致谢 - EmulatorJS 引擎 (GPLv3):https://github.com/EmulatorJS/EmulatorJS ===== extensions/Expression-Images.md (https://sillytaverncn.net/extensions/expression-images/) ===== --- route: /extensions/expression-images/ --- # Character Expressions (角色表情) ## 这是什么? 表情图片是您的 AI 角色的图片(也称为"精灵图"),显示在聊天窗口旁边(或后面)。 表情图片可以使用与 SillyTavern 主应用程序一起运行的分类模型。这允许表情根据 AI 最近的聊天回应中表达的情感自动改变。 ## 添加角色表情图片 1. 打开扩展面板并展开"Character Expressions"部分。如果您已打开角色聊天,您将看到一个图片占位符网格。 ![表情抽屉](/static/extensions/expression-drawer.png) 2. 点击网格中每个图片左上角的"导入"按钮,并选择您想应用到该情绪的图片。这将把图片以正确的文件名保存在 `/data//characters/(character_name_here)/` 文件夹中。 3. 对所有要分配图片的表情重复此操作。 ### 导入表情图片 ZIP 文件 使用"import ZIP"按钮,您可以导入包含表情图片集合的 zip 文件,这些图片将自动添加到**当前选择的角色**的正确文件夹中。zip 文件必须具有扁平的内部结构(无子文件夹),并且各个图片应该正确命名。导入 zip 不会自动重命名任何图片以使其匹配情绪。 ## 手动更改表情 1. 点击任何已上传的表情图片(精灵图)以在聊天界面附近(默认 UI 模式)或屏幕中央(视觉小说模式)显示它们。 2. 使用 `/emote (name)` 斜杠命令或匹配的快速回复来设置精灵图,无需打开扩展菜单。 ## 自动更改表情 要在角色回复时自动设置表情,您有多种选择。 当启用消息流式传输时,表情会在每条消息或定期间隔更改。 ### 分类模块如何工作? `classify` 模块使用一个在 SillyTavern 主机(例如您的 PC 或 colab 机器)上运行的小型"情感解析"模型。该模型接收 AI 的新输出并检测文本表达的是什么类型的情感或情绪。虽然一条消息中可能表达多种情感,但模型只选择最可能的一种并返回给 SillyTavern。然后前端插件显示与该情感相关联的图片。 ### 设置说明(本地分类) 1. 确保您使用的是最新版本的 SillyTavern。 2. 打开扩展面板并展开"Character Expressions"插件菜单。 3. 在分类源下拉菜单中选择"Local"。 4. 这将启动一次性从 HuggingFace Hub 下载分类模型(约 ~100 Mb)。 5. 生成任何消息以验证分类是否正常工作并且精灵图是否出现。您也可以检查服务器控制台的调试日志。 本地分类默认有 28 个可能的图片标签:[Cohee/distilbert-base-uncased-go-emotions-onnx](https://huggingface.co/Cohee/distilbert-base-uncased-go-emotions-onnx) 要使用 6 选项分类模型,请用文本编辑器打开 `config.yaml` 文件,并将 `extensions.models.classification` 变量的值更改为 [Cohee/bert-base-uncased-emotion-onnx](https://huggingface.co/Cohee/bert-base-uncased-emotion-onnx) 之后,重启 ST 服务器以重新下载模型。要恢复,请再次更改 `config.yaml` 中的值。 ### 设置说明(使用 LLM) 1. 连接到任何受支持且正确配置的文本生成 API。 2. 按照上述方式导入表情图片。 3. 在分类源下拉菜单中选择"LLM"。 4. 可选择配置分类指令提示。 5. 生成任何消息以验证分类是否正常工作并且精灵图是否出现。您也可以检查服务器控制台的调试日志。 #### 提示构建策略 主 LLM 源允许选择如何构建分类提示: * **Limited Context**:仅发送最后一条消息和系统指令提示。 * **Full Context**:发送整个聊天历史记录,包括角色卡片。 ### 设置说明(WebLLM) 1. 安装官方 [WebLLM 扩展](https://github.com/SillyTavern/Extension-WebLLM)。 2. 按照上述方式导入表情图片。 3. 在分类源下拉菜单中选择"WebLLM"。 4. 可选择配置分类指令提示。 5. 生成任何消息以验证分类是否正常工作并且精灵图是否出现。您也可以检查服务器控制台的调试日志。 ### 设置说明(使用 Extras) > [!WARNING] > Extras 已弃用,可能会在未来更新中删除。 1. 安装并运行 Extras,并启用 `classify` 模块:`python server.py --enable-modules=classify` 2. 按照上述方式导入表情图片。 3. 在分类源下拉菜单中选择"Extras"。 4. 当 AI 向您发送回应时,适当的表情图片将自动显示。 Extras API 默认使用具有 6 个选项的分类模型:[nateraw/bert-base-uncased-emotion](https://huggingface.co/nateraw/bert-base-uncased-emotion) 还有一个具有 28 个选项的模型:[joeddav/distilbert-base-uncased-go-emotions-student](https://huggingface.co/joeddav/distilbert-base-uncased-go-emotions-student) 要使用此模型,您需要在 Extras 命令行中添加以下参数(前后都有空格): `--classification-model=joeddav/distilbert-base-uncased-go-emotions-student` ## 自定义表情 如何获得比默认提供的更多表情选项?您可以在扩展设置中设置**自定义表情**。您可以为自定义表情分配任何名称。它们将出现在表情图片列表中,并且可以像其他表情一样分配图片。它们将带有指示符显示这些是自定义的。 > [!TIP] > 本地分类和 Extras 仅支持有限的表情列表。 > > 如果您希望显示自定义表情,您需要训练一个支持标签的分类模型(超出本指南范围),或者您可以使用 LLM 或 WebLLM 作为分类源,两者都会自动使用所有现有表情 - 包括默认表情和任何自定义表情。 ## 表情支持哪些图片格式? 允许任何图片格式,包括 webp 和动态 gif。 最常见的格式是带有透明背景的 PNG 文件。 ## 使用默认表情 如果您没有角色的全部表情图片,或者根本没有图片,您可以选择多种默认显示选项。 所有这些都可以通过"Default / Fallback Expression"下的下拉菜单进行选择。 1. **选择后备表情**:如果选择了一个您没有图片的表情,则会显示后备表情。只需从下拉菜单中选择一个可用的表情。 2. **[No Fallback]**:当不存在图片时,不显示任何内容。 3. **[Default emojis]**:您可以使用基本 SillyTavern 安装中包含的内置默认表情。这些是简单的表情符号风格图片。 ## 每个表情使用多个图片 可以为每个表情添加多个图片,以便在显示的表情中提供更多变化。 要启用此功能,只需切换**Allow multiple sprites per expression**。 您现在可以上传多个图片,任何额外的图片都将显示一个小标记。 可以通过点击手动选择单个图片,或通过 `/expression-set type=sprite` 命令选择,该命令将列出可用的精灵图图片,而不是表情。 每当自动选择具有多个图片的表情时,将随机选择现有图片之一。 如果您想在多次使用同一表情时强制选择该表情的新图片,可以启用**Re-roll if same sprite is used again**。 ### 每个表情多个图片的命名约定 如果每个表情有多个图片,文件需要以特定方式命名。 文件需要以表情的名称开头,然后跟一个后缀,用点或破折号分隔。例如:`joy.png`、`joy-1.png`、`joy.expressive.png` 文件名必须遵循此格式,无论是直接上传还是 ZIP 导入。 ## 精灵图文件夹覆盖 > [!NOTE] > 显示名称(而不是角色卡片文件名)决定使用哪个图片集 如果您有多个具有相同显示名称的角色,它们都将使用相同的表情图片集。 如果您想为同名角色的每个版本使用不同的图片集,您可以使用精灵图文件夹覆盖。 文件夹覆盖也可用于定义同一角色的不同精灵图集(服装等)。 ### 如何设置覆盖 1. 在 `/data//characters` 中创建一个任意名称的文件夹并将图片放在那里,例如 `/data//characters/Boris`。 2. 打开要覆盖精灵图的角色的聊天。 3. 在"Sprite Folder Override"输入框中输入覆盖文件夹的名称并点击"Submit"。 4. 精灵图列表将重新加载,"Sprite set"指示器应显示覆盖文件夹。 5. 或者,您可以使用 `/costume` 斜杠命令达到相同的效果:`/costume Boris`。 6. 通过在覆盖文件夹名称前加上反斜杠,它将解析为当前角色精灵图文件夹中的子文件夹,例如,对于名为 Boris 的角色,`/costume \tracksuit` 将解析为 `/data//characters/Boris/tracksuit` 文件夹。 ===== extensions/Extras/Installation/common-problems.md (https://sillytaverncn.net/extensions/extras/installation/common-problems/) ===== --- label: Common Problems icon: bug --- # Extras 安装常见问题 本页面列出了安装 SillyTavern Extras 时遇到的常见问题和解决方案。 --- 在您的操作系统上本地安装 Extras 可能很困难或不可能(尤其是 Termux)。 #### 使用 [官方 Extras Colab](https://colab.research.google.com/github/SillyTavern/SillyTavern/blob/release/colab/GPU.ipynb) * 设置简单 * 免费使用 * 不需要 Colab GPU 额度(使用 `use_cpu` 选项) * 详情请参见 [Colab 指南页面](/extensions/Extras/running-extras-in-colab.md)。 --- ### 错误:在 Linux 上无法导入 'talkinghead' 模块 由于与 Colab 不兼容,它需要安装一个额外的包,所以不会自动安装。在安装其他要求后运行以下命令: `pip install wxpython` ### Extras 服务器无法连接到 AUTOMATIC1111 的 Stable Diffusion Web UI > 无法连接到远程 SD 后端 !禁用 SD 模块... **确保您启动 Stable Diffusion 的 webui-user.bat 在 COMMANDLINE_ARGS 变量中包含 --api 命令行选项。** 在您的 "webui-user.bat" 中找到并替换该行:`set COMMANDLINE_ARGS=--api` ![应该是这样的](/static/extensions/sd-user.png) 如果 SD Web UI 的 API 模式被禁用,Extras 服务器将无法建立连接,您将无法生成图像! #### 仍然不工作? 确保您按照正确的顺序启动所有程序,等待每个程序完成加载后再进行下一步: 1. Stable Diffusion Web UI 2. SillyTavern Extras 3. SillyTavern 如果在加载后启动,extras 服务器无法重新连接到 Stable Diffusion API。 ### 安装 ChromaDB 时出现 hnswlib wheel 构建错误 > ERROR: Could not build wheels for hnswlib, which is required to install pyproject.toml-based projects 在安装 ChromaDB 模块之前,您必须先执行`以下操作之一`: * 安装 Visual C++ build tools: * 使用 conda 安装 `hnswlib` 包:`conda install -c conda-forge hnswlib` --- ### 在 Mac 上安装 Python 要求时出错 > ERROR: No matching distribution found for torch==2.0.0+cu117 Mac 不支持 CUDA,所以应该安装不带 CUDA 支持的 torch 包。 请使用 `requirements-silicon.txt` 文件来安装要求。 --- ### 缺少模块? * 您必须在 Python 命令行中使用 `--enable-modules` 修饰符指定模块名称列表。 * 参见[模块](/extensions/Extras/Installation.md#决定使用哪个模块)部分。 --- ### API 密钥框是用来做什么的? * SillyTavern 扩展面板中的 API 密钥框仅在以下情况下使用: * 在您的 Extras 安装文件夹中创建了一个名为 `api_key.txt` 的文本文件,其中包含您选择的 Extras "密码"。 * 使用 `--secure` 命令行参数启动 extras。 * 这使得 Extras API "密码锁定",只有在 API 密钥框中有该密钥的用户才能访问它。 * 这主要对想要部署自己的公共 Extras(colab 等)的人有用。 * 在自己的电脑上运行 Extras 供个人使用的用户不应在 API 密钥框中输入任何内容。 ### 移动设备/Android/Termux 怎么办?🤔 * 社区中有一些人通过 Termux 上的 Ubuntu 成功运行 Extras。 * 但是,Extras 并不是为移动设备支持而设计的。 * 不会为在 Android 设备上运行 Extras 的人提供支持。 * 请将您的所有问题直接提交给下面链接的指南的作者。 #### ❗ 这是不受支持的 ===== extensions/Extras/Installation.md (https://sillytaverncn.net/extensions/extras/installation/) ===== --- icon: gear label: 本地安装 route: /extensions/extras/installation/ --- # Extras 安装 本页包含在本地设备上安装 SillyTavern Extras 的说明。 !!! Discontinued Extras 项目已于 2024 年 4 月停止维护,不会再收到任何新的更新或模块。绝大多数模块已在主 SillyTavern 应用程序中原生可用。您仍然可以安装和使用它,但如果遇到任何问题,请不要期望获得即时支持。 !!! 在您的操作系统上本地安装 Extras 可能很困难甚至不可能(尤其是 Termux)。 ## 使用[官方 Extras Colab](https://colab.research.google.com/github/SillyTavern/SillyTavern/blob/release/colab/GPU.ipynb) * 设置简单 * 免费使用 * 不需要 Colab GPU 积分(使用 `use_cpu` 选项) * 有关详细信息,请参阅 [Colab 指南页面](/extensions/Extras/Installation.md#running-extras-in-colab)。 ### 在 Colab 中运行 Extras * 打开[官方 Extras Colab](https://colab.research.google.com/github/SillyTavern/SillyTavern/blob/release/colab/GPU.ipynb) * 选择所需的"Extra"选项 * 选择 `use_cpu` 以在不需要 GPU 积分的情况下运行 Extras * 这将使 Stable Diffusion 变慢,但其他一切都会正常运行 * 非必需,但推荐:选择 `secure` 选项以生成 API 密钥来保护您的共享实例。 * 点击左侧的开始按钮(看起来像三角形"播放"按钮) * 等待它完成加载所有内容 * 在输出底部查找 `trycloudflare.com` 链接。忽略 localhost 链接,它不起作用(我们试过了!)。 * 它将以 `Running on` 文本开头 * 复制该行下列出的 API URL 链接。(**不要复制 'localhost' URL,使用另一个**) * 启动支持扩展的 SillyTavern:(如有必要,在 `config.yaml` 中将 `enableExtensions` 设置为 `true`) * 导航到 SillyTavern 的扩展菜单(点击页面顶部的"堆叠方块"图标)。 * 将 API URL 粘贴到顶部的框中。(**不是 API 密钥框**) * 如果您没有启用 `secure` 选项,请确保在使用官方 colab 时 API 密钥框完全为空。 * 如果您启用了 `secure` 选项,请将生成的 API 密钥粘贴到 API 密钥框中。 * API 密钥将出现在 colab 的控制台输出中,例如:`Your API key is fee2f3f559` * 点击"连接" --- ## 本地安装方法 ### MiniConda(推荐) 推荐使用此方法,因为 Conda 会为 Extras 需求包创建一个"虚拟环境",使它们不会影响您的系统级 Python 设置。 1. 安装 [Miniconda](https://docs.conda.io/en/latest/miniconda.html) _(重要!)阅读[如何使用 Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/getting-started.html)_ 2. 安装 [git](https://git-scm.com/downloads) _(一开始就用 git 安装 SillyTavern 的大佬们可以跳过此步骤!)_ 安装完这两者后... 在 `CONDA 命令提示符窗口`中`逐个`输入/粘贴下面的命令,每个命令后按 `Enter`。 3. 创建一个新的 Conda 环境(我们称之为 `extras`): `conda create -n extras` 4. 激活新环境 `conda activate extras`(您应该看到 `(extras)` 出现在命令提示符的左侧) 5. 安装所需的系统包(这将需要一些时间) `conda install python=3.11 git` 6. 克隆 Extras GitHub 仓库 `git clone https://github.com/SillyTavern/SillyTavern-extras` 7. 导航到克隆的 Extras 仓库 `cd SillyTavern-extras` 8. 使用以下命令之一安装 Extras 的需求(将再次需要时间): * `pip install -r requirements.txt` - 用于基本功能 * `pip install -r requirements-rvc.txt` - 用于实时语音克隆 * `pip install -r requirements-coqui.txt` - 用于 Coqui TTS(不推荐) 如果在此步骤遇到错误,请参阅[常见问题](/extensions/Extras/Installation.md#extras-install-common-problems)页面! 9. 请参阅下面的"安装后运行 Extras" --- ### 系统级安装 这更容易,但会影响您的系统级 Python 安装。 如果您使用许多具有不同需求的 Python 程序,这可能会导致冲突。 如果这是您第一次接触与 Python 相关的任何内容,那应该不是问题。 1. 安装 Python 3.11: 2. 安装 git: 3. 打开命令提示符窗口并转到您具有完全访问权限的文件夹。 4. 克隆仓库:`git clone https://github.com/SillyTavern/SillyTavern-extras`,按 Enter。 5. 克隆完成后,输入 `cd SillyTavern-extras`,按 Enter。 6. 输入 `python -m pip install -r requirements.txt` 7. 请参阅下面的"安装后运行 Extras" --- ## 安装后运行 Extras ### 确认扩展已启用 1. 在文本编辑器中打开名为 `config.yaml` 的文件。该文件位于 ST 的基本安装文件夹中。 2. 查找读取 `enableExtensions` 的行。 3. 确保该行有 `true`,而不是 `false`。 ### 决定使用哪个模块 (这只需要做一次) * Extras 总是使用 Python 命令行启动。 * `python server.py` 是最低要求,但它不启用任何有用的模块。 * 要启用模块,您必须使用 `--enable-modules=` 修饰符,带有逗号分隔的模块名称列表 示例:`python server.py --enable-modules=caption,summarize,classify` 这将启用图像描述、聊天摘要和实时更新角色表情。 下表描述了每个模块。 | 名称 | 描述 | |--------------|-------------------------------------------------------------| | `caption` | 图像描述 | | `summarize` | 文本摘要 | | `classify` | 文本情感分类 | | `sd` | Stable Diffusion 图像生成 | | `silero-tts` | [Silero TTS 服务器](https://github.com/ouoertheo/silero-api-server) | | `edge-tts` | [Microsoft Edge TTS 客户端](https://github.com/rany2/edge-tts) | | `chromadb` | 向量存储服务器 | | `coqui-tts` | Coqui TTS | | `rvc` | 实时语音克隆 | * 决定要将哪些模块添加到 Python 命令行。 * 它们将在下一步中使用。 **注意:Python 命令的模块列表中不能有任何空格!** ### 启动 Extras 服务器 在 Extras 安装文件夹内的命令提示符窗口中... 1. 确保您的 conda 环境处于活动状态(如果您使用了 Conda 安装方法) 2. 如果环境未激活,输入 `activate extras`。 3. 输入 `python server.py --enable-modules=YOUR,SELECTED,MODULE,LIST,HERE` 4. extras 服务器将加载。 5. 过一会儿,它会在最后显示一个 URL。对于本地安装,默认为 `http://localhost:5100`。 6. 复制 API URL。 ### 将 ST 连接到 Extras 服务器 1. 启动您的 SillyTavern 服务器,并在浏览器中查看 SillyTavern 界面。 2. 打开扩展面板(通过页面顶部的"堆叠方块"图标) 3. 将 API URL 粘贴到输入框中。 4. 点击 `连接`。 要再次运行 Extras,只需在命令提示符中激活环境并运行这些命令。 `conda activate extras`,按 Enter。 `python server.py`,按 Enter。 确保使用您的设置所需的 server.py 的附加选项(见下文)。 ## 制作 .bat 文件以便轻松启动 这是可选的,仅适用于 Windows,但在 MacOS 上应该可以做类似的事情。 1. 查看您的 Windows 桌面 2. 右键单击,选择 `新建`,然后点击 `文本文档` 3. 您的桌面上将出现一个新文件,要求输入名称。 4. 将文件命名为 `STExtras.txt` 5. 在文本编辑器中打开新创建的文件。 6. 将以下代码粘贴到其中: ``` cd C:\_your_\_full_\_Extras_\_folder_\_path_\ call conda activate extras python server.py --enable-modules=YOUR,SELECTED,MODULE,LIST,HERE,WITH,NO,SPACES call conda deactivate pause ``` 7. 将占位符文件夹路径替换为您的实际 Extras 安装文件夹路径。 8. 将 python 命令行替换为您的实际命令行 9. 使用新名称 `STExtras.bat` 保存文件(在大多数文本编辑器中使用 `文件` >> `另存为`) 您现在可以简单地双击此 .bat 文件以轻松启动 Extras。 如果您想更改模块列表(或 extras 服务器的任何其他命令行修饰符),只需编辑 .bat 文件内的 python 命令。 ## Extras 安装常见问题 本节列出了安装 SillyTavern Extras 时遇到的常见问题和问题。 ### 错误:无法在 Linux 上导入 'talkinghead' 模块 它需要安装额外的软件包,因为由于与 Colab 不兼容,它不会自动安装。在安装其他需求后运行此命令: `pip install wxpython` ### Extras 服务器无法连接到 AUTOMATIC1111 的 Stable Diffusion Web UI > Could not connect to remote SD backend at ! Disabling SD module... **确保您启动 Stable Diffusion 的 webui-user.bat 在 COMMANDLINE_ARGS 变量中包含 --api 命令行选项。** 在您的 "webui-user.bat" 中找到并替换该行:`set COMMANDLINE_ARGS=--api` ![应该看起来像这样](/static/extensions/sd-user.png) 如果 SD Web UI 禁用了 API 模式,Extras 服务器将无法建立连接,您将无法生成图像! #### 仍然不起作用? 确保您按正确的顺序启动所有内容,等待每个程序完成加载后再继续下一步: 1. Stable Diffusion Web UI 2. SillyTavern Extras 3. SillyTavern 如果 Extras 服务器在 Stable Diffusion API 之后加载,则无法重新连接。 ### 安装 ChromaDB 时 hnswlib wheel 构建错误 > ERROR: Could not build wheels for hnswlib, which is required to install pyproject.toml-based projects 在安装 ChromaDB 模块之前,您必须先执行以下`操作之一`: * 安装 Visual C++ 构建工具: * 使用 conda 安装 `hnswlib` 包:`conda install -c conda-forge hnswlib` --- ### 在 Mac 上安装 Python 需求时出错 > ERROR: No matching distribution found for torch==2.0.0+cu117 Mac 不支持 CUDA,因此应该安装没有 CUDA 支持的 torch 包。 改用 `requirements-silicon.txt` 文件安装需求。 --- ### 缺少模块? * 您必须在 Python 命令行中使用 `--enable-modules` 修饰符指定模块名称列表。 * 请参阅[模块](/extensions/Extras/Installation.md#decide-which-module-to-use)部分。 --- ### API 密钥框是用来做什么的? * SillyTavern 扩展面板中的 API 密钥框仅在以下情况下使用: * 在 Extras 安装文件夹中创建了一个名为 `api_key.txt` 的文本文件,其中包含您选择的 Extras "密码"。 * 使用 `--secure` 命令行参数启动 extras。 * 这使 Extras API "密码锁定",因此只有在 API 密钥框中拥有该密钥的用户才能访问它。 * 这主要对想要公开部署 Extras(colab 等)的人有用。 * 在 PC 上运行 Extras 供个人使用的用户不应在 API 密钥框中输入任何内容。 ### 移动/Android/Termux 怎么样?🤔 * 社区中有一些人通过 Termux 上的 Ubuntu 在手机上成功运行 Extras。 * 但是,Extras 并非考虑移动支持而制作的。 * 不会为在 Android 设备上运行 Extras 的人提供支持。 * 请将所有问题直接发送给下面链接的指南的创建者。 #### ❗ 这是不支持的 ===== extensions/Extras/Smart-Context.md (https://sillytaverncn.net/extensions/extras/smart-context/) ===== --- route: /extensions/smart-context/ --- # 智能上下文 ## **此扩展已不再维护,不建议使用。请考虑使用 [聊天向量化](/extensions/Chat-vectorization.md) 作为可能的替代方案。** !!! warning 免责声明 使用此扩展不能保证更好的聊天体验或任何形式的记忆改进。仅在您完全理解向量数据库使用的所有影响时才使用。 !!! ### 这是什么? 智能上下文是一个 SillyTavern 扩展,它使用 [ChromaDB 库](https://www.trychroma.com) 让您的 AI 角色能够访问正常聊天历史上下文限制之外的信息。 ### 这有什么用? 如果您有一个很长的聊天记录,大部分内容都在通常的上下文窗口之外,因此在 AI 写回复时无法访问这些内容。 智能上下文会自动将整个聊天文件的历史记录放入向量数据库中。每当您在聊天中输入新内容时,系统就会搜索这个数据库,如果找到包含匹配关键词的消息,这些聊天消息就会被放入上下文中,这样 AI 在写下一个回复时就能看到它们。 *** ### 设置说明 1. 将 SillyTavern 更新到至少 1.10.6 版本。 2. 从扩展面板(堆叠块图标)中的"下载扩展和资源"菜单安装"智能上下文"扩展。 3. 安装或更新 [Extras](https://github.com/SillyTavern/SillyTavern-extras) 到最新版本。或者,使用 [Colab notebook](https://colab.research.google.com/github/SillyTavern/SillyTavern/blob/release/colab/GPU.ipynb)。 4. *仅限本地安装:* 为 Extras 安装 requirements-complete.txt(即使您在之前的安装中已经安装过)。 5. 启用 chromadb 模块运行 Extras:`python server.py --enable-modules=chromadb` #### 安装 ChromaDB 时遇到错误? ``` ERROR: Could not build wheels for hnswlib, which is required to install pyproject.toml-based projects ``` 安装 chromadb 包需要以下条件之一: - 安装 Visual C++ build tools: - 从 conda 安装 hnswlib:`conda install -c conda-forge hnswlib` *** ### 配置 一旦启用了智能上下文,您应该在 SillyTavern UI 中对其进行配置。 可以从扩展菜单中进行智能上下文配置 ![STExtensionMenuIcon](/static/extensions/menu-icon.png) ![智能上下文配置面板](/static/extensions/smart-context.png) 需要了解 4 个主要概念: - 聊天历史保留 - 记忆注入数量 - 单条记忆长度 - 注入策略 *** #### 智能上下文仅在聊天历史达到 10 条消息后开始工作 - 在新聊天开始时,ChromaDB 处于非活动状态。 - 一旦聊天累积了 10 条消息,它就会开始将所有消息记录到数据库中,并根据需要回忆消息。 #### 聊天历史保留('保留的消息') 默认情况下,ChromaDB 将保留滑块中指定数量的最近自然聊天历史消息。 超出此数量的任何消息都将从您发送的提示中删除,如果数据库中存在"记忆",它们将替代较旧的聊天历史消息(参见下面的策略)。 *** #### 记忆注入数量 智能上下文将插入上下文的"记忆"的最大数量。 并非每次注入尝试都会达到这个完整数量。 如果您发送一个与"狗"相关的输入,而数据库中只有一条其他与狗相关的消息,那么只会插入 1 条项目。 *** #### 单条记忆长度 这是每条注入的"记忆"允许的最大长度。 这是以**字符**为单位(不是标记)。 如果设置得太小,记忆可能会被中途截断。 示例: `Ross:我喜欢长毛蓬松尾巴的狗。我不喜欢短毛短尾巴的狗。` 这条数据库"记忆"有 103 个字符长,所以您需要将滑块设置为至少 `103` 才能完整地将其拉入上下文中。 如果滑块小于 103,消息就会被截断并以那种形式注入。 *** ### 注入策略 #### 替换最旧历史 这个策略保留 X 条最近的消息,删除之前的所有消息,并用"记忆"替换它们。 优点 - 不太可能超出您的上下文限制 - 存在于上下文顶部附近的记忆对响应的直接影响较小,同时仍然提供"背景信息"。 缺点 - 旧消息直接插入到聊天历史中,没有特殊标记,通常与保留的自然聊天历史消息没有直接的自然关联。这可能会让智能较低的 AI 模型感到困惑。 #### 添加到底部 这个策略保持聊天历史的自然状态,并在其**之后**的格式化[方括号标题]内添加"记忆"。 这意味着"保留的消息"滑块实际上被禁用。 优点 - 不缩短或改变当前的自然聊天历史 - "记忆"存在于聊天之后,对下一个 AI 响应有更强的影响 缺点 - 因为没有删除/替换任何聊天项目,所以更有可能超出您的上下文限制。 - 因为记忆存在于提示的末尾附近,它们可能对 AI 的响应产生太大的影响。 #### 自定义深度 这个策略保持聊天历史的自然状态,并在您在指定模板中确定的深度添加"记忆"。 这意味着"保留的消息"滑块实际上被禁用。 自定义注入消息应包含 `{{memories}}` 模板词,所有查询到的记忆都将放在这里。 优点 - 灵活地实验记忆放置 - 可以自定义上下文中的记忆介绍 缺点 - 因为没有删除/替换任何聊天项目,所以更有可能超出您的上下文限制。 #### 使用百分比策略 注意:这与"添加到底部"策略不兼容,因为后者根本不删除任何消息。 在使用"替换最旧历史"策略时,勾选此框将启用滑块,用于选择要用智能上下文记忆替换的上下文内聊天历史的百分比。它还会禁用用于手动选择消息数量的两个滑块。 这个策略自动计算要用智能上下文记忆替换的聊天历史的百分比,而不是固定的消息数量。 优点 - 比手动计算消息数量更容易 - 随可用上下文大小调整,对小型和大型提示空间应用相同的百分比 缺点 - 要删除的历史记录计算可能略有不准确,因为它们基于每条消息的估计标记 - 它将要删除的消息数量四舍五入到最接近的 5 的倍数(0、5、10、15、20 等),所以不如手动数字选择那么精细。 *** ### 记忆回忆策略 #### 仅从此聊天回忆 这是智能上下文的默认行为,仅从此特定聊天的 ChromaDB 集合中提取"记忆"。 #### 从所有角色聊天中回忆 这是智能上下文的实验性行为,从所选角色的所有 ChromaDB 集合中提取"记忆"。 理论上,这应该允许跨越多次互动发展出更健壮的记忆集。 建议与"添加到底部"或"自定义深度"策略一起使用,并将"保留的消息"设置为较低的数字,这样 ChromaDB 会更快地从记忆中提取。 ### 使用智能上下文 一旦启用并配置,智能上下文会自动运行。 ChromaDB 为 SillyTavern 中打开的每个聊天创建一个新数据库。 这个数据库会自动填充整个聊天历史。 您也可以手动将文本文件插入数据库。 这些文本文件不必是聊天记录。它们可以是任何内容(维基百科条目、同人小说等)。 #### 清除数据库 您可以使用"清除数据库"按钮来清除当前聊天的数据库。 如果您发现存储了不准确的记忆(比如您已经删除或编辑的聊天消息),这会很有帮助。 *** ### 常见问题 #### 聊天结束后数据库会怎样?我可以保存它们吗? 对于本地安装的 Extras 服务器,智能上下文会保存数据库。在通常的使用情况下无需手动保存。 对于 colab 用户,当 extras 服务器关闭时,数据库会被清除。使用导出按钮将数据库保存为 JSON 文件,下次要使用时再导入。 **通常不需要保存智能上下文数据库。** 目前我们有导入/导出功能,允许您保存聊天的数据库并在以后再次使用。 #### 我可以为所有聊天创建一个大数据库供参考吗? 这不是智能上下文功能的好用法。 我们建议为此目的使用世界信息。 ===== extensions/Extras/Talkinghead.md (https://sillytaverncn.net/extensions/extras/talkinghead/) ===== --- route: /extensions/talkinghead/ tags: ['obsolete'] --- # 会说话的头像 ### 这是什么? 一个为 AITuber 实现的会说话的动漫头像 3 演示。它具有以下功能: - 从单个静态图像生成随机的类 Live 2D 动作。 - 与任何 TTS 输出的声音进行口型同步。 这个扩展包含了"从单张图像生成会说话的动漫头像 3:现在还包括身体"项目的原始演示程序。顾名思义,该项目允许您为动漫角色制作动画,而且只需要该角色的一张图片即可。有两个演示程序: manual_poser 让您通过图形用户界面操控角色的面部表情、头部旋转、身体旋转和呼吸时的胸部扩张,这样您可以将它们保存为默认表情,如开心、悲伤、喜悦等。 ifacialmocap_puppeteer 让您将自己的面部动作转移到动漫角色上。 ### 硬件要求 您可以使用 CPU 或 GPU 模式(默认为 CPU)。但是,在 CPU 模式下预计约 1 FPS,而在 GPU 模式下,使用 RTX3060 可以获得约 9-10 FPS。 ifacialmocap_puppeteer 需要一台能够从视频流计算混合形状参数的 iOS 设备。这意味着设备必须能够运行 iOS 11.0 或更高版本,并且必须有 TrueDepth 前置摄像头。(更多信息请参见此页面。)换句话说,如果您有 iPhone X 或更好的设备,就应该没问题。 ### 如何使用 您必须使用以下模块启动 extras 才能使 talkinghead 工作:`classify` 和 `talkinghead`! classify 是处理 talkinghead.png 文件所必需的。此外,您还可以使用 `--talkinghead-gpu` 将混合模型加载到 GPU 内存中,使动画速度提高 10 倍。强烈建议使用 GPU 加速!默认情况下,程序启动后会加载默认图像 SillyTavern-extras\talkinghead\tha3\images\lambda_00.png。您可以通过访问 http://localhost:5100/api/talkinghead/result_feed 或 `您的扩展 URL:端口/api/talkinghead/result_feed` 来验证它是否正常工作。 - 服务器启动后,转到扩展 API 选项卡并连接。然后只需选择一个角色卡进行加载。(启动 server.py 时使用 `--enable-modules=classify,talkinghead --talkinghead-gpu`) - 现在选择角色表情,如果您勾选 talkinghead 图像类型框,脚本将用 `您的扩展 URL:端口/api/talkinghead/result_feed` 的结果替换您当前的角色表情。取消勾选该框应该会将图像恢复为原始表情,但有时您需要向聊天发送新消息来"重新加载"图像。 - 如果角色目录中没有 talkinghead.png 文件,它将只显示默认图像或最后一个有 talkinghead.png 文件的角色卡。当角色卡更改时,动画源图像也会更改。 - 现在打开角色表情,滚动到 talkinghead 图像,上传一个符合下面"输入图像的约束条件"部分要求的图像文件。 - 然后勾选并取消勾选 talkinghead 框以重新加载角色。如果图像看起来很奇怪,可能是因为它不是透明的/没有 alpha 层。否则,请按照下面的说明和模板操作。 ### 输入图像的约束条件 为了使系统正常工作,输入图像必须遵守以下约束条件: 分辨率应为 512 x 512。(如果程序收到任何其他尺寸的输入图像,它会将图像调整为此分辨率并以此分辨率输出。) 必须有 alpha 通道。 必须只包含一个人形角色。 角色应该站直并面向前方。 角色的手应该在头部以下且远离头部。 角色的头部应该大致包含在图像上半部分中间的 128 x 128 框内。 不属于角色的所有像素(即背景像素)的 alpha 通道必须为 0。 ![输入约束](/static/input_spec.png) ### 高级部分 ### Python 环境 除了基本功能(app.py)外,manual_poser 和 ifacialmocap_puppeteer 都可以作为桌面应用程序使用。要运行它们,您需要设置一个用于运行 Python 语言程序的环境。该环境需要以下软件包: * Python >= 3.8 * PyTorch >= 1.11.0 with CUDA support * SciPY >= 1.7.3 * wxPython >= 4.1.1 * Matplotlib >= 3.5.1 一种方法是安装 Anaconda 并在 shell 中运行以下命令: > conda create -n talking-head-anime-3-demo python=3.8 > conda activate talking-head-anime-3-demo > conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch > conda install scipy > pip install wxpython > conda install matplotlib ### 额外的混合模型 只包含一个(最轻量级的)模型,如果您想要额外的混合模型,需要从 https://www.dropbox.com/s/y7b8jl4n2euv8xe/talking-head-anime-3-models.zip?dl=0 下载模型文件并解压到 SillyTavern-extras\talkinghead\tha3\models 文件夹。最终,数据文件夹应该如下所示: + tha3 + models + separable_float - editor.pt - eyebrow_decomposer.pt - eyebrow_morphing_combiner.pt - face_morpher.pt - two_algo_face_body_rotator.pt + separable_half - editor.pt : - two_algo_face_body_rotator.pt + standard_float - editor.pt : - two_algo_face_body_rotator.pt + standard_half - editor.pt : - two_algo_face_body_rotator.pt 模型文件以知识共享署名 4.0 国际许可证分发,这意味着您可以将它们用于商业目的。但是,Pramook Khungurn. Talking Head(?) Anime from a Single Image 3: Now the Body Too. ,是创作者。 ### 运行 manual_poser 桌面应用程序 打开 shell。将工作目录更改为仓库的根目录。然后运行: > python tha3/app/manual_poser.py 注意,在运行上述命令之前,您可能需要激活包含所需包的 Python 环境。 > conda activate extras 如果您尚未激活环境。 ===== extensions/Extras/index.md (https://sillytaverncn.net/extensions/extras/) ===== --- order: -100 icon: zap expanded: false label: Extras route: /extensions/extras/ --- !!! Discontinued Extras 项目已于2024年4月停止维护,不会再收到任何新的更新或模块。绝大多数模块已在 SillyTavern 主应用程序中原生提供。您仍然可以安装和使用它,但如果遇到任何问题,请不要期望能得到及时的支持。 !!! ===== extensions/Extras/running-extras-in-colab.md (https://sillytaverncn.net/extensions/extras/running-extras-in-colab/) ===== --- label: Extras via Colab order: 100 icon: cloud --- # 在 Colab 中运行 Extras !!! Discontinued Extras 项目已于2024年4月停止维护,不会再收到任何新的更新或模块。绝大多数模块已在 SillyTavern 主应用程序中原生提供。您仍然可以安装和使用它,但如果遇到任何问题,请不要期望能得到及时的支持。 !!! ## 说明 * 打开 [官方 Extras Colab](https://colab.research.google.com/github/SillyTavern/SillyTavern/blob/release/colab/GPU.ipynb) * 选择所需的 "Extra" 选项 * 选择 `use_cpu` 以不需要 GPU 额度运行 Extras * 这会使 Stable Diffusion 变慢,但其他一切都会正常运行 * 不是必需的,但建议:选择 `secure` 选项以生成 API 密钥来保护您的共享实例。 * 点击左侧的开始按钮(看起来像一个三角形的'播放'按钮) * 等待它完成加载所有内容 * 在输出底部寻找 `trycloudflare.com` 链接。忽略 localhost 链接,它不会工作(我们试过了!)。 * 它将以文本 `Running on` 开头 * 复制该行下面列出的 API URL 链接。(**不要**复制'localhost'URL,使用另一个) * 启动支持扩展的 SillyTavern:(如果需要,在您的 `config.yaml` 中将 `enableExtensions` 设置为 `true`) * 导航到 SillyTavern 的扩展菜单(点击页面顶部的'堆叠块'图标)。 * 将 API URL 粘贴到顶部的框中。(**不是** API 密钥框) * 如果您**没有**启用 `secure` 选项,在使用官方 colab 时确保 API 密钥框完全为空。 * 如果您启用了 `secure` 选项,将生成的 API 密钥粘贴到 API 密钥框中。 * API 密钥将出现在 colab 的控制台输出中,例如:`Your API key is fee2f3f559` * 点击"连接" ===== extensions/Live2d.md (https://sillytaverncn.net/extensions/live2d/) ===== # Live2D 本指南将帮助您为 SillyTavern 设置和自定义 Live2D 扩展。此扩展允许您为角色使用 Live2D 动画模型,为您的虚拟角色添加动态和互动元素。 ## 前提条件 在开始之前,请确保满足以下前提条件: 1. **分支选择**:确保您使用的是最新版本的 SillyTavern,以访问最新功能和更新。 2. **扩展安装**:从扩展面板(堆叠块图标)的"Download Extensions & Assets"菜单中安装"Live2D"扩展。 3. **模型文件夹放置**:将您的 Live2D 模型文件夹放入 `/data//assets/live2d` 目录。一个正确组织的 `live2d` 资源文件夹可能如下所示: ![资源文件夹示例](/static/extensions/live2d-folder.png) - Live2D 模型文件夹应包含模型所需的所有组件,如表情、动作、纹理、声音和设置文件。特别注意,`***.model.json` 文件必须位于 Live2D 模型文件夹的根目录,以便扩展能够检测到模型。在此示例中,`shizuku` live2d 模型文件夹可能如下所示: ![Live2d 模型文件夹示例](/static/extensions/live2d-model.png) - 注意:模型也可以放在角色特定的文件夹中,如 `/data//characters/Shizuku/live2d/`。但是,角色文件夹中的模型只能被该特定角色使用。 ## 扩展设置 Live2D 扩展提供了各种设置来自定义您的动画模型的行为。以下是主要设置: ![UI 全局设置](/static/extensions/live2d-global.png) ### 全局设置 1. **启用**: - 选中此复选框以激活扩展,允许您的 Live2D 模型在 SillyTavern 中互动。 - 如果您只想使用普通精灵图,可以禁用此扩展。 - 当您想在群组聊天中移动普通精灵图时可以禁用此扩展,准备使用 Live2D 模型时再启用。 2. **跟随光标**: - 选中此复选框可使 Live2D 模型跟随您的光标移动,前提是模型支持此功能。 3. **自动发送互动**: - 选中此复选框可在您点击带有映射消息的区域时自动触发角色互动(详见点击区域部分)。 ## 调试设置 这些设置帮助您控制 Live2D 模型的行为和可见性,用于调试目的。 1. **动画前重置模型**: - 选中此复选框可在任何动画之前重新加载模型。这会强制动画开始,并允许您根据需要多次点击。某些模型可能需要此功能以确保动画从兼容状态开始。 2. **显示模型框架**: - 选中此复选框可显示模型框架,使您更容易识别在哪里点击来拖动模型。如果有点击区域,也会显示出来。将鼠标悬停在点击区域上会显示其名称。 3. **重新加载按钮**: - 点击此按钮可重新加载所有 live2d 模型。如果出现故障时使用。 ## 角色选择 这些设置允许您管理角色并为其分配 Live2D 模型。 1. **刷新按钮**: - 点击刷新按钮以更新当前聊天中的角色列表。 2. **选择角色**: - 使用下拉列表选择要分配 Live2D 模型的角色。 3. **移除按钮**: - 点击此按钮可删除角色的所有已分配模型。将出现确认提示以确认删除。 ## 模型选择 ![UI 模型列表](/static/extensions/live2d-list.png) 1. **刷新按钮**: - 如果您的 Live2D 模型未出现在列表中,请点击刷新按钮。 2. **选择模型**: - 从列表中选择一个模型以分配给所选角色。 - 模型可以位于资源文件夹或当前角色的文件夹中。 - 列表显示模型文件夹名称、其来源(资源或角色)以及检测到的模型设置文件名称。 - 请注意,某些模型文件夹可能包含同一模型的不同版本。您可以尝试不同的模型文件,看看哪个效果最好。 - 选择"none"将使用普通精灵图(如果有的话) - 设置按每个角色和模型保存 ## 模型设置 ![UI 模型设置](/static/extensions/live2d-settings.png) 1. **模型缩放**: - 使用滑块调整模型的大小,使其变大或变小。 2. **模型中心 X 偏移**: - 使用滑块更改模型相对于窗口中心的水平位置。 3. **模型中心 Y 偏移**: - 使用滑块调整模型相对于窗口中心的垂直位置。 ### 备注 - 设置会保存并在不同聊天中保持。 - 您也可以用鼠标拖动模型,这些设置会更新并保存。 - 如果您不小心将模型移出视图,请使用这些 UI 设置将其带回屏幕。另外,选中"显示框架"复选框以清楚地看到可以点击拖动模型的位置。 ## 模型说话 ![UI 模型说话](/static/extensions/live2d-talk.png) 1. **嘴部开启 Y 参数 ID**: - 从列表中选择对应模型嘴部 Y 值的参数 ID。并非所有模型都有,名称可能因模型而异。通常是类似"PARAM_MOUTH_OPEN_Y"或"ParamMouthOpenY"的名称。从列表中选择元素时检查模型;它会尝试运行说话动画。如果嘴巴动了,就说明选对了! 2. **嘴部移动速度**: - 调整滑块以更改嘴部动画的移动速度。 3. **每个字符的时间**: - 设置每个字符的持续时间。说话动画的持续时间将是此时间乘以消息的字符数。 ### 备注 - 这个嘴部动画并非在每个模型和每个动画上都有效。即使您的模型有嘴部移动的动画,也不意味着此扩展可以控制嘴部动画。如果参数列表中没有显示任何内容,您的模型可能使用了太旧版本的 Live2D,无法正确访问参数。 ## 模型动画 ![UI 模型动画](/static/extensions/live2d-animations.png) 1. **启动动画**: - 从列表中选择表情和动作,这些将在与角色开始聊天时播放。如果您需要隐藏角色一段时间以达到完美效果,还可以添加延迟,在此期间模型将不可见。 2. **默认动画**: - 从列表中选择表情和动作,这些将在角色发送消息时播放。使用分类表情扩展时使用回退动画。 ### 备注 - 当您在列表中选择动画时,动画将播放。 - 使用重播按钮重新播放所选动画。 - 某些模型将表情定义为动作。 - 如果列表中没有显示任何内容,可能是您的模型设置文件中没有定义表情/动作。 ## 点击区域映射 ![UI 模型映射](/static/extensions/live2d-mapping.png) 1. **默认点击动画**: - 从列表中选择表情和动作,这些将在您点击模型时播放。您还可以设置一条将作为用户消息发送的消息。 2. **点击区域**: - 如果模型有点击区域,它们将被列出,您可以为每个区域分配动画/消息。 ### 备注 - 某些模型没有点击区域,但默认点击对所有模型都有效。 - 如果您点击未映射的点击区域或点击任何点击区域之外,将触发默认点击。 - 点击区域在模型中有定义的优先级;例如,"mouth"在"head"内部。如果行为不正确,可能是由于模型文件的原因。 - 对于某些模型,动画需要完成后才能开始另一个动画。如果您想强制刷新和连续播放动画,请使用调试复选框。 ## 分类表情映射 ![UI 模型分类](/static/extensions/live2d-classify.png) 1. **要求**: - 需要使用分类表情扩展;否则,将回退到默认动画。 2. **映射**: - 对于分类扩展检测到的每种情绪,您可以分配表情/动作动画。 ### 备注 - 如果在收到新消息时前一个动画尚未完成,新动画可能不会播放。这种行为取决于 Live2D 模型。如果您想强制播放动画,请使用调试复选框。 感谢您阅读本指南!您的 SillyTavern 体验现在已通过动画和互动的 Live2D 模型得到增强。 ===== extensions/MiniMaxTTS.md (https://sillytaverncn.net/extensions/minimaxtts/) ===== --- order: tts-minimax route: /extensions/minimaxtts/ --- # MiniMax TTS 本页将教您如何正确使用 MiniMax TTS 提供商。 ## 前提条件 1. 具有 API 访问权限的 MiniMax 账户 2. 来自 MiniMax 的有效 API 密钥和组 ID ## 获取 API 凭据 ### 1. 创建 MiniMax 账户 1. 访问 [MiniMax 网站(国际版)](https://www.minimax.io/) 2. 点击"Sign Up"或"Login" 3. 完成账户注册流程 !!!warning 地区差异 MiniMax 有独立的中文和国际版本。请注意: - 中文版不支持声音克隆功能 - 中文版仅支持 `api.minimax.chat` API 主机 !!! ### 2. 获取 API 密钥和组 ID 1. 登录 [MiniMax 控制台(国际版)](https://www.minimax.io/platform/user-center/basic-information) 2. 您可以在基本信息页面上找到您的 GroupId 3. 前往左侧边栏的设置 → API 密钥以创建和获取您的 API 密钥 ## 在 SillyTavern 中配置 ### 1. 基本设置 1. 打开 SillyTavern 2. 导航到"扩展" → "TTS" 3. 选择"MiniMax"作为您的 TTS 提供商 4. 配置以下设置: - **API 密钥**:您的 MiniMax API 密钥 - **组 ID**:您的 MiniMax 组 ID - **API 主机**:根据您的地区选择合适的服务器: - `api.minimax.io`(官方国际服务器) - `api.minimaxi.chat`(另一个国际服务器主机) - `api.minimax.chat`(中国大陆服务器) ### 2. 模型选择 可用模型包括: - **Speech-02-HD**:高质量语音合成(推荐) - **Speech-02-Turbo**:快速语音合成 - **Speech-01**:旧版模型 - **Speech-01-240228**:旧版模型(特定版本) ### 3. 语音参数 调整以下参数以自定义语音输出: - **速度**:0.5 - 2.0(1.0 = 正常速度) - **音量**:0.1 - 2.0(1.0 = 正常音量) - **音高**:0.5 - 2.0(1.0 = 正常音高) - **音频格式**:MP3、WAV、FLAC ## 自定义语音 ### 1. 获取语音 ID 1. 访问 [MiniMax TTS 页面(国际版)](https://www.minimax.io/audio/text-to-speech) 2. 点击右侧的"Voice"进入语音选择界面 3. 找到您想要使用的语音 4. 点击语音名称旁边的复制按钮以复制语音 ID ### 2. 添加自定义语音 1. 在 MiniMax TTS 设置中,找到"自定义语音管理"部分 2. 填写以下信息: - **语音名称**:选择任何名称以便识别 - **语音 ID**:从 MiniMax 平台获取的语音 ID - **语言**:选择语音的相应语言 3. 点击"添加自定义语音" ## 自定义模型 ### 1. 添加自定义模型 1. 在"自定义模型管理"部分 2. 填写: - **模型 ID**:模型标识符 - **模型名称**:模型的显示名称 3. 点击"添加自定义模型" ### 2. 获取模型 ID 1. 查看官方 [MiniMax 文档](https://www.minimax.io/platform/document/Model?key=684261f14c5738213294faa7)中的模型列表 2. 或在控制台中查看可用的自定义模型 3. 复制相应的模型 ID ## 故障排除 ### 常见问题 1. **API 身份验证失败** - 验证 API 密钥对应正确的 API 主机 - 确认组 ID 正确 - 检查您的账户是否有足够的余额 2. **语音生成失败** - 验证所选的语音 ID 有效 - 确保语音与您选择的模型兼容 3. **连接超时** - 尝试切换到不同的 API 主机 - 检查您的网络连接 - 验证防火墙设置 4. **音频质量问题** - 尝试使用不同的模型(Speech-02-HD 以获得最佳质量) - 调整语音参数(速度、音高、音量) - 检查音频格式兼容性 ===== extensions/Objective.md (https://sillytaverncn.net/extensions/objective/) ===== # Objective (目标扩展) ### 这是什么? 目标扩展让用户可以为 AI 指定一个在聊天过程中要努力达成的目标。这个目标被分解成逐步的任务。任务可以分支,子任务可以自动或手动创建。这使得可以创建复杂的任务树。系统会定期检查任务列表中每个任务的完成状态。 这与通过提示词添加静态指令不同,它为 AI 添加了无需用户干预就能遵循的顺序性和节奏性指令。这让 AI 自主努力达成目标的体验更加真实。 ### 前提条件 在开始之前,请确保满足以下前提条件: - 确保您使用的是最新版本的 SillyTavern。 - 从扩展面板(堆叠块图标)的"Download Extensions & Assets"菜单中安装"Objective"扩展。 ### 常见用例 您的想象力就是极限,您可以给 AI 任何您希望的目标,它会规划如何实现。您可以让它规划如何杀死恶魔、抢劫神庙、举办豪华派对,甚至统治世界。 ![目标设置面板](/static/extensions/objective-panel.png) ### 配置 - 该扩展位于扩展菜单的 Objective 下。 - 在顶部文本框中输入目标,然后点击 `Auto-Generate Tasks`。这会向连接的 API 发送请求,要求它提供与您输入的目标相匹配的任务列表。 *注意:点击 Auto-Generate Tasks 将在添加新任务之前删除当前选定目标的所有现有任务。* - 收到 AI 的响应后,任务列表将自动创建在目标输入框下方的空间中。任务可以在创建后编辑。 - 面板底部有两个框:`Position in Chat` 和 `Task Check Frequency` - `Position in Chat` - 这是您希望当前任务在提示词的聊天部分中插入的"深度"。数字越低,AI 对任务的关注度就越高。设置为 0 将使任务成为 AI 思维中的主要内容。设置较高的值会将任务放在后台,让 AI 专注于当前的对话,但设置太高可能会导致 AI 永远"不会去做"这个任务。 - `Task Check Frequency` - 这是您希望 AI 检查任务是否完成的频率。如果设置为 `3`,AI 将每发送 3 条消息就检查一次当前任务是否完成。 - 目标、任务及其描述会实时保存到当前聊天会话。自定义提示词会全局保存。 ### 自定义提示词 您可以自定义发送给 LLM 的提示词,用于生成任务、检查任务完成情况和提示词注入。编辑提示词将保存它们以供当前会话使用。自定义提示词可以保存和加载以保持持久性。 - 点击 Edit Prompts 打开提示词编辑器窗口。您可以根据需要编辑提示词。 - 要保存提示词,输入名称并点击 Save Prompt。 - 要加载提示词,从下拉列表中选择提示词。 - 要删除已保存的提示词,从下拉列表中选择它并点击 Delete Prompt。 **警告:任务检查在单独的 API 请求中进行。将 Task Check Frequency 设置为 1 将使您对 LLM 服务的 API 调用次数翻倍。如果您使用的是付费服务,请谨慎使用。** ### 使用方法 默认情况下,目标扩展会自动跟踪所有任务及其各自的完成状态。 用户也可以随时手动创建、更新、删除和完成任务。 #### 当前任务选择 当前任务始终是列表中第一个未完成的任务。对任务的任何手动更新都会触发检查应该是什么当前任务。因此,如果您在一堆已完成的任务上方添加一个任务,它将被设置为当前任务。一旦完成,之前完成的任务将被跳过,下一个未完成的任务将被选为"当前"任务。 在使用父/子任务的任务树时,任务的选择是深度优先的,这意味着所有子任务将首先按顺序选择,然后继续当前目标/任务的任务列表。 #### 分支任务 点击 Branch Task 按钮将当前任务设置为目标,您可以自动生成或手动创建子任务。您可以继续将任何子任务转变为目标并继续生成,随心所欲。 将父任务标记为完成将导致扩展跳过所有子任务。当所有子任务完成时,父任务将被标记为完成。 #### 手动完成任务 您可以通过`点击任务旁边的复选框`手动切换任务的完成状态。这将设置下一个未完成的任务被选中。 #### 手动任务检查 如果您想手动触发 AI 检查任务完成情况,点击聊天输入栏右侧的 Extras 扩展按钮(`魔杖`)并选择 `Manual Task Check`。 ![手动任务检查](/static/extensions/task-check.png) #### 手动添加任务 当没有任务存在时,会显示 `Add Task` 按钮,允许您手动创建第一个任务。 如果已经存在其他任务,点击任何任务右侧的 `+` 按钮在其后插入新任务。 #### 删除任务 点击红色 `x` 删除现有任务。下一个未完成的任务将自动被选为当前任务。 删除具有子任务的任务将删除所有子任务及其后代。 #### 隐藏任务 如果您想对 AI 正在尝试完成的任务保持不知情,勾选 `Hide Tasks` 复选框以隐藏任务列表,让 AI 的意图成为一个谜。为了 100% 的神秘感,在点击 `Auto-Generate Tasks` 之前就这样做! ===== extensions/RVC.md (https://sillytaverncn.net/extensions/rvc/) ===== # Retrieval-based Voice Conversion (RVC)(基于检索的语音转换) 本指南将指导您使用 RVC,这是一种允许将语音特征从一个音频片段转移到另一个音频片段的技术,使声音能够以不同的音调和风格说话。 您是否曾经欣赏过那些著名的"总统玩 X"视频?它们就是使用 RVC 创建的。通过 RVC 扩展,您可以让您的 SillyTavern 角色用任何您想要的声音说话,无论是动漫、电影,甚至是您自己独特的声音。 RVC 不是 TTS:它更像是语音到语音的转换。它需要一个音频片段作为输入。在后台,RVC 与 SillyTavern 的 TTS 扩展协同工作:它等待 TTS 生成音频文件(无论您是否使用 RVC,TTS 都会这样做),然后 RVC 将进行第二次处理,将 TTS 音频文件转换为您的 RVC 配置中的克隆声音。 ## RVC 设置 SillyTavern 的 RVC 支持几个执行音频转换的 API 源: * [rvc-python](https://github.com/daswer123/rvc-python) * [SillyTavern Extras](https://github.com/SillyTavern/SillyTavern-Extras)(已弃用) ### 通用前提条件 在开始之前,请确保您满足以下前提条件。 #### ffmpeg 确保您的 PATH 环境变量中有 `ffmpeg` 二进制文件。此工具用于转换传入的音频。 **Windows**: * 使用 SillyTavern Launcher 脚本中的工具箱自动安装 ffmpeg: * 或在此处下载构建版本: * 如何修改 PATH 变量: * 要测试您是否正确完成了设置,请打开命令提示符并运行 ```ffmpeg```。它应该打印 ffmpeg 版本和信息。 **Linux**: 使用您的包管理器安装 ffmpeg。 ```shell # Debian/Ubuntu sudo apt install ffmpeg # Arch Linux sudo pacman -S ffmpeg # Fedora sudo dnf install ffmpeg ``` **macOS**: 使用 [Homebrew](https://brew.sh/) 安装 ffmpeg: ```shell brew install ffmpeg ``` #### 确保 TTS 已启用并正常工作 RVC 依赖于 TTS,您需要启用 TTS 扩展。在尝试添加 RVC 之前,您的 TTS 必须已经正常工作并能朗读您的聊天内容! 请注意: * 系统 TTS 引擎完全不支持语音转换。 * 流式 TTS 将等待音频流结束后再进行转换。 #### 安装扩展 从扩展面板(堆叠块图标)的"Download Extensions & Assets"菜单中安装"RVC"扩展。 #### 在 SillyTavern 中启用 RVC 在 SillyTavern 中,导航到 **Extensions** > **RVC** 并启用它。 #### 选择源 在扩展设置中,选择要使用的 RVC 源。然后继续进行特定源的安装说明。 ### rvc-python 设置 #### 1. 安装软件包 按照 GitHub 页面的安装说明进行操作:[rvc-python 安装](https://github.com/daswer123/rvc-python?tab=readme-ov-file#installation)。如果您有 Nvidia GPU,建议按照 CUDA 安装说明进行操作。 如果您在 Windows 上安装时遇到问题(例如构建 fairseq 步骤失败),请确保在您的电脑上安装了以下软件: * [Windows 10 SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/) * [Visual Studio Build Tools 2022](https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2022) #### 2. 准备模型 创建一个用于存储 RVC 模型的目录。默认情况下,它被命名为 `rvc_models`,并在启动服务器时从您的当前目录中获取。每个模型都是一个子文件夹(其名称将在 UI 中可见),应包含 `.pth`(必需)和 `.index`(可选)文件。 了解更多:[rvc-python 模型管理](https://github.com/daswer123/rvc-python?tab=readme-ov-file#model-management) #### 3. 启动 API 服务器 通过运行以下命令启动 API 服务器: ```shell python -m rvc_python api -p 5050 -l -md models_path ``` **参数:** * `5050` - 设置服务器的监听端口。如果要在不同端口上托管,请更改此值。 * `models_path` - 设置模型的路径。如果要使用默认的 `rvc_models` 目录,请删除此参数。 * `-l` - 设置服务器监听所有网络接口。删除此参数则仅监听本地主机。 #### 4. 连接到服务器 * 在 RVC 扩展设置中,设置适当的 **rvc-python API URL**。默认情况下,它将是 `http://localhost:5050`。 * 如果您已安装支持 CUDA 加速的 rvc-python,请勾选 **Use CUDA** 复选框。 * 按"Refresh"加载可用声音列表。 #### 5. 配置语音映射 **语音映射为每个角色或用户角色定义语音转换设置。** * 要设置语音映射,从"Character"下拉菜单中选择您的角色或角色名称,然后选择 RVC "Voice",然后点击 Apply。 * 您也可以选择配置其他相关设置,如音高校正或过滤。 * 如果您正确完成了所有操作,语音映射调试区域将显示类似 'Betty:MyVoice(rvpme)' 的内容。 ### SillyTavern Extras 设置 #### 1. 准备 RVC 模型文件 * 在文件浏览器中,导航到:`\SillyTavern-extras\data\models\rvc`。 * 创建一个子文件夹,如 'Betty',并将 `.pth` 和 `.index` 文件放入其中。(提示:您可以从 https://voice-models.com 下载语音文件,确保语音名称表明它是 RVPME。) #### 2. 安装要求 使用以下命令安装必要的要求: ```shell pip install -r requirements-rvc.txt` ``` #### 3. 启用 RVC 运行 SillyTavern-extras 启动启用了 RVC 模块的 SillyTavern-extras。此示例调用假设您使用了预装在 SillyTavern-extras 中的 Edge TTS: ```shell python server.py --enable-modules=rvc,edge-tts ``` 如果您有一个性能足够的 GPU,您可以选择在 GPU 上运行 RVC,方法是在启动命令中添加 ```--cuda```。根据快速测试,朗读 50 个标记(约 36 个单词)的 VRAM 使用量为 3.4GB,200 个标记(约 150 个单词)为 7.6GB。 #### 4. 设置语音映射 为 RVC 创建语音映射。将您的角色设置为所需的 SillyTavern 角色名称,将语音设置为您在步骤 1 中创建的 RVC 文件夹,然后点击 Apply。如果您正确完成了操作,语音映射将显示类似 'Betty:MyVoice(rvpme)' 的内容。 #### 5. 选择音高提取 * 选择 "rmvpe" 作为音高提取方法。 * 如果您在使用 "rmvpe" 时遇到问题,请尝试其他方法(例如,"harvest" 或 "torchcrepe")。 #### 6. (可选)配置 RVC 以将生成内容保存到文件 如果出于测试或故障排除目的,您希望保存生成的 RVC 音频,请在启动命令中添加 ```--rvc-save-file```。这将在 `SillyTavern-extras/data/tmp/rvc_output.wav` 下保存最后一次生成的内容: ```shell python server.py --enable-modules=rvc,edge-tts --rvc-save-file ``` #### 基于表情的动态语音 ##### 1. 配置 RVC 模型 在您的 RVC 模型文件夹中,为每个分类的表情(例如,愤怒、恐惧、喜悦、爱、悲伤、惊讶)准备单独的 `.pth` 和 `.index` 文件。 ##### 2. 启用模块 启用 RVC 和 classify 模块: ```shell python server.py --enable-modules=rvc,classify ``` ##### 3. 使用 RVC 模块 剩余的设置与单独使用 RVC 模块类似(如上所述)。 ## 训练您自己的 RVC 模型 ### 使用 RVC Easy Menu by Deffcolony(仅限 Windows) 自动安装和启动 Mangio-RVC:https://github.com/deffcolony/rvc-easy-menu #### 1. 克隆仓库 将仓库克隆到您想要的位置: ```shell git clone https://github.com/deffcolony/rvc-easy-menu.git ``` #### 2. 启动 RVC-Launcher.bat * 打开 `RVC-Launcher.bat` 文件。 * 选择选项 1 安装 RVC。 #### 3. 完成安装 当提示时,安装所需的包和依赖项。 #### 4. 打开 WebUI 进行语音训练 安装完成后,选择选项 2 打开 WebUI 进行语音训练。 ### Mangio-RVC:训练语音模型 ***数据集准备***: **1. 准备音频**: * 将要训练的音频放在 `datasets` 文件夹中。 * 确保音频没有背景噪音 – 只需要原始语音。 * 更长的音频可以获得更好的输出质量。 ***WebUI 训练***: **1. 访问训练标签页**: * 点击 WebUI 中的训练标签页。 **2. 配置实验**: * 输入实验名称(例如,`my-epic-voice-model`)。 * 将版本设置为 v2。 **3. 处理数据和提取特征**: * 点击"Process data"和"Feature extraction"。 * 将"Save frequency"设置为 50。 **4. 训练参数**: * 将"Total training epochs"设置为 300。 * 点击"Train feature index"和"Train model"。 ===== extensions/Regex.md (https://sillytaverncn.net/extensions/regex/) ===== --- route: /extensions/regex/ --- # Regex ## 这是什么? Regex 扩展允许用户自动检测文本字符串中的特定模式(称为"序列")并对其应用操作(替换)。当与其他 SillyTavern 功能(如[快速回复或 STscript](/For_Contributors/st-script.md))结合使用时,它可以成为一个强大的工具,或者简单地作为从聊天中删除某些单词的方法。 ## 有用的链接 **本文档不会深入解释编写 RegEx 序列的过程。有许多在线资源可以帮助您。** - [https://regexr.com](https://regexr.com) - [https://regex101.com](https://regex101.com) - [https://extendsclass.com/regex-tester.html](https://extendsclass.com/regex-tester.html) - [https://en.wikipedia.org/wiki/Regular_expression](https://en.wikipedia.org/wiki/Regular_expression) ## 前置条件 Regex 是 SillyTavern 的内置扩展,因此不需要额外的设置。 您可以在 ** 扩展** 面板中找到其设置。 ## 常见用例 RegEx 通常用于对聊天中的某些单词应用查找-替换功能,为某些单词或句子类型添加 markdown 样式,或向 STscript 返回布尔值。 ## 脚本列表 ![RegEx 扩展脚本列表](/static/extensions/regex-listview.png) - 顶部的按钮用于创建新脚本。 - "全局"脚本将应用于所有角色,并将保存到 `settings.json` 中。 - "作用域"脚本仅应用于当前活动角色,并将保存到角色卡的数据中。 - "导入"允许您导入从另一个 SillyTavern 实例导出的 RegEx 脚本。 下面是您的脚本列表以及一些操作按钮。 - 拖动手柄(脚本名称左侧的三个水平条)允许您将脚本拖放到任何您喜欢的顺序。 - 主开关可以快速切换以启用或禁用脚本,而无需更改其他任何内容。禁用的脚本以~~删除线~~样式显示。**如果在此处禁用脚本,则快速回复或 STscript 将无法触发它。** - "编辑"(铅笔)按钮将打开 RegEx 脚本编辑器。 - "移动到作用域"(向下箭头)将全局脚本转换为作用域脚本并将其应用于当前角色。反之(向上箭头)将作用域脚本转换为全局脚本。 - "导出"将导致您的浏览器下载脚本的导出 `.json` 文件,然后可以共享并导入到另一个 SillyTavern 实例中。 - "删除"(垃圾桶)删除脚本。 ## RegEx 编辑器 ![RegEx 编辑器](/static/extensions/regex-editor.png) - **测试模式**:这将在编辑器顶部打开一个比较视图。在"输入"框中键入一些文本,您的 RegEx 脚本的结果将显示在输出框中。这是一个有价值的调试工具,因为它会在您对脚本设置进行更改时实时更新输出框。 - **名称**:扩展的脚本列表上显示的脚本标签。**这也用于在通过斜杠命令或 STscript 触发脚本时定位脚本。** - **查找 Regex**:这是用于检测目标文本模式的正则表达式。这通常是任何 RegEx 脚本中最复杂的部分,也是最容易出错的地方。请参阅页面顶部的链接了解如何编写 RegEx 序列的信息。如果"查找 Regex 中的宏"设置为这样做,此框可以解析[常见的 SillyTavern 宏](/Usage/Characters/macros.md)(如 \{\{user\}\}、\{\{char\}\} 等)的值(见下文)。 - **替换为**:这将替换匹配的序列。在一个非常简单的例子中,如果您的"查找 Regex"是 `apple`,而您的"替换为"是 `orange`,那么在应用脚本的任何文本中,"apple"的第一次出现将自动更改为"orange"。 - 在此框中添加扩展特定的宏 \{\{match\}\} 将插入完整匹配的文本序列。这通常用于对特定单词应用样式。回到上面的例子,如果将 \*\*\{\{match\}\}\*\* 放入"替换为"框中,则所有出现的单词"apple"将被替换为 `**apple**`,这将对其应用粗体 markdown 样式。 - 可以使用变量 $1、$2、$3 等来插入所谓的"捕获组"。这些是由"查找 Regex"序列匹配的文本序列中的子字符串。**请注意,使用这些变量需要匹配表达式包含一组括号来定义匹配字符串的哪一部分算作捕获组。** 有关如何设置捕获组的参考,请参阅顶部的链接。 - **修剪**:放入此框的文本将在应用"替换为"过程之前从匹配的文本序列中删除。例如,如果我们的匹配是"apple",修剪框包含"le",那么在应用"替换为"过程之前,字母"le"将首先被删除。由于我们的"替换为"框包含 \*\*\{\{match\}\}\*\*,它将导致 `**app**` 被放入作为"apple"的替换(首先删除"le",并且剩余的匹配文本被赋予粗体 markdown 样式)。可以通过在要删除的每个字符串之间添加换行符来应用多个修剪。 - **影响**:此复选框列表定义将应用 RegEx 脚本的文本源。 - "用户输入":脚本将在用户点击发送后针对用户键入的输入内容运行。 - "AI 响应":脚本将在收到 AI 响应的内容后针对其运行。 - "斜杠命令":脚本将针对斜杠命令插入提示/聊天中的值运行。 - "世界信息":脚本将在世界信息条目注入提示时针对其内容运行。**需要勾选"更改传出提示"(或取消勾选两个临时性复选框)。** - "推理":脚本将针对 Gemini 或 Deepseek 等聊天完成 API 返回的"推理"对象的内容运行。如果在临时性下勾选了"更改传出提示",脚本还将应用于在后续聊天轮次中添加到提示中的任何推理块。 - **如果这里的所有内容都未勾选,脚本将永远不会在正常聊天期间激活,但仍可以通过斜杠命令或 STscript 激活。** - **其他选项**: - "禁用"可防止脚本运行。当您只是不想更改脚本的任何设置和/或不想通过脚本列表上的开关完全禁用它时(因为这样做会阻止斜杠命令触发它),这将用作覆盖以防止脚本运行。 - "编辑时运行"使脚本在编辑聊天消息后也运行。如果未选中此项,编辑的聊天消息的内容将不会触发脚本。 - **查找 Regex 中的宏**:选择是否替换"查找 Regex"框序列中存在的宏(如 \{\{user\}\}、\{\{char\}\} 等)。 - "不替换"将导致任何 SillyTavern 宏被忽略,因此 RegEx 脚本在搜索时将按字面意思处理它们。 - "原始"将逐字发送宏的值。如果宏的值包含某些特殊字符,这可能会改变 RegEx 脚本搜索文本的方式。 - "转义"将在每个字符前添加 RegEx 转义斜杠 `\`,以确保它们不会意外改变整体 RegEx 序列。如果宏的值中有某些特殊字符,这可能很有用。 ### 深度设置 最小/最大深度设置提供对 regex 模式将影响聊天历史中哪些消息的精确控制: - **最小深度**:仅影响聊天历史中至少 N 级深度的消息 - 0 = 最后一条消息 - 1 = 倒数第二条消息 - 等等 - 当为空(设置为"无限制")或 -1 时,也将影响"继续"操作上要继续的消息 - **最大深度**:仅影响聊天历史中深度不超过 N 级的消息 - 必须大于最小深度才能应用 regex - 系统提示和实用程序提示不受这些设置的影响 例如,将最小深度设置为 0,最大深度设置为 2,将仅将您的 regex 应用于聊天中最近的三条消息。 ### 标志 默认情况下,查找 Regex 模式区分大小写,并且仅应用于第一个匹配项。要调整此行为以及其他 RegEx 标志,您可以像这样添加它们: ```txt /yourpattern/flags ``` 示例:`/yourpattern/gi` 将匹配文本中"yourpattern"的所有实例,无论大小写。 一些最常见的标志是: - `i`:不区分大小写 - `g`:全局(应用于所有匹配项,而不仅仅是第一个) - `s`:dotAll(将输入视为单行,因此 `.` 将匹配换行符) - `m`:多行(将输入视为多行,因此 `^` 和 `$` 匹配每行的开始/结束,而不仅仅是整个字符串) - `u`:unicode(将输入视为 unicode,因此 `\d`、`\w` 等将匹配 unicode 字符) 有关 RegEx 标志的更多信息,请参阅以下 MDN 页面:[使用标志进行高级搜索](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#advanced_searching_with_flags) ### 临时性 默认情况下(当这里的两个框都未勾选时),RegEx 脚本将直接编辑存储在聊天的 JSONL 文件中的文本值。这确保传出提示和聊天显示将始终包含相同的值。但是,对聊天文件的这些更改是不可逆的。 如果您不希望发生这种情况,可以启用此处的任一复选框,将 RegEx 脚本的影响限制为仅显示或传出提示。 如果只勾选了其中一个框,则不会对聊天文件进行任何更改,但**只有勾选的项目**会被更改。这意味着您将看到一件事,但 LLM 将看到另一件事。请谨慎使用。 如果两者都选中,脚本将以所有方式正常运行,除了它不会将任何更改写入聊天文件。 ## 高级用法 虽然 RegEx 通常用作简单的查找/替换工具,但它也可以以更复杂的方式使用。 例如,"替换为"框可以包含一组 CSS 规则和 HTML,以在找到某个单词时将特定样式的 HTML 元素添加到您的聊天中。这将需要在用户设置面板中取消勾选 `在响应中显示 <标签>` 框。 脚本也可以设置为在正常使用期间永不触发,但可以通过斜杠命令作为 STscript 内部逻辑检查的一部分触发。"替换为"框将包含脚本识别的唯一值,以指示逻辑检查是真还是假。这将 RegEx 的实用性扩展到所有斜杠命令的完整功能,允许根据聊天内容实现真正无限级别的控制和自动化。 ===== extensions/Speech-Recognition.md (https://sillytaverncn.net/extensions/speech-recognition/) ===== # Speech Recognition (语音识别) 本指南将帮助您在 SillyTavern 中设置语音识别以将您的语音转录为文本。 ## 前提条件 在开始之前,请确保满足以下前提条件: - 确保您使用的是最新版本的 SillyTavern。 - 从扩展面板(堆叠块图标)的"Download Extensions & Assets"菜单中安装"Speech Recognition"扩展。 - 已安装 ffmpeg 二进制文件。有关详细信息,请参阅 [RVC 设置](RVC.md#rvc-设置)。 ## 语音识别设置(浏览器) 1. **配置 SillyTavern**: - 启动 SillyTavern 并转到 **Extensions** > **Speech Recognition**。 - 从下拉选项中选择"Browser"。 - 如果您的浏览器不支持语音识别,将出现错误弹窗。 2. **选择消息模式**: - 选择您想要的"Message Mode": - **Append**:您的消息将附加到当前用户消息文本区域。 - **Replace**:您的消息将替换文本区域中的当前用户消息。 - **Auto send**:一旦检测到语音结束,您的消息将自动发送。 3. **启用消息映射**(可选): - 设置语音快捷方式的短语映射。 - 例如,通过添加"command delete = /del2",当检测到"command delete"时,"/del2"命令将替换您的语音消息。 - 与自动发送模式结合使用时很有用,可实现完全的语音控制。通过勾选"Enable messages mapping"启用此功能。 4. **选择语言**: - 选择您要使用的语言(注意:并非所有浏览器都支持所有语言)。 5. **录音**: - 要开始录音,点击消息区域右侧发送按钮旁边的麦克风按钮。再次点击停止录音。如果未检测到声音,录音可能会自动停止。 ## 语音识别设置(Whisper/Vosk) 1. **启用提供商**: - 使用以下命令在 extras 服务器上启用所需的语音识别提供商: ```shell python server.py --enable-modules=whisper-stt ``` 或 ```shell python server.py --enable-modules=vosk-stt ``` - 您也可以通过添加选项 `--stt-vosk-model-path` 或 `--stt-whisper-model-path` 并指定模型路径来使用自定义模型。 2. **配置 SillyTavern**: - 启动 SillyTavern 并转到 **Extensions** > **Speech Recognition**。 - 从下拉选项中选择"Vosk"或"Whisper"(whisper 更准确)。 - 设置与"Browser"提供商设置类似(除了语言),请参见上文。 ## 语音识别设置(流式传输) 1. **启用提供商**: - 使用以下命令在 Sillytavern-extras 上启用流式语音识别模块: ```shell python server.py --enable-modules=streaming-stt ``` 2. **配置 SillyTavern**: - (可选)如上述 Whisper 设置中所述指定自定义 Whisper 模型。 - (可选但推荐)在 SillyTavern 中设置触发词。只有以这些触发词开头的消息才会作为实际消息发送到 SillyTavern。这可以防止随机语音或噪音被转录。使用复选框启用此功能。可以使用复选框选择是否在实际消息中包含/排除触发词。 - 其他设置与其他提供商类似。 现在您已准备好在 SillyTavern 中使用语音识别将您的语音转录为文本。 ===== extensions/Stable-Diffusion.md (https://sillytaverncn.net/extensions/stable-diffusion/) ===== --- route: /extensions/stable-diffusion/ templating: false --- # Image Generatio (图像生成) 使用本地或基于云的 Stable Diffusion、FLUX 或 DALL-E API 生成图像。 自动生成图像作为您消息的回复以获得完全沉浸感,从魔杖菜单或斜杠命令使用聊天历史和角色信息生成图像,或在聊天输入栏中使用 `/sd (任何内容)` 命令使用您自己的提示词生成图像。 大多数常用的 Stable Diffusion 生成设置都可以在 SillyTavern UI 中自定义。 - 支持[多种图像生成源](#支持的源),包括本地和基于云的服务 - 各种[生成模式](#生成模式)用于角色、场景和自定义提示词 - [斜杠命令](#如何生成图像)用于在聊天中轻松生成图像 - [交互模式](#使用交互模式)可根据自然语言请求触发图像生成 - 可自定义的提示词模板和[前缀](#通用提示词前缀)以保持一致的风格和质量 - [角色特定提示词前缀](#角色特定提示词前缀)用于定制角色图像 - [风格预设](#风格)可快速切换不同的图像生成设置 - 灵活的[聊天消息可见性](#聊天消息可见性)选项用于生成的图像 - 高级[ComfyUI 集成](#comfyui-配置)用于高度可自定义的工作流程 - 能够[查看所有生成的图像](#查看所有生成的图像)在角色画廊中 - [图像滑动](#图像滑动)功能可以重新生成图像同时保持相同的提示词 - 选项可以[在生成前编辑提示词](#生成前编辑提示词)和[扩展自由模式提示词](#扩展自由模式提示词) - 与 AI [函数调用](#使用函数工具)集成以自动检测图像生成意图 ## 支持的源 | 源 | 备注 | |:--------------------------------------------------------------------------------------------------|:------------------------------------------------------------------------------------------------| | [Block Entropy](https://blockentropy.ai/) | 所有服务将于 2024 年 12 月 31 日停止 | | [ComfyUI](https://github.com/comfyanonymous/ComfyUI) | 本地,开源 (GPL3),免费,参见 [ComfyUI 配置](#comfyui-配置)。 | | [Draw Things](https://drawthings.ai/) | 本地,Mac/iOS,免费 | | [HuggingFace Serverless](https://huggingface.co/docs/api-inference/index) | 云端,免费 | | [NovelAI Diffusion](https://novelai.net/) | 云端,需要有效订阅 | | [OpenAI DALL-E 2/3](https://platform.openai.com/) | 云端,需要有效订阅 | | [Pollinations](https://pollinations.ai/) | 云端,开源 (MIT),免费 | | [SD.Next / vladmandic](https://github.com/vladmandic/automatic) | 本地,开源 (AGPL3),免费 | | [SillyTavern Extras](https://github.com/SillyTavern/SillyTavern-Extras) | 已弃用,不推荐 | | [Stability AI](https://platform.stability.ai/) | 云端,付费 | | [Stable Diffusion WebUI / AUTOMATIC1111](https://github.com/AUTOMATIC1111/stable-diffusion-webui) | 本地,开源 (AGPL3),免费 | | [Stable Horde](https://stablehorde.net/) | 云端,开源 (AGPL3),免费 | | [TogetherAI](https://docs.together.ai/docs/serverless-models#image-models) | 云端 | ## 生成模式 | 魔杖菜单项 | 斜杠命令参数 | 描述 | 备注 | |:-------------------|:-----------------------|:-----------------------------------------------|:--------------------------------------| | "Yourself" | `you` | 当前角色的全身肖像。 | - | | "Your Face" | `face` | 当前角色的特写肖像。 | 强制使用肖像纵横比。 | | "Me" | `me` | 用户角色的肖像。 | - | | "The Whole Story" | `scene` | 聊天事件的视觉回顾。 | - | | "The Last Message" | `last` | 最后一条聊天消息的视觉回顾。 | - | | "Raw Last Message" | `raw_last` | 直接使用最后一条消息作为提示词。 | - | | "Background" | `background` | 基于故事背景的聊天背景。 | 强制使用宽景观纵横比。 | ## 如何生成图像 1. 使用扩展上下文菜单(魔杖)中的"Image Generation"项。 2. 输入带有生成模式表中参数的 `/sd (参数)` 斜杠命令。其他任何内容都会触发"自由模式",让 SD 生成您提示的任何内容。例如:`/sd apple tree` 会生成一棵苹果树的图片。 3. 查找聊天消息上下文操作中的画笔图标。这将为所选消息强制使用"Raw Message"模式。 除了原始消息和自由模式之外的每种生成模式都会使用您当前选择的主要生成 API 触发提示词生成,将聊天上下文转换为 SD 提示词。 您可以使用扩展面板中的"SD Prompt Templates"设置抽屉为每种生成模式配置指令模板。 ### `/sd` 命令使用技巧 #### 查看所有生成的图像 要查看角色的所有保存图像(包括其他聊天),请从角色信息面板的"More..."下拉菜单打开画廊,或使用 `/show-gallery` 斜杠命令。 #### 指定负面提示词 在提示词之前使用 `negative` 命名参数来强制使用特定的负面提示词进行生成。 ```stscript /sd negative="fries" cute tater farmer holding a tayto in a spud-field ``` #### 包含角色特定前缀 在自由提示词模式下使用特殊的 `{{charPrefix}}` 宏来包含当前角色的正面和负面提示词前缀(如果已定义)。 ```stscript /sd {{charPrefix}}, riding a bike ``` #### 抑制聊天消息 您可以通过传递 `quiet=true` 命名参数来避免将生成的图像发布到聊天中。图像仍会添加到角色画廊中,命令将生成图像的相对 URL,可供其他命令使用。 下面的示例将使用 Markdown 作为用户角色发送生成的图像。 ```stscript /sd quiet=true me | /send Here's a picture of me: ![my portrait]({{pipe}}) ``` ### 图像滑动 图像滑动允许在保持相同提示词的同时重新生成图像。如果设置了固定种子,它将为下一次生成随机化。 要循环浏览图像,将鼠标光标悬停(移动设备上点击)在生成的图像上以显示箭头按钮和滑动计数器。点击最新图像上的右箭头将生成一个新图像。 *这里的"滑动"只是一个名称,不要尝试实际的滑动手势,因为这会重新生成消息本身,而不是附加的图像。* ## 选项 ### 生成前编辑提示词 允许在将自动生成的提示词发送到 Stable Diffusion API 之前手动编辑。 ### 使用函数工具 使用[函数调用](/extensions/Stable-Diffusion.md)自动检测生成图像的意图。 **要求:** 1. 必须使用支持的源配置图像生成。 2. 必须使用支持的 Chat Completion API 模型,并在 AI Response 设置中启用函数工具调用。 3. 必须在图像生成设置中启用"Use function tool"选项。 4. 用户应在聊天消息中表达生成图像的意图,例如"给我发一张猫的图片"。 !!! warning 启用函数工具时,交互模式将不会触发。 !!! ### 使用交互模式 允许在回复遵循特殊模式的用户消息时触发图像生成而不是文本: 1. 包含以下动词之一:send、mail、imagine、generate、make、create、draw、paint、render 2. 后跟以下名词之一(不超过 10 个字符):pic、picture、image、drawing、painting、photo、photograph 3. 后跟图像生成的目标主题,可以选择性地在前面加上"of a"或"of this"等短语。 有效请求和捕获主题的示例: * `Can you please send me a picture of a cat` => `cat` * `Generate a picture of the Eiffel tower` => `Eiffel tower` * `Let's draw a painting of Mona Lisa` => `Mona Lisa` 一些特殊主题会触发预定义的生成模式: * 'you', 'yourself' => "Yourself" * 'your face', 'your portrait', 'your selfie' => "Your Face" * 'me', 'myself' => "Me" * 'story', 'scenario', 'whole story' => "The Whole Story" * 'last message' => "The Last Message" * 'background', 'scene background', 'scene', 'scenery', 'surroundings', 'environment' => "Background" ### 扩展自由模式提示词 使用交互模式或斜杠命令时,通过提示您的主要 API 自动扩展自由模式生成主题描述。 ### 对齐自动调整的分辨率 将具有强制纵横比(肖像、背景)的图像生成请求对齐到最接近的已知分辨率,同时尽量保持绝对像素数。请参阅"Resolution"下拉菜单了解可能的选项。 **推荐用于 SDXL 模型**。 ## 通用提示词前缀 在每个生成或自由模式提示词之前添加。通常用于设置图片的整体风格。 示例:`best quality, anime lineart`。 **专业提示:**使用 `{prompt}` 宏来指定生成的提示词将被插入的确切位置。 ## 负面提示词 您不希望在输出中出现的图像特征。 示例:`bad quality, watermark`。 ## 角色特定提示词前缀 描述当前选择的角色的任何特征。将在通用前缀之后添加。 示例:`female, green eyes, brown hair, pink shirt`。 您还可以为任何不需要的内容指定负面提示词前缀。它将与通用负面提示词组合。 限制: 1. 仅在一对一聊天中有效。不会在群组中使用。 2. 不会用于背景和自由模式生成。 如果您想与他人共享前缀,请勾选"Shareable"复选框。这将把它们保存在角色数据中,而不是您的本地设置中。 **专业提示:**如果生成源支持,您也可以在这里使用 LoRAs/embeddings,例如:``。 ## 风格 使用此功能可以快速保存和恢复您喜欢的风格/质量预设,以便稍后使用或在模型之间切换时使用。风格预设包括以下内容: 1. 通用提示词前缀 2. 负面提示词 您还可以使用 `/imagine-style` 命令(或 `/sd-style` 或 `/img-style`)在风格之间切换。 ## 聊天消息可见性 默认情况下,插入聊天的生成图像在主 API 提示词中是隐藏的,但可以针对每个生成发起者("魔杖"图标、斜杠命令、交互模式)单独覆盖。这可以用于通过让角色"认知"图像来使体验更具沉浸感。如果启用了"Send inline images",Chat Completions API 中的多模态模型也可能会"看到"图像。 可以通过更改图像提示词模板下的"Chat Message Template"来自定义文本消息。所有常规宏都可以在此模板中使用,另外还有一个特殊的 `{{prompt}}` 宏来指定图像提示词将被添加的位置。 ## ComfyUI 配置 [ComfyUI](https://github.com/comfyanonymous/ComfyUI) 是一个快速且非常灵活的图像生成选项。 如果您熟悉 ComfyUI,简单来说:在 ComfyUI 中制作您的工作流程,**以 API 格式**下载,然后粘贴到 SillyTavern ComfyUI 工作流程编辑器中。ST 将把您的工作流程提交到 ComfyUI 的 API,您将在聊天中获得一张图像。但是能力越大,责任越大,主要责任是在工作流程 JSON 中插入占位符,以便您可以从 SillyTavern 更改设置。 如果您不熟悉 ComfyUI,您仍然可以使用默认工作流程在 SillyTavern 中生成图像。之后,当您想要更强大的功能时,您可以学习如何使用 ComfyUI... ### 控制 此面板允许您配置和管理 ComfyUI 与 SillyTavern 的集成。 在 **ComfyUI URL** 输入字段中输入您的 ComfyUI 服务器的 URL。默认值是 `http://127.0.0.1:8188`。 如果您使用的是 [SwarmUI](https://github.com/mcmonkeyprojects/SwarmUI),[托管 ComfyUI 服务器](https://github.com/mcmonkeyprojects/SwarmUI/blob/master/src/BuiltinExtensions/ComfyUIBackend/README.md)的默认端口是 `7821`,比 SwarmUI 的默认端口高 20。 输入 URL 后,选择 **Connect** 以验证并建立连接。ComfyUI 服务器必须可以从 SillyTavern 主机访问。 ### 工作流程管理 从下拉菜单中选择 ComfyUI 工作流程。提供了两个默认工作流程: - Default_Comfy_Workflow.json:支持最常见图像生成设置的基本文本到图像工作流程。 - Char_Avatar_Comfy_Workflow.json:使用角色头像加上提示词生成图像的示例图像到图像工作流程。 使用以下按钮管理您的工作流程: - **Open workflow editor** 查看和修改所选工作流程。 - **Create new workflow** 创建具有自定义名称的新工作流程。 - **Delete workflow** 删除所选工作流程。 ### 工作流程编辑器 ComfyUI 工作流程编辑器允许您查看和修改用于 SillyTavern 的 ComfyUI 工作流程。 编辑器的主要组件是一个大型文本区域,您可以在其中插入或编辑 JSON 格式的 ComfyUI 工作流程。 要将 ComfyUI 工作流程添加到编辑器,请按照以下步骤操作: 1. 在 ComfyUI 设置中启用"Dev Mode"。 2. 使用 ComfyUI 中的"Save (API Format)"选项下载 JSON 数据。 3. 在 SillyTavern 中创建新工作流程并打开编辑器。 4. 将下载的 JSON 数据粘贴到文本区域中。 !!! info Tips 您可以添加 API-格式 JSON 文件直接到 `data/default-user/user/workflows` 目录在您的 SillyTavern 安装。这将节省步骤 3 和 4。 保留原始 JSON 文件。如果您需要再次在 ComfyUI 中打开工作流程以进行更改,编辑原始文件比带有所有占位符的文件要方便得多。 !!! ### 占位符 编辑器提供了一系列预定义的占位符,可以在您的工作流 JSON 中使用。这些占位符在 SillyTavern 执行工作流时会被替换为动态值。 标记为 ✅ 的占位符存在于您的工作流 JSON 中。标记为 ❌ 的占位符不存在于您的工作流 JSON 中。您可以根据需要将这些占位符添加到您的工作流 JSON 中。您不需要添加所有占位符,只需添加您的工作流使用并且您想要动态替换的占位符。 #### 提示词 `%prompt%` 和 `%negative_prompt%` 占位符用于将图像生成提示词插入到工作流中。它们包含由 SillyTavern 生成的最终提示词,包括为您选择的 `/sd` 模式生成的提示词、通用提示词前缀、负面提示词和角色特定提示词前缀。 例如,您可能在 ComfyUI 中使用类似"森林精灵"的提示词测试了您的工作流。要在 SillyTavern 中使用此工作流,您可以用 `%prompt%` 占位符替换"森林精灵"提示词: +++ 带有占位符的 JSON ```json { "class_type": "CLIPTextEncode", "inputs": { "clip": ["4", 1], "text": "%prompt%" } } ``` +++ 原始 JSON ```json { "class_type": "CLIPTextEncode", "inputs": { "clip": ["4", 1], "text": "forest elf" } } ``` +++ 请注意,占位符用双引号括起来。这对于 JSON 格式很重要,并且是 SillyTavern 的占位符替换系统所必需的。即使对于数字,您也必须在模板 JSON 中使用双引号。 有时提示词(或其他值)不会出现在您期望的位置。如果节点对于工作流在 API 模式下运行不是必需的,ComfyUI 将从工作流的 API 版本中删除这些节点。 例如,此工作流使用 [LoRA 标签加载器节点](https://github.com/badjeff/comfyui_lora_tag_loader) 和提示词原语,以便工作流在 UI 模式下更清晰: ![Prompt primitive and LoRA loader](/static/extensions/sd-comfy-prompt-primitive.png) 提示词原语节点将从工作流的 API 版本中删除,因此您需要在 LoraTagLoader 节点中插入占位符。在工作流中找到文本"apple tree"并将其替换为 `%prompt%` 占位符: +++ 带有占位符的 JSON ```json { "inputs": { "text": "%prompt%", "model": ["112", 0], "clip": ["112", 1] }, "class_type": "LoraTagLoader", "_meta": {"title": "Load LoRA Tag"} } ``` +++ 原始 JSON ```json { "inputs": { "text": "apple tree", "model": ["112", 0], "clip": ["112", 1] }, "class_type": "LoraTagLoader", "_meta": {"title": "Load LoRA Tag"} } ``` +++ 在某些情况下,您可能需要在工作流 JSON 中进行多次替换,即使提示词在 UI 中只出现一次。 #### 模型 `%model%` 占位符将插入图像生成设置中选定模型的值。 默认文本到图像工作流中的一个示例: +++ 带有占位符的 JSON ```json { "class_type": "CheckpointLoaderSimple", "inputs": { "ckpt_name": "%model%" } } ``` +++ 原始 JSON ```json { "class_type": "CheckpointLoaderSimple", "inputs": { "ckpt_name": "sd15.safetensors" } } ``` +++ 要加载 GGUF 量化的 UNet,请在工作流中使用 [UNet Loader (GGUF)](https://github.com/city96/ComfyUI-GGUF) 节点, 在 SillyTavern 模型下拉菜单中选择一个 `GGUF` 模型,并在节点设置中像这样使用 `%model%` 占位符: +++ 带有占位符的 JSON ```json { "inputs": { "unet_name": "%model%" }, "class_type": "UnetLoaderGGUF", "_meta": { "title": "Unet Loader (GGUF)" } } ``` +++ 原始 JSON ```json { "inputs": { "unet_name": "flux1-dev-Q4_0.gguf" }, "class_type": "UnetLoaderGGUF", "_meta": { "title": "Unet Loader (GGUF)" } } ``` +++ !!! info 如果您在 ComfyUI 中有除通常的 SD 检查点之外的模型类型 Stable Diffusion 检查点、SD UNet 和 GGUF 量化的 UNet 都出现在模型下拉菜单中。 一种类型的模型将无法与期望另一种类型的工作流/加载器节点一起使用。 如果您在 ST 中选择不兼容的模型类型,ComfyUI 将报告加载器节点有问题。 !!! #### 头像图像 使用 `%user_avatar%` 和 `%char_avatar%` 占位符在工作流中包含用户和角色头像。这些占位符在执行工作流时会被替换为头像的 PNG 数据。图像数据以 base64 格式编码,因此您必须在工作流中对其进行解码。此任务的一个流行选择是 [Load image (Base64)](https://github.com/Acly/comfyui-tooling-nodes) 节点。 在此示例中,角色头像使用 `Load Image (Base64)` 节点加载。它还使用 Image Resize 节点将图像重新缩放到图像生成设置中指定的任何大小: ![Load image from base64 string and resize](/static/extensions/sd-comfy-load-b64.png) 将 `%char_avatar%`、`%width%` 和 `%height%` 占位符插入到 Load Image (Base64) 和 Image Resize 节点的 JSON 中: ```json { "97": { "inputs": { "image": "%char_avatar%" }, "class_type": "ETN_LoadImageBase64", "_meta": {"title": "Load Image (Base64)"} }, "98": { "inputs": { "mode": "resize", "resize_width": "%width%", "resize_height": "%height%", "image": ["97", 0] }, "class_type": "Image Resize", "_meta": {"title": "Resize image"} } } ``` 要获取 base64 编码的图像字符串以在 ComfyUI 中测试您的工作流,请使用任何将图像转换为 base64 字符串的在线工具。 这是一个您可以用于初始测试的示例字符串:[sd-comfy-base64-test-string.txt](/static/extensions/sd-comfy-base64-test-string.txt)。 #### 其他占位符 大多数其他占位符使用图像生成设置中相应控件的值,或您使用 `/sd` 命令指定的值: - `%vae%`,但大多数 SD 模型都包含 VAE,因此默认工作流不使用此占位符。将其与自定义工作流一起使用以加载 VAE 以及 UNet,覆盖默认 VAE 等。 - `%sampler%` - `%scheduler%` - `%steps%` - `%scale%` - `%width%` - `%height%` - `%denoise%`:对于示例图像到图像工作流,在约 0.5(对源图像几乎没有明显更改)和 1.0(完全不同的图像,就像没有使用源图像一样)之间改变去噪量。默认文本到图像工作流不使用,因为对于文本到图像使用除 1.0 之外的值没有意义。 - `%clip_skip%`:默认工作流不使用,但可用于自定义工作流。 如果您指定了种子值,`%seed%` 占位符将插入控件中的种子值。如果您将种子设置为 `-1`,SillyTavern 将为 `%seed%` 中的每个图像生成一个新的随机种子。 #### 自定义占位符 您可以向工作流添加自定义占位符: 1. 在预定义占位符下方查找"自定义"部分。 2. 单击"+"按钮添加新的自定义占位符。 3. 在 `find` 字段中输入占位符的名称。 4. 在 `replace` 字段中输入要替换占位符的值。 自定义占位符将出现在预定义占位符下方的单独列表中。 例如,您可以使用自定义占位符替换默认工作流中已保存图像文件名的"SillyTavern"前缀。添加一个新的自定义占位符,将 `find` 设置为 `filename_prefix`,将 `replace` 设置为 `ServiceTesnor`。将新的 `%filename_prefix%` 占位符插入到您的工作流 JSON 中。现在,您可以通过更改自定义占位符的值,将 SillyTavern 中的文件名前缀更改为 ServiceTesnor。 +++ 带有占位符的 JSON ```json { "class_type": "SaveImage", "inputs": { "filename_prefix": "%filename_prefix%", "images": ["8", 0] } } ``` +++ 原始 JSON ```json { "class_type": "SaveImage", "inputs": { "filename_prefix": "SillyTavern", "images": ["8", 0] } } ``` +++ ### Comfy 技巧 阅读此页面上的所有常规信息,以便您熟悉图像生成选项。诸如可切换样式和通用提示词前缀之类的选项,与 ComfyUI 工作流的完全灵活性相结合,使您能够创建各种各样的图像生成设置。 #### 加载 LoRA 使用 LoRA 标签加载器节点(例如 [Load LoRA Tag](https://github.com/badjeff/comfyui_lora_tag_loader))加载提示词中指定的任何 LoRA。 现在,您可以使用 `` 之类的标签将任意数量的 LoRA 添加到您的提示词中,它们将被加载到您的工作流中。 这也将使在[角色特定提示词前缀](#角色特定提示词前缀)中使用 LoRA 的"专业提示"与 ComfyUI 一起使用。 #### 从样式或斜杠命令设置工作流值 您可以在自定义占位符值中使用宏。作为一个实际示例, 假设您有时想生成没有背景的图像,并且您希望可以使用 斜杠命令或图像样式切换此功能。以下是您可以执行的操作: 1. 制作一个 ComfyUI 工作流,根据输入的值删除图像背景或不删除。 2. 使用自定义占位符设置该输入的值,但使用 `{{getvar::remove_background}}` 作为替换值 3. 现在您可以在生成图像之前使用 `/setvar key=remove_background true` 或 `/setvar key=remove_background false` 设置 `remove_background` 的值 4. 工作流将使用您设置的值来确定是否删除背景 5. 制作一个带有通用提示词前缀 `{{setvar::remove_background::true}}` 的图像样式"无背景" 6. 在生成图像之前使用样式控件或 `/imagine-style 无背景` 将 `remove_background` 的值设置为 `true` ===== extensions/Summarize.md (https://sillytaverncn.net/extensions/summarize/) ===== # Summarize (摘要) ## 这是什么? 此扩展允许您创建、存储和使用基于聊天中发生的事件自动生成的摘要。摘要可以帮助概述故事中发生的一般细节,这*可能*被解释为长期记忆,但请谨慎对待这种说法。由于摘要是由语言模型生成的,输出可能会丢失一些重要细节或包含幻觉,因此建议您始终跟踪摘要状态,并在需要时手动纠正。 ## 常规配置 摘要扩展默认安装在 SillyTavern 中,因此它会在 ST 的扩展面板(堆叠立方体图标)列表中显示如下: ![摘要配置面板](/static/extensions/summarize.png) - **当前摘要** - 显示并提供修改当前摘要的功能。摘要会更新并嵌入到生成摘要时上下文中最后一条消息的聊天文件元数据中。删除或编辑附加了摘要的聊天消息将使状态恢复到最后一个有效的摘要。 - **恢复上一个** - 删除当前摘要,回滚到上一个状态。如果摘要器在任何时候表现不佳,这很有用。 - **暂停** - 选中此项可防止摘要自动更新。如果您想提供自己的自定义摘要或通过清除框并停止更新来有效禁用摘要,这很有用。 - **弹出窗口** - 允许将摘要分离到侧边栏上的可移动 UI 面板中。对于桌面布局来说很有用,可以轻松访问摘要设置,而无需浏览扩展菜单。 - **注入模板** - 定义摘要在插入常规聊天提示时如何包装。应使用特殊的 \{\{summary\}\} 宏来表示提示注入文本中当前摘要状态的确切位置。 - **注入位置** - 设置提示注入的位置。选项与作者注释相同:在主提示之前或之后,或在指定深度的聊天中。 ## 支持的摘要源 ### 主要 API 摘要将由您当前选择的 AI 后端、模型和设置提供支持。此方法不需要额外设置,只需要一个正常工作的 API 连接。 此选项有以下子模式,根据摘要提示的构建方式而有所不同: 1. 原始,阻塞。摘要将仅使用摘要提示和聊天历史生成。后续提示还将包括生成摘要后发送的消息的前一个摘要(参见示例)。此模式可能(而且会)生成提示之间有很大变化的提示,因此不建议在处理提示时间较慢的后端(如 llama.cpp 及其衍生产品)中使用。 2. 原始,非阻塞。与上述相同,但在生成摘要期间不会阻塞聊天生成。并非每个后端都支持同时请求,因此如果摘要失败,请切换到阻塞模式。 3. 经典,阻塞。摘要提示将作为中性系统指令发送在您通常的生成提示末尾,不省略角色卡片、主提示、示例对话和聊天提示的其他部分。这通常会产生与重用处理的提示配合良好的提示,因此建议与 llama.cpp 及其兄弟一起使用。 #### 摘要设置说明 1. **摘要提示** - 定义将用于创建摘要的提示。可以包含任何已知的宏,以及特殊的 \{\{words\}\} 宏(见下文)。 2. **目标摘要长度(字数)** - 定义可以插入到摘要提示中的 \{\{words\}\} 宏的值。此设置完全是可选的,如果不使用该宏,则完全没有效果。 3. **API 响应长度(令牌)** - 允许为生成与全局设置值不同的摘要设置覆盖 API 响应长度。 4. **每个请求的最大消息数_(仅限原始模式)_** - 设置限制一个摘要提示中包含的最大消息数。`0` 表示没有明确限制,但要摘要的结果消息数仍将取决于最大上下文大小,使用以下公式计算:`最大摘要缓冲区 = 上下文大小 - 摘要提示 - 前一个摘要 - 响应长度`。当您想在具有大上下文大小的模型上获得更集中的摘要时使用此选项。 5. **无 WI/AN** - 从要摘要的文本中省略世界信息和作者注释。仅在使用经典提示生成器时有效。原始提示生成器始终省略 WI/AN。 6. **每 X 条消息更新一次** - 设置生成摘要的间隔。`0` 表示自动摘要已禁用,但您仍可以通过点击"立即摘要"按钮手动触发它。这应该根据提示缓冲区完全填满聊天消息的速度进行调整。理想情况下,您希望在消息开始从提示中删除时生成第一个摘要。 7. **每 X 个字更新一次** - 与上述相同,但使用单词(不是令牌!)而不是消息,理论上可能是一个更准确的测量,因为聊天消息的内容通常是不可预测的,但您的里程可能会有所不同。 如果两个"更新间隔"滑块都设置为非零值,则两者都将在各自的间隔触发摘要更新,具体取决于先发生什么。强烈建议在切换到具有不同上下文大小的另一个模型时相应地更新这些值,否则,摘要生成可能会触发得太频繁,或者根本不会触发。 如果您不确定间隔设置,可以点击"更新间隔"滑块上方的"魔杖"按钮,尝试根据一些简单的启发式方法猜测最佳值。算法的简要描述如下: 1. 计算所有聊天消息的令牌和字数 2. 根据所需的提示词确定目标摘要长度 3. 根据平均消息长度计算可以适应提示的最大消息数 4. 如果设置了"最大消息数",调整平均值以考虑不适合摘要限制的消息 5. 将调整后的平均每个提示消息数向下舍入为 5 的倍数 #### 示例提示 **原始提示** ``` System: [摘要提示] 前一个摘要。 User: 消息 foo。 Char: 消息 bar。 ``` **经典提示** ``` [主提示] [角色卡片] [示例对话] User: 消息 foo。 Char: 消息 bar。 System: [摘要提示] ``` ### Extras API 带有 `summarize` 模块的 Extras 服务器可以运行辅助摘要模型(BART)。 它的上下文大小非常小(~1024 个令牌),因此它处理大型摘要的能力相当有限。 要配置 Extras 摘要源,请执行以下操作: 1. 安装或更新 [Extras](https://github.com/SillyTavern/SillyTavern-extras) 到最新版本。 2. 使用启用的 `summarize` 模块运行 Extras:`python server.py --enable-modules=summarize` #### 更改摘要模型 默认情况下,摘要使用 [Qiliang/bart-large-cnn-samsum-ChatGPT_v3](https://huggingface.co/Qiliang/bart-large-cnn-samsum-ChatGPT_v3) 模型进行摘要。 可以通过使用命令行参数 `--summarization-model=(###Hugging-Face-Model-URL-Here###)` 来更改此设置。 已知的替代摘要模型是 `Qiliang/bart-large-cnn-samsum-ElectrifAi_v10`。 ===== extensions/TTS.md (https://sillytaverncn.net/extensions/tts/) ===== --- order: tts route: /extensions/tts/ --- # TTS SillyTavern 拥有广泛的 TTS(text-to-speech,文本转语音)选项,用于让语音朗读聊天的部分内容。本页面解释了设置和使用方法。 ## 配置 TTS ### TTS Provider 选择 用于选择您想要使用的 TTS 服务。一些选项是免费的,一些需要付费订阅,还有一些在您的 PC 上本地运行。 可用选项(列表可能随时间变化): - **AllTalk** - 免费,开源本地安装,提供多种 TTS 引擎。请参阅 [AllTalk](./AllTalk.md) 页面了解设置说明。 - **Azure TTS** - 与 Microsoft Edge 相同的声音。需要 Azure 账户和付费订阅。 - **Coqui-TTS**(已弃用)- 免费,需要 Extras API 运行。高性能 Text2Speech 模型(Tacotron、Tacotron2、Glow-TTS、SpeedySpeech)以及 Bark。 - **Edge** - 免费,通过 Azure 运行。当选择 "Plugin" 作为 provider 运行时,您还需要安装[此服务器插件](https://github.com/SillyTavern/SillyTavern-EdgeTTS-Plugin)。其他选项需要 Extras API(已弃用)运行。 - **Electron Hub** - 重用您的 [Electron Hub](https://electronhub.ai/) API key 来访问云端语音(GPT-4o Mini TTS、Microsoft neural voices 等),具有每个模型的控制选项。 - **ElevenLabs** - 需要付费订阅。从 [ElevenLabs](https://elevenlabs.io/) 获取 API key。 - **Google Translate** - Google 提供的免费语音,每种语言一个,质量可能差异很大。 - **Google Gemini TTS** - 需要来自 [Vertex AI](/Usage/API_Connections/google.md#google-vertex-ai) 或 [AI Studio](/Usage/API_Connections/google.md#google-ai-studio) 的 API key,使用 [Gemini TTS](https://cloud.google.com/text-to-speech/docs/gemini-tts) 模型。 - **Kokoro** - 免费,使用 [kokoro.js](https://www.npmjs.com/package/kokoro-js) 在您的浏览器中本地运行模型。但是,[某些浏览器](https://caniuse.com/webgpu)可能不支持 device 选项的 WebGPU。 - **MiniMax** - 需要来自 [MiniMax](https://www.minimax.io/) 的 API key。请参阅 [MiniMax TTS](./MiniMaxTTS.md) 页面了解设置说明。 - **Novel** - 需要付费的 NovelAI 订阅,由 NovelAI 的 TTS 引擎生成 - **OpenAI** - 需要付费 API key,使用 OpenAI 的 TTS 模型。 - **Pollinations** - 免费访问 OpenAI TTS 模型,但有速率限制。[网站](https://pollinations.ai/)。 - **Silero** - 免费,在您的 PC 上运行,质量可能差异很大。需要[专用 API 服务器](https://github.com/ouoertheo/silero-api-server)安装或 Extras API(已弃用)。 - **System** - 使用您的操作系统 TTS 引擎(如果存在)。质量可能因操作系统而异。 - **XTTS** - 免费,需要专用 API 服务器安装。请参阅 [XTTS](./XTTS.md) 页面了解设置说明。 ### 复选框 - **Enabled** - 打开/关闭 TTS 播放 - **Auto Generation** - 让 TTS 在新消息进入聊天时自动开始播放 - **Only narrate "quotes"** - 将 TTS 播放限制为仅包含 `"引号"` 内的文本。这将 `*包括星号行内的 "引号"*`(内部变量名 = `narrate_quoted_only`) - **Ignore \*text, even "quotes", inside asterisks\*** - TTS 不会播放 `*星号*` 内的任何文本,即使是 "引号"(内部变量名 = `narrate_dialogues_only`) - *同时勾选 "only narrate quotes" 和 "ignore asterisks" 复选框将导致 TTS 仅读取不在星号内的 "引号",并忽略其他所有内容。* - **Narrate only the translated text** - 这将使 TTS 仅朗读翻译后的文本。 给定示例文本:`*Cohee approaches you with a faint "nya"* "Good evening, senpai", she says.` 以下表格显示了根据 **Ignore \*text, even "quotes", inside asterisks\*** 和 **Only narrate "quotes"** 的布尔状态,文本将如何修改: | **Ignore \*text, even "quotes", inside asterisks\*** | **Only narrate "quotes"** | **输出** | |:-------------------------------------------------------|:---------------------------|:--------------------------------------------------------------------------| | Disabled | Disabled | Cohee approaches you with a faint "nya" "Good evening, senpai", she says. | | Disabled | Enabled | "nya"... "Good evening, senpai" | | Enabled | Disabled | "Good evening, senpai", she says. | | Enabled | Enabled | "Good evening, senpai" | ### 滑块 这些会根据您选择的 API 而变化。 ### 按钮 - **Apply** - 在设置 TTS API 和编辑 voice map 后必须点击此按钮。 - **Refresh** - 从所选 TTS API 重新加载语音列表。 - **Available voices** - 加载一个弹出窗口,显示所选 API 的所有可用语音,并让您使用示例对话预览它们。 ## 使用 TTS 1. 点击 "Enable" 复选框,否则什么都不会发生。 2. 如果您希望 TTS 在每次新消息到达聊天时自动启动,请点击 "Auto-generation" 复选框。 3. 可选地,点击任何消息右上角的扩音器图标以按需播放。 4. 点击右下角的 "Stop" 按钮(位于 wand 菜单内)以停止任何播放。 ### Voice Map 您必须为 TTS 提供 voice map,否则它不知道应该为每个角色使用什么语音。要设置 voice map,首先打开与您想要分配语音的角色的聊天和/或选择要分配语音的用户角色,然后从下拉菜单中选择 TTS provider 列出的语音。如果您看不到语音和/或角色列表,请确保您的 TTS provider 配置正确并点击 "Refresh"。某些 provider(如 OpenAI-compatible 或 NovelAI)需要您手动填充语音列表。 ===== extensions/Translation.md (https://sillytaverncn.net/extensions/translation/) ===== --- route: /extensions/translation/ templating: false --- # Chat Translation (聊天翻译) ## 概述 聊天翻译扩展使用各种翻译提供商实现聊天消息在不同语言之间的实时翻译。它支持手动和自动翻译模式。 ![使用"Translate Message/翻譯訊息"消息操作按钮将英文消息翻译成中文](../static/extensions/translation/sensei.png) +++ English !["Translate Chat", "Translate Input"](../static/extensions/translation/wand-menu-en.png) +++ 简体中文 !["翻译聊天", "翻译输入"](../static/extensions/translation/wand-menu-zh-cn.png) +++ 繁體中文 !["翻譯聊天內容", "翻譯輸入內容"](../static/extensions/translation/wand-menu-zh-tw.png) +++ 한국어 !["채팅 번역하기", "입력 번역하기"](../static/extensions/translation/wand-menu-ko.png) +++ Русский !["Перевести чат", "Перевести моё сообщение"](../static/extensions/translation/wand-menu-ru.png) +++ ## 使用方法 翻译聊天消息的所有方式: ** 翻译聊天**按钮在** 扩展**菜单中 - 一次性翻译整个聊天历史 ** 翻译输入**按钮在** 扩展**菜单中 - 仅翻译当前输入文本 - 在发送消息前很有用 ** 翻译消息**图标在任何消息的** 消息 操作**工具栏中 - 点击仅翻译该消息 - 再次点击恢复原文 **自动模式**配置在** 扩展**面板的**聊天翻译**抽屉中 - 自动翻译用户输入、AI 回复或两者 **/translate** 斜杠命令 - 使用 `/translate [target=language_code] text` 翻译文本 ## 配置 配置选项在** 扩展**面板的**聊天翻译**抽屉中。 #### 提供商 - 选择您偏好的[翻译服务](#翻译提供商) - 如果出现** API 密钥**图标,点击输入 API 密钥 - 如果出现** 自定义 URL**图标,点击输入自定义 API URL #### 目标语言 选择您想要用来写消息或阅读 AI 回复的语言。 #### 自动模式 配置自动翻译行为。 - **无**:不自动翻译 - **翻译回复**:自动将 AI 回复翻译成目标语言 - **翻译输入**:自动将用户输入翻译成英语 - **全部翻译**:翻译用户输入和 AI 回复 #### 清除翻译 ** 清除翻译**按钮移除当前聊天中所有消息的翻译。原始消息会保留。 ### 配置示例:中英聊天 要设置一个让说中文的用户可以用中文与使用英语的 AI 聊天的工作流程: 1. 将自动模式设置为"全部翻译" 2. 将目标语言设置为"中文(简体)"或"中文(繁体)" 3. 选择具有良好语言自动检测功能的翻译提供商(例如 Google 或 DeepL) 此设置将: - 将用户的中文输入翻译成英语供 AI 使用 - 将 AI 的英语回复翻译回中文供用户使用 此设置依赖于输入的自动语言检测。为了更精确的控制,未来的更新可能会包括明确的源语言选择。 ## 翻译提供商 **:icon-cloud:** 云端 **** 本地,自定义 URL **** 需要 API 密钥 | 提供商 | 位置 | 特点 | |---------------------------------------------------------------------|-------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------| | [Libre Translate](https://libretranslate.com/) | :icon-cloud: | 专有翻译服务的自托管(AGPL-3.0)替代品,带有云托管的专业版 | | [Google Translate](https://cloud.google.com/translate) | :icon-cloud: | 使用广泛,支持多种语言,准确度高 | | [Lingva Translate](https://lingva.ml/) | | Google Translate 的替代前端,开源(AGPL-3.0),注重隐私 | | [DeepL](https://www.deepl.com/) | :icon-cloud: | 高质量翻译,尤其是欧洲语言 | | [DeepLX](https://github.com/OwO-Network/DeepLX) | | 自托管 DeepL 代理,开源(MIT),免费但代理 DeepL Pro 需要 DeepL API 密钥 | | [Bing Translator](https://www.bing.com/translator) | :icon-cloud: | 微软的翻译服务,与 Azure 服务集成 | | [OneRing Translator](https://github.com/janvarev/OneRingTranslator) | | Google Translate 和其他提供商的自托管前端,注重隐私,开源(AGPL-3.0) | | [Yandex Translate](https://translate.yandex.com/) | :icon-cloud: | 适用于俄语和东欧语言 | ### DeepL 特定配置 - 德语、法语、意大利语、西班牙语、荷兰语、日语和俄语可用正式程度级别 - 通过 [config.yaml](/Administration/config-yaml.md#deepl-配置) 中的 `deepl.formality` 配置 ## 斜杠命令 使用 `/translate` 命令进行快速翻译。语法:`/translate [target=language_code] text`。如果未提供目标语言,将使用扩展设置中的值。 ### 基本用法 将文本翻译成当前目标语言并在弹出窗口中显示: ``` /translate Welcome to the Tavern | /echo ``` ![中文(简体)弹出窗口,'欢迎来到酒馆/Welcome to the Tavern'](../static/extensions/translation/welcome-tavern.png) 将文本翻译成西班牙语并添加到聊天中: ``` /translate target=es Hello world | /send ``` ![西班牙语用户消息,'Hola Mundo/Hello world'](/static/extensions/translation/hola-mundo.png) ### 测试、管道翻译、本地化 提示用户输入消息和语言,将消息翻译成该语言,然后重新翻译成配置的目标语言,并在弹出窗口中显示两个翻译。此示例使用 `/input` 和 `/buttons` 命令收集用户输入: ```shell /input default="Hello, world!" Sample text | /let key=input || /buttons labels=["zh-CN", "zh-TW", "es", "hu", "en"] Language | /let key=lang || /translate target={{var::lang}} {{var::input}} | /let key=tx_target | /translate | /let key=tx_orig || /echo escapeHtml=false cssClass=wider_dialogue_popup Test message: {{var::input}}
Output ({{var::lang}}): {{var::tx_target}}
Output (target language): {{var::tx_orig}}
``` 这对于在将翻译写入重要位置之前,检查翻译成您不会说的语言的质量很有用。 ![弹出窗口,'Welcome to the Tavern/欢迎来到酒馆/welcome to the pub', en, zh-CN, en](../static/extensions/translation/welcome-tavern-en-cn.png) ![弹出窗口,'My hovercraft is full of eels/我的氣墊船裡裝滿了鰻魚/My hovercraft is filled with eels', en, zh-TW, en](../static/extensions/translation/eels-out-zh-tw.png) UI 控件以当前语言环境显示,独立于配置的目标语言。 | `/input` | `/buttons` | |-------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------| | ![输入对话框,'发送测试消息/Send Test Message'](../static/extensions/translation/eels-input-zh.png) | ![按钮对话框,'语言/Language'](../static/extensions/translation/eels-lang-zh.png) | ![弹出窗口,'我的氣墊船裡裝滿了鰻魚/My hovercraft is full of eels', zh-TW -> en -> zh-TW](../static/extensions/translation/eels-out-tw-en.png) 在以下示例中,输入语言检测相对有效: ![弹出窗口,'(My hovercraft is full of eels)/A légpárnás hajóm tele van angolnával/我的氣墊船裡裝滿了鰻魚', zh-TW -> hu -> zh-TW](../static/extensions/translation/eels-out-tw-hu.png) ![弹出窗口,'我的氣墊船裡裝滿了鰻魚/Mi aerodeslizador está lleno de anguilas/My hovercraft is full of eels', zh-TW -> es -> en](../static/extensions/translation/eels-out-tw-es-en.png) ![弹出窗口,'Il mio hovercraft è pieno di anguille/我的气垫船里装满了鳗鱼/My hovercraft is filled with eels', it -> zh-CN -> en](../static/extensions/translation/eels-out-it-zhCN-en.png) ## 技术说明 - 支持 UTF-8 编码、特殊字符和表情符号 - 在需要时通过分块处理大型消息 - 保留消息中的格式和嵌入图像 - 缓存翻译以避免重复的 API 调用 ### AI 输入语言 `internal_language` 控制用户消息在发送给 AI 之前自动翻译成的语言。在默认设置中硬编码为'en',无法通过 UI 更改。因此,发送给 AI 的消息的翻译目标语言始终是英语。之前的测试表明,AI 在接收英语消息时表现更好,但随着更多 LLM 在更多样化的语言数据上训练,这种情况可能会改变。我想可以在 `settings.json` 中更改 `internal_language` 并进行尝试。 ### 中文变体处理 扩展支持简体中文和繁体中文,但并非所有翻译提供商都支持。UI 分别将它们显示为"中文(简体)"和"中文(繁体)",语言代码为'zh-CN'和'zh-TW'。它们被映射到以下翻译提供商的语言代码: * Libre Translate:'zh-CN'映射到'zh','zh-TW'映射到'zt'。 * DeepL 和 DeepLX:两种变体都映射到'ZH'。 * Bing:'zh-CN'映射到'zh-Hans','zh-TW'保持不变。 * 其他提供商按原样使用'zh-CN'和'zh-TW'。 ### 文本长度限制 一些提供商对每个请求有字符限制: - Yandex:5000 字符 - DeepLX:1500 字符 - Bing:1000 字符 - Google:5000 字符 较长的文本会自动分块进行翻译。 ===== extensions/VRM.md (https://sillytaverncn.net/extensions/vrm/) ===== # VRM 本指南将指导您为 SillyTavern 设置和自定义 VRM 扩展。此扩展允许您为角色使用 VRM 动画模型,为您的虚拟角色添加动态和互动元素。 ## 前提条件 在开始之前,请确保满足以下前提条件: 1. **分支选择**:确保您使用的是最新版本的 SillyTavern,以访问最新功能和更新。 2. **扩展安装**:从扩展面板(堆叠块图标)的"Download Extensions & Assets"菜单中安装"VRM"扩展。 3. **模型文件夹放置**:将您的 VRM 模型文件(.vrm)放入 `/data//assets/vrm/model` 目录,将动画文件放入 `/data//assets/vrm/animation` 目录。目前支持的动画文件格式是与 VRM 模型兼容的 .fbx 和 .bvh。这包括您可以从 Mixamo (https://www.mixamo.com/) 获取的任何动画,以及您可以从 XR Animator (https://github.com/ButzYung/SystemAnimatorOnline) 等工具导出的任何动画。 ## 扩展设置 VRM 扩展提供了各种设置来自定义您的动画模型的行为。以下是主要设置: ![UI 全局设置](/static/extensions/vrm-global.png) ### 全局设置 1. **启用**: - 选中此复选框以激活扩展,允许您的 VRM 模型在 SillyTavern 中互动。 - 如果您只想使用普通精灵图,可以禁用此扩展。 2. **看向摄像机**: - 选中此复选框可使 VRM 模型的眼睛看向摄像机。 3. **眨眼**: - 选中此复选框可使 VRM 模型的眼睛在随机时间间隔眨眼。模型表情应该正确定义眨眼权重属性,否则模型可能会出现闭着眼睛眨眼等情况,如果发生这种情况,您可以: - 如果您有 .vroid 文件,请修正模型 - 不使用那个不正确的面部表情 - 使用此复选框完全禁用眨眼 4. **TTS 口型同步**: - 选中此复选框可使 VRM 嘴部动作跟随 TTS 播放的声音。仅适用于由 Sillytavern 本身播放声音的 TTS,如 XTTS(非流式模式)。如果禁用,当收到新的角色消息时,嘴部将根据消息文本长度进行动画。 5. **自动发送互动**: - 选中此复选框可在您点击带有映射消息的区域时自动触发角色互动(详见点击区域部分)。 ### 性能设置 1. **身体碰撞箱**: - 选中此复选框可激活对 VRM 模型多个部位的点击检测,根据模型可以检测以下区域:头部/胸部/手部/腹股沟/臀部/腿部/脚部。碰撞箱位置在每帧计算并跟随身体动画,禁用此选项可以提高性能。 2. **使用模型缓存**: - 选中此复选框可在切换模型时将 VRM 模型保留在内存中,允许更快地切换回之前的模型。如果您为同一角色使用不同的模型来更换装扮或形态,这很有用。可能会影响性能。 3. **使用动画缓存**: - 选中此复选框可将会话期间播放的所有动画保留在内存中。所有分配给模型的动画也会在模型首次出现时加载。这会增加首次加载模型的时间,但使所有动画切换变得即时。可能会影响性能。 ### 调试设置 1. **显示网格**: - 选中此复选框可以可视化 3D 网格、模型拖动框和身体碰撞箱。 2. **重新加载按钮**: - 点击此按钮可重新加载 3D 场景,清除缓存和所有 VRM 模型。如果出现错误或缓存开始影响性能时使用。 ### 场景设置 ![UI 场景设置](/static/extensions/vrm-scene.png) 1. **灯光颜色**: - 设置 3D 场景中的灯光颜色。点击重置按钮将其恢复为默认的白色。根据您的浏览器,您可以使用颜色选择器,例如,您可以选取背景图片的颜色以增加沉浸感。 2. **灯光强度**: - 使用滑块以百分比设置灯光强度。点击重置按钮将其恢复为默认值 100%。VRM 模型对光线的反应可能因模型中烘焙的着色器而异,请尝试不同的值看看效果如何。 ![UI 模型设置](/static/extensions/vrm-model.png) ## 角色选择 这些设置允许您管理角色并为其分配 VRM 模型。 1. **刷新按钮**: - 点击刷新按钮以更新当前聊天中的角色列表。 2. **选择角色**: - 使用下拉列表选择要分配 VRM 模型的角色。 3. **移除按钮**: - 点击此按钮可删除角色的已分配模型。 ## 模型选择 1. **刷新按钮**: - 如果您的 VRM 模型未出现在列表中,请点击刷新按钮。 2. **选择模型**: - 从列表中选择一个模型以分配给所选角色。 - 模型必须位于 `/data//assets/vrm/model` 目录中。 3. **重置按钮**: - 点击此按钮可将模型设置重置为默认值。如果您有与默认值对应的动画文件,它们将自动映射。请参阅本文档末尾的命名映射。 ## 模型设置 1. **模型缩放**: - 使用滑块调整模型的大小,使其变大或变小。 2. **模型中心 X/Y 偏移**: - 使用这些滑块更改模型相对于窗口中心的水平/垂直位置。 3. **模型 X/Y 旋转**: - 使用这些滑块更改模型相对于模型臀部的水平/垂直旋转。 ### 备注 - 设置是按模型而不是按角色保存的,并在不同聊天中保持。 - 如果您想为两个不同的角色使用相同的模型但使用不同的设置,请复制 .vrm 文件。 - 您也可以用鼠标拖动模型,这些设置会更新并保存。左键单击并按住可以在屏幕上拖动模型。中键单击并按住或使用 shift+左键单击可以旋转模型。将鼠标光标放在模型上使用鼠标滚轮或使用 ctrl+左键单击可以放大或缩小。 - 如果您不小心将模型移出视图,请使用这些 UI 设置将其带回屏幕。另外,选中"显示框架"复选框以清楚地看到可以点击拖动模型的位置。 ![UI 碰撞箱设置](/static/extensions/vrm-hitboxes.png) ## 碰撞箱映射 - 根据模型骨骼定义,可以生成一些碰撞箱区域,它们将在 UI 的这部分列出,您可以为每个区域分配表情/动画/消息,当您点击该区域时会触发。 ![UI 分类设置](/static/extensions/vrm-classify.png) ## 分类表情映射 1. **要求**: - 需要使用分类表情扩展;否则,将回退到默认动画。 2. **映射**: - 对于分类扩展检测到的每种情绪,您可以分配表情/动作/消息。消息可以包含命令。 ## 命令 1. **/vrmlightcolor** - 设置灯光颜色 - 参数:color - 示例:"/vrmlightcolor white" 或 "/vrmlightcolor purple" 2. **/vrmlightintensity** - 以百分比设置灯光强度 - 参数:intensity - 示例:"/vrmlightintensity 0" 或 "/vrmlightintensity 100" 3. **/vrmmodel** - 为角色分配 vrm 模型 - 参数:character, model - 示例:在单人聊天中 "/vrmmodel Seraphina.vrm" 或在群组聊天中 "/vrmmodel character=Seraphina model=Seraphina.vrm" 4. **/vrmexpression** - 更改模型的表情 - 参数:character, expression - 示例:在单人聊天中 "/vrmexpression happy" 或在群组聊天中 "/vrmexpression character=Seraphina expression=happy" 5. **/vrmmotion** - 更改模型的动画 - 参数:character, motion, loop, random - "/vrmmotion idle" 或 "/vrmmotion character=Seraphina motion=idle loop=true random=false" ## 动画默认映射 如果您的动画文件按以下方式命名,它们将在重置模型设置时自动映射。例如,名为 "assets/vrm/animation/neutral.bvh" 和 "assets/vrm/animation/neutral1.fbx" 的文件将自动映射为默认和中性分类动画的组。碰撞箱也是如此。 // 回退 "default": "assets/vrm/animation/neutral", // 分类类别 "admiration": "assets/vrm/animation/admiration", "amusement": "assets/vrm/animation/amusement", "anger": "assets/vrm/animation/anger", "annoyance": "assets/vrm/animation/annoyance", "approval": "assets/vrm/animation/approval", "caring": "assets/vrm/animation/caring", "confusion": "assets/vrm/animation/confusion", "curiosity": "assets/vrm/animation/curiosity", "desire": "assets/vrm/animation/desire", "disappointment": "assets/vrm/animation/disappointment", "disapproval": "assets/vrm/animation/disapproval", "disgust": "assets/vrm/animation/disgust", "embarrassment": "assets/vrm/animation/embarrassment", "excitement": "assets/vrm/animation/excitement", "fear": "assets/vrm/animation/fear", "gratitude": "assets/vrm/animation/gratitude", "grief": "assets/vrm/animation/grief", "joy": "assets/vrm/animation/joy", "love": "assets/vrm/animation/love", "nervousness": "assets/vrm/animation/nervousness", "neutral": "assets/vrm/animation/neutral", "optimism": "assets/vrm/animation/optimism", "pride": "assets/vrm/animation/pride", "realization": "assets/vrm/animation/realization", "relief": "assets/vrm/animation/relief", "remorse": "assets/vrm/animation/remorse", "sadness": "assets/vrm/animation/sadness", "surprise": "assets/vrm/animation/surprise", // 碰撞箱 "head": "assets/vrm/animation/hitarea_head", "chest": "assets/vrm/animation/hitarea_chest", "groin": "assets/vrm/animation/hitarea_groin", "butt": "assets/vrm/animation/hitarea_butt", "leftHand": "assets/vrm/animation/hitarea_hands", "rightHand": "assets/vrm/animation/hitarea_hands", "leftLeg": "assets/vrm/animation/hitarea_leg", "rightLeg": "assets/vrm/animation/hitarea_leg", "rightFoot": "assets/vrm/animation/hitarea_foot", "leftFoot": "assets/vrm/animation/hitarea_foot" 感谢您阅读本指南!您的 SillyTavern 体验现在已通过动画和互动的 3D 模型得到增强。 ## 备注 - 此扩展加载的是 .vrm 文件而不是 .vroid 文件。 - 动画文件应该与 VRM 兼容,您可以使用像 XR animation (https://github.com/ButzYung/SystemAnimatorOnline) 这样的工具来转换 fbx/bvh 动画文件。 - 您可以通过使用以不同数字结尾的相同名称文件来创建动画组,例如:"idle1.bvh"、"idle2.bhv"、"idle3.bvh" 将被视为一个"idle"组,当在映射中选择时,触发时将随机播放其中一个,可用于增加动画的多样性。 - 您可以从此仓库获取精选动画:https://github.com/test157t/VRM-Animations-Pack-For-Silly-Tavern - Nitral 有一些关于如何使用扩展和动画仓库的教程视频:https://www.youtube.com/@nitralai ===== extensions/WebSearch.md (https://sillytaverncn.net/extensions/websearch/) ===== --- route: /extensions/websearch/ --- # Web Search (网络搜索) 为 LLM 提示添加网络搜索结果。 !!! Note 一些 [聊天补全](/Usage/API_Connections/openai.md) 来源提供内置的网络搜索功能。在这种情况下,此扩展将基本上是多余的。检查 ** AI 响应配置** 面板中的"启用网络搜索"开关。例如,Claude、Google AI Studio / Vertex AI、xAI 和 OpenRouter 后端都可用此功能。 !!! ## 可用源 ### Selenium 插件 需要安装并启用官方服务器插件。 详见 [SillyTavern-WebSearch-Selenium](https://github.com/SillyTavern/SillyTavern-WebSearch-Selenium)。 支持 Google 和 DuckDuckGo 搜索引擎。 ### Extras API 需要 `websearch` 模块和在主机上安装的 Chrome/Firefox 网络浏览器。 支持 Google 和 DuckDuckGo 搜索引擎。 ### SerpApi 需要 SerpApi 密钥并提供对 Google 搜索的访问。 在此处获取密钥: ### SearXNG 需要 SearXNG 实例 URL(私有或公共)。使用 HTML 格式显示搜索结果。 SearXNG 偏好设置字符串:从 SearXNG - 偏好设置 - COOKIES - 复制偏好设置哈希 获取 了解更多: ### Tavily AI 需要 API 密钥。在此处获取密钥: ### KoboldCpp 必须在文本补全 API 设置中提供 KoboldCpp URL。KoboldCpp 版本必须 >= 1.81.1,并且必须在启动时启用 WebSearch 模块:在 GUI 启动器中启用 Network => Enable WebSearch,或在命令行中添加 `--websearch`。 参见: ### Serper 需要 API 密钥。 在此处获取密钥: ## 如何使用 1. 确保您使用的是最新版本的 SillyTavern。 2. 通过 SillyTavern 中的"Download Extensions & Assets"菜单安装扩展。 3. 打开"Web Search"扩展设置,设置您的 API 密钥或连接到 Extras,并启用扩展。 4. 在聊天过程中,网络搜索结果将自然地添加到提示中。**只有用户消息会触发搜索。** 5. 要更自然地包含搜索结果,请用单引号包裹搜索查询:```Tell me about the `latest Ryan Gosling movie`.``` 将产生搜索查询 `latest Ryan Gosling movie`。 6. 您可以根据喜好配置设置。 ## 设置 ### 常规 1. 启用 - 打开和关闭扩展。 2. 源 - 设置搜索结果源。 3. 缓存生命周期 - 搜索结果在您的提示中缓存的时间(以秒为单位)。默认 = 一周。 ### 提示设置 1. 提示预算 - 设置插入文本的最大容量(以文本字符为单位,而不是标记)。经验法则:1 个标记 ~ 3-4 个字符,根据您的模型上下文限制进行调整。默认 = 1500 个字符。 2. 插入模板 - 结果如何插入到提示中。支持常用宏 + 特殊宏:\{\{query\}\} 用于搜索查询,\{\{text\}\} 用于搜索结果。 3. 注入位置 - 结果在提示中的位置。与作者注释相同的选项:作为聊天内注入或在系统提示之前/之后。 ### 搜索激活 1. 使用函数工具 - 使用[函数调用](/For_Contributors/Function-Calling.md)来激活搜索或抓取网页。必须使用支持的聊天补全 API,并在 AI 响应设置中启用。**启用时禁用所有其他激活方法。** 2. 使用反引号 - 启用使用单引号包裹的单词进行搜索激活。 3. 使用触发短语 - 启用使用触发短语进行搜索激活。 4. 正则表达式 - 提供 JS 风格的正则表达式来匹配用户消息。如果正则表达式匹配,将触发具有给定查询的搜索。搜索查询支持 `{{macros}}` 和 $1 语法来引用匹配的组。示例:`/what is happening in (.*)/i` 正则表达式,搜索查询为 `news in $1`,将匹配包含 `what is happening in New York` 的消息,并触发查询 `news in New York` 的搜索。 5. 触发短语 - 逐个添加将触发搜索的短语。它可以在消息的任何位置,查询从触发词开始,总共跨越到"最大单词数"。要排除特定消息的处理,它必须以句期开头,例如 `.What do you think?`。触发器优先级:首先按文本框中的顺序,然后是用户消息中的第一个。 6. 最大单词数 - 搜索查询中包含的单词数(包括触发短语)。Google 每个提示的限制约为 32 个单词。默认 = 10 个单词。 ### 页面抓取 1. 访问链接 - 将从访问的搜索结果页面提取文本并保存到文件附件中。 2. 访问计数 - 将访问和解析多少个链接的文本。 3. 访问域名黑名单 - 要排除访问的网站域名。每行一个。 4. 文件头 - 文件头模板,插入到文本文件的开头,有一个额外的 \{\{query\}\} 宏。 5. 块头 - 链接块模板,与每个链接的解析内容一起插入。使用 \{\{link\}\} 宏表示页面 URL,\{\{text\}\} 表示页面内容。 6. 保存目标 - 保存抓取结果的位置。可能的选项:触发消息附件,或 Data Bank 的聊天附件,或仅图像(如果源支持)。 7. 包含图像 - 将相关图像附加到聊天。需要支持图像的源(见下文)。 ## 更多信息 最新查询的搜索结果将保留在提示中,直到找到下一个有效查询。 如果您想问额外的问题而不意外触发搜索,请以句点开始您的消息。 !!!info 如果启用并可用,Web Search 函数工具始终会覆盖其他触发器。 !!! 触发器优先级(如果启用多个): 1. 反引号。 2. 正则表达式。 3. 触发短语。 要丢弃所有先前查询的处理,请在用户消息开头加上感叹号,例如,用户消息 `!Now let's talk about...` 将丢弃此消息和它上面的每条消息。 此扩展还提供了一个 `/websearch` 斜杠命令,用于在 STscript 中使用。更多信息请参见:[STscript 语言参考](/For_Contributors/st-script.md#extension-commands) ```stscript /websearch (links=on|off snippets=on|off [query]) – 执行网络搜索查询。使用命名参数指定要返回的内容 - 页面片段(默认:on),完整解析页面(默认:off)或两者都返回。 示例:/websearch links=off snippets=on how to make a sandwich ``` ### 搜索结果中可以包含什么? **术语表:** - 答案框:问题的直接答案。 - 知识图谱:关于主题的百科知识。 - 页面片段:来自网页的相关摘录。 - 相关问题:类似主题的问题和答案。 - 图像:相关图像。 #### SerpApi 1. 答案框。 2. 知识图谱。 3. 页面片段(最多 10 个)。 4. 相关问题(最多 10 个)。 5. 图像(最多 10 个)。 #### Selenium 插件和 Extras API 1. Google - 答案框、知识图谱、页面片段。 2. DuckDuckGo - 页面片段。 **Selenium 插件** 还可以提供图像。 #### SearXNG 1. 信息框。 2. 页面片段。 3. 图像。 #### Tavily AI 1. 答案。 2. 页面内容。 3. 图像(最多 5 个)。 #### KoboldCpp 1. 页面标题。 2. 页面片段。 #### Serper 1. 答案框。 2. 知识图谱。 3. 页面片段。 4. 相关问题。 5. 图像。 ===== extensions/XTTS.md (https://sillytaverncn.net/extensions/xtts/) ===== --- order: TTS-XTTS route: /extensions/xtts/ --- # 使用语音克隆的 XTTS 您好!您是否被那些展示 AI 文本转语音技术发展程度的 Reddit 帖子震撼到了? 是否对给您的机器人老婆/老公一个闪亮的新语音调制器感到兴奋? 别担心,这项令人惊叹的突破性技术已经在您的本地 SillyTavern 中可用,您只需要一个简单的... ## 前提条件 1. 最新版本的 SillyTavern。 2. 安装 [Miniconda](https://docs.conda.io/projects/miniconda/en/latest/miniconda-install.html)。 3. (Windows) 安装 [Visual C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/)。 4. 用于克隆的语音片段 WAV 文件(每个文件约 10 秒)。文件要求:PCM、单声道、22050Hz、16 位(通过 Audacity 转换)。 5. 创建一个包含"speakers"和"output"子文件夹的文件夹。将 WAV 文件放入"speakers"中。 示例文件夹结构: ``` C:\xtts - speakers - alice.wav - bob.wav - output ``` ## 安装 [daswer123](https://github.com/daswer123) 制作了一个 API 服务器,可以在您的计算机上运行 XTTSv2 模型并连接到 SillyTavern 的 TTS 扩展。 它完全独立于 Extras API,并使用单独的环境。 **非常重要:**不要将以下要求安装到您的 Extras 环境或系统 Python 中。 这会破坏您的其他包,进行不必要的降级等。 以下说明使用 Miniconda 提供,但您也可以使用 venv(此处不涉及)。 打开 Anaconda 命令提示符并逐行按照说明操作。 ### 启动并运行服务器 1. 导航到您在前提条件步骤 4 中创建的文件夹。 ``` cd C:\xtts ``` 2. 创建一个新的 conda 环境。从现在开始,我们将其称为 `xtts`。 ``` conda create -n xtts ``` 3. 激活新创建的环境。 ``` conda activate xtts ``` 4. 在您的环境中安装 Python 3.10。当提示时确认"y"。 ``` conda install python=3.10 ``` 5. 安装 XTTS 服务器及其要求。 ``` pip install xtts-api-server pydub ``` 6. 安装 PyTorch。这可能需要一些时间。以下命令安装带有 GPU 加速支持(CUDA)的 PyTorch。 如果您只想使用 CPU 推理,请删除从 `--index-url` 开始的最后一部分。 ``` pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 ``` 7. 在默认主机和端口上启动 XTTS 服务器: ``` python -m xtts_api_server ``` 8. 在首次启动期间,将下载模型(约 2 GB)。 不要忘记仔细阅读来自 Coqui AI 的法律声明。开玩笑的,只需再次点击"y"即可。 ### 连接到 SillyTavern 1. 打开扩展面板,展开 TTS 菜单,并在提供商列表中选择"XTTSv2"。 2. 在语言下拉列表中选择您的文本转语音语言(如果不是波兰语我会很伤心)。 3. 验证提供商端点指向 并且"Available voices"显示您的语音样本列表。 4. 选择任何角色并设置语音样本和角色之间的映射。 如果角色列表为空,多点击几次"Reload"。 5. 根据您的偏好配置其余的 TTS 设置。 ### 现在您已经设置完成! 点击任何消息的上下文操作菜单中的喇叭图标,就能听到从扬声器中传出的美丽克隆语音。 生成需要一些时间,即使在高端 RTX GPU 上也不是实时的。 ### 流式传输? 使用最新版本的 XTTS 服务器可以使用 HTTP 流式传输,一旦生成的音频可用就获取音频块! #### 这不适用于 RVC! 音频仍然会生成(假设您使用的是最新版本的 RVC 扩展)并转换,*但不会流式传输*,因为 RVC 需要在开始转换之前有完整的音频文件。流式 RVC 仍在研究中... #### 如何获得流式传输支持? 1. 将 SillyTavern 更新到最新版本。 2. 将 XTTS 服务器更新到最新版本。 ```bash conda activate xtts pip install xtts-api-server --upgrade ``` 3. 像往常一样启动并将 XTTS 连接到 ST。 4. 在 SillyTavern 中启用"Streaming" XTTS 扩展设置。 ### 音频断断续续? 尝试增加"chunk size"设置。 参考:使用 200 的块大小,RTX 3090 可以产生不间断的音频,代价是略微增加音频延迟。 ### 如何重启 TTS 服务器? 只需执行安装说明中的步骤 1、3 和 7。 ### Android?? 不太可能,它无法运行需要 PyTorch 的应用程序,除非使用一些我们不提供支持的神秘黑魔法。您可以自行尝试,但如果遇到任何问题,我们不会提供支持。 您最好的解决方案是在本地网络上的 PC 上托管 TTS API,只是不要忘记指定要监听的主机和端口 - 请参阅 [README](https://github.com/daswer123/xtts-api-server/blob/main/README.md)。 ===== extensions/captioning.md (https://sillytaverncn.net/extensions/captioning/) ===== --- route: /extensions/captioning/ templating: false --- # Image Captioning (图像描述生成) 图像描述生成允许 SillyTavern 自动为聊天中使用的图像生成文本描述。 当您希望您的 AI 角色能够"看到"并回应对话中的视觉内容时,请使用图像描述生成功能。 - 为您上传或粘贴到消息中的图像创建描述 - 为聊天历史中的现有图像添加上下文 - 使用各种生成源,包括本地模型、云 API 和众包网络 有些选项不需要设置、不需要费用,也不需要 GPU。也有一些选项需要其中的一些或全部条件。选择适合您需求和资源的选项。 图像描述生成扩展已内置于 SillyTavern 中,无需单独安装。 ## 快速开始 1. 设置: - 在 ** Extensions** 面板中打开 **Image Captioning** 面板 - 选择描述生成源(最可能是"Local"或"Multimodal") - 对于"Multimodal",确保您已在 ** API Connections** 标签页中设置了连接 2. 生成描述: - 从 ** Extensions** 弹出菜单中选择"**Generate Caption**" - 在提示时选择图像文件 - 等待生成描述 3. 审查并发送: - 带描述的图像将被插入到您的消息中 - 使用图像工具提示查看描述 - 点击 ** Send** 看看您的角色对图像的看法! ## 面板控制 ### 源选择 选择图像描述生成的源。支持的选项: | 源 | 描述 | |----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [多模态模型](#多模态源) | **云端**:OpenAI、Anthropic、Google、MistralAI 等。
**本地**:Ollama、llama.cpp、KoboldCpp、Text Generation WebUI 和 vLLM。
支持自定义提示,因此您可以向图像提问。 | | [Local](#本地源) | 使用在您的 SillyTavern 服务器内本地运行的 [transformers.js](https://huggingface.co/docs/transformers.js/en/index)。零设置! | | Horde | 使用 [AI Horde](https://aihorde.net/) 网络,这是一个众包分布式图像生成模型网络。无需下载、配置或付费。响应时间不固定。 | | Extras | Extras 项目已于 2024 年 4 月停止维护,不再提供维护或支持。 | ### 描述配置 - **Caption Prompt**:输入自定义描述提示。默认提示是"What's in this image?" - **Ask every time**:切换是否为每个图像描述请求自定义提示 ### 消息模板 - **Message Template**:自定义描述消息模板。使用 `{{caption}}` 宏插入生成的描述。默认模板是 `[{{user}} sends {{char}} a picture that contains: {{caption}}]` ### 自动描述生成 - **Automatically caption images**:切换是否为粘贴或附加到消息中的图像自动生成描述 - **Edit captions before saving**:切换是否允许在保存前编辑描述 ## 为图像生成描述 在 SillyTavern 中生成图像描述的所有方法: * 从 ** Extensions** 弹出菜单中选择"**Generate Caption**",并在提示时选择图像文件 * 点击消息中已有图像顶部的 **Caption** 图标 * 在启用[自动描述生成](#自动描述生成)的情况下直接将图像粘贴到聊天输入框中 * 使用消息操作中的 **Embed File or Image** 按钮将图像文件附加到消息中 * 发送带有嵌入图像的消息 * 使用 `/caption` [斜杠命令](#斜杠命令caption) ## 自动描述生成 自动描述生成功能允许您在将图像添加到聊天中时自动生成描述,无需每次手动触发描述生成过程。 要启用,请在图像描述生成面板中选中"Automatically caption images"复选框。您还可以通过选中"Edit captions before saving"框来选择在保存前编辑描述。 启用后,自动描述生成将在以下情况下触发: - 当图像直接粘贴到聊天输入框中时。 - 当图像文件附加到消息中时。 - 当发送带有嵌入图像的消息时。 系统将使用您选择的描述生成源(Local、Extras、Horde 或 Multimodal)和配置的设置为图像生成描述。 ### 保存前编辑描述(优化模式) 如果您启用了"Edit captions before saving"选项: 1. 添加图像后,将出现一个带有生成描述的弹出窗口。 2. 您可以根据需要查看和编辑描述。 3. 点击"OK"应用描述,或点击"Cancel"放弃保存描述。 ### 描述发送 生成的(和可选编辑的)描述将使用您配置的消息模板自动插入到提示中。默认情况下,它将以以下格式发送: ``` [BaronVonUser sends Seraphina a picture that contains: ...] ``` ## 斜杠命令:/caption 该扩展提供了一个 `/caption` 斜杠命令,可在聊天框或脚本中使用。 ### 用法 ``` /caption [quiet=true|false]? [mesId=number]? [prompt] ``` - `prompt`(可选):描述模型的自定义提示。仅 multimodal 源支持。 - `quiet=true|false`:如果设置为 true,则禁止向聊天发送带描述的消息。默认为 false。 - `mesId=number`:指定从现有消息生成图像描述的消息 ID,而不是上传新图像。 如果未提供 `mesId`,命令将提示您上传图像。当 `quiet` 为 false(默认)时,将向聊天发送一条带有描述图像的新消息。生成的描述可以用作其他命令的输入。 ### 示例 使用默认设置为新图像生成描述: ``` /caption ``` 使用自定义提示为新图像生成描述: ``` /caption Describe the main colours and shapes in this image ``` 为消息 #5 中的图像生成描述而不发送新消息: ``` /caption mesId=5 quiet=true ``` 为消息 #10 中的图像使用自定义提示生成描述,然后[基于描述生成新图像](/extensions/Stable-Diffusion.md): ``` /caption mesId=10 Describe this image using comma-separated keywords | /imagine ``` ## 本地源 您可以在 [config.yaml](/Administration/config-yaml.md#扩展配置) 中更改模型。键名为 `extras.captioningModel`(因为某些原因)。输入您想使用的 Hugging Face 模型 ID。默认值是 `Xenova/vit-gpt2-image-captioning`。 您可以使用任何支持图像描述生成的模型(`VisionEncoderDecoderModel` 或"image-to-text"管道)。该模型需要与 transformers.js 库兼容。也就是说,它需要 ONNX 权重。寻找带有 `ONNX` 和 `image-to-text` 标签的模型,或者有一个名为 `onnx` 的文件夹,里面装满了 `.onnx` 文件。 ## 多模态源 ### 一般配置 - **Model**:选择用于图像描述生成的模型。选项根据所选 API 而变化。 - **Allow reverse proxy**:如果定义并有效,切换是否允许使用反向代理(OpenAI、Anthropic、Google、Mistral) 描述生成源的 API 密钥和端点 URL 在 [API Connections](/Usage/API_Connections/index.md) 面板中管理。首先在 API Connections 中设置连接,然后在 Captioning 中选择它作为您的描述源。 !!! warning 首先在 API Connections 面板中设置 最后一次提醒:在 ** API Connections** 中配置 API 密钥/地址/端口,并在 Captioning 中使用该连接。 您仍然可以使用 Claude 进行聊天,使用 Google AI Studio 进行图像描述生成,或者其他组合。只需要先在"API Connections"标签页中设置好它们*两个*。然后将您的 Chat Completion 源切换到 Claude,将您的 Captioning 源切换到 Google AI Studio。 !!! 对于大多数本地后端,您需要在模型后端而不是在 SillyTavern 中设置一些选项。如果您的后端一次只能运行一个模型,并且不支持自动切换,那么使用同一个后端进行聊天和描述生成时使用不同的模型将会很困难。 即使您在不同端口上运行两个后端实例,API Connections 也只允许每种后端类型有一个活动配置。但是如果我告诉您...您可能可以在 Text Completion 和 Chat Completion 模式下都连接到您的后端?现在您可以有两个到同一个后端类型的连接了。 ### 源 要使用这些描述源之一,请在源下拉菜单中选择 Multimodal。 * "我想要最好的描述生成,不介意付费":Anthropic * "我不想付费或运行任何东西":Google AI Studio 免费层 * "我想在本地生成图像描述并让它正常工作":Ollama * "我想保持本地 AI 的梦想":[KoboldCpp](#koboldcpp) * "我想在它不工作时抱怨":~~Extras~~ | API 提供商 | 描述 | |-----------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 01.AI (Yi) | 云端,付费,yi-vision | | Anthropic | 云端,付费,具有视觉能力的 Claude 模型:claude-3-5-sonnet/haiku、claude-3-opus/sonnet | | Custom (OpenAI-compatible) | 用于自定义 OpenAI 兼容 API,使用 API Connections 标签页中当前配置的模型 | | Google AI Studio | 云端,免费层然后付费,Gemini Flash/Pro | | Groq | 云端,llama-3.2-vision 11B/90B,LLaVA | | KoboldCpp | 本地,必须在 KoboldCpp 中配置模型 | | llama.cpp | 本地,必须在 llama.cpp 中配置模型 | | MistralAI | 云端,付费,pixtral-large、pixtral-12B | | Ollama | 本地,在 API Connections 中配置后可以在 Captioning 中切换可用模型并下载[额外的视觉模型](https://ollama.com/search?c=vision) | | OpenAI | 云端,付费,GPT-4 Vision、4-turbo、4o、4o-mini | | OpenRouter | 云端,付费(可能有免费选项),多个模型,在 API Connections 中配置后从 Captioning 中可用的模型中选择 | | Text Generation WebUI (oobabooga) | 本地,必须在 ooba 中配置模型 | | vLLM | 本地 | ### KoboldCpp 有关安装和使用 [KoboldCpp](https://github.com/LostRuins/koboldcpp) 的一般信息,请参阅 [KoboldCpp 文档](https://github.com/LostRuins/koboldcpp/wiki)。 要使用 KoboldCpp 进行多模态描述生成: * 获取一个多模态模型,该模型经过训练可以同时处理文本和图像提示。 * 还要获取该模型的多模态投影。这些权重允许模型理解输入的文本和图像部分之间的关系。 * 在 KoboldCpp 启动 GUI 或命令行界面中加载模型和投影。 原始和经典的本地多模态模型是 LLaVA。可以从 [Mozilla/llava-v1.5-7b-llamafile](https://huggingface.co/Mozilla/llava-v1.5-7b-llamafile) 获取 GGUF 格式的模型和投影文件。要从命令行加载它们,请使用 `--model` 和 `--mmproj` 标志设置模型和投影。例如: ```shell ./koboldcpp \ --model="models/llava-v1.5-7b-Q4_K.gguf" \ --mmproj="models/ llava-v1.5-7b-mmproj-Q4_0.gguf" \ ... other flags ... ``` 您可以尝试一些 LLaVA 微调版本:[xtuner/llava-llama-3-8b-v1_1-gguf](https://huggingface.co/xtuner/llava-llama-3-8b-v1_1-gguf)、[xtuner/llava-phi-3-mini-gguf](https://huggingface.co/xtuner/llava-phi-3-mini-gguf)。 您可以使用您特定微调版本所基于的基础模型的多模态投影。一些常见基础模型的投影可以从 [koboldcpp/mmproj](https://huggingface.co/koboldcpp/mmproj/tree/main) 获取。 ===== extensions/index.md (https://sillytaverncn.net/extensions/) ===== --- title: 扩展 description: SillyTavern 扩展系统 --- # 扩展 - :sparkles: [角色表情(精灵图)](expression-images/) - :scissors: [聊天摘要](summarize/) - :globe_with_meridians: [翻译](translation/) - :framed_picture: [图像生成](stable-diffusion/) - :loud_sound: [TTS 语音](tts/) - :mag: [网络搜索](websearch/) ===== faq.md (https://sillytaverncn.net/faq/) ===== --- title: 常见问题 description: DeepSeek Tavern 和 SillyTavern 常见问题解答 --- # 常见问题 ## 酒馆是什么 SillyTavern 是一款开源 AI 角色扮演前端。 ## 安装复杂吗 不复杂!使用[一键启动器](https://launch.deepseektavern.com),零依赖。 ## 如何获取 Key 注册 [deepseektavern.com](https://deepseektavern.com) 即可。 ## 角色卡从哪获取 访问 [角色卡资源库](https://cards.deepseektavern.com)。 ## 支持手机吗 支持!可通过 Tavo 等客户端连接 API。 ===== index.md (https://sillytaverncn.net/) ===== --- title: 酒馆 SillyTavern 中文官方文档 description: 酒馆 SillyTavern 中文知识库(.net 像素风版):从零学会 AI 角色扮演。安装部署、角色卡与世界书、API 接入、TTS 语音、插件扩展逐步图文教程;附 SillyTavern 版本演进史与 GitHub 源码入口,更提供免部署的像素酒馆在线聊天与 1,238 张免费角色卡。 --- # :beer: 酒馆百科 · SillyTavern 中文知识库(像素风版) 欢迎来到酒馆百科(.net 版)—— 一座像素风装帧的 SillyTavern 中文知识库。这里的每一页教程都经过重新排版,读起来更像一本冒险者手札。 ## 什么是酒馆(SillyTavern)? **SillyTavern(俗称「酒馆」「傻酒馆」)是一款开源的 AI 角色扮演前端。** 它本身不含 AI 模型,而是把各种大模型接口接进来,用角色卡、世界书、预设和正则,把通用大模型变成能长期陪你演戏的角色。 简单说:**酒馆是壳,模型是脑,角色卡是灵魂。** 酒馆支持的核心能力: - 自定义**角色卡**与**世界书**(World Info) - 多种 AI 模型接入(DeepSeek、OpenAI、GLM、Claude 等) - **TTS 语音合成**,让角色开口说话 - 丰富的**预设**与**正则**,控制输出风格 - 扩展生态:图像生成、翻译、摘要、语音识别等 ### 大家常这样搜它 | 你搜的词 | 在酒馆里对应什么 | |:---|:---| | **酒馆**、**酒馆聊天**、**sillytavern**、**silly tavern** | 说的都是它:SillyTavern 酒馆,接上模型就能和角色长期对话 | | **免费酒馆**、**免费角色卡** | 酒馆本体开源免费;[角色卡集市](/character-cards.md)里的 1,238 张原创角色卡同样全部免费 | | **在线酒馆聊天** | 免安装、打开网页即聊 —— 见[像素酒馆](/pixel-tavern.md) | | **AI 角色扮演**、**AI 陪伴** | 角色卡定义人设、世界书补全背景,配合预设做长期陪伴式互动 | | **AI 跑团** | 像素酒馆的跑团冒险模式,多人剧情最多 10 位角色同场推进 | ## SillyTavern 官方仓库与最新版本 **SillyTavern 是完全开源的项目,代码、更新日志与讨论全部公开在 GitHub 上:** | 官方入口 | 地址 | |:---|:---| | :link: **GitHub 仓库** | [github.com/SillyTavern/SillyTavern](https://github.com/SillyTavern/SillyTavern){target="_blank"} | | :scroll: **完整更新日志** | [GitHub Releases](https://github.com/SillyTavern/SillyTavern/releases){target="_blank"} | | :page_facing_up: **官方文档** | [docs.sillytavern.app](https://docs.sillytavern.app){target="_blank"} | | :globe_with_meridians: **官方网站** | [sillytavern.app](https://sillytavern.app){target="_blank"} | 官方对它的定位只有一句话:**「LLM Frontend for Power Users」——为重度玩家打造的 LLM 前端。** 目前 **34,000+ Star、6,400+ Fork**,采用 AGPL-3.0 开源协议,默认分支为 `release`。 ### 最新版本历史 | 版本 | 发布日期 | 简要变化 | |:---|:---|:---| | :star: **1.19.0** | 2026-09-14 | **当前最新版**。新增 Claude Fable 5 / 5.1、Claude Opus 4.8 / 5、Sonnet 5、GPT-5.6、GPT-6 Astra、Gemini 3.5–3.7 Flash、GLM-5.2、DeepSeek V4 Flash Vision 等模型支持;世界书排序支持升降序与自定义步长;自定义接口支持请求头与请求体宏替换 | | **1.18.0** | 2026-05-03 | 新增 Cloudflare Workers AI、MiniMax 接入;工具调用可设递归上限;支持 DeepSeek V4、GPT-5.4 / 5.5、Gemma 4、Claude Opus 4.7;移除安装期脚本执行,整体安全加固 | | **1.17.0** | 2026-03-28 | **最低要求提升到 Node.js 20**;新增滑动候选管理器(浏览 / 跳转 / 分支 / 删除);背景图虚拟文件夹与缩略图;世界书可跨角色重连 | | **1.16.0** | 2026-02-14 | 大聊天窗口消息渲染性能优化;欢迎页支持置顶最近会话;Docker 支持非 root 容器用户;CORS 模块可配置 | | **1.15.0** | 2025-12-28 | 宏系统 2.0 首个预览版(支持嵌套、求值顺序稳定);群聊元数据文件格式变更,旧文件自动迁移 | | **1.14.0** | 2025-11-22 | 单条消息可附带多个文件 / 图片 / 音频;新增 Z.AI、SiliconFlow 接入;旧版预设清理 | | **1.13.5** | 2025-10-16 | 1.13 系列最后一个维护版本(1.13.0 → 1.13.5 陆续发布) | > 版本节奏大致是**每年 3~5 个功能版本**,小版本以新模型适配和 Bug 修复为主。升级前务必先看 Release Notes —— 宏系统、群聊文件格式、媒体附件格式都出现过**不向后兼容**的改动。 ### :warning: 务必先了解:SillyTavern 需要很强的编程知识 酒馆**不是「下载安装包、下一步下一步」就能用的软件**,它更像一个需要你自己长期维护的开发环境。真实的门槛在这里: | 你会碰到什么 | 具体内容 | |:---|:---| | **命令行操作** | 安装、启动、更新、重启全靠终端命令,Windows 也要开 PowerShell 敲命令 | | **运行环境** | 要自己装 Node.js(1.17 起要求 20+)和 Git,处理版本不匹配、依赖安装失败 | | **配置文件** | `config.yaml`、`settings.json` 手动改参数是常态,改错就直接起不来 | | **接口对接** | 自己找模型 API、填接口地址与 Key,排查 401 / 429 / 超时 / 流式中断 | | **报错排查** | 扩展冲突、端口占用、反向代理、证书问题,基本要靠翻日志定位 | | **持续维护** | 每次升级都可能踩到不兼容改动,第三方扩展也要跟着更新 | !!!warning :bulb: 一句话总结 **酒馆给你的是极致的自由度,代价是你要自己扛住整套运维成本。** 如果你只是想「打开网页就能和角色聊天」,那它大概率不是你的最优选择。 !!! ### :beer: 不会部署?建议直接使用像素酒馆 **像素酒馆(Pixel Tavern)是开箱即用的在线酒馆** —— 不用装 Node.js、不用碰命令行、不用配 API Key,注册完打开网页就能开聊。角色卡、世界书、预设、正则、TTS 语音、跑团冒险全部内置,另有 Android / Windows / macOS 客户端。 | 对比项 | SillyTavern 原生 | 像素酒馆 | |:---|:---|:---| | **上手成本** | 需要编程与运维基础 | **打开网页即用,零门槛** | | **环境准备** | 自装 Node.js / Git / 模型接口 | **零安装,免配置** | | **开聊速度** | 通常要折腾几小时到几天 | **注册后几分钟内开聊** | | **适合人群** | 想深度定制、开发插件的玩家 | **想专注聊天、跑团、陪伴的用户** | | **角色卡** | 自己找、自己导入 | **内置 1,238 张原创角色卡集市** | > :arrow_right: **[:beer: 立即打开像素酒馆](https://chat.xstavern.com/){target="_blank"}** · 详细介绍见 **[像素酒馆](/pixel-tavern.md)**,角色卡见 **[角色卡集市](/character-cards.md)** ## 什么是酒馆专属大模型? **DeepSeek Tavern Pro 是专为 SillyTavern 酒馆角色扮演打磨的专属大模型**,现已提供两套专属引擎——同一间酒馆,两种灵魂: | 引擎 | 性格比喻 | 特点 | |:---|:---|:---| | :fire: **deepseek-tavern** | 灵动少女 | 文风活泼多变、脑洞天马行空;但容易忘东西 | | :wine_glass: **glm-tavern-pro-v2**(Beta) | 稳重少妇 | 正则与记忆遵循性强,长剧情不崩人设 | - 基于 DeepSeek V4 Pro 的 MoE 架构,精准微调 **100B 文字专家模块** - **100 万 token 上下文**,长篇小说创作不丢失细节 - 三档创作风格:自由创作(`-low`)、均衡(默认)、严谨(`-xhigh`) - 文学级写作质量,漏斗式开篇、感官细节描写、丁达尔光影 - **OpenAI 兼容接口**,SillyTavern / Cherry Studio / NextChat 均可接入 > 👉 完整介绍、模型对比与接入方式见 **[🧠 酒馆专属大模型](/tavern-models.md)** ## 三步开始 1. :arrow_right: [下载一键启动器](https://launch.deepseektavern.com) — 零依赖,下载即用 2. :key: 注册获取 [API Key](https://deepseektavern.com) — 注册登录后在控制台获取 3. :rocket: 填入 Key,一键启动 — 2 分钟开聊 详细的图形化步骤见[快速开始](/Usage/quick-start.md),各平台安装见[安装指南](/install.md)。 ## 找角色卡?去像素酒馆集市 **像素酒馆(Pixel Tavern)** 是本站运营的在线酒馆平台,内置**角色卡集市**: | 你可以做什么 | 入口 | |:---|:---| | 浏览 **1,238 张原创角色卡**(115 个系列) | [chat.xstavern.com/market](https://chat.xstavern.com/market) | | 打开网页直接开聊,免安装 | [🍺 像素酒馆](/pixel-tavern.md) | | 下载客户端(Android / Windows / macOS) | [客户端下载](/pixel-tavern-client.md) | | 自己做一张原创角色卡 | [角色卡构建器](/cardbuilder.md) | | 用角色设定写小说 | [像素写作台](/novel-studio.md) | 角色卡的分类、设计规范和获取方式,都整理在[角色卡集市](/character-cards.md)这一页。 ## 特色功能 ||| 功能 ||| 说明 ||| :--- ||| :--- ||| :brain: 酒馆专属大模型 ||| 双引擎:deepseek-tavern 灵动 + glm-tavern-pro-v2 稳重 ||| :package: 一键启动器 ||| 零依赖安装,macOS/Windows 双平台 ||| :flower_playing_cards: 角色卡集市 ||| 1,238 张原创角色卡 + 115 个系列,全部免费 ||| :loud_sound: TTS 语音 ||| 500 字只要 1 毛钱,角色开口说话 ||| :id_card: 角色卡构建器 ||| 可视化建卡,产出角色、封面、世界书与正则 ||| :book: 像素写作台 ||| 卷章节结构 + 多 Agent 小队,长篇创作工作台 ## 新手路线 | 阶段 | 读这些 | |:---|:---| | :one: 认识酒馆 | [什么是 SillyTavern?](/siltytavern-intro.md) | | :two: 装上跑起来 | [安装指南](/install.md) → [快速开始](/Usage/quick-start.md) | | :three: 接上模型 | [酒馆专属大模型](/tavern-models.md) → [API 连接](/Usage/API_Connections/index.md) | | :four: 挑角色卡 | [角色卡集市](/character-cards.md) | | :five: 进阶玩法 | [世界信息](/Usage/worldinfo.md) · [提示词与格式化](/Usage/Prompts/index.md) · [扩展](/extensions/index.md) | --- > :bulb: **推广活动期间,注册即可免费下载角色卡!** [立即访问角色卡集市](https://chat.xstavern.com/market) ===== install.md (https://sillytaverncn.net/install/) ===== --- title: 安装指南 description: 使用酒馆一键启动器安装 SillyTavern,零依赖,2分钟搞定 --- # 安装指南 ## 使用一键启动器(推荐) 不需要安装 Python、Node.js、Git。下载酒馆一键启动器即可。 ### 下载 | 平台 | 下载 | |------|------| | macOS Apple Silicon | [下载 DMG](https://ghfast.top/https://github.com/leigegehaha/sillytavernlauncher/releases/download/v2.0.2/Tavern.Deepseek_2.0.2_aarch64.dmg) | | macOS Intel | [下载 DMG](https://ghfast.top/https://github.com/leigegehaha/sillytavernlauncher/releases/download/v2.0.2/Tavern.Deepseek_2.0.2_x64.dmg) | | Windows | [下载安装包](https://ghfast.top/https://github.com/leigegehaha/sillytavernlauncher/releases/download/v2.0.2/Tavern.Deepseek_2.0.2_x64-setup.exe) | ### macOS 提示 双击打开后如提示已损坏: 方式一:终端运行 `sudo xattr -rd com.apple.quarantine "/Applications/Tavern Deepseek.app"` 方式二:系统设置 → 隐私与安全性 → 仍要打开 只需操作一次。 ### 启动 1. 打开启动器 2. 点击一键启动 3. 浏览器自动打开酒馆 [下载启动器](https://launch.deepseektavern.com) ===== novel-studio.md (https://sillytaverncn.net/novel-studio/) ===== --- order: 75 title: 像素写作台 · 小说创作器 description: 像素写作台(Pixel Tavern Novel Studio)是像素酒馆推出的小说创作工作台:卷章节结构、三种创作方式、项目记忆与故事图谱、多 Agent 小队、AI 封面,写到发布一站完成。 icon: book --- # 📖 像素写作台 · 小说创作器 !!!success :beer: 写小说的网页工作台,从设定写到发布 **[https://novel.xstavern.com/](https://novel.xstavern.com/){target="_blank"}** — 长篇与短篇创作放在一个页面里:确定文风、规划卷章、逐段或整章写作、维护前后文一致、生成封面,最后发布到书籍市场。 !!! 像素写作台(**The Writing Room**)是像素酒馆家族的写作端。它**不是聊天窗口,也不是单纯的文本编辑器** —— 而是按小说的结构来组织内容:你决定全书方向和文风,AI 负责需要大量重复劳动的环节,你负责判断和取舍。 当前版本 **V1.1**(2026-09-24 发布)。 ## 三块工作区 来回跳转不会丢失稿件: | 区域 | 作用 | |:---|:---| | :books: **我的书架** | 管理你的作品和创作进度 | | :writing_hand: **写作桌面** | 正文编辑、AI 助手、记忆与 Agent 记录的工作区 | | :shopping_cart: **书籍市场** | 发布和阅读的地方,既是你作品的上架处,也是找参考作品的地方 | ## 内容怎么组织 | 层级 | 说明 | |:---|:---| | **全书** | 统一方向与文风 | | **卷** | 承担阶段故事,长篇可分多卷 | | **章** | 有标题、梗概和目标字数 | | **节(段)** | 可选的细化安排 | - 长篇规划上限为 **12 卷、60 章**,每章字数范围 **800–8,000 字** - 每层都能单独填写目标、字数和文风;卷章默认继承全书文风,需要例外时单独覆盖 - 短篇新建后默认走**单篇成稿**流程,只设总字数、内容和结局要求即可,不必先搭多卷结构 ## 三种创作方式 同一部作品可以在三种方式之间随时切换,不必从头开始: | 方式 | 说明 | 适合 | |:---|:---|:---| | **专业版** | 逐节写作,自己控制每一个段落 | 想完全掌控节奏的写手 | | **简洁版** | 整章创作,一次拿到完整一章再修改 | 先出初稿再打磨 | | **一键托管** | 后台按卷章结构写完整本书 | 想省掉大量机械劳动 | ## 核心功能 ### :clipboard: 可批准的大纲 填卷数、章节数和全书字数,AI 生成卷概要、章节标题、情节梗概和字数范围。你可以**逐条编辑**,确认为待批准或正式批准,之后才进入写作 —— 已批准的章节结构就是后台创作的依据。 ### :art: 文风设定与蒸馏 长篇、短篇各有内置文风预设,覆盖从经典武侠、世情群像到日式轻小说、网文爽文的多种方向。也可以**粘贴一段你自己的参考文字,让 AI 蒸馏出可复用的文风档案**,或把当前文风存进个人文风库,下次直接调用。 ### :brain: 项目记忆 每章完成后自动归档:人物当前状态、已经发生的事件、时间顺序、未解线索和固定设定。后续章节写作时自动读取相关记忆,**减少前后矛盾**。 记忆可以查看、搜索、编辑、补充或停用单条,还能运行**原文核对** —— 检查 AI 提取的事实是否真的出自正文。 ### :world_map: 故事图谱 把章节之间的因果、关键事件、人物关系整理成图。AI 先根据正文提取候选,**你确认后才写入图谱**,避免未经核对的推断变成既定设定。 ### :robot: 多 Agent 小队 创作按六个阶段推进,每个阶段由一个或多个角色执行: ``` 设定整理 → 卷章规划 → 执笔 → 精修 → 评审 → 记忆归档 ``` 你可以给不同角色**指定不同模型和额外要求**,也可以关闭精修或评审环节。 ### :mag: 可追溯的交付物 每次生成都留下记录:谁在哪个阶段用了哪个模型、输入输出是什么、成功还是失败。交付物可查看、下载、编辑后再保存为新修订 —— **原始版本和修订来源都保留**,方便回溯这一步为什么变成现在这样。 ### :pencil: 局部改写与章节版本 选中一段文字,让 AI 润色、扩写、压缩或调整对白,**比较原文和候选后只替换选区**。每次保存都会留版本,恢复旧版本前会保留当前正文并提示复核后续章节。 ### :cloud: 后台托管整本书 确认篇幅和文风后交给服务器执行,**看到任务创建成功就可以关掉页面**。任务支持暂停、取消后续步骤、失败后手动继续;完成后**取回独立稿件再审阅,不会覆盖本机原稿**。 ### :framed_picture: AI 封面 用酒馆账号里的图片模型生成封面,可选 `GPT image 2.5`、`image2`、`nanobanana2` 等;可以让 AI 起草画面提示词或自己写,**书籍名称会压印在封面上**。创建作品时、写作中、发布前都能换封面,也可以上传自己的图。 ### :globe_with_meridians: 发布、连载与打赏 填写署名和简介(可让 AI 起草),标明正在连载或已经完结,选择公开章节、是否允许下载。作者可以公开联系方式和收款码,读者满意时直接打赏 —— **款项不经平台**。 ### :iphone: 手机沉浸阅读 读者端支持分页翻页与四种翻页动效、14–26 号字、宋体黑体、七种背景(含牛皮纸)、对话着色和全屏沉浸模式。读到哪自动记住,也可以手动加书签,下次从原处继续。 ## 三种典型用法 | 角色 | 用法 | |:---|:---| | :writing_hand: **专业写手** | 先定全书文风,再让 AI 出卷章大纲;正文以自己写为主,卡住时用逐节生成或局部改写补上;每章完成归档记忆 | | :pencil2: **普通写手** | 填一个题材和大致方向,用整章创作一章一章推进:AI 结合设定、大纲、前情和记忆写出一章,你读完修改,再进入下一章 | | :book: **读者** | 不用登录就能在书籍市场按长短篇、题材、文风筛选作品;登录后可评分、写书评、追更和标记已读 | ## 两条常见路线 **路线 A:一章一章写,逐章确认** 1. **创建作品** — 选长篇或短篇,填题材、风格、书名和一句灵感 2. **连接模型并定文风** — 登录酒馆账号选用内置模型,或填自己的 API 地址与 Key 3. **规划卷章大纲** — 设置卷数、章节数和预计字数,生成后逐条核对再批准 4. **逐章创作与修改** — 用整章创作拿初稿,或在专业版按节生成、逐节拼接 5. **生成封面并发布** — 设计封面、写简介、选择连载状态,发布到书籍市场 **路线 B:交给服务器写完整本书** 1. **确认篇幅授权** — 在"全书规划与托管"确认卷数、章节数、目标字数和模型,勾选授权后开始 2. **关掉页面也可以** — 线上服务器保存进度并继续执行,在"后台创作室"查看进度、暂停任务 3. **异常时人工确认** — 出现授权过期或模型错误时任务会停下等待处理,不会无限重试 4. **取回并审阅** — 点"取回已完成章节",系统新建一部后台稿,保留本机原作品 !!!warning :bulb: 关于字数、成本与质量 - 界面里的字数是**创作目标**,实际长度会有浮动 - 章节越多、篇幅越长,消耗的模型额度越多 - **AI 输出需要人工审阅** —— 尤其要检查前后设定、人物行为和章节衔接 !!! ## 模型与账号 写作台与像素酒馆、客户端**共用同一个酒馆账号的模型余额**: - 登录酒馆账号后,页面上方显示当前余额,点击可充值 - 也可以改用你自己的 API 地址与 Key,费用由对应服务商收取 - 自有 Key 只在本次页面保留,刷新后需重新填写;后台托管对自有接口有额外限制 ## 数据存在哪里 | 数据 | 位置 | |:---|:---| | **写作草稿** | 默认保存在当前浏览器,按账号区分 | | **云备份** | 主动保存后存在服务器,是独立版本,不覆盖其他设备稿件 | | **后台任务 / 已发布书籍** | 服务器 | **备份与导出**: - "备份全部"导出包含作品、章节版本、记忆、图谱、Agent 记录和图片的 **ZIP**,可在新设备导入为独立作品 - 只想拿正文时用 **TXT / Markdown / DOCX / EPUB** 导出,可设署名、封面并选择章节范围 !!!warning :bulb: 换设备、换浏览器、清除站点数据都会读不到原稿 请定期备份。 !!! ## 版本历史 | 版本 | 日期 | 内容 | |:---|:---|:---| | **V1.1** | 2026-09-24 | 阅读位置记忆与手动书签、市场标签筛选与封面条带、沉浸阅读与四种翻页动效、记忆原文核对、云备份与版本恢复、追更与章节反馈、作者联系方式与直接打赏,以及产品介绍页、更新日志页和教程页 | | V1.0 | 2026-09-19 | 站点更名为「像素写作台」,上线书籍市场与 AI 封面、余额与充值、反馈工单、卷章节结构与三种创作方式 | ## 立即开始 :book: [打开像素写作台](https://novel.xstavern.com/){target="_blank" .button} :scroll: [产品介绍](https://novel.xstavern.com/novel/intro.html){target="_blank" .button} :memo: [使用教程](https://novel.xstavern.com/novel/tutorial.html){target="_blank" .button} --- !!!note 相关推荐 - [像素酒馆介绍](/pixel-tavern.md) — 聊天端与角色卡集市 - [角色卡构建器](/cardbuilder.md) — 先做角色,再写他们的故事 - [像素写作台更新日志](https://novel.xstavern.com/novel/updates.html){target="_blank"} — V1.1 完整更新说明 !!! ===== pixel-tavern-client.md (https://sillytaverncn.net/pixel-tavern-client/) ===== --- order: 85 title: 像素酒馆客户端下载 description: 像素酒馆客户端下载:Android APK、macOS DMG、Windows x64 与 ARM64 安装包。熟悉的世界与冒险装进口袋,支持完整备份迁移与独立设备授权。 icon: download --- # 📱 像素酒馆客户端 !!!success :beer: 故事,不止在浏览器 像素酒馆**客户端预览版 1.8.6** 已发布 —— 熟悉的世界与冒险,装进口袋。 !!! 像素酒馆客户端是把完整酒馆体验装进桌面的独立应用。它支持**账号直登**(用户名 + 密码)或系统浏览器授权登录,**继续使用同一个酒馆账号、同一套酒馆模型和同一个角色卡集市** —— 网页版里攒下的角色卡、聊天记录、记忆与设置,都能通过完整备份搬到客户端。 !!!note :sparkles: 近期客户端新变化 - **四平台同步更新** — Android、macOS 通用版、Windows x64 与 ARM64 版本保持一致,与本轮网页改进同步 - **启动检查新版本** — 客户端启动与回到前台时检查新版,支持「稍后提醒」「跳过此版本」,也可在设置中手动检查,点击直达官网下载安装 - **加载与角色卡修复** — 修复角色卡封面显示问号、部分集市角色导入失败;登录检查与余额刷新分开执行,减少启动后的重复资源请求 - **通知与朗读优化** — 新增「通知」页面按时间保留历史通知;聊天气泡的朗读按钮可直接切换为「停止朗读」 - **聊天中查看角色与大图** — 点击聊天头像打开角色卡介绍并放大封面,无需离开当前会话 - **角色背景按会话记忆** — 传统聊天、沉浸互动、Agent、生成式 UI 与跑团可分别记住每个会话的背景开关 - **独立设备授权(1.8.1 起)** — 网页与客户端统一 **14 天**登录有效期,各端可独立退出;设置中可查看、命名和撤销已授权设备,凭据存入系统安全存储 - **下载统计公开** — 下载页展示各平台与累计下载次数(同一访客、平台与版本 10 分钟内重复下载只计一次) - **官方资源按需更新** — 五套主题、推荐角色、音乐和背景按版本清单按需获取并校验完整性,安装包更轻 - **iOS 暂未发布** — 目前覆盖 Android / Windows / macOS 三端 !!! !!!warning :bell: 升级请覆盖安装,别卸载 客户端会在启动和回到前台时检查新版,并给出「稍后提醒 / 跳过此版本」两个选项,也可在设置中手动检查更新。升级前请先导出完整备份,然后**覆盖安装** —— 请勿卸载旧版或清除数据,否则本机聊天记录会一起消失。 !!! ## 下载 | 平台 | 系统要求 | 大小 | 格式 | 下载 | |:---|:---|:---|:---|:---| | :robot: **Android** | Android 7 及以上 | 5.2 MB | APK | [下载 Android](https://chat.xstavern.com/api/client-downloads/android?version=1.8.6){target="_blank" .button} | | :apple: **macOS** | macOS 11 及以上(Apple 芯片与 Intel 通用) | 18.2 MB | DMG | [下载 macOS](https://chat.xstavern.com/api/client-downloads/macos-universal?version=1.8.6){target="_blank" .button} | | :desktop_computer: **Windows x64** | Windows 10 / 11 · 64 位(Intel / AMD) | 6.7 MB | EXE | [下载 Windows x64](https://chat.xstavern.com/api/client-downloads/windows-x64?version=1.8.6){target="_blank" .button} | | :desktop_computer: **Windows ARM64** | Windows 11 · ARM64(骁龙等) | 6.3 MB | EXE | [下载 Windows ARM64](https://chat.xstavern.com/api/client-downloads/windows-arm64?version=1.8.6){target="_blank" .button} | !!!note :link: 这些下载链接会一直指向官方最新版 本页下载按钮走的是像素酒馆官方发布通道,并自动跟随官方最新版本 —— 官网一发新版,这里就是新版,不需要你手动找。也可以直接从 [官方下载页](https://chat.xstavern.com/download){target="_blank"} 查看各版本说明。 !!! ### 各平台说明 #### :robot: Android - **适用设备**:安卓手机与平板,把故事装进口袋 - **系统要求**:Android 7 及以上 - **安装包**:5.2 MB · APK - **签名状态**::white_check_mark: **发行签名**(可直接安装) - 安装时如提示"未知来源",请在系统设置中允许来自浏览器的安装 #### :apple: macOS - **适用设备**:Apple 芯片与 Intel 通用(Universal 二进制) - **系统要求**:macOS 11 及以上 - **安装包**:18.2 MB · DMG - **签名状态**::warning: **尚未 Apple 公证** — 首次打开可能需要在「系统设置 → 隐私与安全性」中允许 - Universal 版一个包同时支持 M 系列芯片与 Intel 机型 #### :desktop_computer: Windows x64 - **适用设备**:Intel / AMD 64 位电脑 - **系统要求**:Windows 10 / 11 · 64 位 - **安装包**:6.7 MB · EXE - **签名状态**::warning: **尚无发布者证书** — 首次运行如出现 SmartScreen 提示,点击"更多信息 → 仍要运行" #### :desktop_computer: Windows ARM64 - **适用设备**:骁龙等 ARM64 电脑,适配新一代轻薄笔记本 - **系统要求**:Windows 11 · ARM64 - **安装包**:6.3 MB · EXE - **签名状态**::warning: **尚无发布者证书** !!!warning :bulb: 先把数据带上 客户端与网页版使用**同一个酒馆账号**。从网页版出发时,请先用原设备导出完整备份,再到客户端导入 —— 角色卡、聊天、记忆和设置都会一起迁移。 !!! ## 从网页版迁移数据 1. 在**原设备**打开像素酒馆,进入 `设置 → 扩展与数据` 2. 导出**完整备份 ZIP**(包含角色卡、全部聊天、高级功能记录、跑团冒险、设置,以及已保存的图片和参考图) 3. 在客户端导入该 ZIP 文件 4. 登录同一个酒馆账号,即可继续使用酒馆模型和角色卡集市 !!!note :shield: 关于隐私与同步 - **私人云同步尚未开放**,目前请通过完整备份迁移 - **登录不会自动上传本机资料**,密钥与登录凭据不会随备份迁移,新设备需重新登录或填写 - 主题、音乐与背景会按需从云端更新 !!! ## 账号与设备授权 客户端沿用同一个酒馆账号,但**每台设备是独立授权的**: - 登录方式有两种:**直接输入用户名 + 密码**,或通过系统浏览器确认授权(不在应用内嵌网页里输入密码) - 登录有效期 **14 天**(网页版与客户端统一口径),到期后需要重新登录确认 - 客户端设置中可**查看、命名和撤销**已授权设备,各端可以独立退出 - 登录凭据存入系统安全存储,**不会随备份迁移**,换设备需重新登录 - 客户端会检查网络与账号连接状态,聊天头栏会显示「已连接 / 待重连 / 离线」 !!!note :shield: 私人云同步尚未开放 网页版与客户端的资料**不会因为登录自动搬运**,仍以本机保存为主。跨设备请使用「设置 → 扩展与数据」的完整备份导入导出。 !!! ## 桌面端还是网页端? | | 网页版 | 客户端 | |:---|:---|:---| | 打开方式 | 浏览器访问即用 | 独立应用,桌面/启动器图标 | | 自动更新 | :white_check_mark: 刷新即最新 | 启动时检查新版,覆盖安装升级 | | 数据 | 本地优先(浏览器工作区) | 本地优先,可通过备份迁移 | | 设备授权 | 跟随浏览器登录,14 天有效期 | :white_check_mark: 独立授权,可单独撤销 | | 资源更新 | 随页面加载 | 主题 / 音乐 / 背景按需从云端更新 | | 适合场景 | 快速开聊、多设备临时使用 | 长时间沉浸、固定设备主力 | :arrow_left: [继续使用网页版](https://chat.xstavern.com/discover){target="_blank" .button} :beer: [打开像素酒馆](https://chat.xstavern.com/){target="_blank" .button} :arrow_down: [官方下载页](https://chat.xstavern.com/download){target="_blank" .button} --- !!!note 相关推荐 - [像素酒馆介绍](/pixel-tavern.md) — 完整功能一览 - [像素酒馆版本更新](/pixel-tavern-updates.md) — 完整版本更新日志与本版明细 - [像素酒馆下载页](https://chat.xstavern.com/download){target="_blank"} — 官方下载与版本说明 !!! ===== pixel-tavern-updates.md (https://sillytaverncn.net/pixel-tavern-updates/) ===== --- order: 90 title: 像素酒馆版本更新 description: 像素酒馆(Pixel Tavern)版本更新日志:从 V1.3 到 V1.8.4 的完整功能演进,涵盖客户端预览版首发与四平台客户端迭代、多人剧情、五套皮肤、跑团冒险、Agent 聊天、生成式 UI、沉浸互动与剧情插图。 icon: history --- # 🔄 像素酒馆版本更新 像素酒馆保持着高频迭代 —— 每个版本都会补齐一块能力,同时修掉上一版遗留的体验问题。这里保留了完整的历史版本记录,方便你核对某个功能是什么时候上线的。 !!!success :beer: 当前版本 V1.8.4 **2026 年 10 月 11 日发布** · 四平台客户端同步更新(Android / macOS / Windows x64 / ARM64) · 最新内容以 [chat.xstavern.com/updates](https://chat.xstavern.com/updates){target="_blank"} 为准 !!! ## 版本速览 | 版本 | 发布日期 | 主要变化 | |:---|:---|:---| | **V1.8.4** | 2026-10-11 | 四平台客户端同步 1.8.4、通知历史、气泡一键停止朗读、聊天查看角色与大图、会话背景记忆 | | V1.8.1 – 1.8.3 | 2026-10-09 ~ 10-11 | 客户端账号直登与 14 天统一会话、启动检查新版本、角色卡封面问号与集市导入修复 | | **V1.8** | 2026-10-09 | 🎉 **客户端预览版首发**(Android / Windows / macOS)、多人剧情、五套皮肤、预设模块化管理 | | V1.72 | 2026-10-03 | 角色卡集市 NSFW 分栏偏好独立保存 | | V1.71 | 2026-09-23 | 剧情插图、Agent 审校、流式回复集中修复 | | V1.7 | 2026-09-17 | 跑团冒险 Beta、完整数据备份迁移 | | V1.6 | 2026-09-15 | Agent 聊天 Beta、12 种写作 Skill | | V1.5 | 2026-08-15 | 生成式 UI Beta、剧情插图、后台多会话生成 | | V1.4 | 2026-08-10 | 沉浸互动 Beta、AI 生成下一步输入 | | V1.3 | 2026-08-10 | 聊天档案导出、阅读体验可调节 | --- ## V1.84 最新更新 **2026 年 10 月 11 日** > **本次重点**:四平台客户端同步到 V1.8.4,并带来通知历史、气泡内一键停止朗读、聊天中查看角色与大图、按会话记忆角色背景,以及更清晰的连接状态与浏览反馈。 ### :tada: 四平台客户端 V1.8.4 Android、macOS 通用版、Windows x64 与 ARM64 同步新版功能。请先导出完整备份,再下载对应系统和**原架构**的安装包覆盖升级,不要卸载或清除数据;网页端刷新即可使用本轮更新。 :arrow_down: [查看完整下载与安装说明 →](/pixel-tavern-client.md) ### 本版全部更新(8 项) | 更新项 | 说明 | |:---|:---| | 四平台客户端 V1.8.4 | Android、macOS 通用版、Windows x64 与 ARM64 同步新版功能。请先导出完整备份,再下载对应系统和原架构的安装包覆盖升级,不要卸载或清除数据;网页刷新即可使用本轮更新 | | 多条通知与历史阅读 | 新增「通知」页面,桌面侧栏和手机「更多」可进入。管理员发布的通知按时间保留;自动弹窗只显示最新一条,其他已发布内容进入历史。选择「不再显示」后仍可在通知页手动查看 | | 气泡内一键停止朗读 | 点击聊天气泡的朗读按钮后,按钮切换为「停止朗读」;再次点击立即停止。朗读结束、切换消息或离开会话会恢复状态,不影响模型生成 | | 聊天中查看角色与大图 | 点击聊天头像可打开角色卡介绍,手机端也有独立查看入口;详情中可放大角色封面,阅读时无需离开当前聊天 | | 角色背景记住每段会话 | 传统聊天、沉浸互动、Agent、生成式 UI 与跑团可切换角色封面背景;按当前账号工作区和会话记住开启或关闭,从历史重新进入、刷新后仍保留,不改变全局背景 | | 聊天连接状态入口 | 聊天头栏显示账号连接、待重连或离线等状态,点击直达酒馆账号设置。状态依据本机账号会话与网络信息,不代表模型服务的实时健康检查 | | 集市切换与页面反馈优化 | 原创和公开角色切换时立即展示加载反馈,避免旧列表停留造成误解。页面、历史和角色书架加入轻量入场动效;低配置模式或系统减少动态效果时关闭,保留聊天与音乐 | | SillyTavern Wiki 快捷入口 | 桌面教程下方与手机「更多」加入 SillyTavern Wiki,可打开中文文档。同步修复部分平板宽度下 Agent 生成中头栏拥挤的问题 | --- ## V1.8 功能回顾 **2026 年 10 月 9 日** > **本次重点**:像素酒馆推出 Android、Windows 和 macOS 客户端预览版。本版汇总 V1.72 之后的多人剧情、五套皮肤、预设与正则、手机浏览和启动体验升级,让电脑与手机都更方便地进入故事。 ### :tada: 客户端预览版首发 **把像素酒馆装进电脑和手机** —— Android · Windows x64 / ARM64 · macOS Apple 芯片 / Intel | 平台 | 系统要求 | 安装包 | 签名状态 | |:---|:---|:---|:---| | :robot: **Android** | Android 7 及以上 | 4.9 MB · APK | :white_check_mark: 发行签名 | | :apple: **macOS**(Apple 芯片 + Intel 通用) | macOS 11 及以上 | 17.3 MB · DMG | :warning: 尚未 Apple 公证 | | :desktop_computer: **Windows x64** | Windows 10 / 11 · 64 位 | 6.5 MB · EXE | :warning: 尚无发布者证书 | | :desktop_computer: **Windows ARM64** | Windows 11 · ARM64 | 6.1 MB · EXE | :warning: 尚无发布者证书 | :arrow_down: [查看完整下载与安装说明 →](/pixel-tavern-client.md) !!!warning :bulb: 客户端预览版说明 官网预览版;macOS 尚未公证,Windows 尚未签名,安装时可能出现系统提醒。**iOS 暂未发布**。私人云同步尚未开放,换设备请先导出完整备份。 !!! ### 本版全部更新(21 项) | 更新项 | 说明 | |:---|:---| | 电脑与 Android 客户端 | 官网现可下载 Android 7+、Windows 10/11 x64、Windows 11 ARM64,以及支持 Apple 芯片和 Intel 的 macOS 11+ 客户端预览版。沿用像素酒馆账号、模型与聊天功能,iOS 客户端暂未发布 | | 各平台客户端下载统计 | 下载页展示各平台和总计的累计下载次数,从统计启用后开始记录,不回填此前下载。同一访客、平台与版本 10 分钟内的重复下载只计一次;按发起下载计数,不代表安装人数 | | 客户端启动检查新版本(1.8.3) | 客户端启动与回到前台时检查新版,支持「稍后提醒」「跳过此版本」与设置中手动检查,点击后到官网下载安装。网页、桌面与 Android 共用轻量页面和弹窗动效;低配置或减少动态效果时关闭,不重载聊天与音乐 | | 客户端加载与角色卡修复(1.8.2) | 修复角色卡封面显示问号与部分集市导入失败;登录检查与余额刷新分开执行,减少启动后的重复资源请求。同步加入酒馆模型 Benchmark 页面;下载页提供各版本说明,推荐备份后覆盖升级,请勿卸载旧版 | | 同一酒馆账号,独立设备授权 | 客户端支持直接输入用户名与密码登录,也可通过系统浏览器授权。网页与客户端统一固定 14 天有效期,各端独立退出;设置中可以查看、命名和撤销已授权设备。客户端凭据存入系统安全存储 | | 客户端资料迁移与本机保存 | 聊天、角色卡和设置继续优先保存在本机,可离线阅读已保存的内容。网页与客户端资料不会因登录自动搬运,请使用"设置 → 扩展与数据"的完整备份导入与导出;客户端支持系统保存或分享 | | 官方资源按需更新 | 五套官方主题、推荐角色、音乐和背景通过版本清单按需获取并校验完整性,减少安装包体积。已修改角色和自定义皮肤会保留;私人加密云同步尚未开放,不能替代手动备份 | | 多人剧情独立入口 | 桌面侧栏"跑团冒险"下方、手机"更多"中可进入多人剧情。传统聊天支持最多十位角色,通过 @ 或角色选择器指定一位或多位角色依次回复,并显示各自姓名与头像 | | 带缩略图的分组角色选择器 | 多人选卡可切换"我的角色卡、集市原创卡、集市公开卡",在带头像的下拉列表中搜索、按系列挑选并查看详情。加入集市角色时自动导入完整角色定义、世界书和正则,已导入卡可直接复用 | | 同系列推荐与可编辑剧情背景 | 同系列角色优先推荐,跨系列会提示世界观可能不同,也允许继续加入。背景和世界介绍可手动编辑或让 AI 多次生成候选;选择五位及以上角色时可自动推荐,采纳后才替换已填内容 | | 多人状态与回合操作更清楚 | 每轮按实际发言角色加载提示词、世界书与正则。角色状态候选可独立上下滚动,确认和丢弃按钮固定可见;停止或失败后可继续处理未完成角色 | | 五套皮肤与 JSON 换肤 | 经典像素、月夜琉璃、晨曦手账、透明毛玻璃、液态玻璃可随时切换,统一导航、聊天配色、图标与圆角。支持 JSON 导入导出,刷新和重新打开后保留当前皮肤 | | 更清晰的玻璃材质 | 毛玻璃与液态玻璃用于导航、弹窗和输入区,正文保留清晰阅读底色。手机减轻模糊效果,低配置模式或系统减少透明度时回退实色,保留角色作者自己的 HTML 与 SVG 内容 | | 完整预设模块可视化管理 | 导入的完整预设支持模块分类、搜索、开关、编辑、互斥选择和导出,并保留执行顺序、上下文位置与受支持的宏。官方 DeepSeek / GLM 简明写作预设仍可单独选用,不会自动切换模型 | | 思考内容显示可调,原文可保留 | 预设中的思考段和附加输出支持隐藏、引用、折叠或保留原文;显示与原始回复分开保存。复制、编辑、重新生成和切换候选回复时仍保留原始内容 | | 正则与正文显示兼容修复 | 修复部分预设变量执行顺序、独立正则转义与空 flags、历史 HTML 恢复等问题。普通与 HTML 对白统一高亮;停止和断流后仍应用随卡正则,减少标签外露或排版丢失 | | 空正文有界重试与修改保留 | 传统聊天收到正常结束但正文为空的响应时,最多自动重试一次,不重复创建消息;仍失败会明确提示。手动修改内置角色卡后重新打开,继续保留用户改动与原有聊天记录 | | 角色书架与集市更方便浏览 | 原创和公开角色都可快捷切换"最热、最新发布、评分最高"。我的导入角色卡固定在筛选前列;默认推荐采用原创下载榜 Top 20 的版本快照,并保留私人导入、已修改卡和旧聊天 | | 详情封面放大与导入后直聊 | 集市和我的角色卡详情支持点击封面全屏预览。导入后可以直接聊天,刷新后仍根据本地导入记录恢复入口;手机"已导入"和 NSFW 小标签移到封面下角,减少遮脸 | | 手机导航、全屏与筛选栏优化 | 手机底栏直接进入聊天历史,收藏、多人剧情和更多设置集中到"更多",并增加 Build 角色卡制作入口。支持的浏览器可进入全屏;不支持时提供主屏幕安装指引。浏览卡片时筛选栏带动画收起,手动展开,向上滚动不再反复弹出 | | 启动更快,加载失败更易恢复 | 页面和推荐资源与登录检查并行加载,高级历史与背景目录按需读取,减少重复编辑器和隐藏资源下载。修复重复启动入口、旧缓存混用和样式加载失败;加入轻量星星加载动画,页面就绪立即进入 | --- ## V1.72 功能回顾 **2026 年 10 月 3 日** > **本次重点**:完善角色卡集市的 NSFW 分栏偏好 —— 原创角色默认开启、公开角色默认关闭,两个栏目独立保存并在桌面与手机端保持一致。 ### 原创与公开角色独立 NSFW 开关 原创角色首次进入默认开启 NSFW,公开角色默认关闭;切换栏目不会互相覆盖,刷新后仍保留各自状态。 ### 桌面与手机筛选状态同步 桌面筛选和手机抽屉共用当前栏目的偏好,分类、标签、详情请求和卡片可见性都会跟随当前状态。 ### 集市筛选更可控 重置筛选时只恢复当前栏目的默认值,不影响另一个栏目,也不会触碰角色卡、聊天记录或其他本地资料。 --- ## V1.71 功能回顾 **2026 年 9 月 23 日** > **本次重点**:集中修复剧情插图、Agent 审校、登录资料保留、第三方流式回复和长文显示,并完善角色卡集市的书架浏览与刷新稳定性。 | 更新项 | 说明 | |:---|:---| | 剧情插图返回兼容修复 | 修复模型已返回图片链接却提示"模型未返回图片"的问题;兼容更多图片响应格式,模型不可用、审核拒绝和下载失败会分别说明原因 | | 签名图片链接下载修复 | 图片下载保留链接原有编码,避免带签名的图片地址失效;继续限制异常下载地址和不安全跳转 | | DeepSeek Agent 审校更稳定 | 明确审校报告格式与字段要求,格式错误时只重试审校一次,避免反复重写已生成的剧情 | | 登录失效后保留本机资料 | 修复登录过期或网络异常后切错资料区、角色卡和历史看似消失的问题;重新登录保留原资料区及第三方配置 | | 多标签页切换账号保护 | 其他标签页换号或退出后,旧页面会暂停操作并提示重新加载,避免把旧角色聊天内容发送到新账号 | | 找回本机未登录资料 | 设置 → 扩展与数据 → 完整数据备份与迁移,新增"检查本机未登录资料",可单独导出旧资料再自行确认导入 | | 第三方流式回复兼容修复 | 修复部分兼容接口的多行数据、分块传输和完整消息响应被遗漏的问题,减少空正文与只显示几个字的情况 | | 回复中断提示与手动重试 | 输出额度用完、服务商拦截或数据损坏时保留已收到的正文并显示原因,可查看请求详情或手动重新生成 | | 长篇回复完整阅读 | 修复"复制是全文、页面却显示不全"的 HTML 高度与裁切问题,增加滚动兜底和"阅读纯文本 / 恢复排版" | | 手机失败提示更易操作 | 查看最新回复时,失败提示及重试按钮会完整进入阅读区域;上翻查看旧聊天时保持当前位置 | | 角色卡集市书架与刷新修复 | 集市改为书架式陈列,手机端三列浏览更容易扫卡;修复刷新集市黑屏和资源版本混用导致的加载失败 | | 首次更新通知与使用指引 | 首次打开新版时弹出更新重点,新用户可在同一窗口切换使用指引;确认后本浏览器不再重复提示本版 | --- ## V1.7 功能回顾 **2026 年 9 月 17 日** > **本次重点**:新增跑团冒险 Beta,完善角色卡筛选、聊天阅读与沉浸体验,并带来第三方模型接入优化和完整数据备份迁移。 ### 跑团冒险 - **跑团冒险 Beta** — 新增独立单人冒险入口,桌面侧边栏与手机"更多"均可进入。选择角色卡,填写世界、开场、主角与初始属性,由酒馆模型主持故事;支持轻量 d20、d100 与自由叙事规则 - **AI 创建战役草稿** — 创建弹窗可使用当前酒馆聊天模型,根据角色卡和已启用世界书生成战役名称、世界、开场、主角与四项属性,支持停止、重试和重新生成,确认后才创建 - **适合跑团的角色卡筛选** — 集市新增"适合跑团"标签与筛选,优先挑选探索、任务、调查、生存、战斗或成长类角色;没有合适的本地卡时可直达筛选后的集市下载 - **跑团模型与状态管理** — 跑团默认跟随酒馆聊天模型,也可在跑团页面独立切换;对白以黄色区分,背包、任务、关系和记忆可随时查看,状态变化需确认后才结算,失败重试保留原骰点 - **跑团回合与本地存档** — 可回看历史回合,离开页面后仍继续生成,支持战役 JSON 导入导出 ### 第三方模型与稳定性 - **第三方模型接入完善** — 第三方 OpenAI 兼容 API 支持添加、编辑和连接测试,兼容流式 SSE 与普通 JSON 回复 - **传统聊天请求稳定性修复** — 修复普通 JSON 回复被误判为空白、接口错误信息不清晰等问题;401、429、超时和空响应会显示可操作的错误提示 - **第三方模式边界说明** — 第三方模型只支持传统聊天;角色卡、预设、世界书和正则仍可使用,沉浸互动、Agent、生成式 UI、跑团、生图、总结和 AI 建议需切换酒馆专属模型 ### 阅读与体验 - **聊天阅读与沉浸模式** — 传统聊天、沉浸互动、生成式 UI、Agent 和跑团优化了桌面与手机阅读布局,设置集中到抽屉;沉浸模式隐藏外围界面,保留退出入口与消息便捷操作 - **聊天入口与外观面板优化** — 修复切换生成式 UI 后 Agent 入口消失的问题;音乐和背景设置移入布局内与聊天设置抽屉。原"互动跑团"统一命名为"沉浸互动" - **集市封面分级修正** — 补充角色卡封面的图像审核,将敏感或疑似敏感封面归入 NSFW,并强化默认隐藏与缓存隔离 ### 数据迁移 - **完整数据导出与导入** — 设置中的"扩展与数据"支持 ZIP 备份和迁移,包含角色卡、全部聊天、高级功能记录、跑团冒险、设置以及已保存的图片和参考图 - **合并迁移与关联保留** — 导入会为新记录生成独立 ID,保留当前设备已有内容,并同步修复角色卡、聊天、互动回合、生成式 UI、Agent 与跑团之间的关联 - **图片和隐私保护** — 已保存的插图、参考图与内嵌封面随备份迁移;备份不包含登录凭据或 API Key,新设备需重新登录或填写密钥 - **安全的迁移流程** — 导出会等待自动保存,生成中的任务会阻止迁移;损坏或超限 ZIP 会被拒绝,其他标签页检测到导入后会提示刷新 - **跨设备继续使用** — 备份覆盖当前浏览器工作区,在新电脑或手机登录后导入即可继续;迁移不会自动云同步 --- ## V1.6 功能回顾 **2026 年 9 月 15 日** > **本次重点**:上线 Agent 聊天 Beta 与 12 种写作 Skill,重构设置中心,并新增低配置流畅模式与 gpt-image-2.5 生图。 - **Agent 聊天 Beta** — 新增独立 Agent 聊天入口,可从桌面侧边栏或手机"更多"进入,会话与其他聊天模式分开保存 - **先规划,再生成与审校** — Agent 按"剧情规划、正文生成、一致性审校、必要时定向修正"处理每轮,并呈现角色状态、后续行动和运行记录 - **Agent 稳定性提升** — 针对默认 DeepSeek Tavern V2 Pro 优化分阶段提示词、结构解析和输出补全;短暂请求失败会自动重试 - **自动修正与手动重试** — 审校不通过默认自动修正一次,可在设置中调整次数;仍失败或中断时可手动重新生成 - **12 种写作 Skill** — 提供自然去 AI 味、细腻文学、轻小说对白、角色声线、动作编排、古风武侠和电影化沉浸等风格,每轮最多组合六种 - **写作 Skill 与剧情导演** — 新增慢热铺陈、均衡导演、快速推进等节奏模式;生成时锁定本轮模型、Skill 和导演配置 - **设置中心全新分栏** — 拆分为账户与模型、显示性能、聊天设置、高级功能、剧情插图、扩展与数据六个 Tab - **低配置流畅模式** — 根据慢网、低内存等情况给出开启建议;启用后使用静态背景、关闭非必要动画和预取 - **gpt-image-2.5 首选生图** — 酒馆专属生图新增 `gpt-image-2.5` 并设为剧情插图首选模型 --- ## V1.5 功能回顾 **2026 年 8 月 15 日** > **本次重点**:生成式 UI Beta 上线,剧情插图支持中文画面提案编辑,沉浸互动大幅增强,并支持后台多会话生成。 - **生成式 UI Beta** — 在传统聊天与沉浸互动之外新增独立聊天模式。模型可以生成受控的状态面板、剧情选项、线索界面和 SVG 场景图 - **生成式 UI 独立模型** — 默认启用并使用 Claude Opus 5,也可单独选择酒馆专属大模型,不会改变传统聊天或沉浸互动的模型 - **传统聊天与跑团插图** — 传统聊天消息和沉浸互动回合都可以创建剧情插图,支持 gpt-image-2 与 nanobanana2,每张图片准确绑定对应消息或回合 - **中文画面提案可编辑** — 插图提案先生成中文提示词,可修改模型、比例、画风、角色卡人物或本人形象;确认后才调用付费图片模型 - **沉浸互动继续增强** — 剧情与对白更完整,对白使用黄色区分;支持自定义动作、互动方式、剧情方向与补充剧情 - **安全视觉与阅读体验** — 互动场景支持受控 SVG 地图、线索和路线;远程生图使用脱敏提示词 - **后台多会话生成** — 离开聊天页面后模型仍会继续生成,多张角色卡可以同时聊天;历史页显示生成中、已完成或失败状态 - **长期记录与插图归档** — 自动长期记忆支持简洁或详细总结;包含插图的聊天记录可通过 ZIP 导入导出 --- ## V1.4 功能回顾 **2026 年 8 月 10 日** > **本次重点**:沉浸互动 Beta 上线,跑团模型可独立设置,聊天框新增 AI 生成下一步输入。 - **沉浸互动 Beta** — 聊天界面可以在传统聊天与沉浸互动之间切换。沉浸互动模式提供剧情场景、三组行动选项、状态修订与回合记录 - **跑团模型独立设置** — 沉浸互动默认使用 Claude Opus 5,也可以选择全部酒馆模型,或改为跟随当前聊天模型 - **AI 生成下一步输入** — 聊天框左侧的骰子按钮可以根据角色设定、世界书、状态与对话历史,流式生成一条可编辑的用户输入 - **提示词链路更完整** — 沉浸互动和输入建议继续注入角色卡、预设、世界书、正则、作者注释、摘要与历史,并可在调试面板核对请求 - **生成状态更清楚** — 模型回复期间输入框会显示明显动效;用户仍可编辑草稿,但完成前不能重复发送 - **角色卡首屏继续提速** — 集市使用 256px WebP、轻量预览图、首屏预取和错峰并发 --- ## V1.3 功能回顾 **2026 年 8 月 10 日** > **本次重点**:聊天档案支持导出与批量删除,角色资源可随时编辑,阅读体验与集市加载全面优化。 - **聊天档案更完整** — 历史记录支持选择导出、JSON 加载、单条删除与批量删除;导入不会覆盖现有会话 - **角色资源可随时编辑** — 聊天中可以直接修改当前角色的预设、世界书和正则,不必退出当前剧情 - **阅读体验可调节** — 聊天字号支持 12–22px 调节并记住选择,高级 HTML 内容也会同步适配 - **手机集市重新整理** — 搜索和筛选收进底部抽屉,保留分类、标签、排序与 NSFW 开关 - **缩略图加载优化** — 集市改用压缩 WebP,优化并发加载、失败重试和错误缓存策略 - **高级功能链路修复** — 预设、世界书、正则、高级 HTML 与剧情状态追踪组合使用时更加稳定 --- !!!note 相关推荐 - [像素酒馆介绍](/pixel-tavern.md) — 完整功能一览 - [像素酒馆客户端](/pixel-tavern-client.md) — 客户端下载与迁移 - [像素酒馆使用教程](https://chat.xstavern.com/tutorial){target="_blank"} — 四步开始聊天 !!! ===== pixel-tavern.md (https://sillytaverncn.net/pixel-tavern/) ===== --- order: 95 title: 像素酒馆 · 在线酒馆聊天 description: 像素酒馆(Pixel Tavern)是在线 SillyTavern 风格的 AI 角色扮演平台:免费角色卡、角色卡集市、世界书、正则、生成式 UI 与剧情插图一应俱全,打开网页即可开聊。 icon: beer-mug-empty --- # 🍺 像素酒馆 · Pixel Tavern !!!success :beer: 打开即用的在线酒馆 **[https://chat.xstavern.com/](https://chat.xstavern.com/){target="_blank"}** — 不用下载、不用安装、不用配置环境,打开网页就能直接开聊。 !!! 像素酒馆(Pixel Tavern)是**在线 SillyTavern 风格的 AI 角色扮演与陪伴空间**。它在浏览器里还原了完整酒馆体验,同时把「找卡、配资源、接模型」这些最劝退新手的步骤全部内置完成 —— 你不用折腾 Node.js,也不用研究 API 参数,选一张喜欢的角色卡就能开始。 自上线以来,像素酒馆累计访问已超过 **6 万次**,角色卡集市累计下载突破 **12.9 万次**;现已推出 **Android / Windows / macOS 客户端预览版**,把酒馆装进电脑和手机。 ## 为什么选择像素酒馆? | | 本地 SillyTavern | 🍺 像素酒馆 | |:---|:---|:---| | 安装 | :x: 需要安装 Node.js、跑服务 | :white_check_mark: **打开网页即用** | | 平台 | :warning: 主要为电脑 | :white_check_mark: **电脑 / 手机 / 平板全支持** | | 配置 API | :x: 需自行申请 Key、填参数 | :white_check_mark: **内置酒馆专属大模型** | | 找角色卡 | :x: 要自己找资源、手动导入 | :white_check_mark: **内置集市,12.9 万次下载** | | 数据 | :white_check_mark: 完全本地 | :white_check_mark: **本地优先**,可云备份迁移 | | 上手时间 | 30 分钟起 | **10 秒开聊** | ## 四步开始聊天 1. :one: **连接聊天模型** — 在设置中登录酒馆专属大模型账号,或配置自己的 OpenAI 兼容 API 2. :two: **挑选并导入角色卡** — 进入角色卡集市,按分类、标签或关键词筛选,打开详情即可导入 3. :three: **开始组队** — 回到冒险页面选择角色开始;有多条历史时可以开新聊天或续接指定历史 4. :four: **在聊天中继续配置** — 从聊天设置抽屉修改角色预设、世界书与正则,调节字号与模型 !!!warning :bulb: 提示 使用 AI 功能需要先登录酒馆账号([deepseektavern.com](https://deepseektavern.com){target="_blank"} 注册充值),或配置自己的 API。角色卡下载不扣费;第三方 API 仅支持传统聊天,高级功能需使用酒馆专属模型。 !!! ## 核心功能一览 ### :cards: 角色卡集市 集市是像素酒馆最热闹的地方。分类、标签、NSFW 开关、收藏、下载排行与资源档案馆一应俱全,累计下载已超过 12.9 万次。 - **原创角色卡** 1,238 张,来自像素酒馆官方与社区创作者,详见[角色卡集市](/character-cards.md) - **原创系列** 115 个,从 5 张一组的小系列到 150 张的大型系列(苍蓝学园·星骸录、绯红魔女·审判庭、蔚蓝档案) - **题材分类**:校园青春、古风仙侠、星轨遗梦、午夜绒幕、霓虹异能局、药灯宫廷、空洞圣歌、红潮议会、科幻末世…… - **双栏目独立偏好**:原创角色与公开角色各自保存筛选状态,互不覆盖 - **TOP 100 排行榜**:[下载排行](https://chat.xstavern.com/market/ranking){target="_blank"} 看看大家在聊什么 ### :scroll: 角色绑定资源 世界书和正则**跟随角色卡保存**。导入带附件的卡片时可以自行选择是否一并导入,换角色不用重新配一遍。 - **预设** — 系统提示词、作者注释、采样参数、专属模型和自定义 API - **世界书** — 人物、地点、规则与背景知识,按关键词、位置和 Token 预算注入 - **正则** — 既能处理发给模型的提示词,也能整理模型输出 ### :sparkles: 高级 HTML 渲染 在**隔离环境**中渲染角色卡 HTML、正则界面和可交互的剧情状态内容 —— 状态栏、属性面板、剧情卡片都能像网页一样动态显示,同时与主页面安全隔离。 ### :crossed_swords: 剧情状态追踪 实时显示好感度、角色状态、当前位置、目标与剧情方向。系统优先让主模型一次完成,只有状态缺失时才调用回退模型,点击剧情方向即可继续推进。 ### :framed_picture: 生成式 UI(Beta) 独立于传统聊天的全新模式。模型可以生成受控的**状态面板、剧情选项、线索界面和 SVG 场景图**,把文字冒险变成可点击的交互界面,且不影响原有聊天流程。 ### :moon: 沉浸互动(Beta) 在传统聊天与沉浸互动之间随时切换。沉浸模式提供剧情场景、三组行动选项、状态修订与回合记录,剧情与对白有明确区分,也可以回看上一轮和下一轮。 ### :game_die: 跑团冒险(Beta) 独立单人冒险入口。选择角色卡、填写世界与开场、设定主角与初始属性,由酒馆模型主持故事;支持轻量 **d20 / d100 与自由叙事**规则,也可以用 AI 一键创建战役草稿(世界、开场、主角、四项属性)后再编辑确认。 ### :robot: Agent 聊天(Beta) 新增独立 Agent 聊天入口,按「剧情规划 → 正文生成 → 一致性审校 → 必要时定向修正」处理每轮对话,并呈现角色状态、后续行动和完整运行记录。 - **12 种写作 Skill**:自然去 AI 味、细腻文学、轻小说对白、角色声线、动作编排、古风武侠、电影化沉浸等,每轮最多组合六种 - **剧情导演**:慢热铺陈 / 均衡导演 / 快速推进三档节奏 - **自动修正**:审校不通过默认自动修正一次,次数可在设置调整 ### :busts_in_silhouette: 多人剧情 支持**最多十位角色**同场推进的群像剧情,适合跑团、多角色互动与复杂世界观演绎。 - **独立入口** — 桌面侧栏「跑团冒险」下方、手机「更多」中直接进入 - **`@` 指定发言** — 通过 @ 或角色选择器指定一位或多位角色依次回复,各自显示姓名与头像 - **分组选卡器** — 可在「我的角色卡 / 集市原创卡 / 集市公开卡」间切换,带头像的下拉列表里搜索、按系列挑选并看详情 - **自动导入** — 加入集市角色时自动带入完整角色定义、世界书与正则,已导入的卡可直接复用 - **同系列推荐** — 优先推荐同系列角色;跨系列会提示世界观可能不同,仍可继续加入 - **可编辑剧情背景** — 背景与世界介绍可手改,也可让 AI 多次生成候选;选五位及以上角色时可自动推荐 ### :art: 剧情插图 传统聊天与沉浸互动都能生成插图。系统**先生成中文画面提案供你编辑**(模型、比例、画风、角色形象可选),确认后才调用付费图片模型 —— 不会偷偷烧额度。首选模型为 `gpt-image-2.5`,也可选择 `gpt-image-2`、`nanobanana2` 或自有图片 API。 ### :floppy_disk: 历史与数据迁移 聊天、角色卡和主要设置**优先保存在当前浏览器**,酒馆专属大模型密钥不会进入浏览器,隐私可控。 - 历史支持单独导出、JSON 加载、单条删除与批量删除,导入不会覆盖现有会话 - 更换设备:设置 → 扩展与数据 → 导出工作区 ZIP,在新设备导入 - 历史页会显示后台生成状态(生成中 / 已完成 / 失败),多张角色卡可同时聊天 ### :art: 五套皮肤与换肤 **经典像素、月夜琉璃、晨曦手账、透明毛玻璃、液态玻璃** 五套官方主题随时切换,统一导航、聊天配色、图标与圆角。支持 **JSON 导入导出**,刷新或重新打开后仍保留当前皮肤。 - **玻璃材质** — 毛玻璃与液态玻璃用于导航、弹窗和输入区,正文保留清晰阅读底色 - **手机适配** — 手机端减轻模糊效果;低配置模式或系统「减少透明度」时自动回退实色 - **作者内容保留** — 换肤不影响角色作者自己的 HTML 与 SVG 内容 ### :performing_arts: 沉浸式体验 背景图与视频、透明度调节、复古播放器、语音朗读、聊天长图导出;聊天字号支持 12–22px 调节并记住选择。 ### :zap: 性能与低配模式 集市使用 256px WebP 缩略图、首屏预取与错峰并发,缩短角色卡封面加载等待。**低配置流畅模式**会根据慢网、低内存等情况给出建议,启用后使用静态背景、关闭非必要动画和预取,聊天与高级功能保持可用。 ## 像素酒馆家族 像素酒馆已经从一个聊天站点长成了一整套创作工具链: | 工具 | 地址 | 用途 | |:---|:---|:---| | 🍺 **像素酒馆** | [chat.xstavern.com](https://chat.xstavern.com/){target="_blank"} | 在线酒馆聊天、角色卡集市、跑团冒险 | | 🎴 [角色卡构建器](/cardbuilder.md) | [cardbuilder.xstavern.com](https://cardbuilder.xstavern.com/){target="_blank"} | 自己填写或让 AI 帮你做角色卡 | | 📖 [像素写作台](/novel-studio.md) | [novel.xstavern.com](https://novel.xstavern.com/){target="_blank"} | 写长篇小说,从大纲到发布 | | 🦁 **金狮公会** | [oschat.xstavern.com](https://oschat.xstavern.com/){target="_blank"} | 全新聊天界面,面向电脑大屏优化 | | 📱 [像素酒馆客户端](/pixel-tavern-client.md) | [下载页](https://chat.xstavern.com/download){target="_blank"} | **客户端预览版** · Android / macOS / Windows | ## 适用人群 - :beginner: **新手小白** — 不想折腾环境配置,只想快速体验 AI 角色扮演 - :iphone: **手机用户** — 想在手机、平板上玩酒馆,不想装 Termux - :card_index: **角色卡玩家** — 想逛集市、找原创卡、管理自己的收藏 - :crossed_swords: **跑团爱好者** — 单人冒险、d20 判定、AI 主持战役 - :writing_hand: **创作者** — 用角色卡构建器出卡,用写作台写长篇小说 - :hourglass_flowing_sand: **只想快速开聊** — 10 秒进入对话,不浪费时间 ## 立即开始 :beer: [打开像素酒馆](https://chat.xstavern.com/){target="_blank" .button} :card_index: [逛角色卡集市](https://chat.xstavern.com/market){target="_blank" .button} :arrow_down: [下载客户端](/pixel-tavern-client.md){.button} --- !!!note 相关推荐 - [角色卡集市](/character-cards.md) — 1,238 张原创角色卡的分类、示例与导入教程 - [像素酒馆版本更新](/pixel-tavern-updates.md) — 完整版本更新日志与本版明细 - [像素酒馆客户端](/pixel-tavern-client.md) — Android / macOS / Windows 下载 - [角色卡构建器](/cardbuilder.md) — 做一张属于自己的角色卡 - [像素写作台](/novel-studio.md) — 用 AI 写一部长篇小说 - [酒馆快速开始](/Usage/quick-start.md) — 了解酒馆基础操作 !!! ===== siltytavern-intro.md (https://sillytaverncn.net/siltytavern-intro/) ===== --- title: 什么是 SillyTavern? description: SillyTavern 酒馆介绍 — 开源 AI 角色扮演前端 --- # 什么是 SillyTavern? SillyTavern(傻酒馆/酒馆)是一个开源的 AI 角色扮演前端,可以从你的计算机(或通过云服务)与 AI 模型进行沉浸式对话。 ## 主要功能 - :card_index: **角色卡系统** — 自定义 AI 角色的性格、背景、对话风格 - :books: **世界书** — 动态管理世界观和背景设定 - :speech_balloon: **群聊** — 多个 AI 角色同时对话 - :art: **丰富的 UI** — 高度可定制的主题和界面 - :loud_sound: **TTS 语音** — 文本转语音,让角色开口说话 - :framed_picture: **图像生成** — 内置 Stable Diffusion/FLUX 支持 - :electric_plug: **扩展系统** — 丰富的插件生态 ## 支持的 API SillyTavern 连接众多 LLM API: - :cloud: 云端 API:OpenAI、Claude、DeepSeek、NovelAI、OpenRouter - :computer: 本地 API:Ollama、KoboldCpp、llama.cpp、TabbyAPI - :free: 免费选项:AI Horde、Pollinations ## 快速开始 1. [下载一键启动器](https://launch.deepseektavern.com) — 零依赖 2. 注册 [DeepSeek Tavern](https://deepseektavern.com) API 3. 填写 Key,一键启动 ===== simple-tavern.md (https://sillytaverncn.net/simple-tavern/) ===== --- order: 70 title: 简易酒馆已升级为像素酒馆 description: 简易酒馆(DeepSeek Tavern 在线版)已品牌升级为像素酒馆 Pixel Tavern,入口地址变更为 chat.xstavern.com。 icon: beer-mug-empty --- # 🍺 简易酒馆已升级为像素酒馆 !!!success :beer: 品牌升级公告 原「简易酒馆」现已升级为 **像素酒馆(Pixel Tavern)**。 新入口:**[https://chat.xstavern.com/](https://chat.xstavern.com/){target="_blank"}**(原 `chat.deepseektavern.com` 会继续可用一段时间) !!! 升级后的像素酒馆不只是换了个名字,功能也扩充了一大截: | | 简易酒馆 | 🍺 像素酒馆 | |:---|:---|:---| | 角色卡集市 | 基础角色卡库 | **12.9 万次下载,1,238 张原创卡** | | 聊天模式 | 传统聊天 | 传统聊天 + **沉浸互动** + **生成式 UI** + **Agent 聊天** | | 跑团 | :x: | :white_check_mark: **跑团冒险 Beta**(d20 / d100) | | 剧情插图 | :x: | :white_check_mark: **中文画面提案可编辑** | | 客户端 | :x: | :white_check_mark: **Android / macOS / Windows** | | 创作工具 | :x: | :white_check_mark: **角色卡构建器 + 像素写作台** | ## 去看新页面 - :beer: [像素酒馆详细介绍](/pixel-tavern.md) - :rotate: [像素酒馆版本更新](/pixel-tavern-updates.md) - :arrow_down: [像素酒馆客户端下载](/pixel-tavern-client.md) - :id_card: [角色卡构建器](/cardbuilder.md) - :book: [像素写作台](/novel-studio.md) :beer: [直接打开像素酒馆](https://chat.xstavern.com/){target="_blank" .button} ===== tavern-models.md (https://sillytaverncn.net/tavern-models/) ===== --- order: 98 title: 🧠 酒馆专属大模型 · DeepSeek Tavern Pro description: 酒馆专属大模型 DeepSeek Tavern Pro 提供两大专属引擎:deepseek-tavern(灵动少女)与 glm-tavern-pro-v2(稳重少妇 · Beta)。基于 DeepSeek V4 Pro 与 GLM-5.3 基座微调,100 万上下文、酒馆原生训练数据、low/pro/xhigh 三档创作风格,OpenAI 兼容接口,可直接接入 SillyTavern。 icon: brain --- # :brain: 酒馆专属大模型 · DeepSeek Tavern Pro **DeepSeek Tavern Pro 是专为 SillyTavern 酒馆角色扮演打磨的专属大模型**——不是租来的通用模型,也不是凑合的替代品,而是真正为叙事、沉浸与创作自由铸造的两套引擎。 同一间酒馆,两种灵魂: | 引擎 | 模型名 | 性格比喻 | 一句话 | |:---|:---|:---|:---| | :fire: **经典版** | `deepseek-tavern` | 灵动少女 | 文风活泼多变,脑洞天马行空,灵感来了挡都挡不住 | | :wine_glass: **新版 · Beta** | `glm-tavern-pro-v2` | 稳重少妇 | 同样有才华,更多一分沉淀,正则与记忆遵循性显著更好 | > 磊哥哥的原话:**🔥 deepseek-tavern 像一个少女——活泼灵动,但容易忘东西;🍷 glm-tavern 像一个少妇——稳重优雅,遵循性好,但少了点灵动。** ## 一分钟认识它 | 你可能想问 | 答案 | |:---|:---| | **它和 DeepSeek 原版什么关系?** | 同源但不同物。deepseek-tavern 基于 DeepSeek V4 Pro 的 MoE 架构**精准微调文字专家模块**,专攻文字创作与角色扮演 | | **和通用大模型比呢?** | 通用模型要你写复杂提示词才"演得像";酒馆专属模型的训练数据就是真实酒馆场景,天然懂角色卡的叙事结构 | | **有两个模型,怎么选?** | 追惊喜感、要脑洞 → 选 deepseek-tavern;要长剧情不崩人设、格式稳定 → 选 glm-tavern-pro-v2 | | **支持多长的上下文?** | 100 万 token(1M)。长篇小说、复杂世界书、多角色切换都不会丢前文细节 | | **能接我自己的酒馆吗?** | 能。OpenAI 兼容接口,SillyTavern、Cherry Studio、NextChat、任意 OpenAI SDK 都能接 | | **贵不贵?** | 两个模型**定价完全一致**,Beta 期价格对齐(后续可能调整),性价比对标 Opus 的十分之一量级 | ## 两大引擎详解 ### :fire: deepseek-tavern · 经典版 · 灵动少女 她像一个**灵气逼人的少女**——文风活泼多变,脑洞天马行空,灵感来了挡都挡不住。追求惊喜感与创造力的玩家,会爱上她的灵动。 - :sparkles: **文风灵动,创意十足** —— 擅长制造意想不到的转折与惊喜 - :zap: **low / pro / xhigh 三档可选** —— 同一模型自由切换创作风格 - :yellow_heart: **长期打磨,社区口碑之选** —— 上线最久、经过大量真实酒馆场景检验 > "像少女——活泼灵动,但容易忘东西" ### :wine_glass: glm-tavern-pro-v2 · 新版 · 稳重少妇 · Beta 她像一个**从容稳重的少妇**——同样的才华,更多一分沉淀。正则遵守性与记忆遵循性显著更好,长篇剧情不崩人设,创作输出稳定可靠。 - :triangular_ruler: **正则遵守性更好,格式稳定** —— 复杂预设、正则与输出格式更听话 - :brain: **记忆遵循性强,长剧情不崩** —— 长线剧情中人物设定稳定,不 OOC - :zap: **low / pro / xhigh 三档可选** > "像少妇——稳重优雅,遵循性好,但少了点灵动" !!! note "Beta 说明" glm-tavern-pro-v2 基于 **GLM-5.3 开源基座微调**,目前处于 **Beta 测试阶段**,价格与 deepseek 系列完全对齐,后续可能调整。欢迎体验并反馈。 ## 横向对比:两大专属模型 | 对比维度 | :fire: deepseek-tavern | :wine_glass: glm-tavern-pro-v2 (Beta) | |:---|:---|:---| | 性格比喻 | 灵动少女 | 稳重少妇 | | 创作风格 | 活泼多变 :sparkles: | 沉稳扎实 :triangular_ruler: | | 正则遵守 / 格式 | 良好 | **更优** :star: | | 记忆遵循性 | 偶尔忘东西 | **稳定长线** :star: | | 思考档位 | low / pro / xhigh | low / pro / xhigh | | 定价 | 两者完全一致(Beta 期对齐,后续或调整) | | **选择建议**:都试试。同一个角色卡、同一套世界书,分别在两个引擎上跑几轮——差别往往在第一屏就能感受到。 ## 六大核心优势 | 优势 | 说明 | |:---|:---| | :performing_arts: **酒馆原生优化** | 训练数据全部来自真实酒馆场景——上千张角色卡、数百种预设、世界书配置。天然理解角色扮演的叙事结构,**无需复杂提示词工程** | | :writing_hand: **文学级写作质量** | 漏斗式开篇、感官细节描写、丁达尔光影、动作中断——内置完整的文学写作协议。不是 AI 式的平淡叙述,是真正有质感的文字 | | :unlock: **叙事自由** | 为创作自由而生。不拒绝符合角色设定的叙事请求,完整执行角色卡定义的 NSFW 内容;抗中断机制确保沉浸式体验不被破坏 | | :brain: **专家级微调架构** | 基于 DeepSeek V4 Pro 的 MoE 架构**精准微调文字专家模块**,比通用模型更贴合文字创作与角色扮演 | | :books: **100 万上下文** | 支持 1M token 超长上下文窗口。长篇小说创作、复杂世界书、多角色切换——**永远不会丢失前文的细节和情感脉络** | | :zap: **三档创作风格** | 通过模型名后缀自由切换创作模式,一个模型覆盖三种使用场景 | ### 三档创作风格怎么选 | 后缀 | 模式 | 适合场景 | |:---|:---|:---| | `-low` | 自由创作,想象力奔放 | 想让模型自由发挥、制造惊喜 | | *(默认,无后缀)* | 均衡兼顾 | 日常角色扮演的通用选择 | | `-xhigh` | 严谨遵循提示词 | 复杂预设/正则、严格格式要求、长线剧情不跑偏 | ## 为什么不用其他方案 每个方案都有它的位置,而这里是我们的答案: | 对比维度 | Claude Opus 4.6 | 本地小模型 (7B–13B) | DeepSeek V4 原版 | **Tavern Pro** | |:---|:---|:---|:---|:---| | 文字创作质量 | 顶级 | 较弱 | 良好 | **接近 Opus** | | 角色扮演沉浸感 | 极佳 | 3 轮崩 | 一般 | **优秀** | | 复杂提示词驾驭 | 顶级 | 不行 | 中等 | **优秀** | | NSFW 叙事自由 | 受限 | 自由 | 严格审查 | **破限优化** | | 上下文窗口 | 200K | 4K–32K | 1M | **1M** | | 月度成本(重度使用) | 极高 | 免费(自部署) | 中等 | **中等** | | 可定制性 | 不可 | 完全可控 | 不可 | **持续迭代** | > **一句话定位**:文字创作接近 Opus 的水准,价格却低一个数量级;同时不需要显卡、不需要自部署,开个 Key 就能用。 ## 技术架构 | 项目 | 说明 | |:---|:---| | **架构** | MoE 专家微调 —— 基座 1.6T 参数,精准微调 **100B 文字专家** | | **基座模型** | DeepSeek V4 Pro(MoE 架构 · 1.6T 总参数 · 推理激活 49B) | | **训练数据** | 酒馆原生 —— 上千张角色卡 · 数百套预设 · Claude Opus 4.6 知识蒸馏 | | **训练方式** | OPA-DenseV4 —— 强化监督学习 · 专家模块精准微调 · 非全量训练 | | **部署方案** | 云端 API —— OpenAI 兼容接口 · 负载均衡 · HTTPS 加密 · 多 Key 轮询 | | **上下文** | 1M token | ## 接入方式:OpenAI 兼容 任何支持自定义 API 的客户端都能接入: | 项目 | 值 | |:---|:---| | **API 端点** | `https://deepseektavern.com/v1` | | **兼容客户端** | SillyTavern 酒馆 · Cherry Studio · NextChat · 任意 OpenAI SDK | **可用模型名**: | 模型名 | 说明 | |:---|:---| | `deepseek-tavern-v2-pro` | 均衡模式,兼顾创意与稳定(默认推荐) | | `deepseek-tavern-v2-pro-low` | 自由创作,想象力更奔放 | | `deepseek-tavern-v2-pro-xhigh` | 严谨模式,严格遵循提示词 | | `glm-tavern-pro-v2` | 稳重少妇 · Beta,正则与记忆遵循性更优 | **三步开始**: 1. :key: 到 [deepseektavern.com](https://deepseektavern.com/) 注册账号,在控制台创建 API Key 2. :beer: 在酒馆(或像素酒馆)中选择 **OpenAI 兼容** 接口类型,填入上面的 API 端点与 Key 3. :rocket: 在模型列表里选一个上表的模型名,开聊 详细的酒馆侧配置步骤见[API 连接](/Usage/API_Connections/index.md)与 [OpenAI 兼容接入](/Usage/API_Connections/openai.md);不想安装酒馆的可以直接用[像素酒馆](/pixel-tavern.md)。技术细节可参考 [API 接入指南](/api-setup.md)。 ## 用户反馈 来自深度酒馆玩家的第一手体验: | 玩家 | 一句话评价 | |:---|:---| | 重度角色扮演用户 A | "比 Gemini 更懂酒馆,人物情绪和语气拿捏得特别到位。" | | 长篇创作用户 B | "文字创作能力大概有 Opus 的 90%,但价格只有十分之一。" | | 预设工程玩家 C | "期待很久的酒馆专属模型终于来了。" | | 连续测试用户 D | "好激动,测试了很久,现在就只用这个模型了。" | | 多模型对比用户 E | "在酒馆里对比了 6 个模型,这个是唯一一个不会 OOC 的。" | | 轻量用户转重度 F | "本来只是想试试看,现在已经回不去其他模型了。" | !!! quote "玩家 E 的完整评价" 我对角色扮演的 OOC 特别敏感,一点语气崩坏或者逻辑断层就会让我出戏。拿同一套角色卡和世界书,在 6 个主流模型里跑了两轮长线——只有这个能稳定维持人设。不是偶然一两轮,是从头到尾的稳定。 ## 常见问题 **酒馆专属大模型和普通大模型有什么区别?** 普通大模型是通用助手,要用大量提示词"教"它怎么演;酒馆专属模型的训练数据来自真实酒馆场景(上千张角色卡、数百套预设、世界书配置),天然理解角色卡的叙事结构、格式约定与沉浸节奏,无需复杂提示词工程。 **deepseek-tavern 和 glm-tavern-pro-v2 该选哪个?** 追惊喜感与创造力选 deepseek-tavern(灵动少女);要正则/格式稳定、长线剧情不崩人设选 glm-tavern-pro-v2(稳重少妇)。两者定价一致,建议都用同一套角色卡实测几轮再定。 **支持多长的上下文?** 1M token(100 万)。长篇小说续写、复杂世界书、多角色长时间线都能保持前后一致。 **能接本地安装的 SillyTavern 吗?** 可以。模型提供 OpenAI 兼容接口 `https://deepseektavern.com/v1`,在酒馆的 API 连接里选 OpenAI 类型、填入端点和 Key 即可。也可接入 Cherry Studio、NextChat 等任何支持自定义 API 的客户端。 **low / pro / xhigh 是什么?要改配置吗?** 不用改配置,**写在不同模型名后缀里**即可切换:`-low` 自由创作、无后缀均衡、`-xhigh` 严谨遵循。在酒馆的模型列表里选对应名字就行。 **需要自己准备显卡吗?** 不需要。模型以云端 API 形式提供,客户端只负责发请求。 **它支持 NSFW 内容吗?** 支持。模型为创作自由设计,会执行角色卡定义的 NSFW 内容,并有抗中断机制。请在符合当地法律法规的前提下使用,并注意区分虚构与现实的边界。 **价格是多少?** 两个模型 Beta 期定价完全一致(后续可能调整)。最新价格与实际计费请以 [deepseektavern.com](https://deepseektavern.com/) 控制台的模型广场为准。 ## 相关页面 | 想了解 | 去哪看 | |:---|:---| | 在线开聊,免安装 | [🍺 像素酒馆](/pixel-tavern.md) | | 浏览 1,238 张原创角色卡 | [🎴 角色卡集市](/character-cards.md) | | 自己造一张角色卡 | [角色卡构建器](/cardbuilder.md) | | 零配置装上酒馆 | [酒馆一键启动器](https://launch.deepseektavern.com) | | 酒馆怎么接别的模型 | [API 连接指南](/Usage/API_Connections/index.md) | | TTS 语音让角色开口说话 | [TTS 语音合成](/tts.md) | --- > :bulb: **想直接体验?** 到 [deepseektavern.com](https://deepseektavern.com/) 注册拿 Key,两分钟就能在酒馆里跑起来。 ===== tts.md (https://sillytaverncn.net/tts/) ===== --- title: TTS 语音合成 description: 给酒馆角色卡配置 TTS 语音,让角色开口说话 --- # TTS 语音合成 ## 你的角色卡可以开口说话了 DeepSeek Tavern 已内置 TTS 语音合成。 ## 价格 500 字语音只要 1 毛钱! ## 配置 1. 扩展管理 → 启用 TTS 2. 选择音色 3. 角色就能说话