0%

claude code切换model为qwen

Claude Code Router + 通义千问

用 Claude Code 的界面,背后实际调用阿里云通义千问(Qwen)


一、前提条件

  • 有一个 阿里云百炼 / DashScope 账号,并已开通 通义千问 相关模型
  • DashScope 控制台 创建 API Key,记下 sk-xxx

二、安装

在终端执行:

1
2
3
4
5
# 1. 安装 Claude Code(Anthropic 官方 CLI)
npm install -g @anthropic-ai/claude-code

# 2. 安装 Claude Code Router(负责把请求转到通义)
npm install -g @musistudio/claude-code-router

三、创建配置目录和基础配置

1
2
# 确保配置目录存在
mkdir -p ~/.claude-code-router

~/.claude-code-router/config.json 里写最简可用配置(先能跑通再优化):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"LOG": true,
"LOG_LEVEL": "info",
"HOST": "127.0.0.1",
"PORT": 3456,
"API_TIMEOUT_MS": 120000,
"Providers": [
{
"name": "qwen",
"api_base_url": "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
"api_key": "你的DashScope_API_Key",
"models": ["qwen3-coder-plus", "qwen-plus-latest", "qwen-max-latest", "qwen3-max"],
"transformer": {
"use": [["maxtoken", { "max_tokens": 8192 }]]
}
}
],
"Router": {
"default": "qwen,qwen3-coder-plus",
"background": "qwen,qwen-plus-latest",
"think": "qwen,qwen-max-latest"
}
}

要点:

  • 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-latestqwen-max-latest),不要写 qwen-2.5-coder-32b-instruct 这类 OpenRouter 才有的名字,否则会 404。
  • transformer 里的 maxtokenmax_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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 把 Claude Code 界面里选的模型名,映射到实际要用的 通义 模型
*/
const MODEL_MAP = {
'claude-sonnet-4-6': 'qwen,qwen-max-latest',
'claude-opus-4-6': 'qwen,qwen-max-latest',
'claude-haiku-4-5-20251001': 'qwen,qwen-plus-latest',
'deepseek-chat': 'qwen,qwen3-coder-plus',
'deepseek-reasoner': 'qwen,qwen-max-latest',
};

module.exports = async function router(req, config) {
const model = req?.body?.model;
if (model && MODEL_MAP[model]) {
return MODEL_MAP[model];
}
return null; // 其他情况走 config 里 Router 的 default/background/think
};

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
2
3
"transformer": {
"use": [["maxtoken", { "max_tokens": 8192 }]]
}

(前面「最简配置」里已经包含,这里只是说明原因。)


六、日常使用流程

1
2
3
4
5
# 1. 启动 Router(首次或重启后)
ccr start

# 2. 用 Router 启动 Claude Code(推荐)
ccr code

改过 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 区域一致(中国区 / 国际站)。

按上面从「二」到「七」做一遍,就是从零到可用的完整过程;你当前已经跑通,这份文档可以作为以后重装或换机时的整体指南。