前言¶
在 DSH(DeepSeek Harness)里做问答或 agent 开发时,系统提示词往往既要跟工作区里的 SOUL.md 对齐,又要在不同任务之间切换——翻译、润色、代码生成各有一套话术。纯靠改文件或重开会话成本高;只靠全局一份默认提示又难以按会话区分。dsh-soul-presets 把「一预设一文件」的管理、问答模式 composer 上的切换,以及注入时的拼装规则收成一套插件,并带管理界面与带守卫的 HTTP 路由。下面按定位、功能、安装、用法和注意事项说明。
这是什么¶
- 包名:
dsh-soul-presets(维护者 Joe-zhouman,社区目录分类为工作流) - 类型:host + client bundle(
dsh.client.platform: web),作为 web profile 外挂插件 挂在 Cordis 上,不修改 dsh 主仓packages/源码 - 当前版本:0.1.8(
package.json中private,不发布到公共 registry) - 解决的问题:在问答模式下切换、管理多套系统提示词预设;按固定字节规则拼装预设与
SOUL.md;通过 roster/select 等路由在浏览器与桌面 GUI 中使用;会话级覆盖与全局默认分层生效
社区插件目录页:https://www.skillhub.cn/plugins/Joe-zhouman/dsh-soul-presets
源码与维护说明:https://github.com/Joe-zhouman/dsh-soul-presets
核心功能¶
预设文件与目录¶
预设存放在 $DSH_HOME/soul-presets/,一预设一个 .toml 文件,文件名(去掉扩展名)即预设 id,须匹配 ^[a-z0-9][a-z0-9-]*$。不合法 id、子目录或非 .toml 文件不会出现在列表中。
每个文件至少包含显示名 preset,以及 [Prompt] 下 System/User/Assistant 中至少一项非空;可选 description、hint(仅界面展示,不进入模型可见内容)。可选 [Model] 表指定 provider 与 model(须成对),以及 reasoningEffort。
系统提示词拼装¶
选中预设后,Host 按固定顺序拼接(User 与 Assistant 须同时存在才会出现 <example> 块):
<Prompt.System 原文(trim)>
===
<example>
<user>
<Prompt.User>
</user>
<assistant>
<Prompt.Assistant>
</assistant>
</example>
<工作区 SOUL.md 原文(trim,存在且未超限时追加)>
单段拼接结果上限 64 KiB;soul-prompt.mjs 以 mode: replace 语义在每次组装时重读,切换预设或改文件后下一轮提问生效,无需重开会话或重启服务(改 profile 级配置除外)。
切换层级¶
优先级为:会话覆盖 → 全局默认 → 该行的 defaultPrompt。
- Composer 的 chip 调用
POST /plugins/soul-preset/select,body 为{session, id},选择写入$DSH_HOME/soul-presets/.selections.json(最多 500 条,最旧先淘汰)。 - 设置页表单写全局默认:自 0.1.7 起在 profile 补丁里
soul-presets条目的config.active(0.1.6 及更早为settings.yaml的soul-preset命名空间)。 - 覆盖悬空时降级到全局默认,不落到「未选」;无有效预设时退回仅
SOUL.md或defaultPrompt。
管理界面与路由¶
浏览器半区提供设置页「预设提示词」分区(新建/删除),以及问答模式下的 chip/dock。典型路由包括:
| 路由 | 作用(摘自 README) |
|---|---|
GET /plugins/soul-preset/roster |
列表、当前生效项;?session=<id> 可带会话覆盖与 overridden |
POST /plugins/soul-preset/select |
会话级选择或清除覆盖 |
select 与部分写操作在 /api 浏览器信任围栏之外,带与 roster 相同的回环 Host/Origin 守卫。0.1.5 起已移除 $id 手势,预设入口统一为问答模式系统提示词链路。
随包示例与默认模型¶
presets/ 内带 35 个通用工具型示例(翻译、润色、SQL、commit 生成等)。仅在启动时、且目录中没有任何 .toml 时自动种入;不覆盖、不删除已有文件。删光后重启会再次种入;若想保持空目录,保留一个自有 .toml 即可。
[Model] 仅在新会话建立(尚无 model/selection)或会话内通过 chip 切换预设时应用;编辑文件或改全局默认不会改动已在跑的会话模型。解析失败时切换仍成功,响应可带 modelError 说明。
安装与启用¶
前置:DSH_HOME 存在(默认 ~/.dsh),机器能访问 github.com。仓库提交预构建 lib/,从 git 安装不需要在目标机上执行 pnpm run build。
Web 部署¶
- 添加插件:
dsh plugin --profile web add "github:Joe-zhouman/dsh-soul-presets"
也可使用完整 git URL:git+https://github.com/Joe-zhouman/dsh-soul-presets.git。
- 将仓库中
deploy/soul-prompt.mjs复制到$DSH_HOME/preset-plugins/。 - 将
deploy/preset-qa.row.yml内容追加到$DSH_HOME/profiles/web/cordis.patch.yml末尾,并把其中的file:///路径改成本机soul-prompt.mjs的绝对路径。 - 重启 web 服务。
仓库提供幂等安装脚本:scripts/install.mjs(Windows 可用 install.cmd,macOS/Linux 可用 install.sh),细节见仓库 INSTALL.md。
桌面端(Electron 安装版)¶
CLI 不接受 desktop profile,需在应用内:设置 → 插件 → 添加插件,填写 https://github.com/Joe-zhouman/dsh-soul-presets.git,安装后点「立即启用」。随后同样复制 soul-prompt.mjs、修补 %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml,并完全退出后重开桌面应用。
与旧版行为的差异(0.1.7+)¶
自 0.1.7 起预设由 profile 声明行驱动,$DSH_HOME/.agent-presets/ 不再读取。已有自研 qa 预设的部署勿整段覆盖:仅在现有 soul-prompt 插件 config 中加 presets: true 即可。
插件以当前 dsh 进程权限运行;安装前应阅读仓库源码与许可证,确认路由与文件读写范围符合你的部署策略。
典型用法¶
手写一个预设¶
在 $DSH_HOME/soul-presets/ 新建 translate.toml(id 即文件名):
preset = "翻译助手"
description = "中英互译,保留术语、格式与代码块,不解释、不寒暄。"
hint = "把要翻译的段落贴进来;需要指定方向时在开头写「译成英文」或「译成中文」。"
[Prompt]
System = '''
你是翻译引擎……
'''
User = '''
Translate: the harness keeps the tree clean
'''
Assistant = '''
这套 harness 保持工作树干净
'''
保存后可通过 roster 路由看到新项,无需重启。
在界面中切换¶
- 在设置页「预设提示词」中设全局默认(写入
config.active)。 - 在问答模式 composer 用 chip 为当前会话选择预设或「跟随默认」。
- 下一条用户消息起使用新拼装的系统提示词;若预设含
[Model],切换时还会尝试切换会话模型。
适用场景与注意¶
适合:需要在同一 DSH web/桌面部署上维护多套可复用系统提示词;希望按会话临时切换人设或工具型提示,并与 SOUL.md 叠加;愿意通过 profile 补丁挂载 soul-prompt.mjs 的问答行。
注意:
- 本仓库构建依赖 dsh 检出内的 tsdown/schemastery,独立 clone 本仓无法直接
pnpm run build;使用者以 git 安装预构建产物即可。 - 生效除插件包外,还需要
preset-plugins与cordis.patch.yml两处改动(README 中称「生效所需的三处改动」之一部分为上述步骤)。 - 插件处理会话选择与预设文件读取;
select等写接口有 Host/Origin 守卫,反向代理或跨域部署时需与官方部署方式一致。 - 0.1.5 后勿再配置已移除的
config.expand;升级时清理 profile 中该字段。
结尾¶
dsh-soul-presets 把问答模式的系统提示词做成可管理的 .toml 预设库,用 chip 与设置页完成会话级与全局切换,并用固定拼装规则衔接 SOUL.md。若你正在 SkillHub 或其它渠道寻找 DSH 工作流类插件,可从目录页了解条目信息,在 GitHub 查看完整路由、测试与安装清单: