AI Router 技术调研 — Skill 智能路由方案选型

调研日期:2026-05-28 目标:从本地 67 个 skills 中,根据用户自然语言请求快速匹配最相关的 skill


一、背景与问题

当前项目有 67 个 skills,路由完全依赖:

  • CLAUDE.md 硬编码规则(如”trace 分析请求默认使用 vdrop-pipeline-orchestrator”)
  • .claude/commands/ 斜杠命令(仅 4 个入口)
  • LLM 上下文理解(Claude Code 将所有 skill 描述注入 system-reminder)

核心问题

  • skill 数量增长后 LLM 选择准确率下降
  • 新增 skill 必须手动修改 CLAUDE.md 或 orchestrator 代码
  • skill.json 的 tags/type 字段未被任何路由逻辑消费
  • 全量描述注入消耗 context window(预算上限 1%)

二、Claude Code 的 Skill Routing 机制(逆向分析)

通过对 Claude Code v2.1.153 二进制的分析,确认其路由机制:

维度实现方式
路由算法纯 LLM-based,无 embedding 预筛选
机制将所有 skill 名称+描述注入 system-reminder,LLM 自主选择
描述来源SKILL.md / .claude/commands/*.md 的 frontmatter description 字段
扩展性控制skillListingMaxDescChars=1536 字符/skill
预算控制skillListingBudgetFraction=0.01(占 context 1%)
增量机制computeSkillListingDelta — 首次完整列表,后续只发 delta
Visibility 模式name-onlyuser-invocable-onlyoff
TRIGGER/SKIP纯 prompt engineering 标记,非系统级逻辑

结论:Claude Code 用最简单的”全量列举 + 模型自选”模式。没有任何 embedding/向量化逻辑。扩展性靠截断描述和预算比例控制。


三、主流 AI Router 方案对比

3.1 方案全景

方案类型开源路由延迟本地部署适合 skill 路由
semantic-router (Aurelio Labs)Embedding cosine simMIT10-50ms完全支持强烈推荐
RouteLLM (lm-sys/Berkeley)MF/BERT classifierApache 2.01-50ms完全支持推荐(需改造)
Claude Code 内置LLM in-context闭源N/AN/A当前方案
Not DiamondMeta-model classifierSDK 开源/模型闭源50-200ms不支持不适合
Martian Model RouterLearned routing (黑盒)闭源30-100ms不支持不适合
OpenRouter规则+auto闭源20-50ms不支持不适合
Unify.aiBenchmark-driven闭源10-30ms不支持不适合

3.2 Semantic Router 详解(首选方案)

项目aurelio-labs/semantic-router | MIT 许可

核心原理

  1. 每个 Route 定义 5-10 条 utterances(示例话术)
  2. 初始化时将所有 utterances 编码为向量存入 Index
  3. 请求到来时,将 query 编码,与 Index 中向量做 cosine similarity
  4. 取 top_k 结果,按 route 聚合(mean/max),超过阈值则命中

架构

Query → Encoder → cosine sim → top_k → aggregation → threshold → RouteChoice

支持的 Encoder

类型实现
远程 APIOpenAI, Cohere, Mistral, Google, AWS, Jina, LiteLLM
本地模型HuggingFace (sentence-transformers), FastEmbed, Ollama
稀疏BM25, TF-IDF
多模态CLIP, ViT

2024-2025 关键更新

  • HybridRouter(dense + BM25 sparse 融合)
  • PostgreSQL Index 支持
  • Async 全链路
  • Asymmetric Encoding
  • Python 3.9-3.13

性能

  • 本地 Index + 本地 encoder:~10ms
  • 远程 API encoder:50-200ms(网络延迟)
  • 准确率:语义区分明确时 > 95%

3.3 RouteLLM 详解(备选方案)

项目lm-sys/RouteLLM | Apache 2.0

4 种路由器

  • Matrix Factorization(推荐,1-5ms)
  • BERT classifier(10-50ms)
  • Causal LLM classifier
  • Weighted Elo (sw_ranking)

原设计场景:强弱模型间路由,降低 85% 成本维持 GPT-4 95% 质量。

改造为 skill 路由:需将二分类扩展为多分类头,用偏好数据训练。


四、Embedding 模型选型

模型维度中文效果本地部署推荐度
BGE-M3 (BAAI)1024优秀(MTEB-Chinese 榜首级)ONNX/sentence-transformers★★★★★
jina-embeddings-v31024良好需 API 或自部署★★★★
bge-large-zh-v1.51024优秀sentence-transformers★★★★
nomic-embed-text v1.5768一般Ollama 原生★★★
text-embedding-3-small (OpenAI)1536良好(中文短文本一般)需 API★★★
m3e-base768良好sentence-transformers★★★

结论:BGE-M3。中文效果顶级,支持 dense+sparse+colbert 三模式,ONNX Runtime 推理单条 <20ms。


五、向量检索选型

67 skills × 10 utterances = ~670 条向量,直接 numpy cosine similarity 暴力搜索即可

方案适用规模部署复杂度推荐
numpy 暴力搜索<10K 向量零依赖当前场景首选
FAISS (IndexFlatIP)<100K轻量未来扩展备选
ChromaDB任意中等(有持久化)过重
Qdrant分布式杀鸡用牛刀

六、中文场景关键经验

来自国内团队的实际生产经验:

  1. 中文口语化挑战:“帮我看看”、“搞一下”等模糊表达对 embedding 路由挑战大,需要比英文多 2-3 倍的 utterance 样本

  2. 区分度问题:route 数量超过 20 后区分度下降明显,建议做层级路由(先大类再细分)

  3. 生产数据:某电商客服团队,semantic-router + bge-large-zh,50 条路由:

    • P99 延迟 35ms
    • 纯 embedding 准确率 88%
    • 加 LLM fallback 后 96%(P99 升到 1.2s)
  4. 纯 embedding 天花板:中文场景约 90%,生产环境几乎都需要混合策略

  5. 关键词兜底:建议对确定性高的触发词加规则匹配(如 /commit → commit skill)


七、推荐架构

7.1 整体路由流程

用户输入
    │
    ├─── 精确匹配(斜杠命令 /commit, /frame-analyst 等)→ 直接路由
    │
    ├─── 关键词规则匹配("trace 分析" → vdrop-pipeline-orchestrator)→ 直接路由
    │
    └─── Semantic Router
              │
              ├─ BGE-M3 encode (本地, <20ms)
              ├─ cosine similarity vs skill embeddings (<1ms)
              │
              ├─ Top-1 score > 0.75 → 直接路由
              ├─ Top-1 score 0.5~0.75 → 返回 Top-3 候选供 LLM 精排
              └─ Top-1 score < 0.5 → fallback 到 LLM 全量判断

7.2 层级路由(应对 67 个 skills)

Level 1: 大类分流(按 tier/type)
    ├─ orchestrator 类
    ├─ trace 分析类(deep_analysis)
    ├─ 报告生成类(reporter)
    └─ 工具类

Level 2: 类内细粒度匹配
    └─ 在对应类别的 skills 中做 embedding 匹配

7.3 索引构建策略

每个 skill 生成:

  • 1 条 description embedding(来自 skill.json 的 description)
  • 5-10 条 utterance embeddings(人工编写的触发例句)
  • 查询时取 max-sim 作为该 skill 的得分

Few-shot utterance 比纯 description 效果好 10-15%。


八、与 Claude Code 当前方案对比

维度Claude Code 当前Embedding Router 方案
Token 消耗所有 skill 描述注入 context(1% budget)零 context 消耗
路由延迟LLM 推理时间内含<50ms 独立路由
准确率高(LLM 强)但随 skill 增多下降85-92%(中文),+fallback 达 96%
扩展性受 context window 限制线性扩展,1000+ skill 无压力
新增 skill需手动改 CLAUDE.md只需添加 utterances 重建索引
维护成本低(全靠 LLM)中(需维护 utterances)

九、实施路线图

Phase 1:最小可行方案(1-2 天)

  1. 为每个 skill.json 增加 utterances 字段(5-10 条中文触发例句)
  2. 使用 semantic-router + BGE-M3 构建索引脚本
  3. 实现查询接口:输入用户文本 → 输出 Top-3 skill + 置信度
  4. 在 CLAUDE.md 中指导 Claude 参考路由结果

Phase 2:集成优化(3-5 天)

  1. 实现层级路由(先按 tier/type 分流)
  2. 加入 HybridRouter(dense + BM25)提升关键词场景
  3. 实现关键词规则白名单兜底
  4. 建立 utterance 质量评估和覆盖率检查

Phase 3:动态学习(1-2 周)

  1. 记录用户实际选择的 skill,渐进优化 utterances
  2. 实现 threshold auto-tuning
  3. A/B 测试路由准确率
  4. 反馈闭环:路由错误时自动收集负样本

十、技术栈总结

核心框架:  aurelio-labs/semantic-router (MIT)
Embedding:BGE-M3 via sentence-transformers / ONNX Runtime
向量检索:  numpy cosine similarity(暴力搜索)
Fallback:  LLM function calling(Claude)
规则引擎:  关键词匹配 + 斜杠命令精确路由
语言:      Python 3.9+

参考资源