前言¶
在 DSH Tavern 里用 SillyTavern 风格预设时,常见做法是:前段拼进唯一的 system、中段塞进 foreground-frame、后段强制成 user 并与相邻 user 合并。若预设里本身写了 system / user / assistant 分工(例如中段用 assistant 做预填、后段用 user 做指令),默认组装会把角色压扁,和作者在 ST 里的设计不一致。
下面介绍的 dsh-tavern-preset-roles(维护者 Lindemellis)只做一件事:在游玩请求发出前,按预设条目自带的 role 改写消息结构与位置;预设的导入、开关、前中后排序、应用到本局仍全部走 DSH Tavern 自带的「预设库」。
这是什么¶
- 名称:
dsh-tavern-preset-roles(社区目录:SkillHub 插件页) - 源码:GitHub - Lindemellis/dsh-tavern-preset-roles
- 分类:联网工具(DSH 插件生态中的社区条目;目录站与 DeepSeek / 幻方无官方从属关系)
- 版本(package.json):0.1.0,MIT 许可证
插件通过 cordis.patch.yml 挂载为 DSH bundle,不改 dsh-tavern 源码,但在请求链上依赖其内部标记与模块;dsh-tavern 大版本变更后若结构对不上,插件会尽量原样放行,避免拖垮酒馆本身。
核心行为:相对 DSH 默认组装的差异¶
| 段 | DSH 原行为 | 本插件 |
|---|---|---|
| 前段 | 拼进唯一的 system 消息 | 每条单独成消息,用条目 role;DSH 自己的人物卡 / 世界书等 system 材料放在其后(由 systemPosition 控制) |
| 中段 | 塞进本轮 foreground-frame 的写作规则 | 从 frame 里剪出,按条目 injection_depth 插进对话,用条目 role |
| 后段 | 强制 user,并与相邻 user 合并 | 剪出后按顺序追加在末尾,用条目 role(assistant 即预填) |
配置(cordis.patch.yml)¶
在 bundle 的 patch 配置里可调:
front/middle/back:某段设为false则该段保持 DSH 原样systemPosition:after-front(默认)或firstdebug:在 DSH 日志里打印每次改写了几条
改了插件代码或 cordis.patch.yml 之后需要重启 DSH Tavern;只改前端(lib/client.js)时按 Ctrl+R 刷新即可。
不改写、原样放行的情况¶
- 非游玩请求(摘要、后台结算等带
purpose的请求)、silly 对话、卡片工作台 - 旧存储格式的对话(
chats/<id>/snapshots/) - 文本对不上(例如 DSH 升级改了组装方式):日志里会有提示,请求照常发送
安装与启用¶
README 写明已在 DSH Tavern 2.5.0(DSH 0.1.5-rc.2,Windows 桌面版)上使用过。下面 <DSH Tavern> 指安装目录(含 DSH Tavern.exe 与 data 文件夹)。插件目录建议放在安装目录之外,升级时不会被清掉。
- 将本仓库放到 DSH Tavern 安装目录之外的任意位置,例如
D:\dsh-plugins\dsh-tavern-preset-roles(README 示例路径)。 - 关闭 DSH Tavern,编辑
<DSH Tavern>\data\harness\profiles\tavern\package.json:
- 在dependencies增加一行(路径换成你的,正斜杠):
"dsh-tavern-preset-roles": "link:D:/dsh-plugins/dsh-tavern-preset-roles"
- 在
dsh.profile.bundles数组末尾加上"dsh-tavern-preset-roles"。
3. 建立目录联结(PowerShell):
New-Item -ItemType Junction -Path "<DSH Tavern>\data\harness\profiles\tavern\node_modules\dsh-tavern-preset-roles" -Target "D:\dsh-plugins\dsh-tavern-preset-roles"
- 启动 DSH Tavern。
DSH Tavern 升级时会保留你自己加的 bundle 和依赖。卸载:删掉 package.json 里上述两处与 junction,再重启。
本任务要求不以 dsh plugin add github:owner/repo 一类命令代替上述流程;请以 README 为准。
典型用法¶
- 在 DSH Tavern 中照常使用「预设库」:导入 SillyTavern 预设、勾选条目、排序前 / 中 / 后段并应用到本局。
- 启用本 bundle 后发送游玩请求:插件会在发出前按表格中的规则改写角色与插入深度;若某段在配置里设为
false,该段仍走 DSH 默认逻辑。 - 需要核对是否生效时,将
debug打开,在 DSH 日志中查看每次改写了多少条。
无需单独 API;行为完全挂在现有 Tavern 预设与对话流上。
适用场景与注意¶
适合谁:已经在 DSH Tavern 里用 ST 预设,且依赖条目的 role、injection_depth 或后段 assistant 预填;希望与 SillyTavern 侧设计对齐,又不想换一套预设管理流程的开发者或重度游玩用户。
接口与适配器限制(README 已知限制):
- DeepSeek 接口原样保留中间位置的 system 消息。
- 走 pi-ai 的服务商(Gemini、Claude、OpenAI 等)通常只认开头一条 system,后面的 system 会被适配器转成 user。
依赖与风险:插件依赖 dsh-tavern 内部结构,包括但不限于请求标记 dsh-tavern.request-handled、@deepseek-ai/dsh-system-prompt、foreground-frame,以及 lib/domain/runtime-presets.js、native-conversation-storage.js。安装前应在 GitHub 阅读源码与 MIT 许可证;插件以当前 DSH 进程权限运行,只安装你信任的来源。
遇到问题可在仓库开 issue,并注明 DSH Tavern 版本。
结尾¶
dsh-tavern-preset-roles 把「预设库」的管理留给 DSH Tavern,只在游玩请求发出前按条目 role 重组前 / 中 / 后三段,用来对齐 SillyTavern 预设语义。目录页:https://www.skillhub.cn/plugins/Lindemellis/dsh-tavern-preset-roles;源码与安装细节:https://github.com/Lindemellis/dsh-tavern-preset-roles。