前言¶
在 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
要點如下:
- 僅插件、無第二進程:不另起憑證存儲;誰裝插件、DSH 以何種權限運行,端點就繼承同樣環境。
- 會話可鏡像:可選將每次 API 對話寫入 DSH 側邊欄可見的 session;鏡像爲只讀,GUI 不會從鏡像 session 恢復(
already owned by an active write handle)。 - 安全默認: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 側邊欄便於排查。
務必注意:
- 默認無認證與限流,監聽
0.0.0.0等於把配額暴露給局域網或更廣範圍。 - 請求體等限制見 README(如默認
maxBodyBytes20 MiB、單 inline 文本文件 8 MiB 等);超限或不支持的能力會 400 或截斷並告知模型。 - 僅轉發,不替代 DSH 自身的 GUI 會話編輯;鏡像 session 爲只讀。
結尾¶
dsh-endpoint 把「DSH 裏已經配好的模型」變成本地(或你顯式放開的)OpenAI 兼容端點,避免重複維護密鑰與 adapter 邏輯。進一步瞭解安裝細節、客戶端矩陣與限制表,請以倉庫 README 爲準。