← 返回
技术论文解读

SkillRouter:面向大规模 LLM Agent 技能池的检索-重排路由方案

SkillRouter: Retrieve-and-Rerank Skill Selection for LLM Agents at Scale
Authors
YanZhao Zheng, ZhenTao Zhang, Chao Ma, YuanQiang Yu, JiHuan Zhu, Baohua Dong, Hangcheng Zhu
Institutions
Alibaba Group
Venue
arXiv preprint · 2026-03-23
Links
TL;DR

当 Agent 需要从 8 万个技能中选出正确的那个时,技能的名称和描述几乎没用——真正起作用的是技能的完整实现代码。SkillRouter 利用这一发现,用仅 1.2B 参数的检索+重排流水线达到 74% 的 top-1 准确率,可在笔记本 CPU 上本地运行。

30 秒速览
研究问题
如何从数万技能中为用户任务自动选出最相关的技能?
关键发现
技能 body(实现代码)贡献 91.7% 的注意力权重,移除后准确率暴跌 29-44pp
方法
两阶段流水线:0.6B 编码器检索 + 0.6B 交叉编码器重排
数据规模
~80K 技能池 + 75 条专家验证查询,分 Easy/Hard 两个难度
主要结果
74.0% Hit@1(1.2B 参数),76.0% Hit@1(8B 参数)
适用场景
个人编程助手的本地技能路由(如 Claude Code、Codex CLI)
01

问题:Agent 生态的技能选择困境

Claude Code、Codex CLI 等编程助手的技能(tool/plugin)生态已增长到数万规模。将所有技能塞进上下文窗口既不可能也不经济。更棘手的是,社区技能仓库存在大量功能重叠——许多技能名称和描述相似,只在实现细节上有差异,形成高度同质化的候选池。

当前 Agent 框架普遍采用「渐进披露」设计:只向 Agent 暴露技能的名称和描述,隐藏完整的实现代码。这隐含地假设名称和描述足以做出正确选择。这篇论文正是要系统性地检验这一假设——结论是它完全站不住脚

论文围绕三个问题展开:RQ1 大规模技能路由是否真的困难?RQ2 技能文本的哪个部分(名称、描述、body)对选择起决定作用?RQ3 紧凑的检索-重排流水线能否有效利用这些信号?

02

核心发现:Body 是唯一重要的信号

论文通过控制实验和注意力分析揭示了一个颠覆性结论:技能的完整实现文本(body)是选择准确性的决定性信号,而非传统假设的名称和描述。
1
移除 body 导致灾难性崩溃
BM25 仅用名称+描述时准确率归零(查询与技能名称几乎无词汇重叠);加入 body 后恢复到 34.7%。密集编码器同样崩溃:Qwen3-Emb-0.6B 从 58.7% 跌至 22.7%(-36pp),即使 13 倍大的 8B 模型也无法弥补——Qwen3-Emb-8B 仅靠名称+描述只有 30.7%,远低于 0.6B 使用完整文本的 58.7%。
2
无 body 的重排器反而有害
仅用名称+描述的交叉编码器(跨序列注意力模型)不仅没帮助,反而把排序搞砸:最佳组合仅 30.7%,比不用重排器的 56.0% 低了 25.3pp。原因是重排器基于表面相似性「自信地」重新排序,用更差的排列覆盖了编码器更有信息量的排序。
3
91.7% 的注意力集中在 body
对交叉编码器的注意力分析显示:body 获得 91.7% 的总注意力,名称 7.3%,描述仅 1.0%。逐层模式为「body→name→body」:早期层(0-6)几乎完全关注 body(97.3%),中间层短暂转向名称做语义匹配(第 19 层名称注意力峰值 26.3%),晚期层回归 body 做最终判断。
方法类型仅名称+描述完整文本差值
BM25稀疏检索0.0%34.7%+34.7pp
Qwen3-Emb-0.6B密集编码器22.7%58.7%+36.0pp
Qwen3-Emb-8B密集编码器30.7%65.3%+34.6pp
Qwen3-Emb-8B × Qwen3-Rank-8B交叉编码器24.0%68.0%+44.0pp
Qwen3-Emb-8B × GPT-5.4-miniLLM 裁判30.7%59.4%+28.7pp
交叉编码器注意力分布(逐层)100%75%50%25%0%Transformer 层早期 0-6中间 7-20晚期 21-2797.3%body89.0%body9.6% name91.7%body7.5% namedesc ≤1.4%
交叉编码器注意力分布:body 在所有层段都占据绝对主导地位(89-97%),名称仅在中间层短暂升高,描述始终可忽略
03

方法:SkillRouter 两阶段流水线

基于 body 是决定性信号这一发现,SkillRouter 在两个阶段都使用完整技能文本。整个流水线仅 1.2B 参数(0.6B 编码器 + 0.6B 重排器),可在消费级硬件上运行。

第一阶段:双编码器(查询和文档分别编码为向量)检索。 基于 Qwen3-Emb-0.6B 微调的 SR-Emb-0.6B 将查询和所有技能编码到共享嵌入空间,通过余弦相似度检索 top-20 候选——将 ~80K 缩减到 20 个。技能离线预编码,推理时只需编码查询 + ANN(近似最近邻)搜索。

第二阶段:交叉编码器重排。 基于 Qwen3-Reranker-0.6B 微调的 SR-Rank-0.6B 对每个(查询,候选技能)对做联合注意力计算,产生精细的相关性打分,将 20 个候选重新排序。

用户查询"转换 XML到 TOML"Stage 1: 编码器SR-Emb-0.6Bcosine 检索80K → top-20完整 body 索引Stage 2: 重排器SR-Rank-0.6B交叉注意力20 → 精排逐对完整 bodyTop-1 技能config-format-converter总计 1.2B 参数 · 两阶段都使用完整技能文本 · 可在笔记本 CPU 部署
SkillRouter 流水线:编码器从 80K 技能池中检索 top-20 候选,重排器通过交叉注意力精排,两阶段均访问完整技能代码
04

训练策略的关键设计

SkillRouter 的训练有两个非常规但至关重要的设计:假阴性过滤listwise 损失函数

假阴性过滤: 社区技能仓库中大量技能功能近乎相同但名称不同。在对比学习(通过正负样本对比训练嵌入)中,这些功能重复的技能会成为假阴性,破坏训练信号。论文设计了三层过滤管道:① 名称去重——移除与正例同名的负例(24,879 对);② Body 重叠——移除 body 文本 trigram Jaccard 相似度 > 0.6 的负例(13,860 对);③ 嵌入相似度——移除余弦相似度 > 0.92 的负例(326 对)。总计移除约 10% 的负样本对,贡献 +4.0pp Hit@1。

Listwise vs. Pointwise 损失: 对重排器而言,listwise 交叉熵戏剧性地碾压了 pointwise 二元交叉熵(+30.7pp)。原因在于技能池的高度同质性——top-20 候选中常充满功能相似的技能,pointwise 独立打分产生的分数收敛到窄带,排序近乎随机;而 listwise 通过 softmax 在整个候选列表上做比较,迫使模型学习相对排序。

\mathcal{L}_{\text{LW}} = -\log \frac{\exp(f(q, s^+)/\tau)}{\sum_{j=1}^{K} \exp(f(q, s_j)/\tau)}
Listwise 交叉熵损失:在 K 个候选技能上做 softmax,优化正例的对数概率
05

实验结果

在包含 ~80K 技能和 75 条专家验证查询的基准上,SkillRouter 展示了紧凑模型经过任务适配后的强大竞争力。
74.0%
Hit@1(1.2B 流水线)
+8.6pp
超越编码器单阶段
+6.0pp
超越最佳零样本 8B 基线
12.7%
被重排器挽救的查询
流水线参数量Hit@1MRR@10R@10
BM25(仅 body)31.4%36.5%32.1%
Qwen3-Emb-8B8B64.0%69.8%65.9%
text-emb-3-large62.0%65.8%60.9%
SR-Emb-0.6B(微调)0.6B65.4%72.3%68.5%
Qwen3-Emb-8B × Qwen3-Rank-8B16B68.0%74.5%69.2%
SR-Emb-0.6B × SR-Rank-0.6B ★1.2B74.0%79.1%70.4%
SR-Emb-8B × SR-Rank-8B16B76.0%80.8%71.9%

微调闭合了规模差距。 SR-Emb-0.6B(0.6B 参数,微调)在编码器阶段就超越了 Qwen3-Emb-8B(8B 参数,零样本),证明任务适配比简单堆参数更有效。完整流水线进一步放大了这一优势。

重排器贡献分析: 在 150 条查询中,重排器修正了 19 条(12.7%)编码器排错的查询,仅降级 6 条(4.0%),净贡献 +8.7pp Hit@1。22% 的查询两阶段都未能解决——这些通常需要多跳推理(如「发票欺诈检测」→ PDF 表格提取)。

案例说明: 查询要求「从教程视频提取章节时间戳」,正确技能是 speech-to-text。基础编码器被「video」关键词误导到视频编辑工具,而 SR-Emb-0.6B 学会了「video + timestamps → speech-to-text」的间接映射,直接检索到正确技能。

06

实践建议

对 Agent 框架开发者: - 技能路由层必须访问完整 body 文本,仅暴露名称和描述的设计会导致 30-44pp 的准确率损失 - 即使 Agent 本身受上下文窗口限制只能看到名称+描述,路由组件也必须能访问全文——这是一个真实的设计约束(hidden-body asymmetry) - 重排器如果不能访问 body,不如不用——它会把排序搞得更差

对技能路由模型训练者: - 在社区技能仓库上训练时必须做假阴性过滤,否则功能重复的技能会破坏对比学习信号 - 重排器务必使用 listwise 损失(而非 pointwise),候选池高同质性下 pointwise 近乎无效 - 0.6B 级别模型经过微调即可匹敌甚至超越 8B 零样本基线,无需大规模计算资源

对技能作者: - 技能的 body(实现代码/详细规格)是路由系统选中它的关键,写好 body 比打磨名称和描述重要得多

07

适用边界

- 评估规模有限: 75 条查询的基准统计功效不高,95% 置信区间为 [.670, .810],与最佳基线有部分重叠 - 单一基准: 仅在 SkillBench 衍生的数据集上验证,未在其他技能生态系统中测试泛化性 - 22% 的系统天花板: 约 1/5 的查询两阶段都无法解决,这些场景需要超越检索的多跳推理能力 - 多技能覆盖率偏弱: 在需要多个技能的查询上,FC@10(全覆盖率)仅 35.3%,显著低于 Hit@1——说明流水线擅长找到「最关键的那一个」,但在需要同时召回多个技能时仍有不足 - 下游效果为模拟估算: 论文通过线性混合模型估算对 Agent 任务完成率的影响(32.8%-36.3%),但这是情景分析而非端到端实验
08

时效性

SkillRouter 于 2026 年 3 月发表,属于该领域的较新工作。截至 2026 年 5 月:

- 代码已开源,GitHub 仓库提供了基准数据、评估脚本和 0.6B 模型权重 - 同期出现了 LiveMCPBench(2025 年底至 2026 年初),专门评估 MCP 协议下 527 个工具的大规模路由,发现近半数失败源于工具检索错误——印证了 SkillRouter 指出的「路由是瓶颈」这一判断 - ITR(Instruction-Tool Retrieval) 从另一个角度验证了类似结论:按需检索工具子集可减少 95% 的上下文 token 并提升 32% 的正确路由率 - SkillRouter 的核心发现(body 是决定性信号)尚未被后续工作推翻,其实验方法论(注意力分析、假阴性过滤)正在被同领域研究采纳 - 论文的 8B 版本达 76.0% Hit@1,但随着更大规模预训练嵌入模型的出现,这一数字的绝对领先幅度可能缩小

09

术语表

技能路由(Skill Routing)
给定用户任务描述,从大规模技能池中自动检索并选出最相关技能的过程。区别于「技能使用」(假设技能已给定)。
Hidden-body 不对称
Agent 因上下文窗口限制只能看到技能的名称和描述,但路由系统可以访问完整实现代码,由此产生的信息不对称。
双编码器(Bi-encoder)
将查询和文档分别编码为固定维度向量,通过余弦相似度做高效检索的模型架构。优势是文档可离线预编码。
交叉编码器(Cross-encoder)
将查询和候选拼接后联合编码,允许 token 级别的交叉注意力。精度更高但不能预编码,只适合对少量候选重排。
对比学习(Contrastive Learning)
通过拉近正样本对、推远负样本对来训练嵌入模型的方法。InfoNCE 是常用的损失函数。
Listwise 损失
在整个候选列表上做 softmax 的排序损失,模型被迫学习候选之间的相对排序,适合同质化候选池。
ANN(近似最近邻)
在高维向量空间中快速找到与查询向量最相似的 K 个向量的算法,牺牲少量精度换取亚线性时间复杂度。
Hit@1
top-1 路由准确率,即正确技能排在第一位的查询比例,是本文的主要指标。
10

延伸阅读