dsh 免费模型插件:免 Key 调用 OpenCode Zen,你付出什么
dsh 免费模型插件确实能用,算力来自 OpenCode Zen 的匿名通道。代价是你的提示词和 Agent 读过的源码都会发往 opencode.ai,免费期数据还可能被用来改进模型。先看清这笔交换,再决定哪个仓库能接。
dsh 免费模型插件能用吗?
dsh 免费模型插件确实能用。不要 Key,不要注册,装上就能在模型选择器里看到一组免费模型。它背后的算力来自 OpenCode 的 Zen 网关。OpenCode 是一个开源的终端编码 Agent,Zen 是它提供的模型网关。插件用 README 里写明的 Authorization: Bearer public 作为凭证,走一条匿名的免费通道,这条通道靠 x-opencode-* 请求头识别客户端。
所以真正的问题是你用什么来换。编码 Agent 发出去的不只是你打的那句话,还有它读过的源文件和跑过的命令输出。这些内容会发到 opencode.ai,再转给模型厂商。Zen 的文档说,免费期内收集的数据可能被用来改进模型。
本文引用的插件说明,以 opencode2dsh v0.3.6(npm 发布时间 2026-10-01)和 dsh-opencode-free v0.3.0 为准,阅读日期是 2026-10-03。这类插件更新很快,你装的版本可能已经不同。用下面的命令查当前版本:
npm view @opencode2dsh/dsh-plugin version
npm view @opencode2dsh/dsh-plugin time --json第一条输出最新版本号。第二条列出每个版本的发布时间。如果版本号已经变了,请对照新版本的 README,再核对一遍本文引用的说法。
这类插件实际在调用什么
在 dsh 的插件目录里搜索 OpenCode,能找到好几个名字相近的插件,比如 opencode2dsh、dsh-opencode-free、dsh-opencode-zen。它们的实现各不相同,但调用的是同一条通道。以 opencode2dsh 为例,README 给出的安装命令只有一行:
dsh plugin --profile web add @opencode2dsh/dsh-plugin装好后重启 dsh web,模型选择器里就多出一组 OpenCode 模型。README 对原理写得很直白。它说这些是 "the same models OpenCode's own CLI uses without an account",也就是 OpenCode 自家命令行工具在不登录时使用的那批模型。凭证是一个固定的字符串,原文是:"the anonymous lane's key is the literal string public"。
请求头是关键。opencode2dsh 的 README 列出了它发送的头:user-agent: opencode/…、x-opencode-client、x-opencode-session、x-session-affinity、X-Session-Id、x-opencode-request、x-opencode-project。README 称这些是 "CLI-identical headers",即与 OpenCode CLI 完全相同的请求头。dsh-opencode-free 的 README 说得更具体:它发送 OpenCode 的 User-Agent 和 x-opencode-* 头,并带一个合法的 ses_ 会话 ID。
换句话说,这条通道接受的是“看起来像 OpenCode CLI 发出的请求”。插件能用,是因为它把自己的请求做成了 CLI 请求的样子。
opencode2dsh 的更新日志也能说明这一点。v0.3.2(2026-09-18)的说明提到,会话标识必须符合官方客户端的格式(ses_ 加 12 位十六进制字符,再加 14 位 Base62 字符),随便加个 ses_ 前缀的字符串不再被接受。同一版本还提到,请求必须是流式的,并且要带上名为 bash 和 read 的工具定义,否则请求会直接失败。服务端的规则在变,插件在跟着改。
插件和 Zen 各自怎么说
与其转述,不如直接读原文。
先看插件这一侧。dsh-opencode-free v0.3.0 的 README 写道:"This is an unofficial community plugin. It is not affiliated with OpenCode or DeepSeek." 意思是这是非官方的社区插件,与 OpenCode 和 DeepSeek 都没有关联。另一个处理 OpenCode 请求的插件 dsh-opencode(作者 viztor,npm 包名 dsh-opencode-patch)写得更完整:"not officially affiliated with, endorsed by, or sponsored by OpenCode or DeepSeek",即没有官方关联,没有背书,也没有赞助。我在 opencode2dsh v0.3.6 的 README 里没有找到类似的声明,它也没有声称自己是官方产品。
再看 Zen 这一侧。OpenCode 的 Zen 文档描述的开通方式是:"You sign in to OpenCode Zen, add your billing details, and copy your API key." 也就是登录、填写付款信息、复制 API Key。文档把免费模型放在同一个账号体系里介绍。截至 2026-10-03,我在 Zen 文档里没有找到关于 public 这个 Key、匿名访问或第三方客户端的任何说明。
两边都没有说第三方客户端可以使用这条匿名通道。这里不需要判断谁对谁错。你只需要记住一个事实:这是一份没有文档承诺的算力。
为什么这份免费算力可能随时消失
一项服务有文档,就有一定的承诺。改规则时,服务方通常会发公告,会留过渡期。匿名通道没有面向第三方的文档,所以它可以不经通知就改变,也可以直接关闭。
这已经发生过。上面提到的 v0.3.2 会话格式变化,就是一次服务端收紧。插件必须发布新版本,才能继续工作。免费模型的名单也在变。截至 2026-10-03,一些插件列出了 deepseek-v4-flash-free,而 Zen 文档的免费模型列表里没有这个名字。插件的模型列表和官方列表对不上,说明你今天能选到的模型,明天不一定还在。
对个人试用来说,这不是大问题。但如果你把它接进每天依赖的工作流,就要准备好它某天突然返回 403 的情况,并且提前想好备用方案。
编码 Agent 往这条通道发了什么
这是本文最重要的一节。聊天机器人发出去的,基本就是你打的字。编码 Agent 不一样,它每一轮都会发出一个完整的上下文。
一次典型的请求里有这些内容:
- 系统提示词和工具定义,包括
bash、read这类工具的说明。 - 你输入的提示词,以及之前所有轮次的对话。
- 工具结果。Agent 用
read读过的源文件,内容会原样进入上下文。Agent 用bash跑过的命令,输出也会进入上下文,比如git log、env的输出、测试报错、配置文件内容。 - 图片。你粘贴的截图会被编码后一起发送。
所以,只要 Agent 读过某个文件,这个文件的内容就已经离开了你的机器。你不需要主动粘贴任何东西。Agent 为了排查报错去 cat 一下 .env,密钥就已经在请求里了。
这些请求去哪里?opencode2dsh 的 README 写道:"All requests go directly from your machine to opencode.ai / models.dev"。插件本身声明 "nothing is stored, nothing telemetry",即插件自己不存储内容,也不上报数据。这句话只能说明插件这一层是干净的。请求到达 opencode.ai 之后怎么处理,插件管不到。
请求到达之后,Zen 的文档说 "All our models are hosted in the US",即模型都托管在美国。对免费模型,文档逐个标注了数据政策。多数免费模型的说明是:"During its free period, collected data may be used to improve the model." 即免费期内收集的数据可能被用来改进模型。NVIDIA 的 Nemotron 端点另有一句:"Your use is logged for security purposes and to improve NVIDIA products and services." 也有少数免费模型标注了零留存政策。
注意,这些政策写在 Zen 账号的文档里。匿名通道没有自己的文档,所以你无法确定它适用哪一条。稳妥的假设是:至少按免费模型的政策处理,也就是数据可能被保存,也可能被用于改进模型。
还有一个容易忽略的细节。opencode2dsh 的 README 说,session 和 project 的 ID 是用会话第一条用户消息做 SHA-256 哈希得出的。哈希不可逆,所以服务端从 ID 本身看不到原文。但同一会话的所有请求都带着同一个 ID,所以服务端可以把这些请求串成一条完整的记录。
这个问题不是免费插件独有的。任何编码 Agent 都会发送这些内容,区别在于接收方是谁,按什么条款处理。编码 Agent 到底向外发送了哪些数据 一文把这件事拆得更细。
哪些仓库不该接免费通道
结论很简单:有客户代码或密钥的仓库,不要接这条通道。
具体来说,下面这些情况都不要用:
- 签了 NDA(保密协议)的客户项目。你无权把客户代码交给一个可能用它改进模型的第三方。
- 工作目录里有
.env、云厂商凭证、SSH 私钥或数据库导出文件的仓库。 - 公司内部代码,除非公司明确允许。
- 含有用户个人信息的数据或日志。
适合使用免费通道的场景也很清楚:本来就公开的开源代码,学习用的练习项目,随手写的一次性脚本,基于公开数据集的小实验。判断标准只有一条:如果这段代码明天出现在某个模型的训练数据里,你能不能接受。
如果仓库里本来就放着密钥,换哪个模型都要先处理这件事。如何让密钥远离 AI 编码 Agent 讲了具体做法。
遇到 429 和 403 时先检查什么
免费通道报错的原因并不总是一样。下面这些是需要你自己核对的线索,不是定论。
429(Too Many Requests,请求过多)。 opencode2dsh 的 README 写的是 "The anonymous lane is quota-per-IP",即按 IP 计算配额。其他插件的说明里还提到按会话退避、按会话隔离冷却。所以 429 可能来自同一个 IP 上的总用量,也可能来自单个会话的请求太密集。检查方法:看同一台机器上的其他会话是否同时报错。如果都报错,多半是 IP 级配额用完了。如果只有一个会话报错,先停一两分钟再试。
opencode2dsh 的 README 给出的建议是 "switch network node or wait",即换网络节点或等待。我不建议靠轮换 IP 或轮换多个 Key 来绕开限额。这种用法最容易促使服务方收紧或关闭匿名通道,而且会挤占其他用户的配额。
403(Forbidden,拒绝访问)。 403 有几种不同的来源,报错文字能帮你区分:
REGION_BLOCKED或 "This model is not available in your country":opencode2dsh 的 README 解释为 "Zen has rejected the current network region for this model",即 Zen 不向你当前的网络地区提供这个模型。从 v0.3.5 起,插件会把这类 403 显示为REGION_BLOCKED,避免被误报成 Key 无效。403 FreeTierError:dsh-opencode-patch 的 README 把它归因于请求缺少网关需要的请求头或工具定义。也就是说,通道没有把你的请求认作 CLI 请求。
从中国大陆 IP 访问时,哪些模型会返回地区限制,我无法替你确定,而且这个名单本身也在变化。你需要在自己的网络上把常用模型逐个试一次,记下结果。如果 dsh 跑在一台 VPS 上,请求的出口 IP 就是 VPS 的 IP,结果按 VPS 所在地区计算,和你本地网络的结果可能不同。在 VPS 上部署 dsh 的方法见 在 VPS 上运行 DeepSeek Harness。
想要同样的效果,有哪些有文档的路线
免费插件满足的需求是真实的:试用时不想花钱,或者想要一个便宜的编码模型。下面这些路线能达到相近的目的,而且每一条都有文档可查。
用自己的 Key 开通 Zen 账号
Zen 文档里列出的免费模型,有账号的用户同样可以使用。有些插件支持填入自己的 Key。比如 dsh-opencode-free 的 README 说,可以通过 apiKey 配置项或 OPENCODE_API_KEY 环境变量提供 Zen API Key,不提供时才发送 Authorization: Bearer public。
要说清楚:有了账号,免费模型的数据政策并不会改变,免费期内的数据仍然可能被用来改进模型。账号换来的是一份有文档的服务,以及一个你可以联系对方、提出问题的身份。它不会让敏感代码变得适合发送。
使用 DeepSeek 官方 API 的错峰价
如果你本来就想用 DeepSeek 的模型,可以直接用 DeepSeek 官方 API。截至 2026-10-03,DeepSeek 的价格页写明 "Off-peak rates are half of the peak rates",即非高峰时段的价格是高峰时段的一半。高峰时段是周一到周五的 UTC 01:00 到 04:00 和 06:00 到 10:00,换算成北京时间是工作日的 09:00 到 12:00 和 14:00 到 18:00,中国法定节假日除外。把长任务放到晚上和周末跑,成本会明显降低。价格会调整,使用前请以价格页为准。
这条路线的好处是关系清楚。你是有账号的付费客户,适用的是你注册时同意的条款。在 dsh 里配置 API Key 和模型的步骤,见 dsh 的 API Key 与模型配置。
本地模型
如果代码完全不能离开你的机器,就只剩本地模型这条路。用 Ollama 拉取一个编码模型并测试:
ollama pull qwen2.5-coder:7b
ollama run qwen2.5-coder:7b "用一句话解释 git rebase"第二条命令应该直接打印模型的回答。如果提示 command not found,说明 Ollama 没有安装。如果提示无法连接,说明 Ollama 的后台服务没有启动。
代价同样明显。本地小模型在长上下文和多步工具调用上,明显弱于云端的大模型,而且你要准备足够的内存或显存。在自己的服务器上运行和使用托管服务之间怎么选,Ollama Cloud 与自建服务器的对比 有详细分析。
安装任何模型插件之前
免费模型插件也是插件。它是一个模型适配器,你和模型之间的每一个请求都要经过它。所以安装之前,先看它的源码仓库,并且固定版本号,不要让它自动跟随最新版。固定版本的写法和 README 里的普通安装命令只差一个版本后缀:
dsh plugin --profile web add @opencode2dsh/dsh-plugin@0.3.6升级时,先读新版本的更新日志,再改版本号。安全安装 dsh 插件 列出了更完整的检查步骤。如果你还在挑选插件,值得安装的 DeepSeek Harness 插件 是一份更全面的清单。
FAQ
dsh 的免费模型插件真的完全免费吗?
不用付钱,这一点是真的。插件使用 OpenCode Zen 的匿名通道,凭证是字面量 public,不需要账号和 Key。但你付出的是另外两样东西:一是数据,编码 Agent 读过的源文件和命令输出都会发往 opencode.ai,免费期内可能被用来改进模型;二是稳定性,这条通道没有面向第三方的文档,可以不经通知就改变或关闭。
免费模型插件会把我的源代码发出去吗?
会。编码 Agent 每一轮请求都会带上完整的上下文,包括它用 read 读过的文件内容和用 bash 跑过的命令输出。只要 Agent 读过一个文件,这个文件就已经发出去了,不需要你手动粘贴。所以有客户代码、.env 文件或其他密钥的仓库,不要接这类免费通道。
为什么免费模型返回 403,提示 not available in your country?
opencode2dsh 的 README 把 REGION_BLOCKED 和 "This model is not available in your country" 解释为 Zen 不向你当前的网络地区提供该模型。这是按模型、按出口 IP 判断的,名单会变化。请在自己的网络上逐个模型测试。如果 dsh 跑在 VPS 上,结果取决于 VPS 的出口 IP,而不是你本地的网络。
开通 Zen 账号后,免费模型就不会用我的数据了吗?
不会。按 Zen 文档的说明,多数免费模型在免费期内收集的数据可能被用来改进模型,有账号也一样。账号带来的是有文档的服务和明确的条款,而不是更强的隐私保护。如果代码不能被用于训练,请选择文档写明零留存的模型,或者使用付费 API、本地模型。