前言¶
OpenCode Zen 的免費檔僅對官方客戶端開放,服務端通過特定的 HTTP Headers 判斷請求來源。DeepSeek Harness(DSH)內置的 dsh-llm-pi-ai 適配器雖然理論上支持注入這些 headers,但由於其 requestHeaders() 方法會覆蓋用戶自定義的 User-Agent,導致 opencode 檢測永遠失敗,headers 永遠不被注入。
dsh-zen-spoof 插件直接註冊爲 opencode provider,完全繞過 pi-ai,自行控制所有請求 headers。它不依賴任何補丁或特定版本,適用於任何 DSH 版本。
安裝與配置¶
執行以下命令安裝插件:
dsh plugin --profile web add dsh-zen-spoof
安裝後,由於插件註冊了 opencode 路由,與 pi-ai 的同名路由衝突,必須手動編輯配置文件以避免 DUPLICATE_ADAPTER 錯誤。
- 找到
settings.yaml文件位置:- Windows:
<dsh安裝目錄>\.dsh\settings.yaml - macOS / Linux:
~/.dsh/settings.yaml
- Windows:
- 註釋掉
llm-pi-ai下方的opencodeprovider 配置:
llm-pi-ai:
providers:
# opencode: 已由 dsh-zen-spoof 插件接管
opencode-go:
# ... 其他 provider 配置保持不變 ...
功能特性¶
- 完全自包含:不依賴 pi-ai 補丁或特定版本,不依賴
dsh安裝器提供的補丁。 - 模型自動發現:啓動時從 Zen API 獲取最新免費模型列表,失敗時回退到內置列表。
- 思考模式:自動透傳
reasoning_effort參數,並解析reasoning_content字段,在 DSH UI 中展示思考過程。 - 自動 fallback:遇到 429 或 5xx 錯誤時,在候選池內輪換模型,支持指數退避和
Retry-After響應頭。 - 憑據熱更新:逐請求解析 API Key,無需重啓即可更換 Key。
- 錯誤碼對齊:錯誤處理與 DSH 自帶重試機制兼容。
- 多 block 輸出:正確處理流式響應中
reasoning->text->tool-call的組裝順序。
使用方法¶
啓動 DeepSeek Harness Web UI:
dsh web
在會話設置中選擇 provider: opencode,並選擇以下任意免費模型:
| 模型 ID | 說明 |
|---|---|
mimo-v2.5-free |
MiMo V2.5(默認) |
deepseek-v4-flash-free |
DeepSeek V4 Flash |
ling-3.0-flash-free |
Ling 3.0 Flash |
nemotron-3-ultra-free |
Nemotron 3 Ultra |
插件啓動時會自動獲取模型列表,上表僅供參考。
API Key 默認複用 DSH 憑據庫中 OPENCODE_API_KEY 的值。
配置項¶
| 字段 | 默認值 | 說明 |
|---|---|---|
apiKey |
空 | 留空則自動讀取 dsh 憑據庫 |
apiKeyRef |
OPENCODE_API_KEY |
憑據引用名 |
baseURL |
https://opencode.ai/zen/v1 |
網關地址 |
providers |
["opencode"] |
註冊的路由名 |
spoofClient |
cli |
x-opencode-client 值 |
project |
dsh |
x-opencode-project 值 |
userAgent |
opencode/1.18.30 |
User-Agent,須含版本號 |
enableAutoFallback |
true |
受限時自動換模型 |
maxFallbackAttempts |
5 |
單次最多換幾個 |
initialBackoffMs |
1000 |
退避起點(毫秒) |
maxBackoffMs |
30000 |
退避上限(毫秒) |
timeoutMs |
120000 |
空閒超時(毫秒),0 不限 |
通過 cordis 配置覆蓋時須重述全部鍵。
注意事項¶
- 僞裝風險:僞裝客戶端頭屬於灰色手段,官方可能收緊策略或標記非官方流量。建議使用小號 Key。
- 手動配置:安裝後必須手動編輯
settings.yaml註釋掉opencodeprovider,否則會報錯。 - 憑據查找:可在 dsh web UI「設置」頁或執行
dsh config命令查找settings.yaml位置。