dsh-tavern-preset-roles:遊玩時預設條目按自身 role 發送

前言

在 DSH Tavern 裏用 SillyTavern 風格預設時,常見做法是:前段拼進唯一的 system、中段塞進 foreground-frame、後段強制成 user 並與相鄰 user 合併。若預設裏本身寫了 system / user / assistant 分工(例如中段用 assistant 做預填、後段用 user 做指令),默認組裝會把角色壓扁,和作者在 ST 裏的設計不一致。

下面介紹的 dsh-tavern-preset-roles(維護者 Lindemellis)只做一件事:在遊玩請求發出前,按預設條目自帶的 role 改寫消息結構與位置;預設的導入、開關、前中後排序、應用到本局仍全部走 DSH Tavern 自帶的「預設庫」。

這是什麼

插件通過 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(默認)或 first
  • debug:在 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 文件夾)。插件目錄建議放在安裝目錄之外,升級時不會被清掉。

  1. 將本倉庫放到 DSH Tavern 安裝目錄之外的任意位置,例如 D:\dsh-plugins\dsh-tavern-preset-roles(README 示例路徑)。
  2. 關閉 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"
  1. 啓動 DSH Tavern。

DSH Tavern 升級時會保留你自己加的 bundle 和依賴。卸載:刪掉 package.json 裏上述兩處與 junction,再重啓。

本任務要求不以 dsh plugin add github:owner/repo 一類命令代替上述流程;請以 README 爲準。

典型用法

  1. 在 DSH Tavern 中照常使用「預設庫」:導入 SillyTavern 預設、勾選條目、排序前 / 中 / 後段並應用到本局。
  2. 啓用本 bundle 後發送遊玩請求:插件會在發出前按表格中的規則改寫角色與插入深度;若某段在配置裏設爲 false,該段仍走 DSH 默認邏輯。
  3. 需要覈對是否生效時,將 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜