dsh-soul-presets:Web Profile 下的预设提示词与工作流切换

前言

在 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 部署

  1. 添加插件:
dsh plugin --profile web add "github:Joe-zhouman/dsh-soul-presets"

也可使用完整 git URL:git+https://github.com/Joe-zhouman/dsh-soul-presets.git。

  1. 将仓库中 deploy/soul-prompt.mjs 复制到 $DSH_HOME/preset-plugins/。
  2. 将 deploy/preset-qa.row.yml 内容追加到 $DSH_HOME/profiles/web/cordis.patch.yml 末尾,并把其中的 file:/// 路径改成本机 soul-prompt.mjs 的绝对路径。
  3. 重启 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 路由看到新项,无需重启。

在界面中切换

  1. 在设置页「预设提示词」中设全局默认(写入 config.active)。
  2. 在问答模式 composer 用 chip 为当前会话选择预设或「跟随默认」。
  3. 下一条用户消息起使用新拼装的系统提示词;若预设含 [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 查看完整路由、测试与安装清单:

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

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

小夜