前言¶
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}} 模板變量。