dsh-manage-api:在 DSH 裏託管 ManageAPI 守護進程與用量回寫

前言

在 DeepSeek Harness(DSH)裏做多站點 LLM 路由時,ManageAPI 負責選站、比價、探針和記賬,但 daemon 要自己起停、網關 Key 要另填客戶端、真實流量往往回寫不到路由層。下面介紹插件 dsh-manage-api(維護者 ZYH1207,分類:客戶端):它是 ManageAPI 的 DSH 插件端,把守護進程生命週期、原生設置面板、真實用量回寫和預算熔斷接到 Cordis 宿主裏,而不是再套一層獨立 Web 殼。

這是什麼

dsh-manage-api 當前版本 0.12.1(MIT 許可證,Node >=20),倉庫 ZYH1207/dsh-manage-api,目錄頁 skillhub.cn/plugins/ZYH1207/dsh-manage-api。運行時本體來自 ZYH1207/ManageAPI,可通過 config.runtimeDir 指向本機目錄,或安裝可選 peer 依賴 manage-api(^0.3.0)。

插件不重複實現選站與記賬:寫操作一律走 daemon HTTP,宿主進程不寫 db.json。DSH 社區插件目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係。

核心功能

界面與入口

  • 主面板:左側欄 ManageAPI 圖標(與「插件」「任務板」同級),中央主視圖整頁打開;可通過 mainPanel: false 僅保留設置分區。
  • 設置頁:設置 → ManageAPI,含概覽 / 比價 / 決策 / 探針 / 用量等常駐分區。
  • 會話內:助手消息下方的會話成本 chip(⇄ N tok / M 次);命令 /manage 系列。

面板 UI 複用 ManageAPI 網頁版樣式(作用域化內聯,非 iframe),明暗主題跟隨宿主。

守護進程與代理

  • attach-or-spawn:探測 /api/health 通則 attach,否則按配置自啓;DSH 退出時託管自有實例一併停止。
  • 同源只讀代理:webServer.register('/api/manage-api/*'),僅 loopback + Origin 校驗。
  • 寫操作白名單:POST /api/manage-api/write → lib/write-proxy.js 轉發 daemon,不直連 4319 全管理面。

路由、模型與網關

  • 站點 / Key 管理、比價改價、決策手動排序、基準價與免費池寫操作、網關開關、忽略模型、模型接入(寫 DSH 的 manage-api provider 與默認模型)等,與 README 能力表一致。
  • 模型列表動態化(llm.registerModelDiscovery)因命名空間歸屬 llm-pi-ai 未對第三方開放;改用 manageapi_models 工具、/manage models、設置頁比價子頁查看全量模型。
  • 接入頁不再展示網關 Key / adminToken(host 側 sanitizeState());DSH 仍通過本機 provider 走 daemon /v1。

觀測、回寫與熔斷

  • 請求觀測:llm/stream tee,取 usage / finish / ttft。
  • 非 ManageAPI 渠道真實用量:POST /api/ingest/usage(ingestExternalUsage)。
  • 系統提示注入站點 / 比價 / 用量上下文(promptContext,約 30s 緩存)。
  • 工具:manageapi_status / manageapi_models / manageapi_usage;預算熔斷作用於工具調用(tools.guard + 設置頁橫幅)。

安裝與啓用

從 GitHub 安裝(官方 README 原文):

dsh plugin --profile desktop add "github:ZYH1207/dsh-manage-api"

本地鏈接開發示例:

dsh plugin --profile desktop add "link:D:/AgentWorkPlace/DSH/dsh-manage-api"

裝好後重啓 DSH 或在插件頁重載,打開 設置 → ManageAPI。開發期還可把 "dsh-manage-api" 加入 profile 的 package.json 裏 dsh.profile.bundles。

配置項在 cordis.patch.yml 的 config 段,例如:

config:
  port: 4319
  autoStart: true
  runtimeDir: ""
  waitMs: 10000
  ingestExternalUsage: true
  promptContext: true
  mainPanel: true
  budget:
    sessionTokens: 0
    dailyTokens: 0

budget 爲 0 表示不設限;超限後拒絕工具調用,模型請求仍由宿主直接發出。

運行時解析順序:runtimeDir → npm 包 manage-api → 包內 runtime/ → 同倉開發目錄。

典型用法

會話裏使用 /manage(結果不進消息歷史、不發給模型):

/manage            概覽:站點數 / 供給數 / 最划算的站 / 今日用量 / 預算
/manage models     模型比價(★ = 該模型最便宜的站)
/manage models glm 只看匹配的模型
/manage usage      今日全渠道用量 + 本進程觀測到的會話
/manage budget     本會話 / 今日預算與是否已熔斷

模型接入:接入頁從未忽略模型中選一項,寫入 DSH provider 並設爲默認。接入免費模型:免費頁開關打開後,免費池模型以 free/模型名 接入。

面板顯示 daemon「未運行」但本機 4319 有舊進程時,可關舊進程讓插件 spawn(mode: owned),或使用設置頁「啓動託管」/「重啓託管」。

適用場景與注意

適合已在用或打算用 ManageAPI 做站點比價與智能路由、又希望全程留在 DSH 裏的開發者。插件以當前 DSH 進程權限運行,安裝前應閱讀倉庫源碼與 MIT 許可證;路由僅允許 loopback,寫操作要求 application/json。

排障可參考 README:例如面板 401 / 非 JSON 多與 webServer 註冊時機有關(已改爲依賴注入);DSH 能看到模型但調不通,常見原因是 daemon 未跑且 provider 指向 127.0.0.1:4319。

結尾

經過上面的步驟,dsh-manage-api 把 ManageAPI 的 daemon、面板與 DSH 的 provider / 工具 / 預算守在一套插件裏。進一步瞭解見 目錄頁 與 GitHub 倉庫。

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

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

小夜