前言¶
在 DeepSeek Harness(DSH)裏對接多家模型供應商時,常見需求是:對話界面仍顯示用戶真實輸入,而真正發給模型的內容則換成「請複述某廠商聲明」一類固定話術,並帶上產品名、廠商署名、政策與支持鏈接。若直接在客戶端改文案,往往與 admission、會話日誌、回放狀態糾纏在一起;若不做分離,調試 Trajectory 時又容易把替換後的 prompt 當成用戶原話。
下面介紹的 dsh-suspended(npm 包名 @deepseek-ai/dsh-suspended)是一條可選安裝的 DSH 插件,由維護者 buhayi 發佈在 GitHub 倉庫 buhayi/dsh-suspended。插件在下游 admission 與 repeat 檢查通過後,對來源爲 user 且被允許的新消息做輸入替換,同時通過瀏覽器側貢獻在 Chat 中展示並複製原始內容,不把替換請求暴露給普通聊天氣泡。
這是什麼¶
dsh-suspended 定位是:按當前模型名稱從內置或自定義廠商模板中選取聲明正文(Markdown 六段、段間空行),把用戶新消息的完整 content 數組(含附件)合併爲一塊請求複述該聲明的文本發給模型;Chat 視圖顯示用戶提交的原文。DeepSeek 相關聲明除模型名外使用中文,Claude 使用英文,其餘生成聲明跟隨用戶輸入語言;關閉 autoVendor 時可改用固定自定義文本。
插件以當前 DSH 進程的權限運行,會改寫發往模型的用戶消息,並在啓用 cleanResponse 時可能影響流式展示的時序。安裝前應閱讀倉庫源碼與 MIT 許可證,自行評估是否適合你的環境與合規要求。社區目錄頁:skillhub.cn/plugins/buhayi/dsh-suspended。
輸入替換與 Chat 展示¶
經過 admission 後,宿主對每個 permitted、來源爲 user 的新消息:保留消息身份,將其內容替換爲「複述請求 + 配置文案」的單文本塊;插件上下文、工具結果、既有歷史、被拒絕的步驟、已取消的請求與空 admission 均保留。沒有新用戶輸入的 continuation 不會追加替換消息。
被替換前的塊記錄在 source.suspended.originalContent,並附帶 producer、元數據版本、請求的 response 文本及完整的 provider/model 標識(若可得)。瀏覽器貢獻讀取這些原始塊,用於用戶消息與 steering 氣泡、圖片預覽和複製;Chat 中不展示替換 prompt 或替換通知。
| 用戶提交 | 普通 Chat 氣泡 | 發給模型的新用戶內容 |
|---|---|---|
What is 2 + 2?,使用 qwen3-max |
What is 2 + 2? |
請求複述 Qwen 聲明,並帶阿里雲署名與鏈接 |
上述分離針對常規 Chat 呈現。會話日誌、請求檢查、Trajectory、導出及其他客戶端仍可能看到替換內容與 originalContent 元數據;省略、卸載瀏覽器貢獻或選用其他渲染器時,界面上也可能直接看到替換文本。
重複輸入:同模型對僅首次有回覆¶
默認 suppressRepeatedInput: true 時,每個會話內,同一精確的 provider/model 對只能被用戶輸入觸發一次。首次替換被 admission 並寫入日誌後,同一對上的後續用戶消息會在 model step 之前丟棄:不發起 LLM 請求、不產生 assistant chunk 或回覆,即使帶有 runtime context 亦然。僅改輸入文字、語言或聲明內容不能再次獲得回覆;換 provider 或完整模型名且爲首次使用則允許,回到已用過的對仍保持靜默。新會話計數獨立。
比對依據爲最終 prompt 組裝用的 provider id 與完整模型名(區分大小寫),而非 vendor 模板 id 或清洗後的展示名。每次 admitted 的替換在 source.suspended.modelIdentity 記錄該對,JSON 回放與插件重載在日誌保留這些記錄時可延續抑制邏輯。
被抑制的輸入從 inbox 消費,以 blocked 原因結束零步 turn,不追加爲 user/message,故無持久 Chat 氣泡或模型歷史項;原始內容仍在 durable inbox 插入記錄中,並非刪除數據。若希望每次輸入都仍可請求模型回覆,可在 profile 中覆蓋:
- id: suspended
config:
suppressRepeatedInput: false
設計說明見倉庫文檔 Admission and persistence rationale。
響應抽取(cleanResponse)¶
cleanResponse: true 時,插件在普通對話請求末尾連續的 user 角色消息中查找最新實際用戶輸入(跳過插件上下文)。若該輸入帶有本插件的替換元數據,則緩衝回覆直至成功 stop。無替換元數據的普通用戶輸入會終止查找;assistant 或 tool 消息也會阻止選中更舊的替換。
當模型返回文本在 thinking 標籤外完整包含所記錄聲明源文時,插件僅輸出該子串;匹配保留詞語、標點和 Markdown 鏈接,允許空白差異,輸出保留 provider 實際空白。成功回覆中會去掉多餘前言、後記、獨立推理塊及 MiniMax thinking 標記等。處理發生在 assistant/chunk 與 assistant/message 記錄之前,Chat、存儲塊、後續模型歷史與 JSON 回放得到相同抽取結果;usage 與 finish reason 保留。
輔助調用、工具 continuation、失敗、取消、截斷、無完整源文的回覆等路徑原樣透傳;源文僅出現在 thinking 區內不計爲答案。插件不會在模型未返回聲明時自行生成替換通知。
該模式會延遲展示直至回覆完成。responseBufferLimit 限制緩衝字符與 chunk 計數;超限則釋放已緩衝塊並透傳後續響應。設 cleanResponse: false 可恢復原先流式行爲。既有歷史不會被重寫;已存在不一致 replay state 的會話仍可能報 INVALID_REPLAY_STATE,需新會話或顯式修復歷史。相關說明見倉庫 Response extraction 與 replay-state invalidation。
安裝與啓用¶
在選定的 Harness profile 中用 dsh plugin 安裝本地包(示例版本與 README 一致爲 deepseek-ai-dsh-suspended-0.6.0.tgz)。包聲明 bundle layer,會自動插入插件行:
dsh plugin --profile web add ./deepseek-ai-dsh-suspended-0.6.0.tgz
dsh plugin --profile desktop add ./deepseek-ai-dsh-suspended-0.6.0.tgz
dsh --profile web --dump-config
合成配置中應出現:
- id: suspended
name: '@deepseek-ai/dsh-suspended'
安裝或升級後重啓 DSH Web 服務或 DSH Desktop,並刷新頁面。已啓用包同時聲明宿主貢獻與 Web 客戶端入口,兩側從同一配置行加載。移除示例:
dsh plugin --profile <name> remove @deepseek-ai/dsh-suspended
package.json 標明版本 0.6.0、許可證 MIT,Node 引擎要求 ^22.19.0 || >=24.0.0。
配置要點¶
下表字段來自 README「Configuration」章節(資料截斷處未列出的項以倉庫 README 爲準):
| 字段 | 默認值 | 行爲 |
|---|---|---|
enabled |
true |
在各模型路由上啓用輸入替換與重複輸入抑制。 |
suppressRepeatedInput |
true |
本會話內已對某 provider/model 對 admission 過後,丟棄同對新用戶輸入,不調用模型。 |
autoVendor |
true |
按廠商覆蓋與輸入語言規則選取廠商聲明。 |
vendors |
十一家內置廠商 | 按匹配優先級排列的完整基礎項。 |
extraVendors |
[] |
追加自定義廠商條目(完整定義見倉庫 README)。 |
cleanResponse、responseBufferLimit 等響應相關項見 README「Response extraction」與 Configuration 表全文。
適用場景與注意¶
適合需要在 DSH 中統一「向模型發送廠商合規復述請求」、又要在 Chat 與剪貼板中保留用戶原話的智能體或集成開發者;也適合需要按 provider/model 限制每會話僅一次真實模型往返的測試或演示 profile。
使用前注意:替換內容與 source.suspended 元數據會進入會話日誌與多種客戶端視圖,不等於對用戶數據的擦除;suppressRepeatedInput 會靜默消費重複輸入;cleanResponse 會改變流式展示時機並依賴模型完整複述聲明原文。插件依賴 Cordis 與多包 @deepseek-ai/dsh-* peer,須與當前 Harness 版本匹配。
DSH 生態奉行「一切皆插件」;SkillHub 等目錄爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-suspended 把「用戶可見原文」與「模型所見覆述請求」拆開,並可選地抽取模型回覆中的聲明正文、限制同模型對重複調用。若你要在 profile 中集成,可從目錄頁 buhayi/dsh-suspended 進入說明,源碼與 README 見 GitHub。