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 为准。

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

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

Xiaoye