Claude Code 也能跑本地模型?CCR 多模型 智能路由,成本直降 90%

claude-code-router.jpeg

Claude Code 是 Anthropic 推出的强大 AI 编程助手,但每月的订阅费用让很多开发者望而却步。

通过 Claude Code Router (CCR),我们可以:

  • 对接本地模型:部署 GLM5 等开源模型,实现零成本使用
  • 多模型智能路由:根据任务类型自动选择最合适的模型
  • 灵活组合:本地 + 云端混合部署,兼顾隐私、成本和质量

本文将手把手教你搭建这套方案,让你的 AI 编程助手成本降低 90% 以上。

1. 环境准备和工具安装

1.1 安装 Claude Code

首先需要在你的开发机器上安装 Claude Code:

1
2
# 官方安装脚本(需要科学上网)
curl -fsSL https://claude.ai/install.sh | bash

1.2 安装 Claude Code Router

Claude Code Router 是一个 Node.js 包,用于桥接 Claude Code 和本地模型:

1
2
# 需要 Node.js 20+ 版本
npm install -g @musistudio/claude-code-router

1.3 验证安装

安装完成后,验证两个工具是否正常工作:

1
2
3
4
5
6
7
# 检查 Claude Code 版本
❯ claude --version
2.1.51 (Claude Code)

# 检查 CCR 版本
❯ ccr version
claude-code-router version: 2.0.0

2. 模型部署

2.1 模型下载

在服务器上下载 GLM5 模型:

根据硬件配置选择合适的版本

1
2
3
4
5
# 使用 huggingface-cli 下载模型
# FP8 版本 推荐配置:H200*8
hf download zai-org/GLM-5-FP8 --local-dir /raid/lixd/models/glm5-fp8
# INT4 版本
hf download Intel/GLM-5-int4-mixed-AutoRound --local-dir /raid/lixd/models/glm5-int4-mixed-autoround

2.2 vLLM 服务启动

使用 vLLM 框架部署模型服务,确保已安装 GPU 驱动和 NVIDIA Container Toolkit。

由于 GLM5 需要最新版的 transformers 支持,官方镜像暂未包含,需要先构建自定义镜像:

已经推送到 lixd96/vllm-openai:v0.17.1-cu130,直接拉取即可 docker pull lixd96/vllm-openai:v0.17.1-cu130

构建自定义镜像:

创建 Dockerfile

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
FROM vllm/vllm-openai:v0.17.1-cu130

# 安装 git 用于从源码安装 transformers
RUN apt-get update && apt-get install -y git && \
    rm -rf /var/lib/apt/lists/*

# 安装最新版 transformers(GLM5 需要最新版支持)
RUN pip install --no-cache-dir git+https://github.com/huggingface/transformers.git

# 设置工作目录
WORKDIR /app

# 默认启动命令
ENTRYPOINT ["vllm"]

构建并推送镜像:

1
2
# 构建镜像
docker build -t lixd96/vllm-openai:v0.17.1-cu130-ex .

启动服务:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
docker run -d \
  --name vllm-glm5 \
  --runtime nvidia \
  --gpus '"device=0,1,2,3"' \
  -p 8000:8000 \
  -v /raid/lixd/models/glm5-int4-mixed-autoround:/glm5-int4-mixed-autoround \
  --shm-size 16g \
  lixd96/vllm-openai:v0.17.1-cu130 \
  serve /glm5-int4-mixed-autoround \
  --tensor-parallel-size 4 \
  --tool-call-parser glm47 \
  --reasoning-parser glm45 \
  --enable-auto-tool-choice \
  --served-model-name glm5 \
  --trust-remote-code \
  --gpu-memory-utilization 0.85 \
  --api-key "your-api-key" \
  --host 0.0.0.0 \
  --port 8000

关键参数说明:

  • GPU 配置:根据实际 GPU 数量调整 --gpus--tensor-parallel-size 参数
  • 内存共享--shm-size 16g 确保容器有足够共享内存
  • 工具调用--enable-auto-tool-choice 启用工具调用功能,--tool-call-parser glm47 使用 GLM 系列的工具调用解析器
  • 推理解析--reasoning-parser glm45 启用 GLM 的推理能力
  • 信任远程代码--trust-remote-code 允许加载模型的自定义代码
  • 张量并行--tensor-parallel-size 4 在多 GPU 上并行处理

2.3 服务验证

部署完成后,验证服务是否正常运行:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 查看可用模型列表
curl http://localhost:8000/v1/models

# 基础对话测试
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm5",
    "messages": [
      {"role": "user", "content": "你好,请介绍一下你自己"}
    ],
    "max_tokens": 100,
    "temperature": 0.7
  }'

# 流式对话测试
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "glm5",
    "messages": [
      {"role": "user", "content": "用一句话解释什么是 Kubernetes"}
    ],
    "max_tokens": 200,
    "stream": true
  }'

如果一切正常,你应该能看到模型的响应输出。

2.4 配置 Claude Code Router

配置说明

核心配置文件如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
  // LLM 提供商
  "Providers": [
    {
      "name": "openai",
      "baseUrl": "https://api.openai.com/v1",
      "apiKey": "$OPENAI_API_KEY",
      "models": ["gpt-4", "gpt-3.5-turbo"]
    }
  ],

// 路由
{
  "Router": {
    "default": "openai,gpt-4",
    "background": "openai,gpt-3.5-turbo",
    "think": "openai,gpt-4",
    "longContext": "anthropic,claude-3-opus"
  }
}}

完整配置

创建或编辑配置文件 ~/.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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
{
  "LOG": true,
  "LOG_LEVEL": "debug",
  "CLAUDE_PATH": "",
  "HOST": "127.0.0.1",
  "PORT": 3456,
  "APIKEY": "",
  "API_TIMEOUT_MS": "600000",
  "PROXY_URL": "",
  "transformers": [],
  "Providers": [
    {
      "name": "vllm",
      "api_base_url": "http://your-server-ip:8000/v1/chat/completions",
      "api_key": "your-api-key",
      "models": [
        "glm5"
      ],
      "transformer": {
        "use": [
          "enhancetool",
          [
            "sampling",
            {
              "temperature": "0.7",
              "top_p": "0.8",
              "top_k": "20",
              "repetition_penalty": "1.05"
            }
          ]
        ]
      }
    }
  ],
  "StatusLine": {
    "enabled": true,
    "currentStyle": "default",
    "default": {
      "modules": []
    },
    "powerline": {
      "modules": [
        {
          "type": "workDir",
          "icon": "󰉋",
          "text": "{{workDirName}}",
          "color": "bright_blue"
        },
        {
          "type": "gitBranch",
          "icon": "🌿",
          "text": "{{gitBranch}}",
          "color": "bright_green"
        },
        {
          "type": "model",
          "icon": "🤖",
          "text": "{{model}}",
          "color": "bright_yellow"
        },
        {
          "type": "usage",
          "icon": "📊",
          "text": "{{inputTokens}} → {{outputTokens}}",
          "color": "bright_magenta"
        },
        {
          "type": "script",
          "icon": "📜",
          "text": "Script Module",
          "color": "bright_cyan",
          "scriptPath": ""
        }
      ]
    }
  },
  "Router": {
    "default": "vllm,glm5",
    "background": "vllm,glm5",
    "think": "vllm,glm5",
    "longContext": "vllm,glm5",
    "longContextThreshold": 102400,
    "webSearch": "vllm,glm5",
    "image": ""
  },
  "CUSTOM_ROUTER_PATH": ""
}

配置说明:

  • API 地址:将 your-server-ip 替换为实际的服务器 IP 地址
  • API 密钥:设置与 vLLM 启动时相同的 API 密钥
  • 路由配置:将所有任务类型都指向本地模型
  • 状态栏:启用自定义状态栏显示工作目录、Git 分支、模型信息等
  • 日志级别:调试阶段可设为 debug,生产环境建议改为 info

3. 开始使用

3.1 启动 Claude Code Router

使用 ccr code 替代原来的 claude 命令:

效果如下: ccr-demo.png

启动后,在 claude 界面输入以下命令切换模型

1
/model vllm,glm5

之后就可以正常使用了。

ps: 不切换模型也可以,只是终端会一直显示用的 Claude 的模型。

4. 进阶:多模型智能路由

前面我们介绍了单一模型的配置方式,但在实际使用中,不同类型的任务对模型能力的要求各不相同。
Claude Code Router 的强大之处在于支持对接多个模型,并根据任务类型自动路由到最合适的模型

4.1 为什么需要多模型路由?

不同任务对模型的需求差异很大:

任务类型特点推荐模型策略
日常对话频率高、响应快轻量级模型,节省资源
代码生成需要准确性和逻辑性中等能力模型
复杂推理需要深度思考顶级能力模型
长文本处理需要大上下文窗口支持长上下文的模型
图像理解需要多模态能力视觉语言模型

通过合理配置,可以实现:

  • 成本优化:简单任务用便宜模型,复杂任务才用昂贵模型
  • 性能平衡:快速响应与高质量输出的权衡
  • 资源利用:充分利用不同模型的优势

4.2 多模型配置示例

以下是一个对接多个模型服务商的完整配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
{
  "LOG": true,
  "LOG_LEVEL": "info",
  "HOST": "127.0.0.1",
  "PORT": 3456,
  "API_TIMEOUT_MS": "600000",
  "Providers": [
    {
      "name": "local-glm5",
      "api_base_url": "http://192.168.1.100:8000/v1/chat/completions",
      "api_key": "your-local-key",
      "models": ["glm5"],
      "transformer": {
        "use": ["enhancetool"]
      }
    },
    {
      "name": "deepseek",
      "api_base_url": "https://api.deepseek.com/v1/chat/completions",
      "api_key": "$DEEPSEEK_API_KEY",
      "models": ["deepseek-chat", "deepseek-reasoner"]
    },
    {
      "name": "openai",
      "api_base_url": "https://api.openai.com/v1/chat/completions",
      "api_key": "$OPENAI_API_KEY",
      "models": ["gpt-4o", "gpt-4o-mini"]
    },
    {
      "name": "zhipu",
      "api_base_url": "https://open.bigmodel.cn/api/paas/v4/chat/completions",
      "api_key": "$ZHIPU_API_KEY",
      "models": ["glm-4-plus", "glm-4-flash"]
    }
  ],
  "Router": {
    "default": "local-glm5,glm5",
    "background": "zhipu,glm-4-flash",
    "think": "deepseek,deepseek-reasoner",
    "longContext": "local-glm5,glm5",
    "longContextThreshold": 64000,
    "webSearch": "openai,gpt-4o-mini",
    "image": "openai,gpt-4o"
  }
}

4.3 路由策略详解

default(默认路由)

  • 用途:常规对话和代码编写
  • 建议:选择性价比高的主力模型
  • 示例:本地 GLM5 或 DeepSeek Chat

background(后台任务)

  • 用途:自动触发的辅助任务,如代码审查、状态检查
  • 特点:频率高、对质量要求相对较低
  • 建议:使用轻量快速模型,如 GLM-4-Flash、GPT-4o-mini
  • 成本优势:可节省 80% 以上的 API 费用

think(思考密集型)

  • 用途:复杂算法设计、架构决策、疑难问题排查
  • 特点:需要深度推理能力
  • 建议:使用最强推理模型,如 DeepSeek Reasoner、Claude Opus
  • 注意:这类模型响应较慢,但输出质量最高

longContext(长上下文)

  • 用途:分析大型代码库、处理长文档
  • 触发条件:当上下文超过 longContextThreshold 时自动切换
  • 建议:选择支持 64K+ 上下文的模型
  • 示例:GLM5(200K)、Claude(200K)

webSearch(网络搜索)

  • 用途:联网查询资料
  • 建议:选择支持工具调用的模型
  • 示例:GPT-4o、DeepSeek Chat

image(图像任务)

  • 用途:截图分析、图表解读
  • 建议:使用多模态模型
  • 示例:GPT-4o、Claude 3.5 Sonnet

4.4 最佳实践建议

工作原理

Claude Code Router 的核心原理是通过启动一个 HTTP 中转服务,在不修改 Claude Code 源码的情况下完成请求的转发和格式转换。

Claude Code 使用 Anthropic API 规范进行通信,而大多数模型服务商(如 OpenAI、DeepSeek 等)使用 OpenAI API 规范。CCR 的作用就是:

  1. 接收请求:CCR 启动一个 HTTP 服务(默认端口 3456),监听 Claude Code 的请求
  2. 格式转换:将 Anthropic API 格式的请求转换为 OpenAI API 格式
  3. 智能路由:根据任务类型将请求分发到不同的模型服务商
  4. 响应转换:将模型的响应转换回 Anthropic API 格式返回给 Claude Code
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
┌─────────────────────────────────────────────────────────────┐
│                      Claude Code                             │
│           (使用 Anthropic API 规范通信)                       │
└─────────────────────────┬───────────────────────────────────┘
                          │ Anthropic API 格式
               ┌─────────────────────┐
               │    CCR HTTP 服务     │
               │   (Express.js)      │
               │                     │
               │  • 格式转换          │
               │  • 智能路由          │
               │  • 请求重写          │
               └──────────┬──────────┘
                          │ OpenAI API 格式
        ┌─────────────────┼─────────────────┐
        │                 │                 │
   ┌────▼────┐      ┌─────▼─────┐     ┌─────▼─────┐
   │  本地   │      │   云端    │     │   云端    │
   │  GLM5   │      │  DeepSeek │     │   OpenAI  │
   │ (default)│     │  (think)  │     │  (image)  │
   └─────────┘      └───────────┘     └───────────┘

按需分配,降低成本

CCR 的核心优势在于可以根据任务特点选择最合适的模型,实现成本与质量的平衡:

任务类型特点推荐策略
日常开发频率高、响应要求快性价比高的主力模型
复杂推理需要深度思考推理能力强的模型
图像理解需要多模态能力支持视觉的模型
后台任务自动触发、频率高轻量快速模型
长文本需要大上下文支持长上下文的模型

成本对比:

1
2
3
4
5
6
7
8
┌────────────────────────────────────────────────┐
│              Claude Max Plan                    │
│              $200 / 月                          │
├────────────────────────────────────────────────┤
│              CCR 多模型路由                     │
│   日常任务用便宜模型 + 复杂任务用强模型          │
│              ~$20 / 月                          │
└────────────────────────────────────────────────┘

通过合理配置路由策略,将高频低难度任务分配给低成本模型,仅在必要时调用高端模型,月成本可降低 90% 以上。

5. 常见问题与解决方案

5.1 “Unable to connect to Anthropic services” 错误

如果运行 ccr code 时报错:“Unable to connect to Anthropic services”,可以修改 ~/.claude.json 文件,在最外层添加以下配置:

1
2
3
{
  "hasCompletedOnboarding": true
}

保存后重新运行即可。

6. 小结

本文介绍了如何通过 Claude Code Router 打破 Claude Code 的使用限制:

  • 本地部署:通过 vLLM 部署 GLM5 模型,实现零成本使用
  • 多模型路由:根据任务类型智能分发,高频任务用便宜模型,复杂任务用强模型
  • 成本优化:相比 Claude Max Plan,合理配置后成本可降低 90% 以上

CCR 还支持对接更多 Provider,如 DeepSeek、智谱 AI、OpenAI 等,可根据实际需求灵活组合。如果你也在寻找高性价比的 AI 编程方案,不妨试试这套配置。

0%