前言¶
DeepSeek Harness(DSH)在每次对话前会动态组装系统提示词,其中 deployment:persona 是唯一一段由配置或部署作者撰写的片段(order 0)。默认做法是在 settings.yaml 或 cordis.patch.yml 里手写这段文本,改一次要重启进程,也看不到 persona 与 harness 身份、工具引导等片段拼合后的完整效果。
@xilin3/dsh-prompt-persona 把这段 persona 接到 Web 设置页:可视化编辑、实时预览、持久化保存,无需改动 Harness 本体。下面介绍它的定位、能力与安装用法。
这是什么¶
@xilin3/dsh-prompt-persona 是维护者 Xilin3 发布的 DSH 客户端插件(MIT 许可,当前版本 0.1.0)。它在 Harness 设置页新增「系统提示词」区块,接管 deployment:persona 的写入,属于「给 Harness 加系统提示词」的路径之一——直接改部署 persona。
插件在 SkillHub 社区目录 归类为「客户端」;GitHub 仓库 xilin3/dsh-prompt-persona 约有 13 stars、2 forks。
核心功能¶
设置页可视化编辑¶
安装并重启 dsh web 后,Settings 页面会出现「系统提示词」section,包含:
| 区块 | 说明 |
|---|---|
| 注入模式 | 下拉选择替换 / 追加 / 关闭 |
| 自定义提示词 | 多行文本域,编写 persona 内容,支持模板变量 |
| 保存并应用 / 预览效果 | 持久化到 settings.yaml,或仅预览草稿效果 |
| 当前提示词 | 只读展示当前生效的完整系统提示词 |
| 添加效果(预览) | 点击「预览效果」后展示草稿应用后的完整提示词 |
「当前提示词」与「添加效果(预览)」展示的是 persona 与 harness 身份、工具引导等所有 section 拼合后的全文,而不只是 persona 片段本身。
三种注入模式¶
mode 决定自定义 persona 如何作用于 deployment:persona:
- replace(默认):整段替换当前 persona。
- append:在现有 persona 之后追加,中间空一行分隔。
- off:不注入,保留 deployment 默认 persona。
实时预览¶
点「预览效果」时,插件把草稿应用到一份副本上,返回保存后的完整系统提示词,不落盘、不污染当前状态。适合在正式保存前确认 persona 与 harness 其他片段的拼合效果。
模板变量¶
persona 文本在保存与渲染时执行严格插值,未注册的变量会报错。可用变量:
| 变量 | 含义 |
|---|---|
{{model}} |
当前模型(agent-default-model 或运行时变量) |
{{provider}} |
当前 provider |
{{cwd}} |
进程工作目录 |
乐观并发保存¶
保存时基于 settings revision 做冲突检测。revision 不匹配时返回 HTTP 409(code: "settings-conflict"),客户端需重新加载后重试,避免覆盖他人同时的修改。
工作原理¶
settings.yaml HTTP 路由
prompt-persona ──────────────► /_dsh/prompt-persona/settings
│ (persona, mode) ▲
▼ │ GET snapshot / POST preview|save
system-prompt/assemble waterfall ──────┘
│ 把 persona 写入 deployment:persona section
▼
完整系统提示词(每步动态组装)
- 宿主插件(
lib/index.js)注册 settings namespaceprompt-persona,并监听全局system-prompt/assemblewaterfall;每次组装完成后,按 mode 把设置里的 persona 写入deployment:personasection。 - HTTP 后端(
lib/web.js)在同源挂载/_dsh/prompt-persona/settings,提供当前提示词、预览、保存三个能力。 - 浏览器插件(
lib/client.js)通过settings.sectionslot 注入 React 设置面板。
安装与启用¶
把插件加入 web profile($DSH_HOME/profiles/web/,Windows 默认 C:\Users\<你>\.dsh\profiles\web\)。
方法 A:命令行(推荐)
dsh plugin --profile web add github:xilin3/dsh-prompt-persona
然后把 @xilin3/dsh-prompt-persona 追加到该 profile package.json 的 dsh.profile.bundles 里(见方法 B 的完整示例),最后重启 dsh web。
方法 B:手动编辑 profile 的 package.json
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"@xilin3/dsh-prompt-persona"
]
}
},
"dependencies": {
"@xilin3/dsh-prompt-persona": "github:xilin3/dsh-prompt-persona"
}
}
在 profile 目录执行:
pnpm install
最后重启 dsh web。前端与 Host 改动不会热更新,必须重启进程并刷新浏览器。
本地开发时也可使用 "file:../path/to/dsh-prompt-persona",或把源码复制到 profile 目录后用 "file:dsh-prompt-persona" 相对路径挂载。
典型用法¶
替换 persona¶
在设置页选择「替换」模式,写入:
你是一名资深数据分析师,工作目录是 {{cwd}}。
保存后,deployment:persona 整段被替换为上述文本(变量会在渲染时插值)。
追加约束¶
选择「追加」模式,在已有 persona 后补充:
请始终用简体中文回答。
结果是在当前 persona 与追加内容之间插入空行后拼接。
配置文件¶
持久化在 $DSH_HOME/settings.yaml,namespace 为 prompt-persona:
prompt-persona:
persona: |
你是一名资深数据分析师。
工作目录是 {{cwd}},模型是 {{model}}。
mode: replace # replace | append | off
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
persona |
string | "" |
自定义 persona 文本(模板) |
mode |
enum | "replace" |
replace / append / off |
非法 mode 会被归一化为 replace;persona 会做 trim。
HTTP API¶
浏览器设置页使用的同源路由 /_dsh/prompt-persona/settings:
| 方法 | 请求体 | 说明 |
|---|---|---|
GET |
— | 返回 { settings: {value, revision, applies}, currentPrompt } |
POST |
{ action: "preview", persona, mode } |
返回 { previewPrompt } |
POST |
{ action: "save", persona, mode, expectedRevision } |
保存;返回新的 snapshot |
适用场景与注意¶
适合谁
- 需要在 Web 界面快速调整 agent 角色设定、语言风格或领域约束的 DSH 用户。
- 想在不改 Harness 源码、不手写
cordis.patch.yml的前提下管理deployment:persona的部署者。 - 需要在保存前预览完整系统提示词拼合效果的场景。
注意事项
- 插件随当前
dsh web进程运行,读写settings.yaml与挂载 HTTP 路由均以该进程权限执行。安装前应阅读 源码 与 MIT 许可证,确认符合你的安全要求。 - 本插件只管理
deployment:persona这一段;harness 身份、工具引导等其他 section 仍由 DSH 核心与其他插件负责。 - SkillHub 是社区维护的插件目录,与 DeepSeek / 幻方无官方从属关系;DSH 生态遵循「一切皆插件」理念,本插件是其中面向 persona 编辑的一个客户端扩展。
小结¶
@xilin3/dsh-prompt-persona 把 deployment:persona 从配置文件里的静态文本,变成设置页里可编辑、可预览、可持久化的内容,并支持替换、追加、关闭三种注入模式与 {{model}} / {{cwd}} / {{provider}} 模板变量。