use-opencode-local-provider:把 OpenCode Zen 作爲本地 provider 接入 dsh

前言

在 dsh 裏想用 OpenCode Zen 的模型,公開的 /zen/v1 通道會消耗公開配額。另一條路是本地跑 opencode serve:opencode 的客戶端通道(opencode.ai/zen/go/v1)不需要 OpenCode API key,也不佔公開配額,但這條路默認接不進 dsh 的 provider 體系。

下面介紹的 use-opencode-local-provider 做的就是這個接線工作:在本地起一個 OpenAI 兼容橋接,把 dsh 的 chat completions 請求轉換成 opencode serve 會話,讓 OpenCode Zen 以 opencode-local 的名字出現在 dsh 的聊天 UI 裏。

這是什麼

use-opencode-local-provider 是一個 dsh 插件,由 Payel-git-ol 維護,許可證爲 MIT,package.json 顯示當前版本 0.2.0,入口 ./lib/index.js。一句話定位:把本地的 opencode serve(走 OpenCode Zen 客戶端通道)包裝成 dsh 裏的一個 provider。目錄頁將它歸在「模型推理」類下。

DSH 的理念是「一切皆插件」,provider 接入這類事正好可以交給插件完成。

工作原理

插件加載時做三件事:

1、確保 opencode serve 實例在運行,沒有就自動啓動;
2、啓動一個小型 OpenAI 兼容橋接,提供 /v1/chat/completions/v1/models 兩個端點,把每個請求通過 opencode 的本地 HTTP API 轉換成一個 opencode serve 會話;
3、在 llm-pi-ai 設置區註冊 opencode-local provider 路由,之後它會自動出現在 dsh UI 裏。

請求流使用 opencode 客戶端通道 opencode.ai/zen/go/v1,不需要 OpenCode API key,也不消耗公開 /zen/v1 配額。

安裝與啓用

先安裝插件。進入 profile 目錄(~/.dsh/profiles/<profile>)執行:

dsh plugin --profile <profile> add use-opencode-local-provider

再把插件寫進 cordis.patch.yml,並指定要暴露給 dsh 的模型:

- entry: use-opencode-local-provider
  config:
    models: [deepseek-v4-flash-free, hy3-free]

重啓 dsh 進程。經過上面的步驟,opencode-local provider 會出現在聊天 UI 中。如果不配置 models,默認暴露完整的 OpenCode Zen 目錄。

配置項

插件的可配置項及默認值如下:

key 默認值 說明
opencodeBin opencode opencode 可執行文件路徑
serverHost 127.0.0.1 opencode serve 實例的主機
serverPort 17655 opencode serve 實例的端口
bridgeHost 127.0.0.1 本地 OpenAI 兼容 API 的綁定主機
bridgePort 17656 本地 OpenAI 兼容 API 的綁定端口
providerId opencode-local 在 llm-pi-ai 設置中的路由名
providerName OpenCode Local 在 dsh UI 中的顯示名
apiKeyEnv OPENCODE_API_KEY dsh 用作 provider 憑據的環境變量名(橋接會忽略它;pi-ai 仍要求一份憑據)
models 完整 OpenCode Zen 目錄 暴露給 dsh 的模型 id
directory process.cwd() opencode 會話的工作目錄
streamTimeoutMs 600000 模型完成(含多步工具運行)的最長等待時間(毫秒)
permissionReply once 自動應答 opencode 權限請求:oncealwaysreject(設爲 false 則從不自動應答)

幾個容易踩的點:

  • apiKeyEnv:請求流本身不需要 OpenCode API key,橋接會忽略這個變量裏的值,但 pi-ai 仍然要求 provider 有一份憑據,所以這個環境變量名要保留。
  • permissionReply:默認 once,會自動應答 opencode 的權限請求。設爲 false 時不自動應答,運行會等待手動響應或直到超時。
  • streamTimeoutMs:默認 600000 毫秒,覆蓋模型完成的全過程,包括多步工具運行,跑長任務時要留意。

工具與 MCP

這是這個插件比較特別的部分。橋接讓模型可以使用 opencode 自帶的工具,包括連接到 opencode 的 MCP 服務器。工具調用由 opencode 的 agent 在 opencode 會話內執行,帶着它自己的沙箱和權限規則;橋接只負責讓運行繼續下去,最後返回答案。待處理的權限請求會按 permissionReply 的配置自動應答。

對 dsh 的 agent 來說,這些工具是不可見的:dsh 看到的只是一個 chat completions 端點,無法規劃或觀察工具調用,什麼時候用工具由模型自己決定。如果流程依賴 dsh 側感知和編排工具調用,這一點要先想清楚。

本地開發

想在本地跑一下源碼,兩步:

npm install
node -e "import('./lib/index.js').then(m => console.log(Object.keys(m)))"

第二條命令加載 ./lib/index.js 並打印導出的模塊名,用來確認入口可用。package.json 中 typemodule

適用場景與注意

適合的場景:已經在本地使用 opencode,想在 dsh 裏直接調用 OpenCode Zen 的模型,同時希望模型在會話內能用上 opencode 的工具和 MCP 服務器,並且不想消耗公開 /zen/v1 配額。

使用前注意:

1、插件以當前 dsh 進程的權限運行,安裝前建議先讀一遍源碼並確認許可證(MIT)符合你的要求。
2、工具調用對 dsh 不可見,dsh 只能看到 chat completions 端點,需要 dsh 側規劃或觀察工具調用的場景不適合用它。
3、permissionReply 設爲 false 時,運行會等待手動響應或超時;長任務要配合 streamTimeoutMs 的值一起考慮。
4、opencode serve 與橋接默認綁定 127.0.0.1,端口分別爲 17655 和 17656,與本機其他服務衝突時可在配置裏調整。

小結

use-opencode-local-provider 用一個小橋接把本地的 opencode serve 接進 dsh:不需要 OpenCode API key,不佔公開 /zen/v1 配額,還把 opencode 的工具和 MCP 一併帶給模型。裝之前檢查源碼,配好 modelspermissionReply,重啓 dsh 就能在 UI 裏直接用。

插件收錄在社區目錄(獨立站點,與 DeepSeek、幻方無官方從屬關係):

  • 目錄頁:https://www.skillhub.cn/plugins/Payel-git-ol/use-opencode-local-provider
  • GitHub 倉庫:https://github.com/Payel-git-ol/use-opencode-local-provider
羽毛球分组比赛记分
小程序二维码

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

小夜