前言¶
DeepSeek Harness(DSH)通過插件擴展模型來源與調用路徑。若你已在局域網或自建環境運行 relay-hub(pip install hubrelay 的自託管 LLM 中繼/網關),常見做法是手工配置 base URL 與 API Key,或在網關側做配對、向管理員索取一次性碼。中轉站側的全局請求日誌也難以直接回答「某一個 DSH 插件各自用了多少、做了什麼」。
下面介紹社區插件 dsh-relayhub-bridge(維護者 bilibiliUID1480494301,分類 admin-security):用 RFC 6238 TOTP 滾動的 6 位動態口令或一次性 enrollment ticket 加入站點,在 Harness 裏註冊 relayhub 提供商路由,併爲該插件流量打上標識,便於站點按插件單獨記賬日誌。
這是什麼¶
dsh-relayhub-bridge 是發佈在 npm 的 DSH 插件(當前 package 版本 0.3.0,許可證 MIT)。它只做一件事:把當前 Harness profile 接到一臺已啓用 TOIP(hubrelay ≥ 0.3.0)的 relay-hub 站點,並把站點返回的模型列表暴露爲與其它 provider 一樣的可選模型;請求頭攜帶 X-DSH-Plugin-Id,站點會在全局日誌之外寫入 pluginlogs/dsh-relayhub-bridge/<date>.jsonl。
插件聲明注入服務僅爲 llm,不依賴 Harness 內部包,peer 爲 @deepseek-ai/cordis ~4.0.4 與 @deepseek-ai/schemastery ~3.18.4(可選)。目錄頁:https://www.skillhub.cn/plugins/bilibiliUID1480494301/dsh-relayhub-bridge;源碼:https://github.com/bilibiliUID1480494301/dsh-relayhub-bridge。SkillHub 爲社區插件目錄,與 DeepSeek / 幻方無官方從屬關係。
核心功能¶
用 URL + 動態碼加入站點¶
無需在網關上跑額外 CLI、無需配對窗口、無需向管理員要一次性碼。6 位碼爲每 30 秒滾動的 TOTP;也支持 enrollment ticket(rhe_…,站點側僅打印一次)。
成爲 relayhub 提供商¶
加入成功後註冊 relayhub 路由,站點上的模型出現在 Harness 模型設置中,與其它 provider 相同選型。
按插件分賬日誌¶
每次請求帶 X-DSH-Plugin-Id,站點側生成按插件區分的 JSONL 日誌,便於審計「這個插件做了什麼」,而不必在大段 API 日誌裏 grep。
模型調用與流式適配(0.2.0 起)¶
適配器實現完整調用鏈:resolveModel、prepareCall、stream(可中止的 POST /v1/messages,stream:true)。Anthropic SSE 映射爲 Harness StreamChunk;多種失敗模式映射爲 harness 可理解的 finish chunk。站點忽略 stream:true 時仍可用完整 message 對象模擬流式。內容中泄漏的 DeepSeek DSML 標記會在流式路徑中被清理。
端到端信封加密(0.3.0)¶
當站點提供能力時,可將 Messages 請求封裝爲 x25519-hkdf-sha256-aesgcm 信封。配置項 e2e:
auto(默認):每輪探測GET /v1/e2e/params,支持則加密,404/501 則明文。off:不探測、不加密。require:不支持信封則報錯,不降級的明文。
站點需安裝 hubrelay[e2e] extra;密鑰輪換由插件在收到命名 key_id 的 400 時自動刷新並重封。
局域網發現¶
可通過 bridge.discover({ timeoutMs: 3000 }) 廣播 RELAYHUB-DISCOVER-v2,一次得到站點 URL 與是否啓用 TOIP。廣播不跨子網;遠程站點需手動填寫 URL。
環境與依賴¶
- DeepSeek Harness:0.2.0-rc.2 或更新,且仍在 0.2.x 線(README 標註
verifiedAgainst: 0.2.0-rc.2)。插件面向 0.2.x 契約(ctx.llm.registerAdapter/registerConfigurableProviders、dsh.bundle.patch);0.3.x 可能需插件配套升級,需要穩定時請 pin Harness 版本。 - relay-hub 站點:hubrelay ≥ 0.3.0(TOIP 自該版本引入;交叉測試標註
verifiedAgainst: hubrelay 0.3.1)。 - Node.js ≥ 18(使用
fetch、AbortSignal.timeout、node:dgram等)。
安裝與啓用¶
插件以當前 DSH 進程權限運行,安裝前請自行審閱源碼與 MIT 許可證。
npm 優先(README 說明 dsh plugin add dsh-relayhub-bridge 會先解析 npm registry):
# <profile> 爲你的 Harness profile 名,例如 desktop、web
dsh plugin --profile <profile> add dsh-relayhub-bridge
dsh plugin --profile desktop add dsh-relayhub-bridge
dsh plugin --profile web add dsh-relayhub-bridge
從 GitHub 安裝(不經 registry):
dsh plugin --profile <profile> add github:bilibiliUID1480494301/dsh-relayhub-bridge
本地路徑(須絕對路徑):
dsh plugin --profile <profile> add /absolute/path/to/dsh-relayhub-bridge
倉庫內可用以下命令自檢 packaging 與協議測試(非 DSH 用戶必跑項,供維護者/進階用戶參考):
node scripts/check-package.cjs
node --test test/
典型用法¶
1. 在 relay-hub 站點上(一次性)¶
在已安裝 hubrelay ≥ 0.3.0 的機器上執行:
hubrelay toip station --name lab-hub
hubrelay toip ticket --name dsh-laptop --plugins dsh-relayhub-bridge
第一條命令會打印當前 TOTP 相關碼與 otpauth:// URI;第二條打印 僅出現一次 的 enrollment secret(rhe_…)。
2. 在 Harness 插件設置里加入¶
打開 Settings → relay-hub:
- 粘貼站點地址,點 Check station 確認站點提供 TOIP。
- 粘貼當前 6 位動態碼,或粘貼 enrollment ticket。
- 點 Join station。頁面會顯示當前站點、已註冊模型數量,並提供 Disconnect 清除本地 token。
該 UI 與底層寫入同一配置命名空間(baseURL、apiKey、stationID、models),provider 直接讀取,一般無需再手工改 JSON。
程序化加入示例(Cordis 上下文上的 relayhubBridge):
const joined = await bridge.join({
stationURL: 'http://192.168.1.10:8799',
ticket: 'rhe_…',
name: 'dsh-laptop',
})
const again = await bridge.join({
stationURL: 'http://192.168.1.10:8799',
code: '123456',
})
成功返回的結構包含 provider 所需字段(baseURL 恆以 /v1 結尾,避免 Messages 適配器重複追加路徑):
{
root: 'http://192.168.1.10:8799',
baseURL: 'http://192.168.1.10:8799/v1',
apiKey: 'rht_…',
stationID: 'rst_…',
models: [{ id: 'deepseek-v4-pro', contextWindow: 1000000 }],
}
將上述值持久化到插件配置後,在 Harness 中選擇對應模型即可發起對話。apiKey 爲會話憑證,應按密鑰對待。
3. 局域網發現(可選)¶
const stations = await bridge.discover({ timeoutMs: 3000 })
// [{ name: 'lab-hub', url: 'http://192.168.1.10:8799', toipEnabled: true, models: 3 }]
適用場景與注意¶
適合誰:已有或計劃部署 relay-hub、希望 DSH 以標準 provider 方式走自建網關,並需要在站點側按插件拆分日誌與審計的團隊或個人;admin-security 分類也對應「接入控制(TOIP)+ 可追蹤的插件身份」這一組合。
注意:
- Harness 仍處於開發者預覽,0.2.x 插件 API 可能變動;生產環境請 pin 版本並關注插件倉庫 release。
- TOIP 與 per-plugin 日誌依賴站點 hubrelay 版本與 TOIP/ticket 配置;插件無法替代站點側安全策略。
- E2E 加密需站點
hubrelay[e2e];默認e2e: auto對不支持站點會回退明文,若策略要求全程密文應設爲require。 - 插件不引入對 Harness 內部包的依賴,意在減少升級 breakage;自行 fork 或改 patch 時需保持與 cordis peer 範圍一致。
結尾¶
經過上面的步驟,DSH 可通過動態口令或 ticket 接入 relay-hub,在 UI 或 API 層完成 join,並把中轉站模型當作 relayhub provider 使用;站點側還能按插件 ID 落盤日誌。需要安裝命令、TOIP 流程與加密選項的完整說明時,以 GitHub README 爲準。