前言¶
在 DeepSeek Harness(DSH)里,部署侧写的 system prompt 属于配置与组装逻辑,文档也写明:没有面向终端用户的「随时改 prompt」接口。dsh-system-prompt 行上的部署人格,以及 preset 里的 dsh-persona,通常都要在会话启动前定好;会话跑起来之后想换一套说话风格或整段替换 system prompt,往往只能停进程、改配置、再开一轮。
下面介绍社区插件 dsh-persona-switch(维护者 sorbitol25,npm 包名 dsh-persona-switch)。它在不 patch 核心的前提下,用 Cordis 插件在每次组装 system prompt 时读取当前选中的人格文件,并支持 TUI、Web UI、headless 在会话内切换,属于目录分类「趣味换装」一类的能力扩展。社区插件目录见 SkillHub 条目,源码与说明在 GitHub。
这是什么¶
dsh-persona-switch 是面向 DSH 的 live persona switcher:把人格定义放在 $DSH_HOME/personas/*.md,通过斜杠命令或模型工具 persona_switch 在运行中的会话里切换,不必重启 DSH。包内自带示例人格 jb 等种子文件;更长的变体(例如 README 提到的 jb_full) deliberately 不在仓库内,自定义人格由用户目录管理。
许可证为 MIT;package.json 当前版本为 0.1.3。README 标明已在 dsh 0.2.0-rc.2 与 0.2.1-rc.1 上做过验证。Node 引擎要求为 ^22.19 || >=24。
为什么需要插件而不是只改配置¶
DSH 部署人格挂在 system-prompt 的某一行配置上,且不能在会话存活期间通过官方 API 切换。本插件注册一个名为 persona-switch:persona 的 section,其 text 为 provider 函数,每一轮组装时调用 activeText(),而不是启动时写死;切换时会 dispose 并重新注册该 section,发出 system-prompt/change,下一轮按新人格组装。
complete 控制人格是否「独占」整段 system prompt:true 时人格即全部 system 内容;false 时人格落在 deployment-persona 前缀槽位,并保留 DSH 自带 guidance。README 中的 test/capture-prompt.mjs 用本地 mock(DEEPSEEK_BASE_URL)量化了 off、jb+complete: true、jb+complete: false 三种状态下 agent-turn system message 字节差异,可作为行为依据。
核心功能¶
-
斜杠命令:
/persona查看当前人格与名单;/persona list同义;/persona <name>切换(name对应personas/<name>.md);/persona off停止覆盖 system prompt;/persona reload在编辑文件后重新扫描目录;/persona complete on|off|auto调整 complete 行为。 -
模型工具:注册
persona_switch,模型可在对话中发起切换(README 示例为自然语言请求切换)。 -
人格文件:
$DSH_HOME/personas/*.md,首次运行从包内personas/种子复制,之后由用户维护。可选 YAML front-matter:title、complete(默认false)、suffix。 -
内置种子(README 表格):
jb(约 8 KB,complete: true,示例 JB 人格)、terse(约 0.5 KB,非 complete 示例)、_selftest(约 0.3 KB,complete: true,仅回答BANANA,用于验证接线)。 -
状态与脚本:
$DSH_HOME/persona-switch.json记录{ "active": "...", "complete": true|null };$DSH_HOME/persona-switch.log记录注册与失败原因。状态按$DSH_HOME部署级共享,TUI 里切换后,同机的 headless 也会读到同一 active。 -
插件配置(
cordis.patch.yml):maxPersonaBytes(默认 400000,0 表示不截断)、tool(是否注册persona_switch,默认true)。
安装与启用¶
每个 DSH profile 需单独安装一行;dsh plugin add 会按包声明的 dsh.bundle.patch 写入 dsh.profile.bundles,一般无需手改 bundle。安装后重启该 profile(或新启动)即可使用 /persona。
从 npm 安装(README 原文,示例为 PowerShell):
dsh plugin --profile web add dsh-persona-switch
dsh plugin --profile dsh-tui add dsh-persona-switch
dsh plugin --profile headless add dsh-persona-switch
若需固定版本,可 pin,例如 dsh-persona-switch@0.1.2(README 说明 plain add 会解析 latest,pnpm packument 偶发陈旧时可 pin)。
本地开发依赖(file: 为符号链接,改代码后下次启动 dsh 生效):
dsh plugin --profile web add file:C:/path/to/dsh-persona-switch
Electron 桌面版:desktop profile 由应用独占,dsh plugin --profile desktop 会拒绝;需按 README 使用 scripts/install-desktop.ps1 或手工安装,并完全退出托盘后再启动。应用更新若重写 ~/.dsh/profiles/desktop/package.json,需重新执行安装脚本。
升级与卸载:
dsh plugin --profile web add dsh-persona-switch@0.1.2
dsh plugin --profile web remove dsh-persona-switch
卸载不会删除 $DSH_HOME/personas/*.md 中你的人格文件。
典型用法¶
在会话里切换:
/persona # 当前人格 + 名单
/persona jb # 切换到 jb.md
/persona off # 关闭覆盖
/persona reload # 编辑 $DSH_HOME/personas 后刷新
新增自定义人格:在 $DSH_HOME/personas/ 放入 my-style.md,执行 /persona reload,再 /persona my-style。
headless 脚本(README 示例,状态文件与 TUI 共用):
'{ "active": "jb" }' | Set-Content "$env:USERPROFILE\.dsh\persona-switch.json"
dsh headless "..."
自测(仓库内,不访问真实模型):
npm test
node test/capture-prompt.mjs --persona _selftest
node test/capture-prompt.mjs --persona off
适用场景与注意¶
适合需要在同一 DSH 部署上快速试验不同 system prompt 人格、或在 TUI/Web/headless 之间保持一致 active 的开发者。complete: true 会拿人格替换整段 harness identity 与 guidance,行为差异大,切换前建议用 capture-prompt 或 mock 看清楚发出去的 system message。
插件以当前 dsh 进程的权限运行;安装前请自行阅读源码与 MIT 许可证,并确认人格 .md 内容来源可信。DSH 生态强调「一切皆插件」;SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系,本文事实均来自上述 GitHub README 与 package.json。
结尾¶
dsh-persona-switch 把人格文件、运行中切换和 deployment 级状态串成一条可脚本化的路径,补上了「会话已开、仍要换 system prompt 人格」这一缺口。进一步了解可打开 SkillHub 插件页 与 GitHub 仓库。