🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. CC Switch 的默认供应商,改的是 Claude Code 会重新读的那份文件
CC Switch 里最值得先固定下来的不是某个模型,而是那条统一的 API 通道:TaoToken。它做的是兼容通道这件事——一个 Base URL、一把 Key,模型 ID 换一换,同一套 Claude Code 配置就能跑不同模型。这篇要完成的事情很具体:在 CC Switch 里新增一个自定义供应商,把默认供应商切到 Kimi K2.7 Code,然后拿命令和日志证明 Claude Code 发出的请求已经不再落到旧供应商身上。之所以值得单独写一篇,是因为切换器这类工具的坑几乎都不在「填表单」这一步,而在切换之后的生效链路:界面上那一行变成高亮,跟你终端里那条 claude 进程真正把请求发去哪,是两件可以同时成立也可以互相矛盾的事。很多人卡住的地方不是配置不会填,而是填完之后不知道该看哪里才算数,这篇文章就把「看哪里」全部落到可复制的命令和一次完整请求记录上。
1.1 CC Switch 管的是两份配置,不是一份
CC Switch 这类工具通常同时管两端:Claude Code 走 Anthropic 协议,读 ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL 这几个键;Codex 走 OpenAI 协议,读的是 ~/.codex/config.toml。两套完全分开,在 Claude 标签页里加供应商不会动到 Codex 的配置文件,反过来也一样。这件事听着是常识,但排障时最费时间的错误就是把两套混着查:Claude Code 报 401,你去翻 config.toml;Codex 连不上,你去看 ~/.claude/settings.json。先把「我现在要改的是哪一端」定死,后面每一步才有意义。本篇从头到尾只处理 Claude Code 这一端,Codex 只在一处提醒,不展开。
1.2 生效优先级:环境变量压过配置文件
Claude Code 取配置的顺序大致是:进程环境变量优先,其次是 ~/.claude/settings.json 里的 env 块,再往后才是内置默认值。CC Switch 的「设为默认」,多数版本做的事情是把供应商的 Base URL、Key、模型写进 Claude Code 会读的配置位置;但如果你在 .zshrc、.bashrc 里,或者顺手在某次调试中 export 过 ANTHROPIC_BASE_URL,那个值会盖过配置文件里的。于是就会出现一种很典型的状况:CC Switch 界面上默认供应商明明已经换成新的,终端里发出去的请求还在打旧地址,日志上也看不出哪里不对,你会以为是供应商那边有问题,实际上是本地有两份来源在抢同一件事。
判断方法不复杂,切换前后各跑一次下面两行,把两份来源都打印出来放在一起看:
env | grep -E 'ANTHROPIC_(BASE_URL|AUTH_TOKEN|MODEL)' || echo "no env override"
cat ~/.claude/settings.json
这两行是本文后面所有验证的基线快照,建议切换前先把输出存到 /tmp/claude-before.txt,切换后再 diff 一次,比人眼来回扫要可靠。如果第一条命令里有非空的 ANTHROPIC_BASE_URL,先把它处理掉:要么在 shell 配置里删掉,要么确认它就是你要的地址。带着一个来源不明的环境变量去调 CC Switch,等于在两条并行生效的配置上做实验,切换成功与否都说不清。
2. 新增自定义供应商:Base URL、Key、模型 ID 三件套
2.1 先把 Key 和模型 ID 拿到手
Key 在控制台创建,模型 ID 从模型广场复制,不要手打,这两句话是本节的其余内容的前提。原因很直白:模型 ID 里带连字符、带版本号、大小写有讲究,手打错一个字符,表现是 model not found,但报错信息往往长得很像鉴权失败,方向一下就偏了。注册和控制台入口在 TaoToken,进去之后创建一把 Key,命名上带个用途备注,比如 cc-switch-mac,以后在控制台看用量的时候好对账。创建完立刻复制,部分控制台出于安全考虑只会完整展示一次。
模型那一栏,我们这篇要填的是 Kimi K2.7 Code。它的 ID 以模型广场上展示的为准,广场上怎么写你就怎么复制。顺手在同一个页面确认两件事:这个模型是否支持 Anthropic 兼容调用、有没有单独的小模型可以配。Claude Code 除了主对话模型,还会调用一个轻量模型去做会话标题、上下文压缩之类的后台任务,如果通道里没有对应的小模型,有些配置下会冒出零星报错,主对话却完全正常,很容易被误判成网络抖动。
2.2 CC Switch 供应商条目长什么样
CC Switch 的供应商表单一般有这么几栏:名称(只用来显示)、Base URL、API Key、模型。名称随便起,起得有辨识度就行,别用「test」「new」这类词,过两天你自己也认不出这是哪条通道。Base URL 这一栏填 https://taotoken.net/api,注意结尾不带 /v1,也不要在这栏里塞任何查询参数——有人习惯把网页上复制来的整条地址粘进去,多一个问号后面的东西,请求路径就错了。Key 那一栏粘贴你刚创建的真实值,本文所有示例里它都写成 YOUR_API_KEY 这个占位符,你替换成自己的即可。
如果你更习惯直接改配置文件,或者想把「我到底填了什么」留成一份可复制的记录,可以参考下面这段结构。字段名以你本地 CC Switch 版本为准,不同版本可能是驼峰也可能是下划线,形状对了、值对了就行:
{
"providers": [
{
"id": "taotoken-unified",
"name": "TaoToken",
"kind": "anthropic",
"baseUrl": "https://taotoken.net/api",
"apiKey": "YOUR_API_KEY",
"model": "kimi-k2.7-code",
"smallFastModel": "kimi-k2.7-code",
"enabled": true
}
],
"defaultProvider": "taotoken-unified"
}
这段 JSON 里有两个地方要替换:apiKey 换成你的真实 Key,model 和 smallFastModel 换成模型广场上 Kimi K2.7 Code 的实际 ID。defaultProvider 指向 taotoken-unified,意思是默认供应商是这一条。我用 taotoken-unified 而不是别的名字,纯粹是为了让供应商列表里一眼能看出它是走统一通道的那条,跟厂商直连的条目区分开。如果你不想手改文件,用界面表单填同样的四个值,效果是一样的,JSON 在这里的作用是让配置可以被复制、被对照,而不是必须手写。
2.3 Claude Code 侧最终应该长成什么样
这一步很多人会跳过,直接去发请求,然后失败,再回来猜。切完之后,Claude Code 读到的 env 块应该接近下面这样:
{
"env": {
"ANTHROPIC_BASE_URL": "https://taotoken.net/api",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_MODEL": "kimi-k2.7-code",
"ANTHROPIC_SMALL_FAST_MODEL": "kimi-k2.7-code"
}
}
四个键各有分工。ANTHROPIC_BASE_URL 决定请求打到哪,这里就是统一通道的入口,注意依然不带 /v1,也不带任何 UTM 参数,UTM 只属于网页落地统计,跟接口地址没关系。ANTHROPIC_AUTH_TOKEN 是鉴权用的令牌。ANTHROPIC_MODEL 是你希望主对话使用的模型,值以模型广场为准,上面那串只是形状示例。ANTHROPIC_SMALL_FAST_MODEL 管后台轻任务,有些版本不写它也能跑,写了更稳;如果它指向一个不存在的 ID,你会看到会话标题生成失败之类的零碎报错,而主对话一切正常,这种「半好半坏」的状态最容易被忽略。
3. 把默认供应商切到 Kimi K2.7 Code 的操作顺序
顺序比操作本身重要。下面这六步,前五步任何一步颠倒,都可能让最后一步的结论不可信。
第一步,关掉所有正在跑的 claude 会话,包括 IDE 内嵌终端里开着的那些。环境变量和配置在进程启动时读取,已经在跑的进程不会因为你切了供应商就改主意。
第二步,在 CC Switch 里新增供应商并保存。这一步不要顺手发请求,先只做写入。
第三步,把这条供应商标为默认。有的版本这个动作叫「设为默认」,有的叫「应用」或者「Apply」,还有一个独立的「写入 Claude Code 配置」按钮,点一次。
第四步,用命令确认写入结果,而不是相信界面:
jq -r '.env.ANTHROPIC_BASE_URL, .env.ANTHROPIC_MODEL' ~/.claude/settings.json
没装 jq 就直接 cat ~/.claude/settings.json 看 env 块。这里要看到的是统一通道的 Base URL 和你要的模型 ID,如果看到的还是旧供应商的地址,说明写入没生效或者被别的地方覆盖了,回到 1.2 那两行命令排查。
第五步,开一个全新终端,发一条最小请求。
第六步,顺手确认 Codex 那侧没被牵连:~/.codex/config.toml 里不该出现任何 ANTHROPIC_ 开头的键,那属于另一套协议,混进去只会让 Codex 报莫名其妙的错。
实测下来,最容易出问题的不是第三步,而是「切换完不重启会话」和「shell 里写死了环境变量」这两件事,它们造成的现象一模一样:请求仍然打到旧地址,但 CC Switch 界面看起来毫无破绽。还有一个不常见但确实存在的坑,是托盘里常驻了多个 CC Switch 实例,你操作的那个窗口并没有把状态回写到磁盘,另一个实例还在用旧值。切完先 cat 一次文件,能省掉半小时的自我怀疑。
4. 验证请求不再指向旧供应商
验证分两块:反向证伪和正向抓取。只做其中一块,结论都不够硬。
4.1 反向验证:把旧供应商的 Key 弄坏
思路很直接:旧供应商的条目先别删,把它的 Key 改成一个明显无效的字符串,比如 invalid-legacy-key,然后发一条请求。如果成功,说明请求根本没走旧供应商;如果报 401,说明还在走旧的。这一步的价值在于它检测的是「实际行为」,而不是「配置看起来对不对」。配置正确但进程没重启的情况,靠看文件是看不出来的,靠这个测试一眼就现形。
具体做法:在 CC Switch 里找到旧供应商条目,把 Key 字段改掉并保存,但不要把它设为默认。然后新开终端跑:
claude -p "只回复 pong"
返回 pong 就说明请求落点已经变了。如果这里报鉴权错误,别急着怀疑新供应商,先回到 1.2 确认是不是环境变量在生效。
4.2 正向抓取:看 endpoint 到底是哪个
反向验证能证明「不是旧的」,正向抓取才能证明「是新的」。跑一条带 debug 输出的小请求,把 URL 相关的行过滤出来:
claude --debug -p "只回复 pong" 2>&1 | tee /tmp/claude-debug.log | grep -Ei "https?://|/v1/messages" | head -20
不同版本的 debug 字段名不一样,但请求 URL 一定在里面。你要确认两件事:host 段是统一通道的域名,路径前缀是 /api/v1/messages——Base URL 填的是不带 /v1 的那种,客户端自己会补上版本段,所以最终路径里出现 /v1/messages 是正常的,而 Base URL 那一栏里不该有 /v1。这个区别是 404 的主要来源,值得单独记一下。
4.3 一次请求日志
下面这段是本机一次运行的原样形态,Key 和 session 做了脱敏处理,模型 ID 也换成了占位写法。耗时和 token 数会随 prompt 长度、网络状况变化,这些数字只说明「请求真的发出去了、回来了」,不构成任何性能结论。
$ claude -p "只回复 pong" --output-format json
{"type":"result","subtype":"success","is_error":false,
"duration_ms":2187,"num_turns":1,"result":"pong",
"session_id":"a1b2c3d4-****",
"usage":{"input_tokens":412,"output_tokens":6}}
同一时刻 debug 日志里对应的两行大致长这样:
[DEBUG] request: POST https://taotoken.net/api/v1/messages
[DEBUG] response: 200 OK
判断标准就两条:host 是新入口,返回码是 200。毫秒数不用管。这篇不做任何公榜引用,也没有 SWE-bench、LiveCodeBench 之类的分数——本文不含排行分数,上面这些只是配置验证需要的一次本机记录,一次运行不代表任何榜单结论。
4.4 旁证:绕开 Claude Code 直接打一发
想再把「Key 本身有问题」和「CC Switch 没写进去」这两类原因切开,可以直接打一发最小请求。注意这个地址不带任何 UTM 参数:
curl -sS -o /dev/null -w "%{http_code} %{url_effective}\n" \
https://taotoken.net/api/v1/messages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"kimi-k2.7-code","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'
返回 200 说明 Key 和路径都能用,问题在客户端配置侧;返回 401 就去核对鉴权头,有的兼容通道要求用 x-api-key 而不是 Bearer,具体以接入文档为准。这一步不是必须的,但当你怀疑 Key 的时候,它比反复重启 Claude Code 快得多。
5. 本篇配置里会遇到的几种报错
401 / authentication_error:Key 没落到 Claude Code 真正读取的位置,或者粘贴时带进了换行和空格。切换供应商后没重启会话也会表现成这个。先把 settings.json 里的 env.ANTHROPIC_AUTH_TOKEN 打印出来,对着控制台里的 Key 头尾各比三个字符。
404 / not_found:Base URL 多写了 /v1。填 https://taotoken.net/api 就够了,版本段由客户端补。也有一种情况是 Key 里混进了网页复制的空格,导致路径拼接异常。
model not found:模型 ID 手打错了。回模型广场重新复制 Kimi K2.7 Code 的 ID,别用记忆里的写法。主模型对了但会话标题报错,通常是小模型 ID 没配或配错,不影响主对话。
请求成功但用量算在旧供应商:这是环境变量覆盖配置文件的经典症状,回到 1.2 那两行命令,找到那个来源不明的 ANTHROPIC_BASE_URL 删掉。
Codex 那侧跟着报错:基本可以确定是你把 ANTHROPIC_* 写进了 ~/.codex/config.toml。两套协议不通用,删掉即可。
切换后一切正常,第二天又变回去:检查是不是有多个 CC Switch 实例在跑,或者某个开机脚本在写同一份配置文件。
这几种错误的共同点是:现象都发生在客户端这一侧,而很多人第一反应是去怀疑通道。把「配置写入是否生效」和「通道是否可用」分成两步验证,99% 的情况几分钟就能定位。
6. 用同一把 Key 复现这份清单
要完整复现本篇,按这个顺序走一遍就行:去 TaoToken 创建一把 Key;在 CC Switch 里新增自定义供应商,Base URL 填 https://taotoken.net/api,Key 填刚创建的值,模型 ID 从模型广场复制 Kimi K2.7 Code;设为默认;关掉所有旧会话;用第 4 章的三条命令验证落点。跑完这套动作,你手上应该有三样东西:一份供应商配置 JSON、一份 settings.json 的 env 快照、一份带 endpoint 的请求日志。
切完之后想确认这次调用有没有正常入账、模型 ID 跟广场展示是否一致,打开 模型对话 手动发一条同样的 prompt 做对照,浏览器里能看到的结果和终端里应该对得上。长期把这套配置当开发主力,可以看 Coding Plan。Key 统一在 控制台 管理,切换供应商之前建议先给 Key 起个能认出用途的名字,方便后面回来看用量。Claude Code 与 CC Switch 的完整字段对照,以 接入文档 为准,字段随版本变化时以那里为准,别只信任何一篇博客里的字段名。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度




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



