dsh-preset-bridge:把 SillyTavern 預設與角色卡接進 DSH 普通會話

前言

DeepSeek Harness(DSH)的普通會話裏,系統提示通常靠手寫 AGENTS.md 或整段粘貼來維持文風與敘事規則。若你已經在 SillyTavern(ST)裏攢了 chat-completion 預設 JSON、PNG 角色卡,換到 DSH 後往往只能「全量複製、整段刪改」,按場景切換、按塊臨時關閉某一條規則也沒有現成入口。

下面介紹社區插件 dsh-preset-bridge(維護者 911319534,分類:客戶端)。它把 ST 的預設塊與角色卡接到 DSH 的普通會話,用浮動面板做總開關、逐塊開關與編輯,並按會話分別保存配置。

說明:README 寫明本插件由 DeepSeek V4.1(deepseek-flash)生成,僅在單臺 Windows 上的 DSH Desktop 實例做過測試,應視爲實驗品。DeepSeek Harness 生態以「一切皆插件」爲思路;插件目錄站 skillhub.cn 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。

這是什麼

dsh-preset-bridge(包名 @local/preset-bridge,當前版本 0.2.0,MIT)做三件事:預設按塊存儲與開關、角色卡與「我的設定」注入、一個總開關整體啓停整套注入。ST 裏那套「前端 + 正則美化」在 DSH 中不存在,本插件用宿主側的 systemPrompt.section 拼裝文本,並用獨立 HTTP 路由 + 注入到 index.html 的浮動面板管理狀態。

核心功能

預設

  1. 導入:讀取 ST 的 chat-completion 預設 JSON(prompts + prompt_order)。
  2. 逐塊開關:每塊一個勾選框,默認與預設裏 prompt_order 一致。
  3. 逐塊編輯:可改單塊內容;改過的塊名稱後帶 *。
  4. 恢復默認:單塊恢復,或刪除整個預設後重新導入。
  5. 順序:按 prompt_order 拼接;多組時按 ST 規則選 100001 → 100000 → 首個非空組。

角色卡

  • 支持 PNG(tEXt/iTXt 中的 chara)以及 chara_card_v2/v3 JSON。
  • 選中一張卡時,卡面描述注入在最前面;不選則不注入。
  • 組裝後的卡面文本可編輯,「恢復默認」回到原始字段;刪除會移除文件與覆蓋層。

我的設定與基礎角色

我的設定表示「你是誰」:一個稱呼 + 一段人設,注入在角色卡之後、預設塊之前。

基礎角色(default-role.md)在沒有角色卡時作爲兜底身份聲明,默認內容爲「你是一個大語言模型,不是某個角色」,用於避免模型順着預設把自己演成具體人物。可編輯、可一鍵恢復默認。

總開關與可選聯動

一個按鈕可關閉整套(預設 + 卡 + 人設 + 基礎角色)。關閉時拼裝函數返回空字符串,對應 section 不再注入。

可選:打開總開關時自動停用 dsh-fish-memory,關閉時僅恢復「由本插件那次自動關掉的」狀態,你手動關的不動。

注入順序與宏

拼裝優先級(衝突時以前者爲準):用戶當前明確指令 > 我的設定 > 角色卡 > 預設各塊。

大致結構:

[## 場景預設:xxx(僅在啓用時)]
### 角色設定(卡名 / 基礎角色)
### 用戶設定(稱呼)
### 預設的各個塊…

宏處理(節選):

宏 處理
{{user}} 替換爲「我的設定」裏的稱呼
{{char}} 替換爲「角色」
{{persona}} 替換爲人設文本
{{lastMessage}} 刪除
其他 {{...}} 原樣保留

純宏塊與 ST 內置佔位塊(如 charDesc、scenario)在 DSH 無對應字段時會整塊丟棄。

宿主註冊 section 時必須設置 interpolate: false,否則 ST 預設裏的 {{user}} 等會觸發 DSH 嚴格插值並報錯,導致整輪對話失敗(README 中記爲已修復項)。

按會話獨立

配置按 context.agent.session(形如 session-<uuid>)分別存儲,寫入隻影響當前會話覆蓋,不動其他會話與默認模板。面板通過旁觀 fetch / XHR / WebSocket 請求體識別 session- 前綴的 id;換會話時面板收起並恢復該會話上次的開關。若無法識別當前對話,界面會以黃字提示「設置會寫入默認」,避免誤以爲是按會話而實際全局共享。

數據目錄(默認):

~/.dsh/preset-bridge/
  config.json        # { defaults, sessions }
  overrides.json
  presets/
  cards/
  default-role.md
  probe.log

安裝與啓用

插件以 link 安裝 指向本地源碼目錄,profile 裏是 junction;不要刪除源碼目錄,否則插件失效。安裝前請自行審閱 GitHub 倉庫 源碼與 MIT 許可證;插件在 DSH 進程權限下運行。

先把倉庫放到本機,再在終端執行(路徑替換爲你的絕對路徑):

dsh plugin --profile desktop add <本倉庫絕對路徑>

亦可用 DSH 插件管理器指向同一本地目錄。宿主側 index.js 在 DSH 啓動時加載,改完後需重啓 DSH;面板腳本 ui.js 按請求讀取,改完刷新頁面即可生效。

卸載(數據目錄保留,重裝後設置仍在):

dsh plugin --profile desktop remove @local/preset-bridge

典型用法

  1. 完成安裝並重啓 DSH,打開普通會話頁面;瀏覽器加載 GET /preset-bridge/ui.js 後出現浮動面板。
  2. 通過 POST /preset-bridge/import 或面板操作導入 ST 預設 JSON;按需勾選塊、編輯內容。
  3. 在角色卡區域導入 PNG 或 JSON,選中要用的卡;在「我的設定」填寫稱呼與人設。
  4. 打開總開關後發送消息;可用 GET /preset-bridge/preview 查看當前實際會注入的全文。
  5. 切換側邊欄其他對話時,確認面板頂部作用域欄顯示「會話:… · 隻影響這個對話」;若出現「未能識別當前對話」,需注意此時寫入的是默認模板。

面板主要 HTTP 路由包括:GET/POST /preset-bridge/state、POST /preset-bridge/block、POST /preset-bridge/import、GET/POST /preset-bridge/card、GET/POST /preset-bridge/role 等,均支持通過 ?sid= 或 sessionId 指定會話。

適用場景與注意

適合:已在 ST 導出預設與角色卡、希望在 DSH 普通會話裏按塊開關文風規則、按對話保存不同組合的用戶。

與 ST 相比做不到或行爲不同(README 原文):

  • 無世界書(lorebook)、無正則美化/標籤渲染、無 assistant 預填、採樣參數仍由 DSH 模型配置決定、無角色卡 first_mes 自動開場。
  • ST 的 {{// 註釋 }} 不會特殊處理;預設裏依賴 ST persona 的「用戶設定」佔位塊會被丟棄。

已知風險:README 記錄過全局 DOM MutationObserver 導致頁面啓動卡死,現默認關閉 Unicode 解碼;若手動 localStorage.setItem('pb-decode', '1') 後刷新,可能再次變卡。UI 未走 DSH client 模塊系統(測試機上加載失敗),而是 webServer.tapIndex 注入腳本。

結尾

dsh-preset-bridge 把 ST 預設的「分塊存儲、分塊開關、分塊編輯」搬到 DSH 普通會話,並補上角色卡、人設與按會話配置,減少在 AGENTS.md 裏反覆整段粘貼的成本。使用前請接受其單機測試與 AI 生成代碼的定位,出問題可先查倉庫 README 的「已知問題與血淚史」。

  • 插件目錄頁:https://www.skillhub.cn/plugins/911319534/dsh-preset-bridge
  • GitHub:https://github.com/911319534/dsh-preset-bridge
羽毛球分组比赛记分
小程序二维码

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

小夜