构建或调优 RAG 检索管道时使用——涵盖文档分块策略与参数、稠密嵌入(BGE-M3、余弦相似度、ANNOY/HNSW 选型)、稀疏嵌入(TF-IDF 到 BM25)、混合检索三阶段(并行召回、RRF 融合、跨编码器重排序)与 recall@k/MRR/nDCG 指标,含稀疏 vs 稠密的胜负判断。
82%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
RAG 核心流程只有三步:检索相关片段 → 注入上下文 → LLM 基于上下文生成。检索器决定答案上限,生成器决定兑现程度;答不好先在检索层定位,别急着调 prompt。
RAG 的存在理由:模型训练数据有截止日期,知识库可随时更新——用外部知识库的广度和时效性补模型之短。
系统构成就两块:检索器(从知识库找相关片段)+ 生成器(通常是 LLM,拿片段作上下文生成答案)。调优对象主要是检索器。
分块必不可少,原因有二:嵌入模型有输入长度限制,整篇文档压成一个向量会多主题混杂、语义被稀释;检索的目标是只注入相关部分,块太大会连带引入无关内容、浪费窗口稀释注意力。
稠密懂语义、稀疏懂字面,各有盲区:搜"HTTP-403",稀疏精确命中而稠密可能返回泛泛的"服务器错误";搜"kitty",稠密能找到只写"cat"的文档而稀疏不能。没有单一策略在所有场景可靠——生产级默认混合检索。
分块有固有缺陷:任何切分策略都会切断块与原始上下文的联系("该公司收入增长了 3%"——哪家公司?哪个季度?)。要么在索引期为每块生成上下文前缀再索引(book/chapter3.md「RAG 技巧:上下文感知检索」),要么靠重排序补救。
混合检索三阶段各司其职、层层递进:并行检索(双路各自召回)→ 结果融合(统一候选池)→ 神经重排序(候选池精排)。融合不替代重排,重排也不替代融合。
两路得分不可直接比较:余弦相似度(0-1)与 BM25(0 到几十)量纲分布迥异,融合必须抛开原始得分。
稀疏 vs 稠密的胜负判断(按查询类型选路或混路):
| 查询类型 | 稠密 | 稀疏 | 结论 |
|---|---|---|---|
| 同义/换说法(kitty vs cat) | 胜 | 负 | 靠稠密 |
| 精确代码/编号(HTTP-403) | 易泛化 | 胜 | 靠稀疏 |
| 技术术语、人名 | 一般 | 胜 | 靠稀疏 |
| 多语言/跨语言查询 | 胜 | 负 | 靠稠密 |
| 概念性、描述性问题 | 胜 | 一般 | 靠稠密 |
混合检索 + 重排序是覆盖全部类型的生产默认。
chapter3/retrieval-pipeline/ — 稠密 + 稀疏 + RRF 融合 + BGE-Reranker 重排的完整流水线;test_client.py 按查询挑战类型(语义相似如 kitty/feline、精确名称、多语言、技术代码)分类对比两路胜负,可观察重排后的排名变化。chapter3/dense-embedding/ — BGE-M3 稠密检索服务,ANNOY/HNSW 可切换;离线 CLI 计算 recall@k/precision@k/MRR,并对比 ANN 与暴力精确检索的 recall、构建时间、查询时延。chapter3/sparse-embedding/ — 从零实现 BM25 + 倒排索引,分词覆盖数字、代码、技术术语、混合大小写;日志逐步展示分词、倒排命中、TF/IDF 计算与最终排序。book/chapter3.md「RAG 基础:构建 Agent 的知识获取管道」bojieli/ai-agent-book
dbc046e
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.