dsh-provider-headers:DeepSeek Harness 自定義請求頭插件

前言

DeepSeek Harness (dsh) 原生支持按提供方配置請求頭,但該字段僅在 settings.yaml 中可編輯,模型設置頁沒有入口。本插件通過 dsh 的插件機制,在模型設置頁增加了請求頭編輯器,並額外實現了 ${sessionId} 的按會話展開功能。

是什麼

這是一個爲 DeepSeek Harness(dsh)的模型設置頁添加“自定義請求頭”編輯器的插件。由用戶 duanyunlun 維護,通過插件機制在不修改源碼的情況下,爲每個 pi-ai 提供方卡片增刪請求頭,並將 ${sessionId} 替換爲當前會話 ID。

安裝

安裝前需確保系統已安裝 Node.js ^22.19.0 || >=24.0.0 和 pnpm。

# 從 npm 安裝(已發佈)
dsh plugin --profile desktop add dsh-provider-headers

# 從本地目錄安裝
dsh plugin --profile desktop add /path/to/dsh-provider-headers

# 從本地打包文件安裝
dsh plugin --profile desktop add ./dsh-provider-headers-0.1.0.tgz

安裝後需重啓對應 profile 才能加載瀏覽器端代碼。卸載時執行:

dsh plugin --profile desktop remove dsh-provider-headers

使用

  1. 打開 設置 → 模型。
  2. 展開任意一個 pi-ai 提供方卡片(DeepSeek 官方、內置第三方或自定義提供方均可)。
  3. 卡片中會出現 “自定義請求頭(N)”,展開後按 名稱 / 值 逐行填寫。
  4. 點擊 保存,配置將寫入 Harness 原生的 settings.yaml。

典型示例

以 OpenCode Go 爲例,該服務要求所有推理請求攜帶 x-opencode-session。在對應卡片中添加一行:

名稱 值
x-opencode-session ${sessionId}

保存後,每次流式請求都會帶上屬於該會話的 ID。若不需要會話展開,直接填寫固定值即可。

機制說明

Harness 原生配置無法實現 ${sessionId} 的按會話展開,因爲同一路由下所有會話共用一個值。插件通過以下機制實現:

  1. 監聽 llm/stream 瀑布流,將一次流式調用放入攜帶會話 ID 的 AsyncLocalStorage 作用域。
  2. 在插件生命週期內包裝 globalThis.fetch,只有處於上述作用域內的請求才會附加展開後的請求頭。

固定值的請求頭仍走 Harness 原生邏輯,不受影響。

配置

插件支持在 settings.yaml 中配置以下項:

- id: model-headers
  config:
    dynamic: true      # 默認 true,設爲 false 則不安裝 fetch 包裝與監聽器
    hosts: []          # 默認空,填寫則按主機後綴收窄生效範圍

注意事項

  1. 僅覆蓋 pi-ai 路由:llm-deepseek 路由的 Config 中沒有 headers 字段,該路由的卡片不會出現此編輯器。
  2. user-agent 無法覆蓋:它是 Harness 的歸屬標識,插件無法修改。
  3. ${sessionId} 僅對流式生效:“獲取可用模型”請求不經過 llm/stream,因此那裏仍發送字面量。
  4. 明文存儲:請求頭值以明文存儲在 settings.yaml,不要將密鑰寫進請求頭,請使用 Harness 的憑據字段。
  5. 編輯器位置:渲染在卡片內而非獨立的“編輯”表單,這是模型設置頁僅有的擴展槽位。

結尾

本插件填補了 DSH 模型設置頁缺少請求頭 UI 入口的空白,並解決了原生配置無法隨會話動態變化的問題。它通過標準的插件機制實現,卸載後可完全還原。更多細節可參考插件目錄或源碼倉庫。

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

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

小夜