mirror of
https://github.com/musistudio/claude-code-router.git
synced 2026-01-30 06:12:06 +00:00
3.2 KiB
3.2 KiB
title, sidebar_position
| title | sidebar_position |
|---|---|
| 自定义路由器 | 1 |
自定义路由器
使用 JavaScript 编写自己的路由逻辑。
创建自定义路由器
创建一个导出路由函数的 JavaScript 文件:
// custom-router.js
module.exports = async function(req, config) {
// 获取用户消息
const userMessage = req.body.messages.find(m => m.role === 'user')?.content;
// 自定义逻辑
if (userMessage && userMessage.includes('解释代码')) {
return 'openrouter,anthropic/claude-3.5-sonnet';
}
// 返回 null 以使用默认路由
return null;
};
参数说明
路由函数接收以下参数:
| 参数 | 类型 | 说明 |
|---|---|---|
req |
object | 来自 Claude Code 的请求对象,包含请求体 |
config |
object | 应用程序的配置对象 |
配置
在 config.json 中设置 CUSTOM_ROUTER_PATH 以使用您的自定义路由器:
{
"CUSTOM_ROUTER_PATH": "/path/to/custom-router.js"
}
返回格式
路由函数应返回以下格式的字符串:
{provider-name},{model-name}
示例:
deepseek,deepseek-chat
如果返回 null,则回退到默认路由配置。
错误处理
如果路由函数抛出错误或返回无效格式,路由器将回退到默认路由配置。
示例:基于时间的路由
module.exports = async function(req, config) {
const hour = new Date().getHours();
// 工作时间使用更快的模型
if (hour >= 9 && hour <= 18) {
return 'groq,llama-3.3-70b-versatile';
}
// 非工作时间使用更强大的模型
return 'deepseek,deepseek-chat';
};
示例:成本优化
module.exports = async function(req, config) {
const userMessage = req.body.messages.find(m => m.role === 'user')?.content;
// 简单任务使用较便宜的模型
if (userMessage && userMessage.length < 100) {
return 'groq,llama-3.3-70b-versatile';
}
// 复杂任务使用默认模型
return null;
};
示例:任务类型路由
module.exports = async function(req, config) {
const userMessage = req.body.messages.find(m => m.role === 'user')?.content;
if (!userMessage) return null;
// 代码相关任务
if (userMessage.includes('代码') || userMessage.includes('code')) {
return 'deepseek,deepseek-coder';
}
// 解释任务
if (userMessage.includes('解释') || userMessage.includes('explain')) {
return 'openrouter,anthropic/claude-3.5-sonnet';
}
// 默认
return null;
};
测试您的路由器
通过检查日志来测试您的自定义路由器:
tail -f ~/.claude-code-router/claude-code-router.log
查找路由决策以查看正在选择哪个模型。
子代理路由
对于子代理内的路由,您必须在子代理提示词的开头包含 <CCR-SUBAGENT-MODEL>provider,model</CCR-SUBAGENT-MODEL> 来指定特定的提供商和模型。
示例:
<CCR-SUBAGENT-MODEL>openrouter,anthropic/claude-3.5-sonnet</CCR-SUBAGENT-MODEL>
请帮我分析这段代码是否存在潜在的优化空间...