Files
sanguo_moziplus_v2/docs/research/v2.6-research-06-skillrouter.md
T
2026-05-16 00:20:06 +08:00

146 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SkillRouter 调研报告
**版本**: v1.0
**作者**: 庞统(副军师)🐦
**日期**: 2026-05-16
**源码位置**: `/Volumes/stock/knowledge_base/SkillRouter/`
**论文**: arXiv:2603.22455 (2026)
---
## 1. SkillRouter 是什么
SkillRouter 是一个**两阶段检索+重排序**系统,解决"给一个用户任务,从几万个 Skill 中找到最相关的那一个"的问题。
**规模**:在 ~80K 开源 Skill 池上评估,74.0% Top-1 准确率。模型仅 0.6B 参数,可跑在消费级硬件上。
## 2. 核心发现
### 2.1 Skill Body 是决定性信号
**论文最核心的发现**:只看 Skill 的 name + description(元数据)远远不够。
| 对比 | 准确率下降 |
|------|-----------|
| 隐藏 Skill body(只留 name+desc | **31-44 百分点下降** |
| Cross-encoder 注意力分析 | **91.7% 的注意力集中在 body 字段** |
**结论**:Skill 的实现文本(body)是路由的决定性信号,不是元数据。
### 2.2 两阶段管线架构
```
用户任务描述
[Stage 1: Embedding Retrieval]
0.6B encoder → 离线预嵌入所有 Skill → cosine similarity → Top-50 候选
[Stage 2: Reranker]
0.6B cross-encoder → 对 Top-50 候选逐个打分 → Top-1 最终结果
最相关的 Skill
```
**Stage 1(检索)**
- 模型:SkillRouter-Embedding-0.6B
- Skill 离线预嵌入,存向量
- 运行时只需编码 query(一次 forward pass+ 近邻搜索
- 输出 Top-50 候选
**Stage 2(重排序)**
- 模型:SkillRouter-Reranker-0.6B
- 对 Top-50 候选用 cross-encoder 精排
- 输入:query + skill_full_textname + desc + body
- 输出:yes/no 相关性判断
### 2.3 技术细节
| 方面 | 实现 |
|------|------|
| **Skill 格式化** | `"{name} \| {desc} \| {body}"` — body 最多 8000 字符 |
| **Query 格式化** | `"Instruct: Given a coding task... Query: {task}"` |
| **编码方式** | last_token_pool + L2 normalize → cosine similarity |
| **Rerank prompt** | flat-full: `"<Instruct>: ... <Query>: ... <Document>: {name} \| {desc} \| {body}"` |
| **Rerank 判断** | Qwen2.5 风格 chat template → 输出 yes/no |
| **硬件** | 单 GPU,消费级即可 |
| **依赖** | PyTorch + Transformers,无外部基础设施 |
## 3. 和 moziplus 的对接分析
### 3.1 我们的规模
| 维度 | SkillRouter 评估 | moziplus 实际 |
|------|-----------------|-------------|
| Skill 池大小 | ~80K | ~30-50 个 |
| 评估准确率 | 74.0% Top-1 | — |
| 硬件要求 | 单 GPU | Mac mini (M系列) |
**关键洞察**SkillRouter 是为 ~80K Skill 池设计的。我们只有 30-50 个 Skill。在这个规模下:
- Stage 1(向量检索)可能杀鸡用牛刀——30 个 Skill 的相似度计算用 SQLite FTS5 或简单关键词匹配就够了
- Stage 2(重排序)的核心发现(body 是关键信号)对我们有价值——说明 Skill description 四要素(课题4 D4-8)确实重要
### 3.2 三层组合方案
用户提出的组合:**SkillRouter + OpenClaw 动态关键词 + L2 注入兜底**
```
┌─────────────────────────────────────────────────────────────┐
│ Layer 1: SkillRouter 检索(精准匹配) │
│ 输入: 任务描述(来自黑板 task description
│ 过程: 任务描述 → SkillRouter → Top-3 相关 Skill │
│ 输出: 精准匹配的 Skill 列表 │
│ 适用: Skill 数量 > 50 时启动,< 50 时用关键词匹配即可 │
├─────────────────────────────────────────────────────────────┤
│ Layer 2: OpenClaw 动态关键词(触发加载) │
│ 机制: Skill description 四要素(When to use + triggers
│ 过程: Agent 读到匹配的关键词 → 主动 read SKILL.md │
│ 适用: 当前已优化(课题4 D4-8) │
├─────────────────────────────────────────────────────────────┤
│ Layer 3: L2 引擎注入(兜底保障) │
│ 机制: prompt_templates/ 中写死关键操作步骤 │
│ 保证: 核心操作不依赖任何触发机制 │
│ 适用: 已设计(课题4 D4-6/D4-7
└─────────────────────────────────────────────────────────────┘
```
### 3.3 对接方案
**阶段判断**
| Skill 数量 | 推荐方案 | 理由 |
|-----------|---------|------|
| < 50 | 关键词匹配(当前)+ L2 注入兜底 | 30 个 Skill 全量列表注入 system prompt 也才 ~1000 token |
| 50-200 | FTS5 全文检索 | SQLite 原生支持,不需要 ML 模型 |
| 200+ | SkillRouter | 这个规模下 SkillRouter 的优势才体现 |
**当前决策**:不部署 SkillRouter,继续用关键词匹配 + L2 注入。原因:
1. 当前 Skill 数量 < 50,全量注入 system prompt 即可
2. SkillRouter 需要 GPU 推理(0.6B 模型),Mac mini CPU 跑起来延迟较高
3. 核心 Skill 的操作规范已经在 L2 prompt_templates 中写死,不依赖被动触发
**未来触发条件**(何时引入 SkillRouter):
- Skill 数量超过 100 个
- 或者引入社区 Skill 生态(如 clawhub / awesome-llm-skills
- 届时 SkillRouter 的 0.6B 模型可以在 NAS Docker(有 GPU 的 Windows Node)上跑
### 3.4 SkillRouter 的经验对我们的价值
即使不部署,SkillRouter 的核心发现指导我们写好 Skill:
| SkillRouter 发现 | 我们的行动 |
|-----------------|----------|
| **Skill body 是关键信号**91.7% 注意力) | Skill description 要写具体(不只是标题),四要素中 "When to use" 和示例对话是 body 级别的信息 |
| **元数据不够**name+desc 下降 31-44pp | 不能只写简短 description,要写完整的触发场景和操作步骤 |
| **cross-encoder 比向量检索更准** | 关键词精确匹配(OpenClaw 已有)比语义搜索更可靠——在小规模下 |
## 4. 结论
1. **SkillRouter 源码已下载**`/Volumes/stock/knowledge_base/SkillRouter/`
2. **SkillRouter 的经验指导 Skill 写法**body 内容是关键,description 要具体
3. **三层组合方案**
- L3 关键词触发(当前,已优化)
- L2 引擎注入(课题4)→ 核心兜底
- SkillRouter(未来)→ 规模化时引入
> **⏳ 待进一步探讨**:用户要求继续探讨 SkillRouter 的应用可能性(轻量化方案),不关闭此选项。