custom-first-control-prompt:在 persona 之前注入系統段與參考對話

前言

在 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.ps1restart-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.mdINSTALL.mdINSTALL-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[].texthistory 文本應保持靜態,避免時間戳等易變值——任何變化都可能從首個變化的 token 起破壞前綴複用。history 的 user/assistant 文本須非空,且不得包含保留標籤(大小寫不敏感:<user><assistant><exchange><custom-history 及對應閉合標籤)。

驗證注入是否生效:新建會話,提問只有注入歷史才能回答的問題,例如「重複我們最早的那條用戶消息」;模型答出配置內容即證明生效。session.history 中無種子消息屬正常。更細粒度檢查可用面板 LLM 監聽查看完整請求。

適用場景與注意

適合需要在部署層統一前置系統規則、並在每次請求中穩定附帶參考對話的 DSH 運營方或智能體開發者——例如全局行爲約束寫在 persona 之前,或固定一段「示範對話」引導模型格式。

使用前須知:

  1. 插件以當前 dsh 進程權限運行,安裝前應閱讀源碼與 MIT 許可證,確認配置內容可信。
  2. 種子文本對模型可見,應視爲提示詞材料,不是可信側信道。
  3. 配置變更需重啓 web 後對新請求生效;不支持會話中段熱更新。
  4. Token 開銷:每個系統段與整段參考歷史在每次普通對話請求中重複出現,成本隨文本長度線性增長。
  5. 勿在 profile patch 中重複 insert 同 id 行:bundle 已激活後若再有遺留 - insert: 同 id,可能導致 web fail-loud;可用倉庫 uninstall.ps1 清理殘留。
  6. 離線 junction 安裝未經對賬時 bundle 層不會激活,需按 install.ps1 -Offline 等方式手動寫入 profile patch。

結尾

custom-first-control-prompt 把「persona 之前的系統段」與「請求級參考對話」收斂到一份部署配置:組裝路徑與出廠段一致,注入路徑不進日誌、每請求重注、前綴穩定。若你正在 DSH 上做多租戶或統一合規提示詞,可以把它作爲 bundle 層插件接入現有 profile。

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

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

小夜