OpenCode Go 每月 10 美元给 DeepSeek V4.1 Flash 100 美元额度,接进 DSH 后同一会话第二轮缓存命中 99.8%,成本只剩首轮的 2.4%。这个数字成立的前提只有一个:请求里带一个稳定的 x-opencode-session 头,而它在 DSH 里会因为一行配置静默失效。
数据来自 2026-11-07 的真实订阅账号与实测请求,DSH 侧数据在 0.2.1-rc.5 headless profile 上抓包获得,单价以 OpenCode 官方 Go 文档当日页面为准。
这 10 美元买到了什么
OpenCode Go 是订阅制,不是充值制。每月固定 10 美元,换一批模型各自的月度美元额度,额度用完可以切到免费模型,或者开启 Extra Usage 回落到按量付费余额。
对 DeepSeek V4.1 Flash 来说,这个额度是每月 100 美元。但它不是一个整块,而是被切成三个滚动窗口,其中 5 小时窗口最容易被撞到。
| 指标 | 数值 | 说明 |
|---|---|---|
| 订阅价 | 10 美元 / 月 | Go 档,单成员工作区 |
| V4.1 Flash 月度额度 | 100 美元 | 5 小时窗口 20 美元,每周 50 美元 |
| V4 Pro 月度额度 | 15 美元 | 5 小时窗口仅 3 美元 |
| 官方估算请求数 | 21.6 万次 / 月 | 按典型 coding agent 请求结构 |
三个窗口的额度分配

同一个月度额度被切成 5 小时、每周、每月三层,最短窗口只有总额度的五分之一。
把额度换算成 token 更直观。DeepSeek 在 Go 上采用峰谷定价:低谷时输入每百万 token 0.15 美元、输出 0.60 美元、缓存读 0.003 美元;高峰是低谷的两倍,高峰时段为 UTC 周一至周五 01:00–04:00 与 06:00–10:00,折成北京时间就是工作日上午 9 点到 12 点、下午 2 点到 6 点。
所以 100 美元能买多少 token,取决于你让它读多少、写多少,还取决于缓存命中率。三个纯理论值如下,全部按低谷价计算。
100 美元的理论兑换量
| 计费类型 | 低谷可买 | 高峰可买 |
|---|---|---|
| 纯输出(生成) | 1.67 亿 token | 8330 万 token |
| 纯新输入(读代码) | 6.67 亿 token | 3.33 亿 token |
| 纯缓存读(重复上下文) | 333 亿 token | 167 亿 token |
注意:V4 Pro 的额度只有 15 美元,5 小时窗口 3 美元,按官方估算约 1050 次请求。它适合攻坚,不适合当主力。真正跑量的模型必须是 V4.1 Flash。
实测:缓存到底命中没有
订阅之前最该确认的不是价格,是缓存有没有生效。同样一份上下文,命中缓存和没命中,成本差 50 倍——缓存读每百万 0.003 美元,未命中输入每百万 0.15 美元。
验证方法很直接:同一个会话里,连续两次发送完全相同的前缀,看第二次的 cached_tokens 是否接近 prompt_tokens。
DSH 侧的两轮抓包(18.9k 上下文)
| 场景 | prompt_tokens | cached_tokens | 命中率 | allowance | 耗时 |
|---|---|---|---|---|---|
| 首轮 | 18,978 | 640 | 3.4% | 0.00165 | 45.1s |
| 次轮(同会话) | 18,989 | 18,944 | 99.8% | 0.000039 | 2.6s |
第二轮的成本只有首轮的 2.4%

同一会话内前缀不变时,第二次请求的额度消耗断崖式下降,耗时从 45 秒降到 2.6 秒。
另一次更小规模的独立验证也复现了同样的形状:4035 token 的上下文,第一次缓存命中 73%,第二次升到 98.3%,额度消耗从 0.00010421 降到 0.00001389。
两次实验用的是不同的客户端、不同的上下文长度,但结论一致:只要 session 头稳定,OpenCode 网关就会把请求固定路由到同一后端,prompt 缓存正常复用。9 月那次「缓存完全不命中」的问题,在现在的链路上不复现。
要点:判断缓存是否生效,不要看响应耗时,看
usage.prompt_tokens_details.cached_tokens。耗时受网络和排队影响,这个字段不会说谎。
接进 DSH 的三个硬坑
先说结论:DSH 原生支持 OpenCode Go,一个插件都不用装。前提是版本 ≥ 0.2.0-rc.2,从这个版本起它自己会发 x-opencode-session。低于这个版本才需要补 session-header 插件。
配置本身很短,全部写在 profile 的 cordis.patch.yml 里。
最小可用配置
- id: llm-pi-ai
config:
providers:
opencode-go:
displayName: OpenCode Go
models:
- id: deepseek-v4.1-flash
- id: agent-default-model
config:
provider: opencode-go
model: deepseek-v4.1-flash
注意这里没有写 baseURL,也没有写 contextWindow。因为 DSH 内置的 pi-ai 目录里已经声明了:端点 https://opencode.ai/inference/go/openai/v1、上下文窗口 100 万、最大输出 38.4 万、协议 openai-completions。写冗余配置不加速,只会制造第二个真相源。
provider 段还需要一行,把凭据来源指向一个环境变量。变量名沿用 DSH 对该 provider 的默认约定,值放在 profile 的 .env 里,别提交进仓库。
坑一:这一行不能写 api
这是最难查的一个坑。如果你在 opencode-go 那一段里写了 api: openai-completions,请求会正常返回、不报任何错,但 cached_tokens 恒为 0。
根因在 DSH 的 buildProvider:只有 spec.api === undefined 时,它才走 reuseCatalogProvider 复用目录自带的实现;那层实现被 withOpenCodeSessionHeader 包过,负责补 session 头。一旦写死 api,就走 createProvider 新建,包装被绕过,头静默消失。
两种写法的结果差异
| 写法 | provider 来源 | session 头 | 缓存结果 |
|---|---|---|---|
| 不写 api | 复用目录实现 | 自动补上 | 命中 99.8% |
| 写了 api | createProvider 重建 | 缺失 | 恒为 0,且不报错 |
注意:这个坑没有错误提示。 配置看起来完全正常,请求也成功,唯一的症状是缓存永远不命中、成本按 50 倍走。排查成本的时候,第一件事就是回去把
api:删掉。
坑二:Region 不设成 Global,模型直接不可用
OpenCode 侧默认只允许 Europe 与 United States 区域,DeepSeek 两个模型需要你在 Console 的 Settings › Privacy 里把 Regions 选成 Global。不做这步,key 正确、配置正确,依然调不通。
这个设置页只对有活跃 Go 订阅的 owner 或 admin 显示。订阅前打开是看不到 Regions 那一栏的,容易误以为文档漏写。
坑三:key 长度是 51
复制 key 的时候尾部多一个字符(比如 %)是常事,症状是 HTTP 401。与其反复调 DSH,不如先量长度:
KEY=$(cat "$KEY_FILE")
[ ${#KEY} -eq 51 ] && echo ok || echo "长度不对: ${#KEY}"
403 来自 Cloudflare,不是 OpenCode
用 Python 脚本调这个端点会直接 403,返回体是一行 error code: 1010。这不是鉴权失败,也不是额度问题,是 Cloudflare 的 WAF 在拦 UA 指纹。
三个客户端打同一个端点,结果完全不同。
同一端点、不同默认 UA 的结果
| 客户端 | 默认 User-Agent | 结果 |
|---|---|---|
| Python urllib | Python-urllib/3.13 | 403,error code 1010 |
| Node fetch (undici) | 不发送 UA | 200 |
| curl | curl/8.x | 200 |
所以官方文档里那句「客户端应当用自己的 user agent 标识自己,而不是通用 SDK 或 HTTP 库的名字」,不是建议,是硬性拦截。只是触发条件很具体——curl 和 Node 都不受影响,偏偏 Python 的标准库 UA 会被拦。
如果你们用 Python 写健康检查、监控探针或者批量任务,这里一定会踩。加一行自定义 UA 就好。
req = urllib.request.Request(
url, data=body, headers={
"Authorization": "Bearer " + key,
"Content-Type": "application/json",
"User-Agent": "your-agent/1.0",
"x-opencode-session": "ses_stable_id",
})
额度的真实购买力
OpenCode 在每个响应的 usage.opencode 里回了两个字段:list_cost 是按模型标价算出的费用,allowance 是实际计入套餐额度的金额。两者的比值稳定在 0.600。
这意味着 Go 套餐按标价的六成计消耗:100 美元额度,实际对应约 166.67 美元的标价用量。这也是为什么官方敢说 100 美元能跑 21.6 万次请求——比按标价直接除算出来的多得多。
三次请求的系数校验
| 请求 | list_cost | allowance | 比值 |
|---|---|---|---|
| 短请求探活 | 0.00001830 | 0.00001098 | 0.600 |
| 长上下文首轮 | 0.00017368 | 0.00010421 | 0.600 |
| 长上下文次轮 | 0.00002315 | 0.00001389 | 0.600 |
但这个额度不是稳定定价,它在两个月里被改过四轮:9 月 10 日接入时 15 美元,9 月中限时四倍到 60 美元,10 月 12 日提到 80 美元,10 月底到 100 美元。一个半月翻了六倍多。
同期 Go Plus 从 160 美元提到 200 美元。这种幅度不是成本下降,是获客补贴。
一个半月里的额度曲线

DeepSeek V4.1 Flash 在 Go 套餐里的月度额度变化,从 15 美元到 100 美元,六次调整全部是上调。
背景:补贴期的曲线只能参考,不能当架构前提。OpenCode 这条线在两个月里已经调整过多次,方向随时可以反过来。
现在用,但别把它当长期方案
把 DeepSeek V4.1 Flash 接进 DSH 这件事,技术上是成立的,成本上是划算的,但它建立在三个会变的前提上:额度还在涨、六折系数还在、把 Region 放开这件事还允许。
所以落地时的优先级应该是:把模型路由和凭据放在能一行切走的地方,把业务逻辑和 DSH 的绑定降到最低。真要长期跑量,自己的 DeepSeek key 留在 .env 里当备份,切回去只改两行。
另外一个实测出来的数字值得写进产品预期:21.6k 上下文的冷 prefill 要 109 秒,而次轮只要 5 秒。这不是配置问题,是大 system prompt 的必然代价。做长会话产品时,要么把稳定前缀拆出来单独命中缓存,要么就别指望首轮有交互感。
要点:省钱的关键不是换更便宜的模型,是让缓存命中。同一份上下文,命中与不命中差 50 倍——这比任何订阅费率都重要。
引用与来源
- OpenCode Go 官方文档 — 额度、单价、窗口规则,核对于 2026-11-07
- OpenCode Harnesses 接入说明 — Base URL 与 session 头要求,核对于 2026-11-07
- OpenCode Console API 文档 — API key 创建与权限,核对于 2026-11-07
- DeepSeek API 定价页 — 峰谷定价与模型 ID,核对于 2026-11-07








评论前必须登录!
立即登录 注册