WSL 下使用 Claude Code Router 将 VS Code Claude Code 指向 AWS Bedrock GLM-5 模型
背景最近在 Windows WSL 环境下折腾 Claude Code希望在 VS Code 里使用 Claude Code 的编码助手能力但后端模型不走 Anthropic 官方 Claude(因为不开放而是走 AWS Bedrock 上的zai.glm-5。一开始以为只要在.bashrc环境参数里把 Base URL 改成 Claude Code Router 的本地地址就可以http://127.0.0.1:3456但实际踩坑后发现只配置这一行是不够的。Claude Code 插件本身仍然需要一些原始 Claude Code 参数比如认证 Token、模型名称、默认 Haiku 模型等。虽然这些参数最后不一定真的被 AWS 使用甚至会被 Claude Code Router 接管或忽略但它们需要存在否则 Claude Code 插件可能无法正常启动在执行claude 会提示Not logged in · Please run /login本文记录一下完整配置过程。目标架构最终架构如下Windows VS Code ↓ Remote WSL VS Code Server in WSL ↓ Claude Code VS Code 插件 ↓ Claude Code native binary / CLI ↓ Claude Code Router, CCR ↓ AWS Bedrock Mantle OpenAI-compatible endpoint ↓ zai.glm-5简单说Claude Code 仍然以为自己在调用 Claude API但实际请求被 Claude Code Router 转发到了 AWS Bedrock 的 GLM-5。Claude Code Router 的定位就是把 Claude Code 请求路由到不同模型并支持多 Provider、请求/响应转换和动态模型切换。([GitHub][1])AWS Bedrock 上 GLM-5 的模型 ID 是zai.glm-5AWS 文档中也给出了通过 Bedrock Mantle 访问该模型的端点形式。([Amazon Web Services 文档][2])环境说明我的环境大致如下Windows 11 WSL2 Ubuntu VS Code Remote WSL Claude Code VS Code 插件 Claude Code Router AWS Bedrock zai.glm-5确认 VS Code 当前是否运行在 WSL 里可以看左下角是否显示WSL: Ubuntu也可以在 VS Code 终端里执行uname-a如果输出里包含 Linux / WSL2说明当前终端是在 WSL 环境中。第一步安装 Claude Code Router在 WSL 终端中安装npminstall-gmusistudio/claude-code-router安装后确认ccr--version如果你也想在终端里直接使用 Claude Code CLI可以安装npminstall-ganthropic-ai/claude-code不过需要注意VS Code Claude Code 插件可能会自带 native binary并不一定使用你全局安装的claude命令。我在排查时看到 VS Code 插件实际拉起的是类似这样的进程/home/xxx/.vscode-server/extensions/anthropicclaude-code-2.1.xxx/resources/native-binary/claude所以全局 CLI 和 VS Code 插件内置 binary 是两回事。第二步配置 Claude Code Router创建配置目录mkdir-p~/.claude-code-router编辑配置文件code ~/.claude-code-router/config.json示例配置如下{PORT:3456,LOG:true,API_TIMEOUT_MS:600000,Providers:[{name:aws-glm5,api_base_url:https://bedrock-mantle.us-east-1.api.aws/v1/chat/completions,api_key:你的_AWS_BEARER_TOKEN_BEDROCK,models:[zai.glm-5],transformer:{use:[[openai]]}}],Router:{default:aws-glm5,zai.glm-5,background:aws-glm5,zai.glm-5,think:aws-glm5,zai.glm-5,longContext:aws-glm5,zai.glm-5,longContextThreshold:60000}}其中需要替换的内容主要有us-east-1 你的_AWS_BEDROCK_MANTLE_API_KEYus-east-1要改成你实际开通 Bedrock GLM-5 的 Region。AWS GLM-5 的 Mantle endpoint 形式类似https://bedrock-mantle.region.api.aws/v1模型 ID 为zai.glm-5这些信息以 AWS 官方文档为准。([Amazon Web Services 文档][2])配置好之后启动 CCRccr start查看状态ccr status第三步VS Code 插件配置这是我踩坑的重点。一开始我以为只需要在.bashrc环境变量中配置其他可以不配export ANTHROPIC_BASE_URLhttp://127.0.0.1:3456但实际不够。export ANTHROPIC_BASE_URLhttp://127.0.0.1:3456 export ANTHROPIC_API_KEYsk-XXXX export ANTHROPIC_MODELqwen3.6-plus export ANTHROPIC_DEFAULT_OPUS_MODELqwen3.6-plus export ANTHROPIC_DEFAULT_SONNET_MODELqwen3.6-plus export ANTHROPIC_DEFAULT_HAIKU_MODELqwen3-coder-next注意这里的几个点ANTHROPIC_BASE_URL指向本地 CCRhttp://127.0.0.1:3456ANTHROPIC_API_KEY可以是占位值例如dummy因为真正访问 AWS 的 Key 在 CCR 配置里。ANTHROPIC_MODEL和ANTHROPIC_DEFAULT_HAIKU_MODEL仍然需要配置。这两个模型名虽然看起来是 Claude 模型但在 CCR 路由模式下它们主要是为了让 Claude Code 插件正常工作。真实转发到哪个模型由~/.claude-code-router/config.json里的Router决定。也就是说Claude Code 前端显示的模型名和最终后端模型名不一定一致。类似的第三方接入文章中也会同时配置 Base URL、Auth Token、主模型和默认小模型而不是只配 Base URL。第四步重启 VS Code WSL 窗口配置完成后建议重启 VS Code 的 WSL 窗口。在 VS Code 命令面板执行Developer: Reload Window或者直接关闭 VS Code再从 WSL 项目目录重新打开cd~/work/your-project code.第五步验证是否真的走了 CCR先看 Claude Code 是否能正常聊天。如果没接上常见提示是Not logged in · Please run /login如果已经可以聊天说明至少 Claude Code 插件已经能连到某个兼容服务。但这还不能完全证明真实模型就是zai.glm-5。因为 Claude Code 的界面里可能仍然显示Sonnet 4.6 · API Usage Billing甚至你问它你现在用的是哪个模型它也可能回答Im using Claude Sonnet 4.6这个并不能作为真实后端模型的判断依据。原因是 Claude Code 本体仍然以为自己在和 Claude API 通信Router 只是中间转发层。模型在上下文里看到的客户端信息可能仍然是 Claude Code / Sonnet所以会照着回答。真正的验证方式应该看 CCR 日志。查看日志文件find~/.claude-code-router-typef-printf%T %p\n|sort-nr|head-20然后 tail 最新日志tail-f~/.claude-code-router/*.log ~/.claude-code-router/logs/*.log2/dev/null发送一条消息后观察日志中是否出现类似aws-glm5 zai.glm-5如果出现说明请求确实被 CCR 路由到了 AWS Bedrock GLM-5。也可以在 AWS 侧通过 Bedrock / CloudWatch / Billing 用量进一步确认是否有zai.glm-5调用。第六步排查 VS Code 插件实际拉起的 Claude 进程如果你想看 VS Code 插件到底拉起了什么可以在 WSL 中执行psaux|grepclaude我当时看到类似/home/xxx/.vscode-server/extensions/anthropicclaude-code-2.1.xxx/resources/native-binary/claude \ --output-format stream-json \ --input-format stream-json \ --permission-prompt-tool stdio \ --resume xxxxxxxx \ --setting-sourcesuser,project,local这说明 VS Code 插件通过 stdio / stream-json 和本地 Claude Code binary 通信。如果要看该进程环境变量可以执行PID你的进程IDtr\0\n/proc/$PID/environ|sort|grep-EANTHROPIC|CLAUDE|OPENAI|AWS|BEDROCK|BASE|MODEL重点确认里面是否有ANTHROPIC_BASE_URLhttp://127.0.0.1:3456 ANTHROPIC_AUTH_TOKENdummy ANTHROPIC_MODELclaude-sonnet-4-6 ANTHROPIC_DEFAULT_HAIKU_MODELclaude-haiku-4-5如果没有说明 VS Code 插件没有读到你的环境变量配置。最终配置回顾CCR 配置~/.claude-code-router/config.json{PORT:3456,LOG:true,API_TIMEOUT_MS:600000,Providers:[{name:aws-glm5,api_base_url:https://bedrock-mantle.us-east-1.api.aws/v1/chat/completions,api_key:你的_AWS_BEDROCK_MANTLE_API_KEY,models:[zai.glm-5],transformer:{use:[[openai]]}}],Router:{default:aws-glm5,zai.glm-5,background:aws-glm5,zai.glm-5,think:aws-glm5,zai.glm-5,longContext:aws-glm5,zai.glm-5,longContextThreshold:60000}}启动 CCRccr start ccr status验证日志tail-f~/.claude-code-router/*.log ~/.claude-code-router/logs/*.log2/dev/null总结这次配置的核心点是Claude Code 插件仍然需要“看起来像 Claude”的配置Claude Code Router 负责把真正的请求转发到 AWS Bedrock GLM-5。所以不要只配ANTHROPIC_BASE_URLhttp://127.0.0.1:3456还要保留ANTHROPIC_AUTH_TOKEN ANTHROPIC_MODEL ANTHROPIC_DEFAULT_HAIKU_MODEL虽然这些参数在最终请求中可能只是占位真正生效的是 CCR 的Router:{default:aws-glm5,zai.glm-5}最终判断是否成功不要看 Claude Code 欢迎页显示的 Sonnet也不要问模型“你是谁”而是看CCR 日志 AWS Bedrock 调用记录只要日志里出现aws-glm5和zai.glm-5就说明 VS Code Claude Code 已经通过 CCR 成功指向 AWS Bedrock 上的 GLM-5 模型。