前言¶
在 DeepSeek Harness(DSH)裏部署智能體時,常見需求有兩類:一是在出廠 persona 之前插入穩定的「家規」類系統提示詞;二是在每次對話請求裏,讓模型「看到」一段固定的 user/assistant 參考對話,而不把這段內容寫進會話日誌。直接在 profile 裏改 system prompt 或手工往 session 裏 append 消息,要麼動不到 persona 之前的組裝順序,要麼會污染日誌、影響 turn 編號與壓縮行爲。
下面介紹的 custom-first-control-prompt 由 WM-CODER 維護,通過部署配置完成上述兩件事:有序系統段註冊在 persona 之前,參考對話以真實交替消息前置在每個普通對話請求上,走 llm/stream 攔截、會話日誌零寫入。
這是什麼¶
@wm-coders/dsh-custom-first-control-prompt 是 DSH 的部署側提示詞前綴插件(npm 包名與 Cordis 註冊名一致)。它在插件加載時註冊系統提示詞段,並在每次普通對話請求前注入配置的 user/assistant 參考對話;靜態內容在每次請求中逐字節一致渲染,便於前綴 KV 緩存複用。當前版本爲 v0.2.3,許可證 MIT。
核心功能¶
有序系統提示詞段¶
每個啓用的 sections 條目在加載時通過 ctx.systemPrompt.section() 註冊,與 dsh-system-prompt 出廠段一樣參與組裝:變量插值、scope 遮蔽、組裝 waterfall 均適用。order 小於 0 時渲染在 persona(出廠約定 order 爲 0)之前;harness identity 約定爲 −100,工具指導爲 100–199。
參考對話注入¶
history 中配置的有序 user/assistant 對,在插件激活時一次性構建爲深凍結的 Message 對象,由 llm/stream waterfall 監聽器在每個普通對話請求上克隆請求、前置種子消息、經 ctx.llm.stream 重分發。模型側可見的序列形如:
[user] configured user text 1
[assistant] configured assistant text 1
[user] the real prompt…
種子消息只存在於請求路徑,不寫會話日誌;真實 turn 從 1 開始,壓縮不會遮蔽參考歷史,每個請求都會重新注入同一份凍結序列。
範圍過濾與面板¶
輔助調用(帶 purpose 標記,如 session-title、compaction)和無 sessionId 的手工請求直接放行;默認跳過 subagent 來源會話(includeSubagents: true 可納入)。設置頁與對話輸入框上方 dock 提供配置編輯與 LLM 監聽,用於查看注入後的真實請求——聊天 transcript 裏看不到種子消息是預期行爲。
安裝與啓用¶
從 GitHub 安裝(README 推薦,構建產物已提交):
dsh plugin --profile web add github:WM-CODER/custom-first-control-prompt
或從 npm:
dsh plugin --profile web add @wm-coders/dsh-custom-first-control-prompt
本地開發可從目錄安裝:
dsh plugin --profile web add ./path/to/custom-first-control-prompt
安裝後重啓 web 應用:
dsh --profile web
也可運行倉庫中的 restart-web.ps1 或 restart-web.sh。卸載:
dsh plugin --profile web remove @wm-coders/dsh-custom-first-control-prompt
包聲明 dsh.bundle(包內 cordis.patch.yml),dsh plugin add 對賬會激活 bundle 層並註冊核心行 custom-first-control-prompt,無需手寫 insert 行。安裝、部署與調試的阻礙與驗證方法見倉庫內 DEBUG-NOTES.zh.md、INSTALL.md、INSTALL-FULL.zh.md。
典型用法¶
在 profile 的 cordis.patch.yml 中爲本插件寫帶 id 的定向覆蓋(非 insert),或通過面板「配置編輯」保存(語義相同,只更新 custom-first-control-prompt 行,保留文件內其它條目)。配置骨架如下:
- id: custom-first-control-prompt
name: '@wm-coders/dsh-custom-first-control-prompt'
config:
sections:
- name: house-rules
order: -50
text: |
…stable system text…
history:
- user: …
assistant: …
includeSubagents: false
sections[].text 與 history 文本應保持靜態,避免時間戳等易變值——任何變化都可能從首個變化的 token 起破壞前綴複用。history 的 user/assistant 文本須非空,且不得包含保留標籤(大小寫不敏感:<user>、<assistant>、<exchange>、<custom-history 及對應閉合標籤)。
驗證注入是否生效:新建會話,提問只有注入歷史才能回答的問題,例如「重複我們最早的那條用戶消息」;模型答出配置內容即證明生效。session.history 中無種子消息屬正常。更細粒度檢查可用面板 LLM 監聽查看完整請求。
適用場景與注意¶
適合需要在部署層統一前置系統規則、並在每次請求中穩定附帶參考對話的 DSH 運營方或智能體開發者——例如全局行爲約束寫在 persona 之前,或固定一段「示範對話」引導模型格式。
使用前須知:
- 插件以當前
dsh進程權限運行,安裝前應閱讀源碼與 MIT 許可證,確認配置內容可信。 - 種子文本對模型可見,應視爲提示詞材料,不是可信側信道。
- 配置變更需重啓 web 後對新請求生效;不支持會話中段熱更新。
- Token 開銷:每個系統段與整段參考歷史在每次普通對話請求中重複出現,成本隨文本長度線性增長。
- 勿在 profile patch 中重複 insert 同 id 行:bundle 已激活後若再有遺留
- insert:同 id,可能導致 web fail-loud;可用倉庫uninstall.ps1清理殘留。 - 離線 junction 安裝未經對賬時 bundle 層不會激活,需按
install.ps1 -Offline等方式手動寫入 profile patch。
結尾¶
custom-first-control-prompt 把「persona 之前的系統段」與「請求級參考對話」收斂到一份部署配置:組裝路徑與出廠段一致,注入路徑不進日誌、每請求重注、前綴穩定。若你正在 DSH 上做多租戶或統一合規提示詞,可以把它作爲 bundle 層插件接入現有 profile。