跳到主内容

dsh-portable-tavern

20Star0Fork0Issue0Watching

为 DSH Web GUI 提供 SillyTavern V2/V3 角色卡生成器、世界书生成与角色扮演聊天,支持自定义 OpenAI 兼容模型,数据全部本地保存。

机审证据5/5方法论数据来源安装命令持续维护DSH 版本风险扫描
机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
TypeScript
License
MIT
分支
main
character-carddshdsh-pluginroleplaysillytavern

安装

命令web profile
$ 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 兼容接口跑聊天。

前置依赖与兼容性

依赖最低版本说明
DSH0.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)。

查看使用指南 →

该插件的安装步骤、关键要点、FAQ 与兼容性说明(基于已收录字段派生)。

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/XCNXNXNX/dsh-portable-tavern)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录