前言¶
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 的浮动面板管理状态。
核心功能¶
预设¶
- 导入:读取 ST 的 chat-completion 预设 JSON(
prompts+prompt_order)。 - 逐块开关:每块一个勾选框,默认与预设里
prompt_order一致。 - 逐块编辑:可改单块内容;改过的块名称后带
*。 - 恢复默认:单块恢复,或删除整个预设后重新导入。
- 顺序:按
prompt_order拼接;多组时按 ST 规则选100001→100000→ 首个非空组。
角色卡¶
- 支持 PNG(
tEXt/iTXt中的chara)以及chara_card_v2/v3JSON。 - 选中一张卡时,卡面描述注入在最前面;不选则不注入。
- 组装后的卡面文本可编辑,「恢复默认」回到原始字段;删除会移除文件与覆盖层。
我的设定与基础角色¶
我的设定表示「你是谁」:一个称呼 + 一段人设,注入在角色卡之后、预设块之前。
基础角色(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
典型用法¶
- 完成安装并重启 DSH,打开普通会话页面;浏览器加载
GET /preset-bridge/ui.js后出现浮动面板。 - 通过
POST /preset-bridge/import或面板操作导入 ST 预设 JSON;按需勾选块、编辑内容。 - 在角色卡区域导入 PNG 或 JSON,选中要用的卡;在「我的设定」填写称呼与人设。
- 打开总开关后发送消息;可用
GET /preset-bridge/preview查看当前实际会注入的全文。 - 切换侧边栏其他对话时,确认面板顶部作用域栏显示「会话:… · 只影响这个对话」;若出现「未能识别当前对话」,需注意此时写入的是默认模板。
面板主要 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