自动CC路由 是 AI Skill Hub 本期精选AI工具之一。综合评分 8.0 分,整体质量较高。我们强烈推荐将其纳入你的 AI 工具库,帮助提升工作效率。
自动CC路由 是一款基于 JavaScript 开发的开源工具,专注于 AI、LLM、自动转发 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
自动CC路由 是一款基于 JavaScript 开发的开源工具,专注于 AI、LLM、自动转发 等核心功能。作为 GitHub 开源项目,它拥有活跃的社区支持和持续的版本迭代,代码完全透明可审计,支持本地部署以保护数据隐私。无论是个人使用还是集成到企业工作流,都能提供稳定可靠的解决方案。
# 方式一:npm 全局安装 npm install -g autoccrouter # 方式二:npx 直接运行(无需安装) npx autoccrouter --help # 方式三:项目依赖安装 npm install autoccrouter # 方式四:从源码运行 git clone https://github.com/LostAbaddon/AutoCCRouter cd AutoCCRouter npm install npm start
# 命令行使用
autoccrouter --help
# 基本用法
autoccrouter [options] <input>
# Node.js 代码中使用
const autoccrouter = require('autoccrouter');
const result = await autoccrouter.run(options);
console.log(result);
# autoccrouter 配置说明 # 查看配置选项 autoccrouter --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export AUTOCCROUTER_CONFIG="/path/to/config.yml"
- AUTHOR: LostAbaddon - VERSION: 2.3.1
将 Claude Code / Claude Cowork / Codex CLI / Codex App / Gemini CLI 请求透明转发到多厂商 LLM 的桥接代理,支持自动话题分类、智能路由和 Web 管理面板。
apiKey 支持数组格式,基于内存级加权随机算法实现多租户流量均衡;自动识别鉴权/欠费/业务错误标记 Key 状态并自愈web_search / web_fetch 内置工具到目标 Provider 接受的格式(如 DeepSeek 的 web_search_20260209、Google 的 googleSearch),不支持时回落为占位响应,保证多轮 tool_use 链路不断裂config.json 保存即可即时生效,与网页端保存行为一致;无需重启服务modeCacheTtl 秒内同一 session 的分类结果被缓存复用conversationGroups 控制送入分类器的最近对话组数```bash git clone git@github.com:LostAbaddon/cc2llm.git cd cc2llm
npm install -g @openai/codex
codex doctor ```
```
model_catalog_json必须写在config.toml根级别,不能放在 provider 配置段内。Provider ID(如cc2llm)不能使用系统保留名(openai、ollama、lmstudio等)。
cc2llm 支持多个不同协议的客户端同时连接到同一代理端口:
```bash
npm start
npm start claude
npm start codex
npm start gemini ```
所有客户端共享同一套 Provider 配置、Model Mapping 和 Auto Mode 设置,管理面板统一管理。
cp config.template.json config.json
npm start # 启动代理 + 管理面板 npm start claude # 启动代理后自动拉起 Claude Code TUI npm start codex # 启动代理后自动拉起 Codex CLI npm start gemini # 启动代理后自动拉起 Gemini CLI npm start wui # 在浏览器打开管理面板 ```
http://127.0.0.1:8764(各客户端配置此地址)http://127.0.0.1:8765model = "gpt-5.4" model_provider = "cc2llm" openai_base_url = "http://127.0.0.1:8764/codex"
[model_providers.cc2llm] name = "CC2LLM Bridge" base_url = "http://127.0.0.1:8764/codex" wire_api = "chat" env_key = "OPENAI_API_KEY"
配合环境变量:
bash export OPENAI_API_KEY=cc2llm codex
> **关于 `wire_api`**:Codex CLI 0.81.0+ 默认使用 `"responses"`(Responses API),但大多数中转服务只支持 Chat Completions API。如果你的后端 Provider 只支持 Chat,请设置 `wire_api = "chat"`。
#### Model Mapping 配置
Codex CLI 发送的模型名是 OpenAI 风格(如 `gpt-5.4`、`gpt-5`、`codex-4`、`o4-mini`、`o3`),需要在 cc2llm 的 `modelMapping` 中添加对应映射:
json { "prefix": "gpt-5.4", "provider": "deepseek", "target": "deepseek-v4-pro" }, { "prefix": "gpt-5", "provider": "deepseek", "target": "deepseek-v4-pro" }, { "prefix": "codex", "provider": "deepseek", "target": "deepseek-v4-pro" }, { "prefix": "o4", "provider": "deepseek", "target": "deepseek-v4-pro" }, { "prefix": "o3", "provider": "deepseek", "target": "deepseek-v4-pro" }
> 映射规则:按 `prefix` 长度降序匹配,`gpt-5.4` 会优先命中 `gpt-5.4` 前缀而非 `gpt-5`。
>
> 以上示例中的模型名(`gpt-5.4`、`deepseek-v4-pro` 等)为演示前缀,实际使用时请参考 `config.template.json` 中的最新配置或将你所用客户端实际发送的模型名填入映射。
#### 验证配置
bash
echo $OPENAI_BASE_URL echo $OPENAI_API_KEY
config.json 结构:
{
"server": { "port": 8764, "host": "127.0.0.1", "adminPort": 8765 },
"defaultMaxTokens": 131072,
"providers": { ... },
"agents": { ... },
"modelMapping": [ ... ],
"modeCacheTtl": 60,
"conversationGroups": 5,
"logLevel": "info"
}
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
modeCacheTtl | number | 60 | Auto Mode 分类结果缓存时间(秒),期间同 session 内跳过重复分类 |
conversationGroups | number | 5 | 分类器保留的最近 N 组对话(user→assistant),超出部分裁剪 |
Codex CLI 使用 OpenAI Chat Completions API 协议,cc2llm 在代理端口自动识别并处理。
```bash
Gemini CLI 使用 Google Gemini 原生 API 协议,cc2llm 在代理端口自动识别并处理。
npm install -g @google/gemini-cli
方式一:一键启动(最简单)
npm start gemini
该命令自动设置环境变量并启动 Gemini CLI。
方式二:环境变量
export GOOGLE_GEMINI_BASE_URL=http://127.0.0.1:8764
export GEMINI_API_KEY=cc2llm
gemini
GOOGLE_GEMINI_BASE_URL末尾无需带路径前缀,Gemini CLI 会自动追加/v1beta/models/...。
方式三:配置文件
创建 ~/.gemini/settings.json:
{
"security": {
"auth": {
"selectedType": "gemini-api-key"
}
}
}
配合环境变量启动。
Gemini CLI 发送的模型名是 Google 风格(如 gemini-2.5-pro、gemini-2.5-flash、gemini-3-pro-preview),需要在 cc2llm 的 modelMapping 中添加对应映射:
{
"prefix": "gemini-2.5",
"provider": "google",
"target": "gemini-3.1-flash-lite-preview"
},
{
"prefix": "gemini-3",
"provider": "google",
"target": "gemini-3.1-pro-preview"
}
也可以将 Gemini CLI 的请求路由到非 Gemini 的后端(如 DeepSeek),cc2llm 会自动做 Gemini ↔ Anthropic 协议转换:
{
"prefix": "gemini-2.5",
"provider": "deepseek",
"target": "deepseek-v4-pro"
}
GOOGLE_GEMINI_BASE_URL 被忽略。建议清除缓存后重新配置,或者使用 API Key 认证模式。sandbox: true 后,GOOGLE_*_BASE_URL 环境变量不会传递到沙箱内部,仅有 GEMINI_API_KEY 被保留。使用 cc2llm 时建议关闭沙箱或使用其他隔离方式。?key=...)中传递,cc2llm 会自动处理。model_catalog_json = "~/.codex/model-catalogs/all-models.json"
model = "deepseek-v4-pro" model_provider = "cc2llm" openai_base_url = "http://127.0.0.1:8764/codex"
[model_providers.cc2llm] name = "CC2LLM Bridge" base_url = "http://127.0.0.1:8764/codex" wire_api = "chat" env_key = "OPENAI_API_KEY"
#### 第三步:设置环境变量并启动
bash export OPENAI_API_KEY=cc2llm
cc2llm 使用统一的 modelMapping 前缀匹配机制处理所有客户端的模型名。以下是一个覆盖三种客户端的完整示例:
"modelMapping": [
{ "prefix": "claude-opus", "target": "deepseek-v4-pro", "provider": "deepseek" },
{ "prefix": "claude-sonnet", "target": "deepseek-v4-pro", "provider": "auto" },
{ "prefix": "claude-haiku", "target": "deepseek-v4-flash", "provider": "deepseek" },
{ "prefix": "gpt-5.4", "target": "deepseek-v4-pro", "provider": "deepseek" },
{ "prefix": "gpt-5", "target": "deepseek-v4-pro", "provider": "deepseek" },
{ "prefix": "codex", "target": "deepseek-v4-pro", "provider": "deepseek" },
{ "prefix": "o4", "target": "deepseek-v4-pro", "provider": "deepseek" },
{ "prefix": "o3", "target": "deepseek-v4-pro", "provider": "deepseek" },
{ "prefix": "gemini-2.5", "target": "gemini-3.1-flash-lite-preview", "provider": "google" },
{ "prefix": "gemini-3", "target": "gemini-3.1-pro-preview", "provider": "google" }
]
前缀匹配规则: - 按 prefix 长度降序排列,优先命中更具体的前缀 - gpt-5.4 → 优先命中 gpt-5.4(长度 6),而非 gpt-5(长度 5) - gemini-2.5-flash → 命中 gemini-2.5 前缀 - 空字符串 prefix 作为兜底匹配,通常无需设置
以上示例中的模型名均为演示前缀。实际使用时请根据 config.template.json 中的最新配置和你所用客户端实际发送的模型名来编写映射规则。
每个 Provider 代表一个模型服务商。支持三种协议类型:
| type | 说明 | 示例厂商 |
|---|---|---|
anthropic | Anthropic Messages API 兼容 | DeepSeek |
openai | OpenAI Chat Completions 兼容 | Moonshot, MiniMax, OpenRouter |
gemini | Google Gemini API 原生 | Google Gemini |
auto | 自动路由(无需 apiKey) | — |
"deepseek": {
"type": "anthropic",
"apiKey": "sk-xxx",
"baseUrl": "https://api.deepseek.com/anthropic",
"proxy": "",
"models": [
{ "name": "deepseek-v4-pro", "maxTokens": 393216 },
{ "name": "deepseek-v4-flash", "maxTokens": 393216 }
],
"defaultMaxTokens": 393216
}
maxTokens 查找优先级(三层):模型级 models[].maxTokens → Provider 级 defaultMaxTokens → 全局 defaultMaxTokens → 131072。
apiKey 字段支持数组格式来配置同 Provider 的多个 Key。服务会基于内存级加权随机算法自动分配请求到不同 Key,实现故障自愈与负载均衡:
"deepseek": {
"type": "anthropic",
"apiKey": ["sk-key1-xxx", "sk-key2-xxx", "sk-key3-xxx"],
"baseUrl": "..."
}
算法特性: - 动态权重:每次选择 Key 时,根据各 Key 的可用状态、当前并发数、历史完成数计算权重,均衡流量 - 故障感知:4XX 鉴权错误 / 2XX 中嵌入的业务错误 → 标记 Key 为不可用(权重降为 30),但不完全禁用 - Provider 级异常:连接失败 / 5XX → 记录 Provider 级状态,不影响各 Key 的可用性标记 - 自愈机制:标记为不可用的 Key 若后续成功返回,立即恢复为可用(权重回到 100) - 绝不卡死:所有 Key 均不可用时,以 30:30:... 等权重继续分发,一旦任一 Key 成功即回升
状态查看:管理面板 API > Key States 可查看每个 Provider 的所有 Key 实时状态(可用性、并发数、完成数)。
将客户端传入的模型名按前缀匹配路由到目标厂商:
"modelMapping": [
{ "prefix": "claude-opus", "target": "deepseek-v4-pro", "provider": "deepseek" },
{ "prefix": "gpt-5.4", "target": "deepseek-v4-pro", "provider": "deepseek" },
{ "prefix": "gemini-2.5", "target": "gemini-2.5-pro", "provider": "google" },
{ "prefix": "auto", "target": "auto", "provider": "auto" }
]
匹配规则: - 按 prefix 长度降序排列,优先命中更具体的前缀 - claude-opus-4-7-20250805 → deepseek-v4-pro(前缀 claude-opus 命中第一条) - 空字符串 prefix 作为兜底匹配 - 未匹配任何前缀 → 返回 400 错误 - 通配符前缀:prefix 中可包含 *,如 "gpt-*-mini",等价于正则 /^gpt-.*-mini/。通配规则排在所有精确规则之后匹配;同组内按 prefix 字符串长度降序
provider 为 auto 时,target 可以是数组:每次命中按权重选取一个 spec(详见下文「多模型加权路由」)。例如:
{
"prefix": "auto",
"target": ["deepseek/deepseek-v4-pro", "google/gemini-3.1-pro-preview"],
"provider": "auto"
}
当某个 mode 的 models 字段、或 modelMapping 中 provider: "auto" 的 target 数组、或 quick 模式的 models 数组存在多个候选项时,cc2llm 使用加权随机算法来选择本次请求实际使用的 provider/model。
对候选项 c,实际权重为:
weight = link_weight(c.provider) / (max_done + 1) * (c.num_done + 1) * (max_doing + 1) / (c.num_doing + 1)
其中: - link_weight(provider) — 该 provider 的连接权重(初始 100,每次"不可用"事件 ×0.9,每次"从不可用恢复"事件 ×1.1) - num_done — 该 provider/model 成功完成的任务数(失败不计入) - num_doing — 该 provider/model 当前正在执行的任务数 - max_done / max_doing — 候选项数组中 num_done / num_doing 的最大值 - 公式中所有 +1 用于避免除零
直觉:成功完成任务越多,被选中概率越大;正在执行的任务越多,被选中概率越小。这避免了对热门 provider/model 的过载。
link_weight 会随 provider 实际运行情况自动调整(数据从 key-state-manager 现有机制获取,不重复维护):
| 事件 | link_weight 变化 |
|---|---|
| 任务失败,provider 被判定为不可用 | × LINK_WEIGHT_DOWN_FACTOR(默认 0.9) |
| 任务成功,provider 从不可用恢复 | × LINK_WEIGHT_UP_FACTOR(默认 1.1) |
| 任务成功,provider 原本就可用 | 不变 |
| 任务失败,provider 原本就不可用 | × 0.9(持续压低) |
"持续压低"是预期行为——provider 持续故障时,权重会逐次降至 0.9 → 0.81 → 0.729 → …,直到几乎不被选中。当 provider 恢复后一次任务成功即开始回升(× 1.1)。
每次任务完成(无论成功或失败)都会立即更新所有统计。
任务失败时: - 重新加权选模型,从相同 models[] 数组中重新抽取 - 允许抽到同一个 provider/model 作为重试(不强制过滤) - 最多 MAX_RETRY_ATTEMPTS 次(默认 3,含首次) - 全部失败才返回最后一次错误给 Copilot;只要中间有任意一次成功,调用方看不到任何错误
业务请求和 Classifier Quick 请求都遵循此重试规则——两者各自有独立的重试循环。
候选项数组不会自动去重。如果用户在 models 中输入两个完全相同的 provider/model 字符串,相当于把该候选项的概率人为放大 2 倍。这是规则允许的干预手段,例如:
"code": ["deepseek/deepseek-v4-pro", "deepseek/deepseek-v4-pro", "google/gemini-3.1-pro"]
效果:deepseek 整体被选中的概率约 2/3,gemini 约 1/3。
config.json 热重载时,所有 link_weight、num_done、num_doing 全量清空,回到初始状态。
所有可调参数均定义为 lib/model-router.js 文件顶部常量,修改后重启即可生效,无需写死在调用处:
const LINK_WEIGHT_DOWN_FACTOR = 0.9; // provider 不可用时 link_weight 下调系数
const LINK_WEIGHT_UP_FACTOR = 1.1; // provider 恢复时 link_weight 上调系数
const MAX_RETRY_ATTEMPTS = 3; // 单个任务最大尝试次数(含首次)
const INITIAL_LINK_WEIGHT = 100; // provider 初始 link_weight
model-router 是新的、横跨 Provider/Model 级别的路由层,与已有的 key-state-manager(同 Provider 多 Key 负载均衡)是两个完全独立、不冲突的模块:
| 维度 | model-router | key-state-manager |
|---|---|---|
| 粒度 | Provider / Model | Provider / API Key |
| 目的 | 多 Provider/Model 路由选择 | 同 Provider 多账号负载均衡 |
| 状态 | 内存,num_done/num_doing/link_weight | 内存,available/inFlight/completed |
| 持久化 | 无(热加载重置) | 无(除用量统计外) |
| 文档 | 本节 | docs/multi_key_balancer_design.md |
二者可在同一次请求中先后使用:先由 model-router 选定 provider/model,再由 key-state-manager 在该 provider 内部选择具体 API Key。
管理面板可通过 GET /api/model-router 端点获取当前 Model Router 状态快照(providerWeights + taskStats),用于调试权重收敛。
管理面板的 Providers 标签页支持从 Provider API 动态拉取可用模型列表(GET /api/models),按 Provider 分组返回经过滤后的 LLM 模型。为过滤掉 embedding、TTS、图像生成等非 LLM 模型,model-filter.json 按 Provider 配置正则排除规则:
{
"google": ["embedding", "\\bimagen\\b", "\\bveo\\b", "\\btts\\b", ...],
"openrouter": ["embedding", "-image\\b", "dall-e", "moderation", ...],
"openai": ["embedding", "\\btts\\b", "\\bwhisper\\b", "dall-e", "moderation", ...],
"xai": ["imagine", "\\btts\\b", "\\bstt\\b", "\\bvoice\\b"],
"deepseek": ["\\bjanus\\b"],
"moonshot": ["kimi-audio", "\\baudio\\b"],
"minimax": ["\\bspeech\\b", "image-01", "hailuo"]
}
过滤规则按 Provider 名称匹配,正则大小写不敏感。不在此文件中的 Provider 不做过滤。
智能转发请求,提高LLM服务利用率
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。
建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。
✅ Apache 2.0 — 宽松开源协议,可商用,需保留版权声明和 NOTICE 文件,含专利授权条款。
经综合评估,自动CC路由 在AI工具赛道中表现稳健,质量优秀。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。
| 原始名称 | AutoCCRouter |
| 原始描述 | 开源AI工具:自动将 Claude Code / Claude Cowork 的请求转发到合适的 LLM 服务商与模型上,比之前的项目更加智能!。⭐9 · JavaScript |
| Topics | AILLM自动转发 |
| GitHub | https://github.com/LostAbaddon/AutoCCRouter |
| License | Apache-2.0 |
| 语言 | JavaScript |
收录时间:2026-06-12 · 更新时间:2026-06-12 · License:Apache-2.0 · AI Skill Hub 不对第三方内容的准确性作法律背书。