dsh-preset-bridge: Connecting SillyTavern Presets and Character Cards into DSH Normal Sessions

前言

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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye