Claude Code Router + 通义千问
用 Claude Code 的界面,背后实际调用阿里云通义千问(Qwen)
一、前提条件
- 有一个 阿里云百炼 / DashScope 账号,并已开通 通义千问 相关模型
- 在 DashScope 控制台 创建 API Key,记下
sk-xxx
二、安装
在终端执行:
1 | # 1. 安装 Claude Code(Anthropic 官方 CLI) |
三、创建配置目录和基础配置
1 | # 确保配置目录存在 |
在 ~/.claude-code-router/config.json 里写最简可用配置(先能跑通再优化):
1 | { |
要点:
api_key:换成你在 DashScope 拿到的 Key。api_base_url:中国区用dashscope.aliyuncs.com;若是国际站 Key,改为https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions。models:只写 DashScope 真实支持的模型名(如qwen-plus-latest、qwen-max-latest),不要写qwen-2.5-coder-32b-instruct这类 OpenRouter 才有的名字,否则会 404。transformer里的maxtoken把max_tokens限制在 8192,避免通义接口报 400。
四、解决「模型不存在 / 404」:用对模型名 + 自定义路由
4.1 为什么会出现 404
- Claude Code 界面上选的是 「Default (claude-sonnet-4-6)」「deepseek-chat」 等名字。
- 这些名字会作为「请求里的 model」发给 Router。
- 你的 Router 里只配置了 qwen,且列表里没有
claude-sonnet-4-6,Router 找不到对应 provider → 报错「模型不存在 / 404」。
所以要做两件事:模型名用对 + 把界面上的名字映射到通义。
4.2 自定义路由:把「界面上的名字」映射到「通义模型」
在 ~/.claude-code-router/ 下新建 custom-router.js:
1 | /** |
在 config.json 里加上(和顶层其他键并列):
1 | "CUSTOM_ROUTER_PATH": "/Users/你的用户名/.claude-code-router/custom-router.js" |
把路径里的「你的用户名」换成自己电脑的用户名(或写 ~ 的绝对路径)。这样:
- 选「Default (claude-sonnet-4-6)」→ 实际用
qwen,qwen-max-latest - 选「deepseek-chat」→ 实际用
qwen,qwen3-coder-plus - 其他未在
MODEL_MAP里的,仍走 Router 的 default/background/think。
五、解决「max_tokens 报 400」
错误类似:Range of max_tokens should be [1, 8192]。
通义接口要求 max_tokens 在 1~8192,而 Claude Code 会传更大值,所以要在 Provider 里加转换器,强制成 8192:
在对应 provider 的配置里加上:
1 | "transformer": { |
(前面「最简配置」里已经包含,这里只是说明原因。)
六、日常使用流程
1 | # 1. 启动 Router(首次或重启后) |
改过 config 或 custom-router.js 后一定要:
1 | ccr restart |
再试一次对话。
七、如何确认「实际用的是通义」
- 界面上仍会显示「Default (claude-sonnet-4-6)」等,因为那是 Claude Code 自带的选项名。
- 实际请求被 Router 转到了通义;若你问「你是什么模型」,模型可能按系统提示说「我是 Claude…」,但后端真实调用的是通义千问。
- 可在
~/.claude-code-router/logs/下看最新日志,会有provider(qwen,...)或provider(通义,...)和模型名,即可确认。
- 404 / 模型不存在:检查
models是否都是 DashScope 支持的名称(如qwen-plus-latest);并确认custom-router.js里对claude-sonnet-4-6等有映射。 - 400 max_tokens:在对应 provider 加
"transformer": { "use": [["maxtoken", { "max_tokens": 8192 }]] }。 - 仍然连不上:确认
ccr start已执行且无报错;确认api_base_url与 API Key 区域一致(中国区 / 国际站)。
按上面从「二」到「七」做一遍,就是从零到可用的完整过程;你当前已经跑通,这份文档可以作为以后重装或换机时的整体指南。