快速开始 · 接口 · 客户端 · 与官方文档的差异 · 额度面板 · 配置 · 安全 · 故障排查 · English
把 DeepSeek 官方 API 的三套协议搬到本地,后端是 Command Code Go 套餐:改一个 base_url 就能用,行为按官方文档逐项实测对齐。
Command Code 的 Go 套餐是 $1 / 月,官方原话是「Your $1 buys $10 of credits」,即 $1 换 $10 额度,十倍杠杆。这些额度按美元计价消耗在模型调用上,可以全部用在 DeepSeek 上:
| 窗口 | 上限 |
|---|---|
| 5 小时 | $3 |
| 每周 | $6 |
| 每月 | $10 |
对照 DeepSeek 官方定价(模型 & 价格),Flash 每百万 token 空闲时段 $0.003(缓存命中)/ $0.15(未命中)/ $0.60(输出),高峰时段翻倍:
| 项 | 空闲 | 高峰 |
|---|---|---|
| 输入 · 缓存命中 | $0.003 / 1M | $0.006 / 1M |
| 输入 · 未命中 | $0.15 / 1M | $0.30 / 1M |
| 输出 | $0.60 / 1M | $1.20 / 1M |
按未命中输入算,$10 额度约合 6600 万 token 的月用量;纯输出则约 1600 万。同样的量在官方 API 需要实付 $10。
也就是说:花 $1 拿到官方 $10 的 DeepSeek 用量,代价是走 Command Code 的通道、受套餐窗口限速,而不是直连 DeepSeek 的机房。
Go 套餐本身只对官方 CLI 开放 /alpha/generate,不提供标准 API。本项目补上协议翻译层,让这 $1 的额度能被任何 OpenAI / Anthropic / Responses 兼容的客户端调用——包括 Claude Code、Codex、opencode、pi、DSH。
这不是官方渠道,用量上限、模型可用范围、服务稳定性都取决于 Command Code 而非 DeepSeek,也可能随时变化。它适合个人开发与试验,不适合当作生产依赖。
Command Code 官方文档写明:除了 Go 套餐,其它套餐都有 API 访问权。
Every plan except the Go plan has API access. Point any OpenAI or Anthropic compatible client at
https://api.commandcode.ai/provider/v1
| 套餐 | 官方 API | 是否需要本项目 |
|---|---|---|
| Go($1/月) | 无 | 需要 |
| GOAT($10/月,$80 额度) | 有 | 不需要 |
| Pro / Max / Ultra | 有 | 不需要 |
如果你在用 GOAT 或更高套餐,直接把它们给的 Key 和 https://api.commandcode.ai/provider/v1
填进客户端即可,没有转译损耗,也不需要本地进程。本项目存在的唯一理由,是 Go 套餐
只对官方 CLI 开放私有端点、不提供标准 API。
需要 Windows 10/11、PowerShell 5.1+、Node.js 24+。
.\scripts\install.ps1 # 检查环境、生成 config.json
commandcode login # 登录 CLI,生成 auth.json
.\launch.ps1 # 启动;窗口开着就在跑,关窗即停启动后面板会列出三个本地地址。可选:
.\scripts\make-shortcut.ps1 # 桌面快捷方式
.\scripts\test-proxy.ps1 # 自检
npm run verify # 三套协议对齐验证| 协议 | 本地地址 | 官方文档 |
|---|---|---|
| OpenAI Chat Completions | http://127.0.0.1:8787/v1 |
create-chat-completion |
| Anthropic Messages | http://127.0.0.1:8787 |
anthropic_api |
| Responses | http://127.0.0.1:8787/v1 |
responses_api |
API Key 填 proxy-managed(哨兵值,网关替换成 auth.json 里的真实密钥)。留空同样可用;填别的值会被当作你自己的上游密钥原样转发,鉴权失败时返回 401。
模型名可写 deepseek-v4-flash、deepseek-v4.1-flash 或 deepseek-flash。按官方文档,deepseek-flash 指向 V4.1-Flash,本项目对齐这一语义;deepseek-v4-flash 与 deepseek-v4.1-flash 是上游两个独立模型,各自可直接调用。/v1/models 会列出全部可用模型及上下文窗口。
图片输入:deepseek-v4.1-flash、deepseek-v4.1-flash-fast、deepseek-v4-flash-vision-exp 支持,deepseek-v4-flash 与 deepseek-v4-pro 看不到图(会回「没有图片」)。三套协议都能传图,Base64 data URL 与 http(s) 链接均可。
官方为 8 个 Agent 提供了接入指南。本项目不重写这些配置——按官方文档配好, 只把 base URL 换成本地地址即可,协议行为一致。
| Agent | 官方接入文档 | 本地要改的 |
|---|---|---|
| Claude Code | claude_code | ANTHROPIC_BASE_URL → http://127.0.0.1:8787 |
| Codex | codex | base_url → http://127.0.0.1:8787/v1 |
| OpenCode | opencode | baseURL → http://127.0.0.1:8787/v1 |
| Hermes | hermes | Base URL → http://127.0.0.1:8787/v1 |
| OpenClaw | openclaw | Base URL → http://127.0.0.1:8787/v1 |
| Qoder | qoder | 自定义模型的 Base URL → http://127.0.0.1:8787/v1 |
| Reasonix | reasonix | 首次向导里的 Base URL → http://127.0.0.1:8787/v1 |
| WorkBuddy / CodeBuddy | workbuddy | models.json 里的 url → http://127.0.0.1:8787/v1/chat/completions |
API Key 一律填 proxy-managed。
CC Switch 支持 10 个客户端,其中 8 个走 DeepSeek 预设时可以直接指向本地。复制对应的 DeepSeek 预设,只改地址:
| CC Switch 里的客户端 | 改哪个字段 | 值 |
|---|---|---|
| Claude Code | ANTHROPIC_BASE_URL |
http://127.0.0.1:8787 |
| Claude Desktop | 模型映射的 Base URL | http://127.0.0.1:8787 |
| Codex | TOML 的 base_url |
http://127.0.0.1:8787/v1 |
| OpenCode | options.baseURL |
http://127.0.0.1:8787/v1 |
| OpenClaw | 供应商 Base URL | http://127.0.0.1:8787/v1 |
| Hermes | base_url |
http://127.0.0.1:8787/v1 |
| Pi | baseUrl |
http://127.0.0.1:8787/v1 |
| MiniMax Code | 模型配置的 Base URL | http://127.0.0.1:8787/v1 |
Gemini CLI 与 Grok Build 走各自的 Native 协议,本项目未实现,不能指向本地。
Claude Code 的上下文声明:它按内置模型目录判断窗口,遇到没见过的模型名会退回 200k 并告警。
在模型名后加 [1M] 声明真实窗口即可,这个后缀不会发给上游:
$env:ANTHROPIC_MODEL = "deepseek-v4-flash[1M]"也可以用 CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000。
OpenCode 的模型 id 不能带斜杠:它用 provider/model 寻址,斜杠会被当层级分隔符,
把 deepseek-v4-flash 之外的写法(如带 / 的)写进 models 会被截断导致 403。
用扁平的 deepseek-v4-flash,调用时 --model ccgo/deepseek-v4-flash。
pi / DeepSeek Harness 按 URL 判断供应商:两者底层同为 pi-ai,会看 base URL 里有没有
deepseek.com 来决定思考格式。本地地址不含该串,需显式声明 compat:
{
"compat": {
"thinkingFormat": "deepseek",
"requiresReasoningContentOnAssistantMessages": true,
"requiresThinkingAsText": false,
"maxTokensField": "max_tokens",
"supportsReasoningEffort": true
}
}pi 的配置放 $env:PI_CODING_AGENT_DIR\models.json。
三套协议逐项实测,npm run verify 可复现:
PASS OpenAI Chat Completions 差异 0
PASS Anthropic Messages 差异 0
PASS Responses 差异 0
需要知道的偏差,全部源于上游通道的能力边界:
| 项 | 说明 |
|---|---|
| 计费 | 套餐窗口额度($3 / $6 / $10),非官方按 token 计费 |
logprobs / top_logprobs |
上游不返回,响应中为空 |
n > 1 |
只返回 1 条 |
web_search 工具 |
上游无服务端搜索,忽略 |
| Files API | 无文件存储,未实现 |
FIM 补全(/beta) |
上游无该端点,未实现 |
| 上下文硬盘缓存 | 由上游内部管理,不可控 |
官方本身标注为「忽略」的字段,本项目同样忽略、不报错。这类字段在各协议官方文档的兼容性小节里都有列表,实现时逐条对齐,未额外增减。
启动后显示静态面板,不自动刷新。测速不自动执行——TPS 栏启动时为 -,按 T 才测,因为每次测速都消耗额度。
| 按键 | 作用 |
|---|---|
R |
刷新额度与实际用量 |
T |
测速(消耗少量额度) |
Q |
退出并停止 |
面板分四块:三套协议的本地地址、模型清单(上下文 + 实测 TPS)、三窗口额度(已用 / 剩余 / 进度 / 重置时间)、运行状态。TPS 达到阈值标绿、偏低标黄;E 表示测速失败。
数据来源:模型清单与上下文来自上游 /provider/v1/models,窗口上限与已用量来自 /alpha/billing/credits(上限由服务端下发,不写死),套餐名与月总额按 planId 映射。
单进程、单端口,三套协议共用一条上游通道。协议层自研,无第三方依赖。
vendor/
wire.mjs upstream protocol: headers, wire messages, NDJSON events
translate.mjs OpenAI Chat / Anthropic Messages <-> wire
responses.mjs OpenAI Responses <-> wire
server.mjs HTTP routing for all three
字段布局来自对官方 CLI 发布产物的静态分析,逐条记录在 docs/COMMAND-CODE-PROTOCOL.md。与早期依赖第三方包 的实现相比,自研版对齐了几处此前偏离的细节:
| 项 | 早期实现 | 现在 |
|---|---|---|
User-Agent |
仿造的 CLI 字符串 | 官方值 cli |
| 图片块 | 无 mimeType |
带 mimeType |
traceparent |
自造格式 | 标准 W3C 00-<trace>-<span>-01 |
| 截断检测 | 无 | 无 finish 且无 abort → 可重试 502 |
| 推理 token | 恒为 0 | 从 outputTokenDetails.reasoningTokens 提取 |
| Responses 端口 | 独立 8788 进程 | 与另两套同端口 |
验证分两档:
npm run verify:offline # 离线:mock 上游,15 项断言,零额度消耗
npm run verify # 真实:连上游逐项对齐,3/3 通过,消耗少量额度改代码后用离线验证,它跑的是同一套协议翻译逻辑,只是上游换成本地 mock —— 不需要凭据、不消耗套餐额度、秒级完成。真实验证只在需要确认「与官方对齐」时跑。
npm run mock # 单独启动 mock 上游(默认 :8799)
node tools/mock-upstream.mjs --scenario truncated # 制造流截断场景
node tools/mock-upstream.mjs --scenario error # 制造上游错误除三套协议外还提供两个查询端点:
| 端点 | 用途 |
|---|---|
GET /user/balance |
官方 /user/balance 形状,返回剩余额度 |
GET /user/quota |
本项目形状,含 5 小时 / 每周窗口的已用、上限、重置时刻 |
请求日志默认开启,每请求写一行 JSON Lines 到 ~/.commandcode/ccgo2dsapi-requests.log;
--request-log <path> 改路径,--request-log off 关闭:
{"ts":"2026-10-21T17:56:59Z","protocol":"openai","model":"deepseek/deepseek-v4.1-flash","stream":false,"status":200,"in":35,"out":8,"reasoning":0,"ms":52}上游 429 / 5xx 会自动指数退避重试 2 次(--retries 可调),
额度耗尽等终态错误不重试。
/user/quota 的返回示例:
{
"plan_id": "individual-go-v1",
"credits": { "monthly": 5.35, "purchased": 0, "free": 0, "total": 5.35 },
"windows": {
"five_hour": { "used": 1.64, "cap": 3, "percent": 55, "reset_at": 1792602021321 },
"weekly": { "used": 4.65, "cap": 6, "percent": 77, "reset_at": 1793170293513 }
}
}config.json(由 config.example.json 复制,已加入 .gitignore)。
| 字段 | 说明 |
|---|---|
Port / HostAddress |
主代理监听,默认 8787 / 仅回环 |
AuthFile |
凭据路径,支持环境变量 |
Upstream.* |
上游接口,换服务时改这里 |
Panel.ModelFilter |
模型过滤正则,默认只匹配 DeepSeek |
Panel.SpeedTestModels |
测速范围,留空表示全部 |
PlanCredits |
各套餐月额度总额(服务端不下发此项) |
默认只监听 127.0.0.1,不要改成 0.0.0.0。不要共享密钥——上游按密钥绑定设备指纹,多机并发最容易触发风控。凭据只从 CLI 维护的 auth.json 读取,不上传;进程内缓存一份,设 CCGO_NO_CACHE 可强制重读(密钥轮换后无需重启)。
上游协议层是本项目自研的(vendor/),不依赖任何第三方 Command Code 包,也没有需要重打的补丁。协议依据来自
官方 CLI 的静态分析。早期版本曾依赖并被 commandcode-api-proxy(MIT,
作者 thaolaptrinh)启发,署名保留在
THIRD_PARTY_NOTICES.md。
使用者需自行承担账号受限、套餐终止等后果。
| 现象 | 原因 |
|---|---|
TPS 显示 - |
尚未测速,按 T |
TPS 显示 E |
测速失败,多为该模型不在套餐内 |
| 看不到思考内容 | 请求未带 reasoning_effort,或值为 none |
| 401 | 填了非 proxy-managed 的 key,且上游拒绝了它 |
| 403 / model not recognized | 模型名不对或不在套餐内 |
| 模型反复重新推理同一件事 | 历史思维链没进上下文。必须同时满足:请求带 tools 且回传 reasoning_content,缺任一条都无效(180 次实验结论,见协议文档) |
maximum context length |
会话超出 1000000 token 窗口,需精简历史或调小 max_tokens |
| 端口被占用 | 启动器会自动接管本项目的旧实例;若占用者是别的程序,用 -Port 换端口 |
.\scripts\stop-proxy.ps1
.\scripts\make-shortcut.ps1 -Remove删除项目目录即可。不写注册表、不装系统服务、不改 PATH。

