🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
1. 先把目标定清楚:两个 profile,一段代码,三种观察
CC Switch 是一个给 Claude Code 做供应商与模型切换的小工具,它把「用哪个 Base URL、带哪个 Key、默认哪个模型」这套东西抽成 profile,切换时改的是本地配置文件,不用每次手改环境变量。这次要做的实验很具体:建两个 profile,一个指向 GLM 5.3 Flash,一个指向 Kimi K2.7 Code,两者都走 TaoToken 的统一 Base URL,然后拿同一段代码解释任务分别跑一遍,记录三件事——切换后实际生效的模型 ID、首包延迟、以及报错差异。
适合谁看:已经在用 Claude Code、手里有不止一个模型额度、想按任务类型切模型的人。比如白天写业务代码用 Kimi K2.7 Code,晚上读开源项目用 GLM 5.3 Flash,手动改配置太烦,profile 就是干这个的。
产物清单先列出来,后面逐项落地:
- 两个 CC Switch profile 的 JSON 文件
- 切换命令(切到 A、切到 B、查当前)
- 一张模型 ID 对照表,含 TaoToken 侧模型名与 CC Switch 里写的值
- 同一段代码解释任务的两次调用记录,含首包延迟与报错
需要提前说明:模型的具体版本号、上下文长度、计费口径这些,以 TaoToken 官网当前页面为准,本文只写操作路径和观察方法,不替官网做承诺。
2. 拿 Key 与统一 Base URL
这一步是后面所有配置的地基。打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_generate&utm_content=ccswitch_profiles ,登录后进控制台,在 API Keys 页面创建一个新 Key。建议给这次实验单独建一个 Key,命名成ccswitch-lab,方便后面看用量时能对上号,也方便实验结束直接吊销。
创建完把 Key 复制出来,形如sk-开头的一长串。它只在创建时完整显示一次,丢了就重建,别指望在列表里再看到明文。
Base URL 统一用:
https://taotoken.net/api注意这里不带任何查询参数,就是干净的 API 根地址。CC Switch 里填的是这个根地址,具体走哪个模型由 profile 里的模型字段决定,不需要为每个模型换一个 URL。
提示:Key 不要写进会提交到 Git 的文件里。CC Switch 的 profile 如果放在项目目录下,记得加进
.gitignore,或者干脆放在用户级配置目录。
拿到 Key 之后,先用一条最朴素的请求确认它能通,别等配完 CC Switch 才发现 Key 有问题:
curl -sS https://taotoken.net/api/v1/messages \ -H "x-api-key: $TAOTOKEN_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "glm-5.3-flash", "max_tokens": 64, "messages": [{"role": "user", "content": "只回复两个字:通了"}] }'返回里能看到content数组就说明 Key 和 Base URL 都对。如果这里就 401,先查 Key 有没有复制全、有没有多余空格;如果 404,先查 URL 是不是写成了带/v1又带别的路径的组合。这一步过了,再进 CC Switch。
3. CC Switch 的 profile JSON 与切换命令
CC Switch 的 profile 本质是一份描述「环境变量怎么设」的配置。不同版本字段名可能略有差异,下面这份是通用结构,你按自己装的版本对照着改。核心就三个字段:Base URL、Key、默认模型。
先建 GLM 5.3 Flash 的 profile:
{ "name": "taotoken-glm-flash", "provider": "taotoken", "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key", "ANTHROPIC_MODEL": "glm-5.3-flash", "ANTHROPIC_SMALL_FAST_MODEL": "glm-5.3-flash" } }再建 Kimi K2.7 Code 的 profile:
{ "name": "taotoken-kimi-code", "provider": "taotoken", "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key", "ANTHROPIC_MODEL": "kimi-k2.7-code", "ANTHROPIC_SMALL_FAST_MODEL": "kimi-k2.7-code" } }两个 profile 的 Base URL 和 Key 完全一样,只有模型字段不同。这正是统一 Base URL 的好处:切模型不用动网络配置,只改一个字符串。
把这两份存成~/.cc-switch/profiles/taotoken-glm-flash.json和~/.cc-switch/profiles/taotoken-kimi-code.json(目录按你实际安装位置调整)。然后切换:
# 切到 GLM 5.3 Flash cc-switch use taotoken-glm-flash # 切到 Kimi K2.7 Code cc-switch use taotoken-kimi-code # 看当前生效的是哪个 cc-switch currentcc-switch current应该回显当前 profile 名和它注入的环境变量。如果它只回显名字不回显模型,那就手动确认一下:
echo $ANTHROPIC_MODEL echo $ANTHROPIC_BASE_URL切换后新开一个终端窗口再跑 Claude Code,因为环境变量是在 shell 启动时读取的,老窗口里可能还是旧值。这是最容易踩的坑:切了 profile,但当前终端没重新加载,结果以为切换失败。
模型 ID 对照表先摆出来,方便你填自己的实际值:
| 用途 | TaoToken 侧模型名 | CC Switch 字段 | 说明 |
|---|---|---|---|
| 代码解释(快) | glm-5.3-flash | ANTHROPIC_MODEL | 轻量任务,首包通常更快 |
| 代码解释(强) | kimi-k2.7-code | ANTHROPIC_MODEL | 代码场景优化,长上下文更稳 |
| 小模型兜底 | 同上对应值 | ANTHROPIC_SMALL_FAST_MODEL | 不设会回落到默认,可能报模型不存在 |
表里的模型名以官网文档当前列出的为准,如果官网写的是别的拼写,以官网为准,别照抄本文。
4. 同一段代码,两次调用,看三个差异
准备一段有代表性的代码,别用print("hello"),那样看不出模型差异。用一段带递归和边界处理的函数:
def flatten(items, depth=0): result = [] for item in items: if isinstance(item, (list, tuple)): result.extend(flatten(item, depth + 1)) elif isinstance(item, dict): result.extend(flatten(list(item.values()), depth + 1)) else: result.append(item) return result任务统一为:「解释这段代码做了什么,指出一个潜在问题,给出修复建议。」两次调用用完全相同的 prompt,只换 profile。
先切到 GLM 5.3 Flash,跑一次,记录首包时间:
cc-switch use taotoken-glm-flash time claude -p "解释这段代码做了什么,指出一个潜在问题,给出修复建议。" < snippet.pytime输出里的real是总耗时,首包延迟要看 Claude Code 自己的输出节奏,或者用带流式的调用单独测。想精确测首包,用 curl 加"stream": true,看第一个content_block_delta到达的时间:
cc-switch use taotoken-glm-flash time curl -sS -N https://taotoken.net/api/v1/messages \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "'"$ANTHROPIC_MODEL"'", "max_tokens": 512, "stream": true, "messages": [{"role": "user", "content": "解释这段代码做了什么,指出一个潜在问题,给出修复建议。"}] }' | head -c 400然后切到 Kimi K2.7 Code,重复同样的命令。两次结果填进这张观察表:
| 观察项 | GLM 5.3 Flash | Kimi K2.7 Code |
|---|---|---|
| 实际生效模型 ID | 从响应model字段读 | 从响应model字段读 |
| 首包延迟 | 记录秒数 | 记录秒数 |
| 是否报错 | 有/无 | 有/无 |
| 报错内容 | 原文抄下 | 原文抄下 |
关于「实际生效模型 ID」:响应体里会有一个model字段,它才是真正被调用的模型。如果你在 CC Switch 里写错了模型名,但服务端做了模糊匹配,响应里的model可能和你写的不一样。以响应为准,不以配置文件为准。
失败分支要提前想好三种:
第一种,401。Key 无效或没带上。检查ANTHROPIC_API_KEY是否真的注入到了当前 shell,echo一下看有没有值。
第二种,404 或模型不存在。模型名拼错了,或者该模型在你的账号下没开通。回官网控制台看可用模型列表,对照着改 profile 里的ANTHROPIC_MODEL。
第三种,切换后行为没变。八成是终端没重开,或者 CC Switch 写的是另一个配置文件路径,而 Claude Code 读的是别处。用cc-switch current和echo $ANTHROPIC_MODEL交叉验证。
我试过在同一个终端里连续切两次 profile 再跑,结果第二次还是第一次的模型,就是因为环境变量没刷新。后来固定成「切完就开新窗口」,再没出过这个问题。
5. 限制、成本与模型选择
首包延迟受网络、服务端排队、prompt 长度共同影响,单次测量说明不了太多。想得到可用的对比,每个模型至少跑五到十次,取中位数,别拿一次的快慢下结论。本文不含排行分数,也不给两个模型的绝对快慢判断,那需要你自己在稳定网络下重复测。
成本方面,两个模型的计费口径不同,具体单价、是否按缓存命中打折、上下文长度上限,都以 TaoToken 官网当前页面为准。做实验时建议把max_tokens设小一点,比如 512,避免一次跑飞。长期用的话,去控制台看用量页,按 Key 维度对账,ccswitch-lab这个 Key 的消耗能单独拉出来。
模型选择上给个朴素建议:短平快的代码解释、注释生成、简单重构,用 GLM 5.3 Flash 就够;涉及跨文件理解、长上下文、复杂逻辑推理的代码任务,切到 Kimi K2.7 Code。两个 profile 都留着,按任务切,比死守一个模型灵活。
最后补一句配置管理:profile 文件里的 Key 是明文,如果多人共用一台机器,考虑用环境变量引用而不是写死。CC Switch 有些版本支持"ANTHROPIC_API_KEY": "${TAOTOKEN_KEY}"这种写法,能不能用取决于你的版本,试一下就知道。不能引用的话,至少把 profile 目录权限设成700。
实验做完,把两个 profile 的 JSON、切换命令记录、模型 ID 对照表和观察表放在一起,就是一份可复现的切换验证材料。下次换模型,照这个流程再走一遍即可。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度