Agent 的 RAG 不只是向量搜索:混合检索架构实践
> Skill 检索本身就是一个 RAG 系统——用检索到的 skill 增强 agent 的生成能力。
Skill 检索本身就是一个 RAG 系统——用检索到的 skill 增强 agent 的生成能力。
1. 双路检索
Query
│
├─→ Structural Recall (结构化召回)
│ ├─ 实体匹配:query 中的关键词 vs skill 的 provides/requires/tags
│ ├─ 实体扩展:seed entity → cosine 近邻 → 候选集
│ └─ 评分:base_score + overlap_weight × min(entity_overlap, cap)
│
└─→ Vector Recall (向量召回)
├─ Query embedding (384d) vs 所有 skill embeddings
├─ Cosine similarity > threshold → 候选集
└─ 评分:similarity × vector_weight
│
└─→ Fusion
├─ Both paths hit → structural + vector + both_boost
├─ Only structural → structural score
└─ Only vector → vector score
└─ Sort by score → top-k
2. Embedding 方案
# 模型:paraphrase-multilingual-MiniLM-L12-v2 (384维,CPU 可跑)
# 文本构建:name + description + tags + triggers + body_preview
text = f"{skill['name']} {skill['description']} {' '.join(skill['tags'])} ..."
embedding = model.encode(text, normalize_embeddings=True)
# 降级策略:sentence-transformers 不可用 → hash-based embedding
# MD5 分桶 + 符号位 → 384 维稀疏向量 → cosine 仍可用3. 为什么是"混合"而非"纯向量"
| 场景 | 纯向量 | 混合 |
|---|---|---|
| "部署服务器" → server-operations | ✅ 语义匹配 | ✅ + tag 精确匹配 |
| "code-review" → code-review | ✅ 但可能匹配 code-style | ✅ provides 精确命中 |
| "查错 debug" → debugging-toolkit | ✅ | ✅ + when_to_apply 匹配 |
| 拼写错误 "dubug" → debugging | ❌ embedding 偏移 | ✅ 结构化召回兜底 |
结论:结构化召回处理精确匹配和容错,向量召回处理语义泛化,两者互补。