跳到主要内容

Server 简介

Claude Code Router Server 是一个核心服务组件,负责将 Claude Code 的 API 请求路由到不同的 LLM 提供商。它提供了完整的 HTTP API,支持:

  • API 请求路由:将 Anthropic 格式的请求转换为各种提供商的 API 格式
  • 认证与授权:支持 API Key 认证
  • 配置管理:动态配置提供商、路由规则和转换器
  • Web UI:内置管理界面
  • 日志系统:完整的请求日志记录

架构概述

┌─────────────┐     ┌─────────────────────────────┐     ┌──────────────┐
│ Claude Code │────▶│ CCR Server │────▶│ LLM Provider │
│ Client │ │ ┌─────────────────────┐ │ │ (OpenAI/ │
└─────────────┘ │ │ @musistudio/llms │ │ │ Gemini/etc)│
│ │ (核心包) │ │ └──────────────┘
│ │ - 请求转换 │ │
│ │ - 响应转换 │ │
│ │ - 认证处理 │ │
│ └─────────────────────┘ │
│ │
│ - 路由逻辑 │
│ - Agent 系统 │
│ - 配置管理 │
└─────────────────────────────┘

├─ Web UI
├─ Config API
└─ Logs API

核心包:@musistudio/llms

服务器构建于 @musistudio/llms 之上,这是一个通用的 LLM API 转换库,提供了核心的请求/响应转换能力。

什么是 @musistudio/llms?

@musistudio/llms 是一个独立的 npm 包(@musistudio/llms),负责处理:

  • API 格式转换:在不同的 LLM 提供商 API 之间转换(Anthropic、OpenAI、Gemini 等)
  • 请求/响应转换:将请求和响应转换为统一格式
  • 认证处理:管理不同提供商的认证方法
  • 流式响应支持:处理来自不同提供商的流式响应
  • 转换器系统:提供可扩展的架构来添加新的提供商

核心概念

1. 统一请求/响应格式

核心包定义了统一格式(UnifiedChatRequestUnifiedChatResponse),抽象了提供商特定的差异:

interface UnifiedChatRequest {
messages: UnifiedMessage[];
model: string;
max_tokens?: number;
temperature?: number;
stream?: boolean;
tools?: UnifiedTool[];
tool_choice?: any;
reasoning?: {
effort?: ThinkLevel;
max_tokens?: number;
enabled?: boolean;
};
}

2. 转换器接口

所有转换器都实现一个通用接口:

interface Transformer {
transformRequestIn?: (request: UnifiedChatRequest, provider: LLMProvider, context: TransformerContext) => Promise<any>;
transformRequestOut?: (request: any, context: TransformerContext) => Promise<UnifiedChatRequest>;
transformResponseIn?: (response: Response, context?: TransformerContext) => Promise<Response>;
transformResponseOut?: (response: Response, context: TransformerContext) => Promise<Response>;
endPoint?: string;
name?: string;
auth?: (request: any, provider: LLMProvider, context: TransformerContext) => Promise<any>;
}

3. 内置转换器

核心包包含以下转换器:

  • anthropic:Anthropic API 格式
  • openai:OpenAI API 格式
  • gemini:Google Gemini API 格式
  • deepseek:DeepSeek API 格式
  • groq:Groq API 格式
  • openrouter:OpenRouter API 格式
  • 等等...

与 CCR Server 的集成

CCR server 通过以下方式集成 @musistudio/llms

  1. 转换器服务packages/core/src/services/transformer.ts):管理转换器的注册和实例化
  2. 提供商配置:将提供商配置映射到核心包的 LLMProvider 接口
  3. 请求管道:在请求处理过程中按顺序应用转换器
  4. 自定义转换器:支持加载外部转换器插件

版本和更新

@musistudio/llms 的当前版本是 1.0.51。它作为独立的 npm 包发布,可以独立使用或作为 CCR Server 的一部分使用。

核心功能

1. 请求路由

  • 基于 Token 数量的智能路由
  • 项目级路由配置
  • 自定义路由函数
  • 场景化路由(background、think、longContext 等)

2. 请求转换

  • 支持多种 LLM 提供商的 API 格式转换
  • 内置转换器:Anthropic、DeepSeek、Gemini、OpenRouter、Groq 等
  • 可扩展的转换器系统

3. Agent 系统

  • 插件式的 Agent 架构
  • 内置图片处理 Agent
  • 自定义 Agent 支持

4. 配置管理

  • JSON5 格式配置文件
  • 环境变量插值
  • 配置热更新(需重启服务)

使用场景

场景一:个人本地服务

在本地运行服务,供个人 Claude Code 使用:

ccr start

场景二:团队共享服务

使用 Docker 部署,为团队成员提供共享服务:

docker run -d -p 3456:3456 musistudio/claude-code-router

场景三:二次开发

基于暴露的 API 构建自定义应用:

GET /api/config
POST /v1/messages
GET /api/logs

下一步