dsh-provider-hub:在設置裏對齊模型供應商引用,消除 NO_ADAPTER

前言

在 DeepSeek Harness(dsh)裏跑智能體時,模型供應商(provider)的名字會出現在 profile 補丁、無頭 overlay、以及「模型供應商」頁的配置裏。這幾處若不同步,桌面端可能一切正常,而命令行、定時任務或值班輪一啓動就退出,終端裏常見:

dsh: NO_ADAPTER: no adapter registered for provider "acme"

這類問題往往難查:overlay 是最後一層補丁,某插件把「桌面當前選中的模型」寫進 overlay,但對應 profile 里根本沒有該 provider 的定義,進程直接退出,連報告都寫不出來。下面介紹社區插件 dsh-provider-hub(維護者 xuanbaon,分類:模型推理):在 設置 → 供應商中心 一頁看清引用與定義是否一致,並支持一鍵補齊或批量換供應商。

這是什麼

dsh-provider-hub 是給 DSH 增加的一頁設置 UI,核心目標是弄清「模型提供商」在三處的狀態,並把不一致補齊。

位置 誰在寫
profiles/<name>/cordis.patch.yml 裏的 agent-default-model 模型選擇器裏選中的那一項
~/.dsh/<狀態目錄>/headless-overlay.yml 插件每輪重寫(值班輪、定時任務等)
同一 patch 裏的 llm-pi-ai.providers 「模型供應商」頁裏的定義

插件數據與代碼分離,默認目錄爲 <DSH_HOME>/provider-hub/(DSH_HOME 默認 ~/.dsh),可用 DSH_PROVIDER_HUB_DATA 覆蓋。許可證 MIT,當前 package 版本 1.2.0。

核心功能

面板上的四個動作

動作 做什麼 數據來源
掃描對話 每個會話最後一次實際用的 provider/model,並按 provider 彙總 storages/session_projcache/sessions/*.json 的 modelSelection.lastUsed
掃描插件與配置 誰引用了哪個 provider,按「該 profile 自己有沒有定義」判定狀態 profile patch、插件 overlay、插件 patch、config.json
換供應商 在面板選「從 A → 換成 B(+模型)」,把所有寫着 A 的地方一起改掉,並把 B 的定義補進還缺它的 profile profile patch、overlay、config.json
一鍵同步(補定義) 先出計劃(不寫盤),確認後把別處已定義的 provider 原樣追加進引用了它卻沒定義的 profile profiles/<name>/cordis.patch.yml

換供應商與補定義方向不同:

  • 補定義:配置引用了 A,但本 profile 沒有 A 的定義 → 把定義搬過來,針對 NO_ADAPTER。
  • 換供應商:不想再用 A,改用 B → 把 provider: A 改成 provider: B,並補上 B 的定義;只改選擇,不刪 A 的定義。

判定口徑

「懸空」按該 profile 自己有沒有定義算,不看別的 profile。桌面 profile 註冊了某 provider,不代表 headless 那一輪的配置裏也有。

判定 含義 你能做什麼
正常 內置供應商(deepseek-official、deepseek-account)或本 profile 已定義 —
懸空·可補 別處有定義、本 profile 沒有 點「一鍵同步」
僅運行時 靜態配置裏沒有,運行時註冊表裏有 一般不用管
缺定義 哪兒都沒有 先去「模型供應商」頁配一次

掃描範圍只針對 agent-default-model 條目裏的 provider:,避免把子代理、工具提供方等誤報爲模型供應商。

寫入與安全

換供應商與補定義共用規則:寫前自檢(解析失敗或目標未達成則放棄)、寫前備份 *.bak-provider-hub-<時間>、同目錄臨時文件再 rename 原子替換、單文件失敗不影響其它文件;行號對不上則拒改並要求重新掃描。

補定義只追加到 llm-pi-ai.providers 末尾,冪等。換供應商支持批量與引用表逐行「換」(按 file + line 鎖定);插件生成的 headless-overlay.yml 可能被下一輪重寫,頁面會單獨提醒。改完 patch 需重啓 DSH 才生效(loader 不熱讀 cordis.patch.yml)。

安裝與啓用

插件目錄需放在 DSH 能解析到的位置,並在 profile 的 package.json 裏登記依賴與 bundle:

{
  "dependencies": { "dsh-provider-hub": "^1.0.0" },
  "dsh": { "profile": { "bundles": ["dsh-provider-hub"] } }
}

本地開發可用目錄聯接(Windows mklink /J、macOS ln -s)鏈到 profiles/<name>/node_modules/dsh-provider-hub,改完重啓 DSH。

重啓 DSH 後生效。

目錄頁:https://www.skillhub.cn/plugins/xuanbaon/dsh-provider-hub
源碼:https://github.com/xuanbaon/dsh-provider-hub

典型用法

設置頁流程

  1. 打開 設置 → 供應商中心。
  2. 使用「掃描對話」「掃描插件與配置」查看會話實際用法與引用狀態。
  3. 對「懸空·可補」項使用 一鍵同步:先看計劃,確認後再寫盤。
  4. 若要整體從供應商 A 遷到 B,用 換供應商;只需改一處引用時,用引用表每行右側的「換」。

命令行等價(DSH 未開時)

與設置頁補定義邏輯相同,僅預演或真寫:

node tests/sync.mjs           # 只看計劃
node tests/sync.mjs --apply   # 真寫(先備份)

在插件源碼目錄下也可使用 package 腳本:

npm run sync
npm run sync:apply

HTTP 接口(排查與自動化)

本機同源訪問,例如健康檢查:

curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:5488/dsh-provider-hub/health

401 表示路由已掛且在鑑權,404 表示未掛上。補定義:POST /dsh-provider-hub/sync,body {apply:false} 預演、{apply:true} 寫盤。換供應商:POST /dsh-provider-hub/rewrite,字段見 README 路由表。

適用場景與注意

適合經常在 桌面 + headless(定時、值班、CLI) 混用 DSH、且 profile / 插件較多、provider 引用分散的開發者。插件以當前 dsh 進程權限讀寫配置與數據目錄,安裝前應自行查看源碼與 MIT 許可證,確認符合你的環境策略。

已知邊界包括:只掃一層 node_modules/*/cordis.patch.yml;overlay 歸屬 profile 爲推斷;老會話無 modelSelection 顯示「未記錄」;不做熱更新。若設置頁出現「接口沒有掛上(HTTP 404)」,可查看 ~/.dsh/provider-hub/logs/provider-hub.log;v1.0.0 若未聲明 export const inject = ['webServer'] 會導致全 404,需 1.0.1+。

社區目錄 skillhub.cn 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,本插件是其中面向模型推理配置的一類工具。

結尾

dsh-provider-hub 把 provider 的「會話在用誰、配置引用了誰、誰缺定義」集中到供應商中心,用掃描、補定義與換供應商三條線減少 NO_ADAPTER 類故障。需要進一步瞭解安裝與 API 細節時,可參考 SkillHub 目錄頁 與 GitHub 倉庫 README。

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

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

小夜