为 DSH Web GUI 提供 SillyTavern V2/V3 角色卡生成器、世界书生成与角色扮演聊天,支持自定义 OpenAI 兼容模型,数据全部本地保存。
- 语言
- TypeScript
- License
- MIT
- 分支
- main
安装
$ dsh plugin --profile web add dsh-portable-tavern在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程
对话式安装
帮我安装 DeepSeek Harness 插件 XCNXNXNX/dsh-portable-tavern:先查看仓库 https://github.com/XCNXNXNX/dsh-portable-tavern 确认安全性,然后执行安装命令并验证插件加载成功。
把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。
一句话定位
为 DSH Web GUI 增加一个「便携酒馆」面板:可视化填写 RPG 角色属性,一键生成 SillyTavern V2/V3 标准角色卡,再在右侧直接与该角色对话并自动补全世界书。所有数据只保存在本地浏览器,不需要额外部署服务端。
核心能力
- RPG 可视化角色卡生成:基础信息、外貌、性格五维、背景、能力、对话风格、场景七大模块按表填写后调用模型生成 SillyTavern V2 或 V3 标准卡片
- 角色扮演聊天:把生成的角色直接当成聊天对象,支持下拉切换当前 DSH 已配置的模型或自定义 OpenAI 兼容接口
- 自定义模型接入:在设置里填入第三方接口地址 / API Key / 模型名(API Key 仅存本浏览器),可一键测试连接是否通畅
- 世界书生成与补全:根据角色设定或已生成的角色卡,让模型生成配套的世界书条目,支持导入现有 JSON 世界书
- 角色卡导入导出:JSON 文件以及带 chara 元的 PNG(V2 隐藏字段)双向互通,方便在 SillyTavern 本体、酒馆机器人之间共享
- 本地化与个性化:角色库、模板、对话记录自动保存到 localStorage;面板宽度、主题色、背景图、本地音乐播放列表可按喜好调整
技术实现
- 语言: TypeScript(strict,ES2022,react-jsx)
- 关键依赖: react 18(UI 渲染)、@deepseek-ai/cordis(插件注册)、@deepseek-ai/dsh-host-webserver(HTTP 路由宿主)、@deepseek-ai/dsh-llm(LLM 流式调用)
- 架构模式: 标准双面 DSH 插件 — Node 端通过 cordis 注入 webServer + llm 服务并注册
/api/dsh-portable-tavern/*路由;浏览器端通过dsh.client清单与官方 slots 服务挂载到shell.overlay(浮动面板)和settings.section(设置页入口) - 入口文件: Node 端
src/index.ts,浏览器端src/client/index.ts,由 esbuild 打包为lib/index.js(ESM)和lib/client.js(CJS 单文件),TypeScript 通过tsc --emitDeclarationOnly输出类型声明
适用场景
想让 DSH 也能像 SillyTavern 一样「养角色」却不想再装一个本地酒馆服务的用户:只需要在浏览器里点几下,就能拿到符合 V2/V3 规范的卡片、配套世界书,并立即与该角色开聊;如果 DSH 默认模型不够用,也可以临时切到自己已有的 OpenAI 兼容接口跑聊天。
前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 0.1.0-rc.8+ | peerDependencies 声明 @deepseek-ai/dsh-* 全套官方 SDK |
| Node.js | >=22.0.0 | 构建目标为 node22;运行时由宿主 DSH 提供 |
| 平台 | 跨平台 | 插件本身无原生依赖,浏览器端需支持现代 Web API(localStorage、IndexedDB、PointerEvent) |
| 原生模块 | 无 | 仅依赖官方 JavaScript/TypeScript SDK |
安装方式
dsh plugin --profile web add github:XCNXNXNX/dsh-portable-tavern
配置项
本插件无需在 DSH 配置文件中声明任何参数,所有设置通过面板内的「设置」页操作;下面是用户在 UI 里能调节的项。
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| 自定义接口地址 | 文本 | 第三方 OpenAI 兼容接口的基础 URL,自动拼接 /chat/completions | 空 |
| 自定义 API Key | 文本(密码框) | 仅保存在当前浏览器,不写入任何日志或服务端 | 空 |
| 自定义模型名 | 文本 | 上游接口支持的模型标识 | 空 |
| 全局系统提示词 | 多行文本 | 每次对话前注入到角色设定之前,支持 {{char}} 与 {{user}} 占位符 | 空 |
| 面板宽度 | 数值(360–820 px) | 右侧面板的宽度 | 540 px |
| 主题色 | 颜色值 | 面板强调色与悬浮按钮边框色 | #4f7cff |
| 背景图片 | 图片文件 | 面板背景图(存于 localStorage) | 空 |
| 悬浮按钮 | 开关 | 是否在 DSH 界面显示可拖动的「便携酒馆」标签 | 显示 |
| 音乐播放列表 | 音频文件 / 文件夹 | 浏览器本地顺序播放(存于 IndexedDB) | 空 |
常见问题
Q: 安装之后界面在哪?
A: 重启 DSH Web GUI 后,浏览器右侧会出现一个可拖动的「便携酒馆」悬浮标签;如果你把它拖到边缘会变成贴边的竖向标签,或者在设置里隐藏它 —— 隐藏后可以通过 DSH 设置页里的「便携酒馆」入口打开面板。
Q: 没有配置自定义接口,能直接用吗?
A: 可以。默认情况下角色卡生成、世界书生成、聊天都直接走 DSH 当前配置的模型与密钥;如果想换成自己买的第三方服务,再去「设置 → 模型接入」填入地址、API Key、模型名并点「保存并测试连接」即可。
Q: 我填的 API Key 安全吗?
A: API Key 只保存在当前浏览器的 localStorage(密码框遮蔽显示),每次请求时由浏览器附加到请求体里发给本机的 /api/dsh-portable-tavern/* 路由,再由宿主转发到上游接口;服务端不持久化、不写日志,错误信息也做了脱敏。但仍建议只在可信的本机环境使用,不要把浏览器暴露给他人。
Q: 角色卡、世界书、聊天记录存在哪里?
A: 全部存在当前浏览器的 localStorage 里(音乐文件因为体积大放在 IndexedDB),不上传任何服务器。建议定期用「导出 JSON」把喜欢的角色卡和世界书备份到磁盘 —— 卸载插件或清理浏览器数据后这些本地内容会一起丢失。
Q: 能不能在局域网或公网部署的 DSH 上用?
A: 不能。本插件的所有 /api/dsh-portable-tavern/* 路由都强制只接受来自 127.0.0.1 / ::1 的请求,并会校验浏览器的同源标记;只要 DSH Web 不是绑在本机回环地址访问,调用会被直接拒绝(HTTP 403)。这是为了防止 LLM 配额被 LAN 上的其他机器滥用。
Q: 生成的角色卡能导入到 SillyTavern 本体吗?
A: 可以。插件导出的 JSON 是标准 SillyTavern V2/V3 字符卡格式,PNG 导出则把角色卡 JSON 嵌入到 PNG 的 chara tEXt 块里 —— 直接拖进 SillyTavern 即可识别。
Q: 卸载插件后已保存的角色会丢吗?
A: 卸载插件不会主动清空浏览器 localStorage,但如果你在 DSH 的插件管理里选了「同时清理数据」或换浏览器/进入隐私模式,角色库、模板、对话记录都会看不到。建议重装前先导出 JSON 备份。
上手难度
入门 — 整个面板都是可视化表单与按钮,不需要写代码或编辑配置文件;只要在 DSH 里配置好至少一个可用模型,打开右侧面板即可生成并对话。
已知问题与限制
- 仅 loopback 可访问:
/api/dsh-portable-tavern/*全部路由在src/routes.ts:38-50强制要求请求方 IP 为127.0.0.1/::1,并且会校验Origin/Host/Sec-Fetch-Site,因此任何 LAN 或公网暴露的 DSH Web 部署都无法使用本插件(HTTP 403)。 - 数据完全本地化:角色卡、世界书、对话、模板、自定义模型 Key 全部存在浏览器 localStorage,跨设备/跨浏览器不会同步;卸载插件或清理浏览器数据即丢失。
- 必须依赖 DSH 默认 LLM 服务:插件本身不内置任何模型,至少需要在 DSH 里配置一个可用的 provider/model 才能生成角色卡或与角色对话(自定义 OpenAI 兼容接口仅在已配置完整 baseUrl/apiKey/model 后才会接管部分流程)。
- 降级模式可能生效:当默认模型开启了
max推理强度且无法被降级时,角色卡生成可能返回由本插件基于表单直接拼接的「降级卡片」,并在 UI 上明示提示(详见src/llm.ts:161-169与src/client/PortableTavern.tsx:893)。
DSH Web GUI 的「便携酒馆」插件:RPG 式 SillyTavern V2/V3 角色卡生成器 + 酒馆角色扮演聊天一体。
界面预览
| 聊天 | 角色卡设定 |
|---|---|
![]() | ![]() |
- 可视化 RPG 属性面板(七大模块)生成 SillyTavern V2/V3 角色卡
- AI 聊天(与生成的角色对话,支持下拉切换模型)
- 自定义模型接入:默认使用 DSH 当前配置的模型与密钥,也可填写自己的 OpenAI 兼容接口地址 / API Key / 模型(API Key 仅存本浏览器,测试连接一键验证)
- 对话前注入的全局系统提示词(类似 SillyTavern 的 System Prompt / Jailbreak)
- 角色卡 / 对话记录 / 世界书 / 设定本地持久化(localStorage 自动保存与恢复)
- 角色库:本地保存多个角色(含各自对话记录),一键载入 / 删除
- 自定义聊天角色头像(上传图片自动压缩,随角色卡 JSON 导出/导入)
- 世界书生成 / 补全(按人物卡)/ 导入
- 导出 / 导入角色卡(JSON 与 PNG 的 chara 内嵌数据)
- 面板宽度 / 主题色 / 背景图 / 本地音乐(文件夹顺序播放)
- 右侧悬浮标签可拖动,可贴左 / 贴右 / 浮动为圆角方形,可在设置里关闭(关闭后从 DSH 设置页进入)
独立插件,仅依赖官方 @deepseek-ai/* SDK。
安装
# npm
dsh plugin --profile web add dsh-portable-tavern
# GitHub(lib/ 已提交,无需构建授权)
dsh plugin --profile web add github:XCNXNXNX/dsh-portable-tavern
# Release tarball
dsh plugin --profile web add https://github.com/XCNXNXNX/dsh-portable-tavern/releases/download/v0.2.0/dsh-portable-tavern-0.2.0.tgz
架构
标准双面 DSH 插件:Node 半(src/index.ts)通过 webServer 注册 /api/dsh-portable-tavern 路由,
调用官方 llm 服务;浏览器半(src/client/index.ts)经 dsh.client 清单被发现,通过 slots 服务
挂载悬浮面板与设置页入口,纯 fetch 调用上述路由。
开发
pnpm install
pnpm build # esbuild 打包(node 半 lib/index.js + 浏览器半 lib/client.js)+ tsc 声明
pnpm typecheck
lib/ 提交进仓库(profile 安装无需再构建)。
挂载
本包 cordis.patch.yml 通过 dsh.bundle.patch 把插件行注入 web profile roster;
package.json 的 dsh.client 声明让浏览器半在 Web GUI 中加载。
查看使用指南 →
该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。
收录徽章
[](https://deepseek-plugin.org/plugins/XCNXNXNX/dsh-portable-tavern)把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

