字节笔记本

2026年2月23日

Claude Code Router:灵活的 AI 模型路由工具

Claude Code Router 是一个强大的开源工具,用于将 Claude Code 的请求路由到不同的 AI 模型。该项目在 GitHub 上已获得超过 28,000 stars,它允许开发者自定义与模型的交互方式,同时享受 Anthropic 的更新。

项目简介

Claude Code Router 由 musistudio 开发维护,基于 TypeScript 构建。它作为 Claude Code 和各类 LLM 提供商之间的中间层,提供了灵活的路由、转换和管理功能。通过该工具,你可以根据需求将请求路由到不同的模型(如背景任务、思考模式、长上下文等)。

核心特性

  • 模型路由:根据需求将请求路由到不同模型(背景任务、思考模式、长上下文等)
  • 多提供商支持:支持 OpenRouter、DeepSeek、Ollama、Gemini、Volcengine、SiliconFlow 等多种模型提供商
  • 请求/响应转换:使用转换器为不同提供商自定义请求和响应
  • 动态模型切换:在 Claude Code 中使用 /model 命令动态切换模型
  • CLI 模型管理:通过 ccr model 直接从终端管理模型和提供商
  • GitHub Actions 集成:在 GitHub 工作流中触发 Claude Code 任务
  • 插件系统:通过自定义转换器扩展功能

技术栈

  • TypeScript:主要开发语言
  • Fastify:高性能 Web 框架
  • pnpm:包管理工具
  • Monorepo:使用 pnpm workspace 管理多包

安装指南

前置要求

  • Node.js >= 18
  • Claude Code 已安装

安装步骤

bash
# 安装 Claude Code
npm install -g @anthropic-ai/claude-code

# 安装 Claude Code Router
npm install -g @musistudio/claude-code-router

快速开始

1. 配置

创建 ~/.claude-code-router/config.json 文件:

json
{
  "APIKEY": "your-secret-key",
  "PROXY_URL": "http://127.0.0.1:7890",
  "LOG": true,
  "API_TIMEOUT_MS": 600000,
  "Providers": [
    {
      "name": "deepseek",
      "api_base_url": "https://api.deepseek.com/chat/completions",
      "api_key": "sk-xxx",
      "models": ["deepseek-chat", "deepseek-reasoner"]
    },
    {
      "name": "openrouter",
      "api_base_url": "https://openrouter.ai/api/v1/chat/completions",
      "api_key": "sk-xxx",
      "models": ["anthropic/claude-3.5-sonnet"]
    }
  ],
  "Router": {
    "default": "deepseek,deepseek-chat",
    "think": "deepseek,deepseek-reasoner",
    "longContext": "openrouter,anthropic/claude-3.5-sonnet"
  }
}

2. 启动服务

bash
# 启动 Claude Code with Router
ccr code

# 或使用 UI 模式管理配置
ccr ui

# 使用 CLI 管理模型
ccr model

核心代码解析

以下是核心服务器实现的简化代码:

typescript
import Fastify from "fastify";
import cors from "@fastify/cors";

class Server {
  private app: FastifyInstance;
  configService: ConfigService;
  providerService!: ProviderService;
  transformerService: TransformerService;

  constructor(options: ServerOptions = {}) {
    this.app = Fastify({ bodyLimit: 50 * 1024 * 1024 });
    this.configService = new ConfigService(options);
    this.transformerService = new TransformerService(
      this.configService,
      this.app.log
    );
  }

  async start(): Promise<void> {
    // 注册路由和中间件
    this.app.addHook("preHandler", async (req, reply) => {
      const url = new URL(`http://127.0.0.1${req.url}`);
      if (url.pathname.endsWith("/v1/messages")) {
        await router(req, reply, {
          configService: this.configService,
          tokenizerService: this.tokenizerService,
        });
      }
    });

    const address = await this.app.listen({
      port: parseInt(this.configService.get("PORT") || "3456", 10),
      host: this.configService.get("HOST") || "127.0.0.1",
    });

    console.log(`🚀 LLMs API server listening on ${address}`);
  }
}

路由配置详解

Router 配置允许你定义不同场景使用的模型:

路由类型说明示例
default默认模型deepseek,deepseek-chat
background后台任务ollama,qwen2.5-coder:latest
think需要推理的任务deepseek,deepseek-reasoner
longContext长上下文任务openrouter,google/gemini-2.5-pro-preview
webSearch联网搜索任务gemini,gemini-2.5-flash

环境变量支持

配置支持环境变量插值,使用 $VAR_NAME${VAR_NAME} 语法:

json
{
  "OPENAI_API_KEY": "$OPENAI_API_KEY",
  "Providers": [{
    "api_key": "$OPENAI_API_KEY"
  }]
}

预设管理

预设允许你保存、共享和重用配置:

bash
# 导出当前配置为预设
ccr preset export my-preset

# 安装预设
ccr preset install /path/to/preset

# 列出所有预设
ccr preset list

注意事项

  • 修改配置文件后需要重启服务:ccr restart
  • 未设置 APIKEY 时,主机强制绑定到 127.0.0.1 以确保安全
  • 支持非交互式模式(适用于 GitHub Actions、Docker 等环境)

项目链接

分享: