skill库大到977个以后,让LLM一条条翻着看太傻也太贵。这个router用两段路由解决:先embedding粗筛,再LLM精排。
python
from skill_router import SkillRouter
router = SkillRouter()
result = router.route("做一篇新生儿低血糖的系统综述")
# → top1: literature-search (96%)
print(router.route_formatted("帮我画个森林图"))
text
Query → BM25 + 翻译桥(双通道embedding) → RRF融合 → top5候选 → 拒选防线 → LLM精排
↓
拒选的走L0工具
三道防线:
skill超过50个以后,传统一条条审查的方案token成本就扛不住了。特别是中英文混着用的场景——用户说中文但skill库全是英文名。还有就是明确不想让LLM碰的信息查询类请求,路由器帮你拦外面。
路由引擎本身全本地跑:skill索引存在本地,embedding模型本地加载,query不走外部API。
L0工具层(技能全拒后的保底)可能调用外部API:PubMed、Semantic Scholar、TinyFish等。
这些工具的API key通过环境变量注入,详见tool_catalog.json中的 ${VAR_NAME} 占位符。
拒选防线保证纯查询类请求不会进LLM上下文。