为了在 Windows 和 WSL2 两套环境都能跑通 Claude Code,我原先把上游 Key 放在 Agnes.AI,再借 CC-Switch 在 15721 端口起一个本地路由,让 WSL2 里的 Claude Code 也走同一个出口;问题是 Agnes.AI 的 Key 和请求地址要单独记,跨系统时总担心路由对不上。这次我把上游换成 TaoToken(https://taotoken.net/?utm_source=taotoken_aicg_blog_end),路由端口、WSL2 镜像模式全部不动,只需要在 CC-Switch 自定义供应商里换一把 Key 和一个请求地址。如果你的 WSL2 里 Claude Code 之前已经能通过 CC-Switch 跑通,下面这套改动大概五分钟就能完成。
1. 为什么原方案在 WSL2 里总差一步
1.1 CC-Switch 在整套链路里扮演的角色
Claude Code 默认从ANTHROPIC_BASE_URL读请求地址,从ANTHROPIC_AUTH_TOKEN读密钥。CC-Switch 做的事情,是在本地 15721 端口起一个类似代理的服务,把 Claude Code 发给这个地址的请求,转发到你在自定义供应商里填的「请求地址」,也就是真正的上游 API。
原文用 Agnes.AI 作为上游,所以我需要在 Windows 上注册 Agnes.AI 的账号、创建 API Key,再把这个 Key 填进 CC-Switch。问题就在这里:Key、请求地址、模型 ID 三个信息全部跟 Agnes.AI 绑定,换一个供应商就要重新记一遍,跨系统时还得保证 WSL2 里的 Claude Code 和 Windows 的 CC-Switch 用的是同一份配置。步骤本身不难,难的是「每次换上游都要跟着改一堆参数」。
1.2 换 TaoToken 后哪些可以保持原样
TaoToken 是统一 API 兼容通道,提供相对固定的 Base URL:https://taotoken.net/api。把 CC-Switch 里的请求地址从 Agnes.AI 的https://apihub.agnes-ai.com/v1换成这个地址,Key 换成在 TaoToken 创建的 Key,整条链路其余部分完全不用动。
CC-Switch 仍然监听 15721 端口;.wslconfig的镜像模式仍然保留;WSL2 里 Claude Code 的ANTHROPIC_BASE_URL仍然指向localhost:15721。换句话说,这次迁移只改「供应商配置」这一层,系统网络层和 Claude Code 的本地路由层都保持原样。
2. Windows 端:拿 TaoToken Key 并写进 CC-Switch
2.1 先到模型广场确认模型 ID
打开 TaoToken 注册并登录,创建一个 API Key。创建好的 Key 形如YOUR_API_KEY,注意它只完整显示一次,先复制到记事本里。接下来去模型广场看当前有哪些模型、ID 分别是什么,这一步很关键:后面 CC-Switch 和 Claude Code 都要填同一个模型 ID。
不要用别人在教程里贴的旧 ID。模型广场的列表会随上游更新,以当时列表为准;你只需要确认当前要用的那个模型的 ID 字符串,复制下来准备填到 CC-Switch 里。
2.2 在 CC-Switch 里添加自定义供应商
下载并启动 CC-Switch(GitHub 上farion1231/cc-switch的 releases 页面)后,进入「供应商」页面添加自定义供应商,字段按下面的对照填:
| 配置项 | 填什么 |
|---|---|
| 供应商名称 | TaoToken |
| 官网链接(选填) | https://taotoken.net/?utm_source=taotoken_aicg_blog_end |
| API Key | YOUR_API_KEY |
| 请求地址 | https://taotoken.net/api |
| API 格式 | OpenAI Chat Completions |
| 认证字段 | ANTHROPIC_AUTH_TOKEN |
| 模型映射 | 从模型广场复制的模型 ID |
注意请求地址不要加/v1,也不要带任何 UTM 参数。CC-Switch 会在这个 Base URL 基础上拼接具体的路由路径;你的 Claude Code 发的是 Anthropic 格式的请求,TaoToken 的兼容通道会把请求转换成 OpenAI 可识别的内容再发给模型。
2.3 需要手动补的兼容字段
保存供应商后,CC-Switch 的配置 JSON 里会自动生成一些字段。为了让 Claude CLI 通过 CC-Switch 调用 OpenAI-Compatible API 时更稳定,建议手动补上下面两段:
{ "allowed_openai_params": [ "thinking", "context_management" ], "litellm_settings": { "drop_params": true } }allowed_openai_params让指定的参数能通过网关传递;drop_params会自动丢弃模型不兼容的未知参数,避免因为多传了一个参数导致整条请求被拒。这个兼容字段在切换成 TaoToken 后仍然需要,它和上游是谁没有关系,解决的是 Claude Code 与 OpenAI 格式 API 之间的参数差异。
3. 让 CC-Switch 在 15721 端口把请求转给 TaoToken
3.1 路由设置
点击 CC-Switch 左上角的设置按钮,进入「路由」标签页。端口保持默认的 15721 即可,前提是与 WSL2 里 Claude Code 的ANTHROPIC_BASE_URL端口保持一致。打开路由总开关,再打开「Claude 路由应用」开关。
这一步的作用相当于把 CC-Switch 变成 Claude Code 的本地服务端:Claude Code 只认localhost:15721,CC-Switch 负责把请求转发到https://taotoken.net/api。只要路由开关没开,后面 WSL2 里怎么改配置都会卡在连接失败。
3.2 CMD 里先探一次 /health
配置完路由,先在 Windows 的 CMD 里验证:
curl http://localhost:15721/health如果返回了数据,说明 CC-Switch 已经正常监听。如果提示connection refused,优先检查路由总开关是否打开、端口是否被其他程序占用。
3.3 端口冲突怎么处理
15721 被占用的概率不高,但如果你的机器上已经有别的开发工具在用这个端口,CMD 里先查一下:
netstat -ano | findstr 15721记下最后一列的 PID,再到任务管理器里找到对应进程。你也可以直接在 CC-Switch 路由设置里换成别的端口,比如15722,但记得 WSL2 里 Claude Code 的ANTHROPIC_BASE_URL也要同步改成http://localhost:15722,两边必须一致,否则 curl 能通、Claude Code 仍然连不上。
4. WSL2 镜像模式:让 Linux 侧和 Windows 共享网络
4.1 为什么默认访问不到 15721
WSL2 默认运行在 NAT 模式下,它的网络和 Windows 是两套独立虚拟网卡。你在 WSL2 里执行curl http://localhost:15721/health,访问的是 WSL2 自己的 localhost,而不是 Windows 上的 CC-Switch。
WSL1 没有完整的 Linux 内核,靠中间层把系统调用翻译成 Windows 系统调用,网络行为相对简单;WSL2 底层是基于 Hyper-V 的轻量级虚拟机,运行完整 Linux 内核,所以必须把网络模式改成镜像模式(Mirrored Mode),让 WSL2 直接使用 Windows 的网络配置、共享相同的 IP 地址。
4.2 配置 .wslconfig
在 Windows 用户根目录(通常是C:\Users\<用户名>),新建一个文件名为.wslconfig的文本文件,内容如下:
[wsl2] networkingMode=mirrored firewall=true autoProxy=truefirewall=true保持 Windows 防火墙开启,避免 WSL2 绕过系统安全策略;autoProxy=true让 WSL 自动同步 Windows 的代理设置,如果之后 Windows 上还要挂别的网络工具,这个开关会省很多事。注意文件名必须严格是.wslconfig,如果系统把它保存成了.wslconfig.txt,WSL2 是不会读取的。
4.3 重启 WSL2 并验证 /health
打开 PowerShell,执行:
wsl --shutdown执行完稍等几秒,重新进入 WSL2,再执行:
curl http://localhost:15721/health这里同样返回数据,就说明 WSL2 已经可以访问 Windows 上的 CC-Switch 了。如果仍然访问不到,先确认镜像模式有没有真正生效。在 WSL2 里执行ip addr,如果看到网卡地址和 Windows 的主机网卡一致,说明镜像模式已经生效;如果还是原来的172.x.x.x网段,说明.wslconfig写错了位置或者没有执行wsl --shutdown。
5. WSL2 里 Claude Code 的 settings.json
5.1 env 配置内容
在 WSL2 的~/.claude/settings.json里写入:
{ "env": { "ANTHROPIC_BASE_URL": "http://localhost:15721", "ANTHROPIC_AUTH_TOKEN": "PROXY_MANAGED", "ANTHROPIC_MODEL": "YOUR_MODEL_ID", "ANTHROPIC_DEFAULT_OPUS_MODE": "", "ANTHROPIC_DEFAULT_SONNET_MODEL": "", "ANTHROPIC_DEFAULT_HAIKU_MODE": "", "API_TIMEOUT_MS": "3000000", "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1", "CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1", "CLAUDE_CODE_ATTRIBUTION_HEADER": "0", "MAX_OUTPUT_TOKENS": 50000 } }YOUR_MODEL_ID替换成你在模型广场复制的 ID。如果你不确定这个字段应该填什么,把ANTHROPIC_MODEL留空,让 Claude Code 从网关自动发现模型也是可行的。
5.2 几个关键参数怎么理解
ANTHROPIC_BASE_URL必须指向http://localhost:15721,端口和 CC-Switch 路由端口保持一致;不要直接指向 TaoToken 的 API 地址,否则就绕过了 CC-Switch 这层统一管理,WSL2 和 Windows 的配置也会因此分成两套。
ANTHROPIC_AUTH_TOKEN写PROXY_MANAGED,这个值是约定好的标记,代表「密钥由 CC-Switch 代理统一管理」。实际生效的上游 Key 就是你在自定义供应商里填的 TaoToken Key,它不会暴露给 Claude Code 进程,即使你在 WSL2 里写错地方,也不会把真正的 Key 打出来。
MAX_OUTPUT_TOKENS设 50000 是为了限制单次最大输出,避免上下文超限报错。如果你在模型广场选中的模型支持更大的上下文,这个值可以删掉或者调大,它不是一个必须项。
5.3 启动 claude 走通一次对话
在 WSL2 里进入一个项目目录,执行:
claude正常进入对话界面后,随便问一个和当前项目相关的问题,能拿到回复就说明整条链路已经通了:WSL2 里的 Claude Code 把请求发给localhost:15721的 CC-Switch,CC-Switch 把请求转发给 TaoToken 的 Base URL,模型返回结果再沿原路回来。
如果报401,基本可以确定是自定义供应商里的 Key 没填对,或者 Key 没有在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 控制台成功创建。如果报404,回 CC-Switch 里检查请求地址是不是多写了/v1;TaoToken 的 Base URL 是https://taotoken.net/api,末尾不带/v1。
6. 跑通后去 TaoToken 控制台对一下这次调用
6.1 在模型对话里先用同一把 Key 验证
WSL2 里的 Claude Code 跑通之后,可以顺手在 TaoToken 模型对话 里用同一把 Key 发一条消息,确认模型 ID 和 Base URL 都没填错。这样后面 Claude Code 端如果再出问题,你能立刻判断是路由问题还是上游问题。
6.2 控制台看用量
刚才在 WSL2 里那次对话已经产生了一次真实调用,去 控制台 API Keys 页面看用量记录,能看到这次请求有没有被记上。如果打算长期用 Claude Code 写代码,建议顺便打开 Coding Plan 看套餐是否够用,免得模型对话跑得正顺,突然收到额度提醒。
Claude Code 的完整环境变量对照,可以在 接入文档 里核对。CC-Switch 这边的配置其实只有三层:供应商填 Key 和请求地址、路由开 15721、Claude Code 指到localhost:15721;三层都对上,Windows 和 WSL2 的体验就完全一致了。
6.3 额外提一句 Docker 的场景
如果你开启镜像模式之后,在 WSL2 里用 Docker 启动了一个端口映射容器,比如docker run -d -p 8080:80 nginx,然后通过localhost:8080访问不到,可以修改/etc/docker/daemon.json:
{ "iptables": false }改完重启 Docker 服务即可。这个和文章主题关系不大,但既然开了镜像模式,早晚会遇到一次,记住这个文件位置能省不少排查时间。
整体来说,把上游从 Agnes.AI 换成 TaoToken,改动范围集中在 CC-Switch 的供应商配置;Windows 和 WSL2 两侧的localhost:15721路由、.wslconfig镜像模式以及 Claude Code 的settings.json都不需要大改。你只需要记住一个新的请求地址https://taotoken.net/api,以及从 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建的那把新 Key,剩下的链路和原来完全一样。