🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. Claude Code 的默认模型与 CC Switch 的 vendor 位
CC Switch 是社区里给 Claude Code 换供应商用的插件。这次我在它里面加了一个新 vendor,Key 从 TaoToken 的控制台拿,Base URL 填 https://taotoken.net/api,模型一栏填 DeepSeek V4.1 Flash 的广场 ID,然后执行切换命令,让 Claude Code 从默认模型转到 DeepSeek V4.1 Flash。整条链路里真正需要人做的只有三步:把 provider 记录写进配置文件、切过去、回来确认请求确实打到了 Flash。中间任何一个字段写错,现象都是「看起来切好了、实际上还在走老通道」,所以这篇把 provider JSON、切换命令和验证输出整段贴全。全文不含任何排行榜分数,手头没有可引用的公榜快照,我不会临时编一个出来凑数。
1.1 CC Switch 真正改的是哪三个字段
不管 CC Switch 的界面做得多热闹,它落到磁盘上的东西只有三个键。ANTHROPIC_BASE_URL 决定请求打到哪个域名,ANTHROPIC_AUTH_TOKEN 决定用哪把 Key 做认证,ANTHROPIC_MODEL 决定请求体里 model 字段填哪个字符串。前两个一旦定下来,平时说的「换个模型」其实只是第三个键换了个值。把这一点想明白,CC Switch 里那份 provider 记录就不再是黑盒:它就是一组环境变量的打包,界面上叫「自定义供应商」的那些输入框,无非是这三个键的图形外壳。我这份配置里,三个键分别指向 https://taotoken.net/api、YOUR_API_KEY,以及 DeepSeek V4.1 Flash 在模型广场上对应的那行 ID。
1.2 为什么这次只动 ANTHROPIC_MODEL 这一行
同一把 Key、同一个 Base URL 底下通常挂着好几个模型,切模型不需要重新申请凭证。我在 CC Switch 里保留了两份 provider:一份是原本一直在用的默认供应商,另一份指向这次要用的统一 API 通道。两份记录结构相同,差异只在三个值上——Base URL、Key、模型 ID。切换动作本身几乎零成本,真正花时间的是确认「切完之后请求去了哪」。这也是插件类工具最容易让人误判的地方:托盘图标变了、界面显示新名字了,可后台真正发请求的进程还是老的。判断依据永远不是界面,而是配置文件内容和一次真实的响应回显,后面第 4 节会把这两样都摊开。
1.3 插件配置这一层能保证什么、不能保证什么
CC Switch 能保证的是「写对了三个键」,它保证不了「服务端一定按你要的模型回应你」。中间隔着一层兼容通道,模型 ID 拼写差一个字符、Base URL 多带一段路径、Key 粘进了换行符,都会让请求以一个完全不同的形态落到服务端。所以配置完成之后必须有一道验证,验证的粒度要细到响应体里的 model 字段,而不是「看起来能聊天就行」。另外提前说明:这篇不涉及任何榜单排名、跑分数字或性价比对比,那些要引用公榜快照才能写,没有来源就不写;这里只解决一台机器上 Claude Code 换模型这一件事。
2. 给 CC Switch 补一份指向 DeepSeek V4.1 Flash 的 provider JSON
2.1 provider 记录的落盘位置与结构
CC Switch 的配置路径和字段名跟着版本走。我这份装在 macOS 上,provider 记录落在 ~/.cc-switch/config.json,外层是 providers,里面每个键是一个供应商标识,每个供应商对象里再嵌一层 env。你打开自己那份文件先扫一眼层级,别照抄我这里的键名,把三个 env 键塞进对应位置就行,字段名对不上会直接读不到。下面这段是我实际用的记录,可以直接改值复用:
{
"providers": {
"taotoken-deepseek-flash": {
"name": "TaoToken / DeepSeek V4.1 Flash",
"category": "custom",
"settingsConfig": {
"env": {
"ANTHROPIC_BASE_URL": "https://taotoken.net/api",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_MODEL": "deepseek-v4.1-flash"
}
}
}
},
"current": "taotoken-deepseek-flash"
}
字段逐个说明。providers 下面那个键是 CC Switch 内部用的标识,切换时用它定位,叫什么名字不影响请求内容,我起成 taotoken-deepseek-flash 只是为了好认。name 是界面上显示的文字,可以随便写。category 填 custom,表示这不是插件预置的供应商。settingsConfig.env 里就是前面说的三件套。current 决定当前生效的是哪一份记录,改这个值等同于在界面上点切换。最后提醒一句:模型 ID 那一行我是从模型广场复制下来的写法,你照抄之前先去广场对一眼,模型 ID 以模型广场为准,页面上那一行是什么就填什么。
2.2 三个值分别从哪里拿
Base URL 固定填 https://taotoken.net/api。它是接口根地址,不是完整端点,末尾不要带 /v1,也不要带斜杠。Claude Code 会自己在后面拼 /v1/messages,你在这里多写一段路径,最后拼出来就变成 /api/v1/v1/messages,返回 404 的时候错误信息里那串重复路径就是线索。
Key 填在 YOUR_API_KEY 的位置,实际值要去 TaoToken 的落地页注册之后,在控制台里新建一把。控制台里建出来的 Key 通常只在创建那一刻显示完整串,复制完就存进密码管理器,不要留在聊天窗口、截图或者公开仓库里。同一把 Key 可以给多台机器用,但要分得清哪台是哪把,出问题时方便单独吊销。
模型 ID 去模型广场找 DeepSeek V4.1 Flash 那一行,整行复制。同一个模型在广场上可能有多个别名,对应不同上下文长度或者不同计费档,名字长得很像,复制的时候别只看前面几个字。ID 里的大小写、连字符、点号都要原样保留,多一个空格就是另一个模型。
2.3 GUI 表单和 JSON 是同一份数据
CC Switch 界面上「添加供应商」的表单,字段跟上面那份 JSON 一一对应:名称、Base URL、API Key、模型 ID。保存之后它把这份记录写进 config.json,所以你不想手写 JSON 就在界面上填,结果等价。反过来,如果你直接编辑了 JSON,回到界面刷新一下也能看到新记录。要注意的是别两边同时改:插件进程里有一份内存状态,你在编辑器里改文件的同时它又保存了一次,老的键值可能把新的覆盖回去。我一般是先退出 CC Switch 再动文件,改完再打开。
2.4 别把 Claude Code 的三件套套到 Codex 上
顺手提一句 Codex,因为同一台机器上两个客户端都配的时候极易串。Codex 的配置在 ~/.codex/config.toml,字段名跟 Claude Code 完全不同,ANTHROPIC_* 这套前缀在 Codex 里没有任何意义,写进去只会被忽略或者报解析错误。两个客户端各写各的:
# ~/.codex/config.toml
model_provider = "taotoken"
[model_providers.taotoken]
name = "taotoken"
base_url = "https://taotoken.net/api"
env_key = "TAOTOKEN_API_KEY"
Codex 侧的 base_url 是否要带版本前缀,以你本地 codex --version 对应的那份文档为准,我这里不复述别人的写法。这篇只保证 Claude Code 这一侧的路径形态是 https://taotoken.net/api,根地址就是根地址。
3. 切换命令:把 Claude Code 从默认模型转到 DeepSeek V4.1 Flash
3.1 在 CC Switch 上的动作顺序
切换本身只有几下操作,但顺序错了就白切。先停掉所有正在跑的 claude 会话,这点最容易漏——环境变量是进程启动那一刻读进去的,会话还活着的时候改配置,新值不会自动生效。接着打开 CC Switch,在列表里选中刚才那份记录,确认 current 指向它。最后重新敲 claude 启动。如果 CC Switch 常驻托盘,退出 claude 之后再看一眼托盘菜单里的当前供应商,确保显示的是新加的那份。整个动作链里没有任何魔法,就是把选中记录的 env 写回 ~/.claude/settings.json。
3.2 版本带命令行入口的情况
部分 CC Switch 版本会附带一个命令行入口,形态大概是这样:
cc-switch use taotoken-deepseek-flash
cc-switch current
第一行按标识切换,第二行回读当前生效的 provider。子命令名、参数位置这些细节跟着版本变,敲 cc-switch --help 看你手上那份支持什么,如果根本没有这个可执行文件,直接跳到下一节用文件方式做。
3.3 没有 CLI 时,用一段 shell 把三件套写回 settings.json
CC Switch 切换的本质就是往 ~/.claude/settings.json 写 env,手工做一遍既能验证它有没有写对,也能在没有插件入口的机器上复现。最省事的写法是整份覆盖,前提是你的 settings.json 里没有别的东西:
cp ~/.claude/settings.json ~/.claude/settings.json.bak
cat > ~/.claude/settings.json <<'JSON'
{
"env": {
"ANTHROPIC_BASE_URL": "https://taotoken.net/api",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_MODEL": "deepseek-v4.1-flash"
}
}
JSON
如果你原来的配置里还有权限规则、hooks 或者别的字段,别整个替换,只改 env 这一层:
jq '.env = {
"ANTHROPIC_BASE_URL": "https://taotoken.net/api",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_MODEL": "deepseek-v4.1-flash"
}' ~/.claude/settings.json > /tmp/settings.new.json \
&& mv /tmp/settings.new.json ~/.claude/settings.json
两个写法里的模型 ID 都要换成模型广场上的那一行字符串。改完退出所有 claude 进程,重新启动。
3.4 回读一遍,确认文件这一层写进去了
jq -r '.env.ANTHROPIC_BASE_URL, .env.ANTHROPIC_MODEL' ~/.claude/settings.json
正常输出两行:
https://taotoken.net/api
deepseek-v4.1-flash
两行都对,说明磁盘上是切好了。但文件对了不代表请求一定走这个模型,因为 shell 里的同名环境变量优先级更高,会盖掉配置文件:
env | grep -E '^ANTHROPIC_'
如果这一条命令冒出来一个跟文件里不一样的 ANTHROPIC_MODEL,先去 shell 配置文件(.zshrc、.bashrc 或者 .profile)里把那几行注释掉,重开终端,再启动 claude。插件配置类问题里,有相当一部分根本不是插件没生效,而是外面套了一层更早写入的环境变量。
3.5 一次会话级的替代方案
不想动配置文件的时候,可以用官方 CLI 直接拉起一个临时会话:
npm install -g @taotoken/taotoken
taotoken cc -k YOUR_API_KEY -u https://taotoken.net/api -m YOUR_MODEL_ID
-u 后面同样是不带 /v1 的根地址,-m 后面是模型广场上那一行 ID。这个命令只对本次拉起来的会话生效,退出就没了,适合临时验证某个模型在 Claude Code 里手感如何。日常长期使用还是写进 CC Switch 的 provider 记录,免得每次重新拼参数、也免得哪天漏了一个参数还以为自己切了。
4. 一条能证明请求发往 DeepSeek V4.1 Flash 的输出样例
4.1 会话内的自检只能算半张证据
Claude Code 里敲 /status,看两行:Base URL 是不是 https://taotoken.net/api,模型是不是 DeepSeek V4.1 Flash 对应的那个 ID。这一步只能证明客户端打算这么发,不能证明服务端真的按这个模型路由。原因很直接:status 读的是本地配置,而请求要穿过兼容层才落到模型上,中间任何一层都可以把它改写。要把这件事钉死,得看响应体。
4.2 直接看响应里的 model 字段
同一把 Key 拿 curl 打一次最小请求:
curl -s "$ANTHROPIC_BASE_URL/v1/messages" \
-H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "'"$ANTHROPIC_MODEL"'",
"max_tokens": 64,
"messages": [
{"role": "user", "content": "用一句话说明你当前是哪一版模型"}
]
}' | jq '{model, stop_reason, usage}'
我在自己终端上跑出来是这样:
{
"model": "deepseek-v4.1-flash",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 22,
"output_tokens": 15
}
}
这是本次运行的一条输出,token 数每次都不同,字段名也可能随兼容层版本有出入,别把它当固定格式。判断标准很单一:响应里 model 字段回显的是本次实际路由到的模型。如果这里回显的还是切换之前的名字,说明请求打到了老通道,回去检查 ~/.claude/settings.json 和 shell 环境变量。有的兼容层不回显 model 字段,那就退一步看返回文本里的自称,或者直接去控制台翻这一时间段的调用明细,模型维度上通常有记录。
4.3 四条容易误判的路径
下面这几种现场我在配置过程中都遇到过,现象看着像同一类,原因完全不同:
| 现场 | 大概率原因 | 处理方式 |
|---|---|---|
| 状态里显示新模型,回答里自称旧模型 | 旧 claude 进程没退干净,或者 shell 里还留着同名环境变量 | 全部退出,重看一遍 ANTHROPIC_ 开头的变量再启动 |
| 404,错误信息里出现 /v1/v1 | Base URL 尾巴上多带了 /v1 | 改回 https://taotoken.net/api |
| 401 invalid api key | 粘的是另一家供应商的 Key,或者复制时带进了空格换行 | 回控制台重新复制一次,注意首尾字符 |
| 400 model not found | 模型 ID 抄成了别的别名,或大小写不对 | 去模型广场整行重新复制 |
排查顺序建议从上往下走:先确认进程干净,再确认地址形态,最后才怀疑 Key 和模型 ID。反过来查的话,很容易在 Key 上折腾半天,结果发现只是老进程没退。插件这一层能出的错基本就这四类,剩下的问题要么在通道侧,要么在模型侧,看控制台的错误码会更快。
5. 默认供应商与 DeepSeek V4.1 Flash 两份记录来回切
5.1 两份 provider 并存的写法
实际用起来不会只留一份。把默认供应商和新加的那份并排放,靠 current 决定生效哪一份:
{
"providers": {
"default-vendor": {
"name": "默认供应商",
"category": "custom",
"settingsConfig": {
"env": {
"ANTHROPIC_BASE_URL": "https://你原来的地址",
"ANTHROPIC_AUTH_TOKEN": "YOUR_OTHER_KEY",
"ANTHROPIC_MODEL": "YOUR_OTHER_MODEL_ID"
}
}
},
"taotoken-deepseek-flash": {
"name": "统一通道 / DeepSeek V4.1 Flash",
"category": "custom",
"settingsConfig": {
"env": {
"ANTHROPIC_BASE_URL": "https://taotoken.net/api",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_MODEL": "deepseek-v4.1-flash"
}
}
}
},
"current": "taotoken-deepseek-flash"
}
两份记录共用一套结构,好处是切回去只是把 current 改成另一个键,不用重新回忆原来的地址长什么样。改 current 之后照样要先退进程再启动。想确认广场上 DeepSeek V4.1 Flash 那一行的 ID 跟 JSON 里的字符串完全一致,回 TaoToken 的模型广场对一遍就行,模型 ID 以模型广场为准这条在来回切的时候尤其重要——两份记录里只要有一份的 ID 过时了,切过去就是 400。
5.2 切回去的检查清单
从 Flash 切回默认供应商,三个动作跑完就够:改 current 或者点界面切换、回读一次 ~/.claude/settings.json 的 env、发一条最小请求看响应里的 model 字段是不是回到了老名字。三条里任何一条对不上,就停在那里查,别继续往下配。判断「这次切换到底走没走通」这件事,永远以响应回显为准,界面状态只是辅助信息。
5.3 复现的时候一把 Key 就够
想对比两个模型在同一条 Prompt 上的表现,不用申请两套凭证,同一把 Key 换 ANTHROPIC_MODEL 就够了。把同一条 Prompt 分别跑一遍,把两次的响应体、耗时、token 数记下来,注意这里是一次本地运行,不代表任何公榜成绩,样本量也远远不够下结论。真正要判断模型能力,去看有来源的榜单单页;插件配置这一层只需要保证「请求确实打到了你要的那个模型」。
5.4 收尾
配完这一轮,想知道刚才那条请求有没有算进用量,打开 模型对话 用同一个模型 ID 再发一条,跟控制台的调用明细对着看,两边都对得上就说明链路通了。准备把 Claude Code 当日常主力,可以看 Coding Plan;要给第二台机器配同一份 provider,Key 在 控制台 里再建一把。env 三件套的字段名和配置文件路径,对着 Claude Code 接入文档 再核一遍,模型 ID 始终以模型广场为准。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度




被折叠的 条评论
为什么被折叠?



