CCR(Cluade Code Router) 自定义路由实现模型自动选择的方法
- AI技术
- -435分钟前
- 8热度
- 0评论

Claude Code Router (CCR) 是一个开源的 Node.js 命令行工具,旨在为开发者提供能够使用自定义大模型以灵活、低成本使用 Cluade Code 进行 AI 编程的方式。它通过将 Claude Code 的请求路由到自定义的模型供应商(如 OpenAI、OpenRouter、DeepSeek、Gemini 等)并进行转换适配,实现多模型支持与 API 中转功能。
1 CCR 模型选择路由与指定模型的方法
CCR 实现了一套内置的模型提供商及模型选择的路由规则:
- 若请求参数 model 符合
{provider},{model}的格式,则直接使用指定的模型; - 否则则会忽略 model 参数,根据 CCR 路由配置(默认、后台、思考、长上下文)进行识别和选择。
相关实现可参考这里:https://github.com/musistudio/claude-code-router/blob/main/src/utils/router.ts
Cluade Code 支持通过 ANTHROPIC_MODEL 等环境变量自定义不同场景下使用的模型。
因此,在通过 ccr code 使用 Cluade Code 时,可以通过设置环境变量 ANTHROPIC_MODEL 为 {provider},{model} 的格式来指定模型,如 ANTHROPIC_MODEL=openrouter,z-ai/glm-4.6。
2 CCR 自定义路由实现自定义模型不指定 provider 的办法
通过环境变量 ANTHROPIC_MODEL 可以指定模型,但其值必须按照 {provider},{model} 的格式。是否可以省略 {provider} 部分,即仅指定模型名称 {model} 也能匹配到呢?答案是可以的。
CCR 配置文件 ~/.claude-code-router/config.json 支持配置 CUSTOM_ROUTER_PATH 字段,通过它指定一个自定义的 js 文件,以满足自定义模型路由选择逻辑。
因此,为了达到上面所要的效果,我们可以这么做:
首先,在 ~/.claude-code-router/config.json 中添加 CUSTOM_ROUTER_PATH 字段,并指定一个 js 文件路径,如 /Users/lzwme/.claude-code-router/custom-model-router.js。
然后,新建这个文件 /Users/lzwme/.claude-code-router/custom-model-router.js,并添加以下内容:
// /User/xxx/.claude-code-router/custom-model-router.js
const path = require('node:path');
const fs = require('node:fs');
const reqbodyLogPath = path.resolve(__dirname, `logs/req-body-${new Date().toISOString().slice(0, 10).replace(/\D/, '')}.json`);
const logFsStream = fs.createWriteStream(reqbodyLogPath, { encoding: 'utf8', flags: 'a' });
/**
* 一个自定义路由函数,用于根据请求确定使用哪个模型。
*
* @param {object} req - 来自 Claude Code 的请求对象,包含请求体。
* @param {object} config - 应用程序的配置对象。
* @returns {Promise<string|null>} - 一个解析为 "provider,model_name" 字符串的 Promise,如果返回 null,则使用默认路由。
*/
module.exports = async function router(req, config) {
// 记录请求日志
if (process.env.CCR_REQ_LOG_DETAILS == '1') {
logFsStream.write(`${new Date().toISOString()} ${JSON.stringify(req.body)}`, 'utf8');
}
if (req.body?.model && Array.isArray(config.Providers)) {
const item = config.Providers.find((d) => d.models.includes(req.body.model));
if (item) return `${item.name},${req.body.model}`;
}
// 其他示例:根据内容识别使用特定模型路由
// const userMessage = req.body.messages.find((m) => m.role === 'user')?.content;
// if (userMessage && userMessage.includes('解释这段代码')) {
// // 为代码解释任务使用更强大的模型
// // return 'openrouter,anthropic/claude-sonnet-4.5';
// }
// 回退到默认的路由配置
return null;
};
该示例脚本实现了如下功能:
- 根据请求参数
model匹配配置的模型提供者,返回对应的模型供者及模型名称。 - 支持记录所有请求的日志详情,方便进行请求分析。
3 CCR 其他使用及问题
CCR 是否可从内网其他机器访问?
CCR 为了安全起见,默认仅可本机访问。若希望通过本机 IP 地址在其他机器上访问 CCR,可以在设置中将 HOST 参数设置为 0.0.0.0。
提示:允许通过 IP 访问后存在安全风险,建议同时设置 API 密钥 APIKEY 字段。