dsh-relayhub-bridge:用 TOIP 動態口令把 DeepSeek Harness 接入 relay-hub 中轉站

前言

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。

環境與依賴

  1. 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 版本。
  2. relay-hub 站點:hubrelay ≥ 0.3.0(TOIP 自該版本引入;交叉測試標註 verifiedAgainst: hubrelay 0.3.1)。
  3. 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:

  1. 粘貼站點地址,點 Check station 確認站點提供 TOIP。
  2. 粘貼當前 6 位動態碼,或粘貼 enrollment ticket。
  3. 點 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 爲準。

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

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

小夜