前言¶
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位置。