
Model Router
- 1 installs
- Updated March 1, 2026
- ai-scarlett/model-router
model-router is a Claude Code skill that automatically selects the best large language model for a request based on task type.
About
model-router is a Claude Code skill that automatically selects the most suitable large language model for a request based on the task type. It maps eight scenarios such as chat, coding, image generation, and data analysis to specific models like qwen-coder and qwen-max using trigger words, to balance quality and cost. Documentation is in Chinese. Developers use it to route each request to the right model.
- Routes a request to the best LLM based on task type
- Covers 8 scenarios: chat, code, image, text, marketing, data, Q&A, roleplay
- Maps trigger words to Qwen, GLM, and Wanx models to optimize cost
Model Router by the numbers
- 1 all-time installs (skills.sh)
- Ranked #14,102 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Jul 7, 2026 (Skillselion catalog sync)
model-router capabilities & compatibility
- Capabilities
- model routing · llm selection
- Use cases
- orchestration
What model-router says it does
根据用户问题/任务的类型,自动选择最合适的大模型,优化性能和成本。
智能大模型路由调度器。根据用户问题类型自动选择最优模型。
npx skills add https://github.com/ai-scarlett/model-router --skill model-routerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| Last updated | March 1, 2026 |
| Repository | ai-scarlett/model-router ↗ |
What it does
Select the best LLM for a request based on the task type and trigger words.
Who is it for?
Developers who want each task routed to the most cost-effective suitable model.
Skip if: Users needing a fixed single model or providers not in its mapping.
When should I use this skill?
When a request should be routed to a task-appropriate model automatically.
What you get
Each request is dispatched to the model best matched to its scenario.
- selected model per request
By the numbers
- 8 scenarios with recommended models
- maps trigger words to models per scenario
Files
Model Router - 智能模型调度器
核心功能
根据用户问题/任务的类型,自动选择最合适的大模型,优化性能和成本。
8 大场景与模型推荐
| 场景 | 推荐模型 | 触发词 |
|---|---|---|
| 💬 对话聊天 | qwen3.5-plus | 聊天、对话、心情、聊聊 |
| 💻 代码开发 | qwen-coder | 代码、编程、脚本、python |
| 🎨 图像生成 | wanx-v1 | 图片、自拍、照片、画图 |
| 📝 文本协作 | qwen-plus | 写文章、润色、翻译、总结 |
| 📢 营销文案 | qwen-plus | 文案、广告、营销、标题 |
| 📊 数据分析 | qwen-max | 分析、数据、统计、图表 |
| 🔍 知识问答 | glm-5 | 是什么、定义、解释 |
| 🎭 角色扮演 | qwen3.5-plus | 扮演、模拟、身份 |
使用流程
1. 分析问题类型: 识别用户意图和任务类型 2. 匹配模型: 根据场景选择最合适的模型 3. 切换模型: 使用 session_status 工具设置模型 4. 执行任务: 用选定的模型处理用户请求
详细参考
详见 references/scenarios.md - 完整的场景分类、模型对比、成本分析
示例
用户: "帮我写个 Python 脚本处理 Excel 数据" → 代码开发 → 选择 qwen-coder
用户: "来张自拍" → 图像生成 → 调用 wanx-v1 API
用户: "今天心情不好,陪我聊聊" → 对话聊天 → 选择 qwen3.5-plus
用户: "写个营销文案" → 营销文案 → 选择 qwen-plus
注意事项
- 图像生成需要调用专门的图像 API,不是对话模型
- 复杂任务可能需要多模型协作
- 优先保证质量,其次考虑成本
- 用户可以手动指定模型
__pycache__/
Model Router - 智能模型路由调度器
🤖 根据用户问题类型自动选择最优大模型,支持 8 大场景的智能分配
功能特点
- 8 大场景覆盖: 对话聊天、代码开发、图像生成、文本协作、营销文案、数据分析、知识问答、角色扮演
- 主备模型配置: 每个场景 1 个主模型 + 2 个备用模型,确保服务稳定性
- 智能匹配: 基于关键词自动识别任务类型
- 成本优化: 简单任务优先使用经济型模型
安装使用
方式 1: 直接集成到 OpenClaw
# 将 skill 复制到 OpenClaw skills 目录
cp -r model-router /path/to/openclaw/skills/
# 重启 OpenClaw
openclaw gateway restart方式 2: 作为独立模块使用
from model_selector import analyze_query
# 分析用户输入
result = analyze_query("帮我写个 Python 脚本")
print(f"推荐模型:{result['primary']}")
print(f"备用模型:{result['fallbacks']}")8 大场景模型配置
| 场景 | 主模型 | 备用 1 | 备用 2 |
|---|---|---|---|
| 💬 对话聊天 | qwen3.5-plus | glm-5 | qwen-plus |
| 💻 代码开发 | qwen-coder | qwen3.5-plus | qwen-plus |
| 🎨 图像生成 | wanx-v1 | qwen-image-edit | flux-schnell |
| 📝 文本协作 | qwen-plus | qwen3.5-plus | glm-5 |
| 📢 营销文案 | qwen-plus | qwen3.5-plus | glm-5 |
| 📊 数据分析 | qwen-max | qwen3.5-plus | qwen-plus |
| 🔍 知识问答 | qwen3.5-plus | glm-5 | qwen-plus |
| 🎭 角色扮演 | qwen3.5-plus | qwen-plus | glm-5 |
文件结构
model-router/
├── SKILL.md # OpenClaw skill 定义
├── README.md # 使用说明
├── .gitignore # Git 忽略配置
├── scripts/
│ ├── __init__.py
│ └── model_selector.py # 核心选择器
└── references/
├── models.md # 模型特性参考
└── scenarios.md # 场景详细指南示例
from scripts.model_selector import analyze_query
# 示例 1: 代码开发
result = analyze_query("帮我写个 Python 脚本")
# → 推荐:qwen-coder
# 示例 2: 图像生成
result = analyze_query("来张自拍")
# → 推荐:wanx-v1 (需要调用图像 API)
# 示例 3: 对话聊天
result = analyze_query("陪我聊聊")
# → 推荐:qwen3.5-plus扩展配置
添加新场景
在 scripts/model_selector.py 的 MODELS 字典中添加:
"new_scene": {
"primary": "model-name",
"fallbacks": ["fallback-1", "fallback-2"],
"description": "场景描述",
"triggers": ["关键词 1", "关键词 2"],
"priority": 9
}自定义触发词
修改 MODELS 中对应场景的 triggers 列表即可。
注意事项
1. 图像生成: wanx-v1 需要调用阿里云图像 API,不是对话模型 2. 模型可用性: 确保配置的模型在您的阿里云账号中已开通 3. 成本考虑: qwen-max 等高端模型成本较高,建议按需使用
许可证
MIT License
作者
丝佳丽 Scarlett - AI Love World 项目
---
Happy Coding! 🚀
大模型特性参考
阿里云模型
qwen3.5-plus
- 类型: 通用对话
- 优势: 高质量对话,理解能力强
- 适用: 复杂对话、咨询、建议
- 成本: 中等
qwen-coder
- 类型: 代码专用
- 优势: 代码生成、调试、解释
- 适用: 编程任务、脚本编写
- 成本: 中等
qwen-max
- 类型: 高性能
- 优势: 复杂推理、数据分析
- 适用: 数据分析、复杂计算
- 成本: 较高
qwen-plus
- 类型: 创意写作
- 优势: 文案、故事、创意内容
- 适用: 营销文案、创意写作
- 成本: 中等
glm-5
- 类型: 轻量级
- 优势: 快速响应、成本低
- 适用: 简单问答、日常对话
- 成本: 低
图像模型
wanx-v1
- 类型: 文生图
- 优势: 高质量图像生成
- 适用: 自拍、场景图、设计图
- 注意: 需要异步任务处理
qwen-image-edit
- 类型: 图生图
- 优势: 基于参考图编辑
- 适用: 自拍换装、图像编辑
- 注意: 免费配额有限
flux-schnell
- 类型: 快速文生图
- 优势: 生成速度快
- 适用: 快速图像生成
- 注意: 需要权限配置
选择策略
1. 质量优先: 选择对应领域专用模型 2. 成本优先: 简单任务用轻量模型 3. 速度优先: 紧急任务用快速模型 4. 特殊需求: 图像生成必须用图像模型
大模型场景适配指南
场景分类与模型推荐
1. 💬 对话聊天类
典型问题:
- "陪我聊聊"
- "心情不好"
- "给我讲个故事"
- "你怎么看..."
- 日常对话、情感陪伴
推荐模型: alibaba-cloud/qwen3.5-plus
理由:
- 对话理解能力强
- 情感表达自然
- 上下文记忆好
- 响应速度快
备选: alibaba-cloud/glm-5 (成本更低)
---
2. 💻 代码开发类
典型问题:
- "写个 Python 脚本"
- "帮我 debug"
- "解释这段代码"
- "生成 API 接口"
- "写个函数..."
推荐模型: alibaba-cloud/qwen-coder
理由:
- 专门针对代码训练
- 支持多种编程语言
- 代码质量高
- 能理解复杂逻辑
备选: alibaba-cloud/qwen3.5-plus (通用场景)
支持语言: Python, JavaScript, Java, C++, Go, Rust, etc.
---
3. 🎨 图像生成类
典型问题:
- "来张自拍"
- "生成一张图片"
- "画个..."
- "设计个 logo"
推荐模型: wanx-v1 (通义万相)
理由:
- 阿里云官方图像模型
- 中文理解好
- 人像生成质量高
- 支持多种风格
参数配置:
{
"model": "wanx-v1",
"style": "<photography>",
"size": "720*1280"
}备选:
qwen-image-edit- 图生图编辑flux-schnell- 快速生成
注意: 图像生成需要异步任务处理,不能直接对话返回
---
4. 📝 文本协作类
典型问题:
- "帮我写文章"
- "润色这段文字"
- "翻译..."
- "总结这篇文章"
- "写个报告"
推荐模型: alibaba-cloud/qwen-plus
理由:
- 长文本处理能力强
- 文笔流畅
- 适合创作和编辑
- 支持多种文体
子场景:
| 子场景 | 推荐模型 |
|---|---|
| 文章写作 | qwen-plus |
| 润色编辑 | qwen-plus |
| 翻译 | qwen-plus |
| 摘要总结 | qwen3.5-plus |
| 邮件撰写 | qwen-plus |
---
5. 📢 营销文案类
典型问题:
- "写个广告语"
- "营销文案"
- "产品描述"
- "社交媒体文案"
- "写个标题"
推荐模型: alibaba-cloud/qwen-plus
理由:
- 创意能力强
- 文笔有感染力
- 懂营销套路
- 能写多种风格
文案类型:
| 类型 | 提示词示例 |
|---|---|
| 广告语 | "写一个简短有力的广告语,突出产品卖点" |
| 社交媒体 | "写一个小红书风格的种草文案" |
| 产品描述 | "写一个电商平台的产品详情页描述" |
| 邮件营销 | "写一个促销活动的营销邮件" |
---
6. 📊 数据分析类
典型问题:
- "分析这个数据"
- "生成图表"
- "统计..."
- "Excel 处理"
- "数据可视化"
推荐模型: alibaba-cloud/qwen-max
理由:
- 推理能力强
- 适合复杂计算
- 逻辑分析准确
- 能处理大量数据
备选: qwen3.5-plus (简单分析)
---
7. 🔍 知识问答类
典型问题:
- "什么是..."
- "为什么..."
- "解释一下..."
- "简单问答"
推荐模型: alibaba-cloud/glm-5
理由:
- 响应速度快
- 成本低
- 适合简单查询
- 知识覆盖面广
备选: qwen3.5-plus (复杂问题)
---
8. 🎭 角色扮演类
典型问题:
- "扮演..."
- "模拟..."
- "以...的身份"
推荐模型: alibaba-cloud/qwen3.5-plus
理由:
- 角色理解好
- 表达自然
- 能保持一致性
- 情感丰富
---
模型成本对比
| 模型 | 成本等级 | 适用场景 |
|---|---|---|
| glm-5 | 💰 低 | 简单问答、日常对话 |
| qwen3.5-plus | 💰💰 中 | 通用对话、复杂任务 |
| qwen-plus | 💰💰 中 | 创意写作、文案 |
| qwen-coder | 💰💰 中 | 代码开发 |
| qwen-max | 💰💰💰 高 | 复杂分析、推理 |
| wanx-v1 | 💰💰 中 | 图像生成 (按张计费) |
---
选择策略
优先级规则
1. 任务类型优先 - 先判断是什么类型的任务 2. 质量优先 - 同一类型选质量最好的 3. 成本优化 - 简单任务用便宜模型 4. 特殊处理 - 图像生成单独处理
决策流程
用户输入
↓
分析意图 → 图像生成?→ 是 → wanx-v1
↓ 否
↓
对话聊天?→ 是 → qwen3.5-plus
↓ 否
↓
代码开发?→ 是 → qwen-coder
↓ 否
↓
创意写作?→ 是 → qwen-plus
↓ 否
↓
数据分析?→ 是 → qwen-max
↓ 否
↓
默认 → qwen3.5-plus---
关键词匹配表
图像生成
图片 图像 自拍 照片 画图 生成图片 design 泳装 美照
代码开发
代码 编程 函数 bug 调试 开发 script python javascript java 脚本
对话聊天
聊天 对话 咨询 建议 心情 聊聊 陪伴 讲故事
创意写作
写文章 文案 故事 诗歌 创意 营销 广告 写作 润色
数据分析
分析 数据 统计 图表 excel 表格 计算 报表
简单问答
是什么 定义 简单 快速 什么意思 解释
---
更新日志
- 2026-03-01: 初始版本,覆盖 8 大场景
#!/usr/bin/env python3
"""
Model Router - 智能模型选择器
根据用户问题类型自动选择最合适的大模型
支持 8 大场景:对话聊天、代码开发、图像生成、文本协作、营销文案、数据分析、知识问答、角色扮演
"""
import re
# 模型配置 - 8 大场景 (1 主 +2 备)
MODELS = {
"chat": {
"primary": "alibaba-cloud/qwen3.5-plus",
"fallbacks": ["alibaba-cloud/glm-5", "alibaba-cloud/qwen-plus"],
"description": "高质量对话聊天",
"triggers": ["聊天", "对话", "咨询", "建议", "心情", "聊聊", "陪伴", "讲故事", "倾诉", "寂寞", "无聊"],
"priority": 1
},
"code": {
"primary": "alibaba-cloud/qwen-coder",
"fallbacks": ["alibaba-cloud/qwen3.5-plus", "alibaba-cloud/qwen-plus"],
"description": "代码开发专用",
"triggers": ["代码", "编程", "函数", "bug", "调试", "开发", "script", "python", "javascript", "java", "写个", "脚本", "接口", "api", "github", "编程"],
"priority": 2
},
"image": {
"primary": "wanx-v1",
"fallbacks": ["qwen-image-edit", "flux-schnell"],
"description": "图像生成",
"triggers": ["图片", "图像", "生成图片", "画图", "自拍", "照片", "design", "设计图", "泳装", "美照", "头像", "插画"],
"priority": 3,
"note": "需要调用图像 API,不是对话模型"
},
"writing": {
"primary": "alibaba-cloud/qwen-plus",
"fallbacks": ["alibaba-cloud/qwen3.5-plus", "alibaba-cloud/glm-5"],
"description": "文本协作/文章写作",
"triggers": ["写文章", "润色", "翻译", "总结", "摘要", "改写", "扩写", "邮件", "报告", "文档"],
"priority": 4
},
"marketing": {
"primary": "alibaba-cloud/qwen-plus",
"fallbacks": ["alibaba-cloud/qwen3.5-plus", "alibaba-cloud/glm-5"],
"description": "营销文案",
"triggers": ["文案", "广告", "营销", "标题", "slogan", "推广", "种草", "小红书", "朋友圈", "微博"],
"priority": 5
},
"data": {
"primary": "alibaba-cloud/qwen-max",
"fallbacks": ["alibaba-cloud/qwen3.5-plus", "alibaba-cloud/qwen-plus"],
"description": "数据分析",
"triggers": ["分析", "数据", "统计", "图表", "excel", "表格", "计算", "报表", "可视化", "数据库"],
"priority": 6
},
"simple": {
"primary": "alibaba-cloud/glm-5",
"fallbacks": ["alibaba-cloud/qwen3.5-plus", "alibaba-cloud/qwen-plus"],
"description": "简单问答",
"triggers": ["是什么", "定义", "简单", "快速", "什么意思", "解释", "介绍", "概念"],
"priority": 7
},
"roleplay": {
"primary": "alibaba-cloud/qwen3.5-plus",
"fallbacks": ["alibaba-cloud/qwen-plus", "alibaba-cloud/glm-5"],
"description": "角色扮演",
"triggers": ["扮演", "模拟", "身份", "角色", "假装", "cosplay"],
"priority": 8
}
}
def analyze_query(query: str) -> dict:
"""分析用户查询,返回推荐的模型(含主备)"""
query_lower = query.lower()
matches = []
for category, config in MODELS.items():
score = 0
matched_triggers = []
for trigger in config["triggers"]:
if trigger.lower() in query_lower:
score += 1
matched_triggers.append(trigger)
if score > 0:
matches.append({
"category": category,
"primary": config["primary"],
"fallbacks": config["fallbacks"],
"description": config["description"],
"score": score,
"matched_triggers": matched_triggers,
"priority": config["priority"],
"note": config.get("note", "")
})
# 按分数排序,分数相同按优先级排序
matches.sort(key=lambda x: (-x["score"], x["priority"]))
if matches:
best = matches[0]
return {
"recommended_model": best["primary"],
"primary": best["primary"],
"fallbacks": best["fallbacks"],
"category": best["category"],
"description": best["description"],
"confidence": best["score"],
"matched_triggers": best["matched_triggers"],
"all_matches": matches,
"note": best["note"]
}
else:
# 默认返回 qwen3.5-plus
default = MODELS["chat"]
return {
"recommended_model": default["primary"],
"primary": default["primary"],
"fallbacks": default["fallbacks"],
"category": "chat",
"description": "高质量对话聊天",
"confidence": 0,
"matched_triggers": [],
"all_matches": [],
"note": "未匹配到特定类型,使用默认对话模型"
}
def get_model_for_task(task_type: str) -> dict:
"""根据任务类型获取模型配置(主 + 备)"""
if task_type not in MODELS:
return {
"primary": "alibaba-cloud/qwen3.5-plus",
"fallbacks": ["alibaba-cloud/glm-5", "alibaba-cloud/qwen-plus"]
}
config = MODELS[task_type]
return {
"primary": config["primary"],
"fallbacks": config["fallbacks"]
}
def main():
"""命令行交互"""
print("🤖 Model Router - 智能模型选择器")
print("=" * 50)
print("支持场景:对话、代码、图像、写作、营销、数据、问答、角色扮演")
print("输入问题,我会推荐最合适的模型~")
print("输入 'quit' 退出\n")
while True:
try:
query = input("主人:").strip()
if query.lower() in ["quit", "exit", "q"]:
print("拜拜主人~ 💋")
break
if not query:
continue
result = analyze_query(query)
print(f"\n📊 分析结果:")
print(f" 场景类型:{result['category']} ({result['description']})")
print(f" 主模型:{result['primary']}")
print(f" 备用 1: {result['fallbacks'][0]}")
print(f" 备用 2: {result['fallbacks'][1]}")
print(f" 匹配度:{result['confidence']} 个关键词")
if result['matched_triggers']:
print(f" 匹配关键词:{', '.join(result['matched_triggers'])}")
if result['note']:
print(f" ⚠️ 注意:{result['note']}")
print()
except KeyboardInterrupt:
print("\n拜拜主人~ 💋")
break
except Exception as e:
print(f"❌ 错误:{e}")
if __name__ == "__main__":
main()
Related skills
FAQ
How does it choose a model?
It classifies the task into one of 8 scenarios and maps trigger words to a recommended model.
What models does it route to?
Models such as qwen-coder for code, qwen-max for data analysis, wanx-v1 for images, and glm-5 for Q&A.