Rapid Project Understanding Claude Code Router

📊 Claude Code Router 项目分析报告

使用Skill: rapid-project-understanding 项目来源: https://github.com/musistudio/claude-code-router 分析时间: 2026-01-05 分析深度: standard (110分钟)


第1步:项目概况(找入口)

项目基本信息表

项目说明
项目类型中间件服务(API Router + CLI Tool + Web UI)
核心功能将Claude Code请求路由到其他LLM提供商,无需Anthropic账户
技术栈TypeScript/Node.js + Fastify + React + Vite
架构模式Monorepo(pnpm workspaces)
启动方式npm install -g @musistudio/claude-code-routerccr start
配置文件~/.claude-code-router/config.json
核心价值降低成本、绕过地理限制、灵活选择模型、保持Claude Code体验

一句话概括

Claude Code Router是一个透明代理服务,拦截Claude Code的API请求并重定向到配置的替代提供商(如DeepSeek、OpenAI、Gemini),实现零摩擦的成本优化和模型自由切换。


第2步:核心数据流(追链路)

核心流程1:ccr code - 启动Claude Code并路由请求

用户执行: ccr code
  ↓
【CLI解析】ccr code命令
  ├─ 文件:packages/cli/src/cli.ts
  ├─ 设置环境变量:
  │   ANTHROPIC_BASE_URL=http://localhost:3456/v1
  │   ANTHROPIC_API_KEY=ccr-router-key
  └─ 启动claude-code进程
  ↓
【Claude Code启动】
  └─ Claude Code读取环境变量
  ├─ 发现ANTHROPIC_BASE_URL指向本地服务
  └─ 所有API请求发送到 http://localhost:3456
  ↓
【Router接收请求】/v1/messages
  ├─ 文件:packages/server/src/server.ts
  ├─ Fastify服务器监听 :3456
  └─ 接收Claude Code的POST /v1/messages
  ↓
【智能路由】
  ├─ 文件:packages/server/src/utils/router.ts
  ├─ 分析请求特征:
  │   ├─ 任务类型?(editing/chat/command)
  │   ├─ 上下文长度?
  │   ├─ 项目特定配置?
  │   └─ 会话历史?
  └─ 选择最佳模型:
      ├─ 轻量任务 → Ollama (本地)
      ├─ 重度推理 → DeepSeek-R1
      ├─ 长上下文 → OpenRouter
      └─ 图片任务 → DALL-E 3
  ↓
【请求转换】
  ├─ 文件:packages/core/src/transformer/
  ├─ Anthropic格式 → 提供商格式
  │   ├─ 提取messages
  │   ├─ 转换API参数
  │   └─ 适配stream格式
  └─ 生成目标提供商请求
  ↓
【发送到提供商】
  ├─ HTTP POST到提供商API
  ├─ 携带API密钥(从配置读取)
  └─ SSE流式响应
  ↓
【响应转换】
  ├─ 文件:packages/core/src/utils/SSEParser.transform.ts
  ├─ 提供商格式 → Anthropic格式
  │   ├─ 解析SSE事件
  │   ├─ 转换delta格式
  │   └─ 适配tool_use格式
  └─ 生成标准Anthropic响应
  ↓
【返回给Claude Code】
  └─ Claude Code接收标准格式响应
      └─ 用户无感知(以为是Claude API)

数据流关键节点

  1. CLI层 → 设置环境变量,启动Claude Code
  2. Server层 → Fastify服务器,接收请求
  3. Router层 → 智能模型选择
  4. Transformer层 → API格式转换
  5. Provider层 → 实际LLM调用
  6. SSE处理层 → 流式响应转换

核心流程2:智能路由决策

请求到达Router
  ↓
【步骤1】计算上下文长度
  ├─ 使用tiktoken计算token数
  └─ 判断:total_tokens > threshold?
  ↓
【步骤2】检查路由规则
  ├─ 路由类别:
  │   ├─ default(默认)
  │   ├─ background(后台任务)
  │   ├─ think(推理任务)
  │   ├─ longContext(长上下文)
  │   ├─ webSearch(搜索增强)
  │   └─ image(图片生成)
  └─ 选择匹配的模型
  ↓
【步骤3】检查会话缓存
  ├─ LRU缓存:相同会话复用模型
  └─ 避免频繁切换
  ↓
【步骤4】选择最终模型
  └─ 返回:provider + model配置

第3步:架构地图(画架构)

Monorepo结构分析

claude-code-router/
├── packages/                    # Monorepo包结构
│   ├── cli/                    # ✅ P0:CLI工具
│   │   └── src/
│   │       ├── cli.ts           # CLI入口
│   │       ├── commands/        # 命令实现
│   │       │   ├── start.ts     # 启动服务
│   │       │   ├── stop.ts      # 停止服务
│   │       │   ├── code.ts      # ✅ 核心:启动Claude Code
│   │       │   └── ui.ts        # 打开Web UI
│   │       └── utils/
│   │
│   ├── server/                 # ✅ P0:后端服务
│   │   └── src/
│   │       ├── index.ts         # 服务入口
│   │       ├── server.ts        # ✅ 核心:Fastify服务器配置
│   │       ├── routes/          # API路由
│   │       │   └── index.ts     # /v1/messages端点
│   │       ├── middleware/      # 中间件
│   │       │   ├── auth.ts      # 身份验证
│   │       │   └── cors.ts      # CORS配置
│   │       └── utils/
│   │           ├── router.ts     # ✅ 核心:智能路由引擎
│   │           ├── SSEParser.transform.ts  # ✅ 核心:响应转换
│   │           └── tokenizer.ts  # Token计算
│   │
│   ├── core/                   # ✅ P0:核心逻辑
│   │   └── src/
│   │       ├── transformer/     # ✅ 核心:API格式转换
│   │       │   ├── base.ts      # Transformer基类
│   │       │   ├── anthropic.ts # Anthropic适配器
│   │       │   ├── openai.ts    # OpenAI适配器
│   │       │   └── gemini.ts    # Gemini适配器
│   │       └── providers/       # 提供商配置
│   │           ├── openrouter.ts
│   │           ├── deepseek.ts
│   │           └── ollama.ts
│   │
│   └── ui/                     # P1:Web管理界面
│       └── src/
│           ├── App.tsx          # React应用入口
│           ├── components/      # UI组件
│           │   ├── ConfigDialog.tsx    # 配置对话框
│           │   ├── LogViewer.tsx        # 日志查看器
│           │   ├── ProviderManager.tsx  # 提供商管理
│           │   └── JsonEditor.tsx       # JSON配置编辑器
│           └── routes.tsx       # 路由配置
│
├── config.json                 # 配置示例
├── pnpm-workspace.yaml         # Monorepo配置
├── package.json                # 根依赖配置
└── tsconfig.json               # TypeScript配置

三层架构图

┌─────────────────────────────────────────────┐
│           表现层           │
│ 变化源:用户交互方式(CLI/Web)               │
│ 职责:提供用户界面,启动服务                  │
├─────────────────────────────────────────────┤
│ CLI: packages/cli/                           │
│   - ccr start/stop/code/ui                   │
│ Web UI: packages/ui/                         │
│   - 配置管理/日志查看/模型选择                │
└─────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────┐
│           应用层              │
│ 变化源:业务流程、路由策略                     │
│ 职责:请求路由、会话管理、配置加载              │
├─────────────────────────────────────────────┤
│ HTTP Server: packages/server/                │
│   - Fastify服务器                             │
│   - API端点: /v1/messages                    │
│   - 中间件: auth/cors                         │
│                                              │
│ Router: src/utils/router.ts                  │
│   - 智能路由决策                               │
│   - 会话缓存                                  │
│   - Token计算                                 │
└─────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────┐
│           领域层                │
│ 变化源:核心业务规则(API规范、转换逻辑)       │
│ 职责:API格式转换、模型抽象                    │
├─────────────────────────────────────────────┤
│ Transformer: packages/core/src/transformer/  │
│   - Anthropic → OpenAI 格式转换               │
│   - SSE流式响应处理                           │
│   - Tool use适配                              │
│                                              │
│ Providers: packages/core/src/providers/      │
│   - 提供商API封装                             │
│   - OpenRouter/DeepSeek/Gemini/Ollama         │
└─────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────┐
│        基础设施层         │
│ 变化源:外部LLM提供商、HTTP客户端              │
│ 职责:网络通信、提供商集成                      │
├─────────────────────────────────────────────┤
│ HTTP Client: fetch/axios                      │
│   - 发送API请求                               │
│   - SSE流处理                                │
│                                              │
│ External APIs:                               │
│   - OpenAI API                               │
│   - DeepSeek API                             │
│   - Gemini API                               │
│   - Ollama (本地)                            │
└─────────────────────────────────────────────┘

关键设计模式

1. 透明代理模式

Claude Code配置:
  ANTHROPIC_BASE_URL=http://localhost:3456/v1
  ANTHROPIC_API_KEY=ccr-router-key

请求流程:
  Claude Code → localhost:3456 → Router → Provider
              ↑                        ↑
              └────────────────────────┘
              返回标准Anthropic格式响应

核心思想:Claude Code不知道在使用Router,一切对它透明


2. 智能路由策略

路由决策树:

请求特征
  ↓
token > 100K?
  ├─ 是 → longContext模型
  └─ 否 ↓
任务类型?
  ├─ 编辑代码 → background模型
  ├─ 复杂推理 → think模型
  ├─ 网页搜索 → webSearch模型
  └─ 图片 → image模型
  ↓
会话缓存?
  ├─ 命中 → 使用缓存的模型
  └─ 未命中 → 选择新模型

3. Transformer模式

API适配器模式:

Transformer(基类)
  ├── transformRequest()  // Anthropic → Provider
  └── transformResponse() // Provider → Anthropic
      ↓
OpenAITransformer    GeminiTransformer    DeepSeekTransformer

隔离变化源

  • 新增提供商 → 添加新的Transformer
  • 修改转换逻辑 → 只影响对应Transformer

第4步:关键代码识别(定关键)

关键代码清单

优先级模块/文件职责变化频率必读?
P0packages/server/src/utils/router.ts智能路由引擎低(核心逻辑)✅ 必读
P0packages/core/src/transformer/API格式转换低(核心抽象)✅ 必读
P0packages/cli/src/commands/code.ts启动Claude Code✅ 必读
P0packages/server/src/server.tsFastify服务器✅ 必读
P1packages/core/src/utils/SSEParser.transform.tsSSE流处理⚠️ 了解
P1packages/server/src/routes/index.tsAPI路由定义⚠️ 浏览
P2packages/ui/src/Web UI高(频繁演进)❌ 按需阅读
P2packages/server/src/middleware/中间件❌ 用到再看

最关键的代码路径

如果要快速理解Claude Code Router核心逻辑,阅读顺序:

1. packages/cli/src/commands/code.ts
   ↓ 如何启动Claude Code并设置环境变量

2. packages/server/src/server.ts
   ↓ Fastify服务器如何启动和监听

3. packages/server/src/routes/index.ts
   ↓ /v1/messages端点如何接收请求

4. packages/server/src/utils/router.ts
   ↓ ✅ 核心:如何智能选择模型

5. packages/core/src/transformer/base.ts
   ↓ ✅ 核心:Transformer如何转换API格式

6. packages/core/src/utils/SSEParser.transform.ts
   ↓ ✅ 核心:SSE流式响应如何处理

阅读策略

  • 从P0文件开始,理解"路由+转换"核心机制
  • Transformer作为黑盒,先理解接口
  • P2模块(Web UI)可以完全跳过

🎯 架构设计分析(变化源隔离)

Claude Code Router如何隔离变化源?

变化源隔离手段证据
LLM提供商APIpackages/core/src/transformer/模块每个提供商独立Transformer
路由策略packages/server/src/utils/router.ts封装配置驱动,可插拔路由规则
Claude Code协议实现Anthropic API规范标准接口,内部自由变化
用户界面CLI + Web UI双前端UI变化不影响核心路由逻辑
配置格式JSON配置文件版本化配置,向后兼容

架构亮点

1. 透明代理设计

✅ Claude Code无需修改
✅ 通过环境变量集成
✅ 用户无感知切换模型

2. 智能路由

✅ 任务类型感知
✅ 上下文长度感知
✅ 会话缓存优化
✅ 自动阈值切换

3. 提供商解耦

✅ 统一Transformer接口
✅ 支持OpenRouter/DeepSeek/Gemini/Ollama
✅ 易于添加新提供商

4. Monorepo架构

✅ packages/cli(独立发布)
✅ packages/server(独立发布)
✅ packages/core(共享库)
✅ packages/ui(独立前端)

学习路径建议

如果你想快速上手使用

Day 1: 安装配置(1小时)
├─ npm install -g @musistudio/claude-code-router
├─ 配置~/.claude-code-router/config.json
├─ ccr start
└─ ccr code(启动Claude Code)

Day 2: 高级配置(2小时)
├─ 配置多个提供商
├─ 设置路由规则
├─ 使用Web UI管理
└─ 理解路由决策

Day 3: 深入理解(3小时)
├─ 阅读核心源码
├─ 理解Transformer机制
└─ 尝试添加新提供商

如果你想理解源码

阶段1:黑盒理解(1天)
├─ 使用所有命令(ccr start/code/ui)
├─ 观察日志输出
├─ 理解配置格式
└─ 建立认知模型

阶段2:白盒拆解(3天)
├─ 阅读核心命令
├─ 理解模块职责
└─ 画数据流图

阶段3:破坏测试(1天)
├─ 配置错误会怎样?
├─ 提供商宕机会怎样?
├─ 并发请求会怎样?
└─ 边界条件测试

阶段4:扩展实践(可选)
├─ 添加新的提供商
├─ 自定义路由规则
└─ 贡献PR

总结:这个项目的设计智慧

1. 透明代理思想

解决Claude Code锁定问题:
  不修改Claude Code → 通过环境变量重定向
  用户无感知 → 保持完整体验

2. 智能路由降低成本

不同任务用不同模型:
  简单任务 → 本地模型(免费)
  复杂推理 → DeepSeek(便宜)
  长上下文 → OpenRouter(灵活)
→ 成本优化 10-100倍

3. 适配器模式解耦

API规范差异:
  Anthropic API ←→ Transformer ←→ OpenAI API
  Gemini API ←→ Transformer ←→ DeepSeek API
→ 添加新提供商只需实现Transformer接口

4. Monorepo模块化

独立演进:
  CLI可以独立升级
  Server可以独立部署
  UI可以独立重构
→ 降低维护成本

💡 核心洞察

这个项目的本质是什么?

不是简单的CLI工具,而是一个完整的API Gateway + 请求转换器,核心价值在于:

  1. 打破锁定:Claude Code不再锁定Anthropic
  2. 成本优化:智能路由到最便宜的模型
  3. 技术解耦:通过适配器模式隔离API差异
  4. 用户体验:透明的代理,用户无感知

适用场景

  • 成本敏感的个人开发者
  • 需要本地部署的企业
  • 地理限制地区
  • 需要多模型组合的复杂任务

Sources:


生成时间: 2026-01-05 Skill版本: rapid-project-understanding v1.0