dsh-endpoint:把 DSH 已配置的模型暴露爲 OpenAI 兼容 HTTP 端點

前言

在 DeepSeek Harness(DSH)裏,模型與憑證通常通過桌面端的 provider 適配層統一管理。若要把同一套配置接到 Cursor、OpenAI Python SDK、或任意只認 POST /v1/chat/completions 的工具,常見做法是再起一層網關或重複填密鑰。下面介紹的 dsh-endpoint 是運行在 DSH 宿主進程內的 Cordis 插件:它不單獨存憑證、也不直連廠商 API,請求一律經 ctx.llm.stream() 轉發,由 DSH 現有的適配器處理協議差異、重試、圖片與 token 統計。

這是什麼

dsh-endpoint(npm 包名 dsh-endpoint,當前版本 1.1.0,MIT 許可證)由 wangzhongyang 維護,歸類爲模型推理相關插件。一句話定位:在 DSH 已啓動的前提下,把已在 Harness 中配置好的 provider 與模型,以 OpenAI 兼容 HTTP 端點 的形式對外提供;端點只做映射與轉發,真實請求仍走 DSH 的 LLM 插件鏈(如 dsh-llm-pi-ai、dsh-llm-deepseek-* 等)。

社區目錄頁:skillhub.cn/plugins/wangzhongyang/dsh-endpoint。源碼與說明:github.com/wangzhongyang/dsh-endpoint。DSH 生態強調「一切皆插件」;該目錄爲獨立社區站點,與 DeepSeek / 幻方無官方從屬關係。

架構與核心行爲

請求路徑可概括爲:

OpenAI 兼容客戶端 → POST /v1/chat/completions
  → dsh-endpoint(HTTP 監聽 → OpenAI 映射 → SessionMirror → ctx.llm)
  → DSH provider 適配器 → 廠商 API

要點如下:

  1. 僅插件、無第二進程:不另起憑證存儲;誰裝插件、DSH 以何種權限運行,端點就繼承同樣環境。
  2. 會話可鏡像:可選將每次 API 對話寫入 DSH 側邊欄可見的 session;鏡像爲只讀,GUI 不會從鏡像 session 恢復(already owned by an active write handle)。
  3. 安全默認:README 明確 無鑑權、無限流;能訪問端點的人會消耗你在 DSH 裏配置的模型配額。除非置於自控代理之後,否則應監聽 127.0.0.1;不需要時關閉插件即可停用。

HTTP API 與請求能力

方法 路徑 說明
GET /healthz 存活檢查與已註冊 provider
GET /v1/models provider/model 及別名
GET /v1/models/{id} 單個模型
POST /v1/chat/completions 流式與非流式

模型 id 形如 opencode-go/deepseek-v4.1-flash(provider/model)。

支持:messages(system/user/assistant/tool)、tools 與 tool_calls 透傳、temperature、max_tokens / max_completion_tokens、stream、stream_options.include_usage、stop(部分 adapter 不支持時會在端點側截斷處理)。

顯式拒絕:n > 1、非 "auto" 的 tool_choice、遠程 http(s) 媒體 URL、file_id、PDF/DOCX 等二進制文檔。

附件僅接受 inline base64:圖片 data:image/{png,jpeg,webp,gif};base64,… 經 ctx.attachments.saveImages 入庫;文本類 file(text/*、JSON、YAML 等)內聯爲 text block(單文件 512 KiB 上限,文件名保留)。遠程圖片 URL 與 Files API 未實現,返回 400。

未建模的字段(如 top_p、seed 等)會被記錄並丟棄,避免誤傷常見客戶端。

安裝與啓用

依賴 DeepSeek Harness Desktop(web profile)0.2.1-rc.x;package.json 要求 Node >=22.19.0、DSH >=0.2.1-rc.2。

從 npm 安裝:

dsh plugin --profile web add dsh-endpoint

開發中也可從本地路徑安裝(README 示例,需絕對路徑):

dsh plugin --profile web add /absolute/path/to/dsh-endpoint

桌面端亦可在 Settings → Plugins 從市場安裝(包上架後)。宿主插件爲 ESM 模塊,安裝或重裝後需重啓應用,否則運行中進程不會加載新模塊。

安裝前建議自行查看 GitHub 源碼與 MIT 許可證;插件與 DSH 同進程,權限與網絡暴露面與宿主一致。

設置頁

路徑:Settings → Model Endpoint(與插件頁同級)。

字段 含義
Listen address 127.0.0.1(僅本機)或 0.0.0.0(所有網卡)
Port 默認 43130(GUI 佔用 43129)
Default model 請求未帶 model 時使用
Model aliases JSON 映射,如 {"gpt-4o": "opencode-go/deepseek-v4.1-flash"}
Session mirror 是否將 API 對話寫入 DSH session
Mapping retention 外部 conversation id 末次使用後保留映射的天數
Workspace directory 鏡像 session 所屬 workspace

保存後立即生效:改監聽地址或端口會 原地 rebind(失敗則回滾);切換 mirror 或 workspace 目錄需 重載插件(啓動時構建)。監聽變更時,進行中的流式響應會被丟棄。

用戶層配置寫入 $DSH_HOME/dsh-endpoint/config.json,啓動時與插件默認配置合併。設置頁通過僅 loopback 的路由讀寫:GET /dsh-endpoint/state、GET|PUT /dsh-endpoint/config。

典型用法

任意可指定 OpenAI 兼容 base_url 的客戶端均可指向本端點。README 示例:

export OPENAI_BASE_URL=http://127.0.0.1:43130/v1
export OPENAI_API_KEY=anything

無真實鑑權,OPENAI_API_KEY 可爲任意佔位符。文檔中 curl、OpenAI Python SDK 等配置方式見倉庫 README(含截斷前的客戶端表格)。

會話 id 解析順序(先命中先用):x-dsh-session-id → 常見 agent 頭(如 x-session-id、x-conversation-id 等)→ body 內 session_id / metadata.* / user → 無用戶消息時按 sha256(model + 首條 user message) 穩定生成 → 完全沒有 user 消息時新建 id。響應會回顯 x-dsh-session-id,客戶端可帶回以固定同一會話。

適用場景與注意

適合:已在 DSH 配好 provider,希望用 OpenAI 協議客戶端(IDE 插件、腳本、Agent 框架)統一走 Harness 的憑證與適配層;需要可選地把外部對話鏡像到 DSH 側邊欄便於排查。

務必注意:

  1. 默認無認證與限流,監聽 0.0.0.0 等於把配額暴露給局域網或更廣範圍。
  2. 請求體等限制見 README(如默認 maxBodyBytes 20 MiB、單 inline 文本文件 8 MiB 等);超限或不支持的能力會 400 或截斷並告知模型。
  3. 僅轉發,不替代 DSH 自身的 GUI 會話編輯;鏡像 session 爲只讀。

結尾

dsh-endpoint 把「DSH 裏已經配好的模型」變成本地(或你顯式放開的)OpenAI 兼容端點,避免重複維護密鑰與 adapter 邏輯。進一步瞭解安裝細節、客戶端矩陣與限制表,請以倉庫 README 爲準。

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

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

小夜