前言¶
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 本身的架构(纯文本、无结构化工具),更适合文本生成类的任务。