前言¶
DeepSeek Harness (DSH) 的核心設計理念是“一切皆插件”。在使用本地模型(例如 OpenCode 生態中的免費模型 mimo-v2.5-free)時,開發者通常需要單獨配置 API 密鑰或處理複雜的本地服務連接。dsh-opencode-provider 插件解決了這一痛點,它將 DSH 的 LLM Runtime 與本地運行的 OpenCode 服務器連接起來,允許在不使用 DeepSeek 官方 API 密鑰的情況下,直接在 Harness 中調用本地模型。
插件概覽¶
| 項目 | 內容 |
|---|---|
| 名稱 | dsh-opencode-provider |
| 倉庫 | goku54477/dsh-opencode-provider |
| 許可證 | MIT |
| 類別 | 模型推理 |
| 目錄頁 | skillhub.cn/plugins/goku54477/dsh-opencode-provider |
安裝與啓用¶
安裝過程通過 DSH 的插件命令完成。
1、執行以下命令安裝插件:
dsh plugin --profile web add dsh-opencode-provider
安裝完成後,確保你的 DeepSeek Harness 版本 >= 0.1.0-rc.8。
啓動與配置¶
使用該插件前,需要先啓動本地的 OpenCode 服務器,並在 DSH 中進行模型選擇與配置。
1、啓動 OpenCode 服務器(默認端口 4096):
opencode serve --hostname 127.0.0.1 --port 4096
2、在 DeepSeek Harness 的模型選擇中,找到並選擇本地模型:
opencode-local/mimo-v2.5-free
3、根據需要配置 baseURL、上下文窗口、Token 限制及重試策略。配置項位於 DSH 的 cordis.yml 或插件配置文件中,示例如下:
llm-opencode:
# OpenCode 服務器地址
baseURL: "http://127.0.0.1:4096"
# 上下文窗口
defaultContextWindow: 128000
# 最大輸出 Token
maxTokens: 16384
# 聲明的模型列表
models:
- id: mimo-v2.5-free
name: mimo-v2.5-free
description: "OpenCode local agent (text output only)"
contextWindow: 128000
# 重試策略
retryPolicy:
mode: always
backoff:
initialDelayMs: 100
maxDelayMs: 5000
jitterRatio: 0.2
核心功能¶
該插件通過純 HTTP 連接與本地 OpenCode 服務器通信,提供以下能力:
- 無需 API 密鑰:直接通過 HTTP 連接本地服務器。
- 流式輸出:支持 SSE(Server-Sent Events)流式傳輸文本增量。
- 會話取消:支持通過中斷信號終止流式請求。
- 超時控制:可配置 SSE 建立連接、請求發送及完成的最大時間。
- 重試策略:支持配置 Provider 級別的重試策略。
- 事件兼容:支持舊版與新版的 SSE 事件格式(
session.text.delta/session.next.text.delta等)。 - 優雅降級:對未知事件、非 JSON 行及嵌套包裝器進行容錯處理。
工作原理¶
插件通過 OpenCodeAdapter 作爲中間層,在 DSH Runtime 和 OpenCode 服務器之間轉換請求與響應:
- 會話創建:向 OpenCode 服務器發送
POST /api/session請求。 - 併發通信:同時發起 SSE 訂閱(
GET /api/session/{id}/event)和 Prompt 提交(POST /api/session/{id}/prompt),避免服務器因等待活動而阻塞流式頭部的發送。 - 對話序列化:將 DSH 的完整對話(系統提示詞 + 消息歷史)序列化爲特定格式嵌入 Prompt。
- 事件翻譯:將 OpenCode 返回的 SSE 事件映射爲 DSH 的
StreamChunk類型(如block-start、text-delta、finish)。 - 清理:在完成、錯誤或中斷時,發送中斷信號清理會話。
侷限性¶
根據已覈實的事實,該插件存在以下限制:
- 僅文本輸出:OpenCode 運行獨立的 Agent/工具循環,插件不暴露結構化的工具調用能力。
- 無多模態支持:僅支持文本輸入輸出,不支持圖片、音頻或視頻。
- 單一模型廣告:默認目錄僅列出
mimo-v2.5-free,添加其他模型需手動配置。 - 提示詞大小限制:整個對話被序列化爲單個 Prompt 字符串,長對話可能超出模型上下文窗口。
- 無持久會話:每次
stream()調用都會創建新會話,對話狀態不跨請求保持。 - 本地優先:默認綁定
127.0.0.1,遠程服務器需手動修改baseURL且不支持 TLS 加密,嚴禁暴露到不受信任的網絡。
結尾¶
dsh-opencode-provider 爲希望在本地部署低成本推理能力的開發者提供了一個便捷的入口。它簡化了本地模型接入 DSH 的流程,但受限於 OpenCode 本身的架構(純文本、無結構化工具),更適合文本生成類的任務。