前言¶
在 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。