dsh-prompt-persona:在设置页编辑 DSH 系统提示词

前言

DeepSeek Harness(DSH)在每次对话前会动态组装系统提示词,其中 deployment:persona 是唯一一段由配置或部署作者撰写的片段(order 0)。默认做法是在 settings.yamlcordis.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
       ▼
完整系统提示词(每步动态组装)
  1. 宿主插件(lib/index.js)注册 settings namespace prompt-persona,并监听全局 system-prompt/assemble waterfall;每次组装完成后,按 mode 把设置里的 persona 写入 deployment:persona section。
  2. HTTP 后端(lib/web.js)在同源挂载 /_dsh/prompt-persona/settings,提供当前提示词、预览、保存三个能力。
  3. 浏览器插件(lib/client.js)通过 settings.section slot 注入 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.jsondsh.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 会被归一化为 replacepersona 会做 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-personadeployment:persona 从配置文件里的静态文本,变成设置页里可编辑、可预览、可持久化的内容,并支持替换、追加、关闭三种注入模式与 {{model}} / {{cwd}} / {{provider}} 模板变量。

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

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

小夜