14 天 RAG:从检索到可信回答
第 1 周 · 把一个能用的 RAG 服务从零搭起来
为什么要检索:幻觉、知识截止与长上下文的代价,以及一个纯关键词的最小 RAG
先弄清楚检索增强生成到底替模型解决了哪三个具体毛病,再把它和微调、超长上下文放在一起比成本与适用面,最后不碰任何向量,用 BM25 打分写出第一个能回答问题的最小系统。
embedding 与向量检索:相似度、维度与模型选型,把文本存进 pgvector
从坐标系这个类比出发理解向量到底编码了什么,弄清余弦相似度与内积的区别和归一化的前提,再对着排行榜谈模型选型与维度取舍,最后把语料写进 pgvector 并查出最近邻。
文档进来这一关:PDF 与 HTML 解析、表格与扫描件、清洗规则和必须留下的元数据
检索质量的天花板是解析质量,这一天把 PDF、HTML、Markdown 三类来源的解析坑一次讲透,处理表格与扫描件,定下一套清洗规则,并把标题层级、页码、来源地址这些后面要用来做引用和过滤的元数据固定下来。
切块策略:固定、递归、按结构、父子与语义五种切法,以及用评估而不是直觉来选
切块是整条链路里最容易凭感觉决定、又最影响结果的一步。这一天把五种主流切法逐个实现并说明各自的适用面,讲清楚重叠区与上下文块头的作用,最后用一组固定问题把五种切法拉到同一把尺子下比较。
向量索引与库选型:HNSW 与倒排文件、量化省内存、带过滤的查询与多租户隔离
把向量检索从能跑推到能扛量:先弄懂两种索引的结构与参数怎么影响召回和延迟,再用半精度与二值量化压内存,然后解决最容易踩坑的带条件过滤查询,最后给出 pgvector 与专用向量库之间的选型判据。
生成这一侧:上下文怎么排、引用怎么标、什么时候必须拒答,以及流式回答
检索拿回一堆块之后,真正决定用户体验的是怎么组装、怎么让模型标出处、怎么在证据不足时闭嘴。这一天写出一个带可验证引用与拒答策略的问答接口,并把回答做成流式输出。
第一周综合:把六天的零件装成一个可一键启动的检索问答服务并复盘
把前六天的解析、切块、索引、检索、组装、生成拼成一个真正的服务:一条摄取命令、一个问答接口、一份配置说明,用 Docker 一键起来,然后回头复盘这一周每个决定的依据和留下的技术债。
第 2 周 · 让它可信、可评估、可上线
评估先行:搭 golden set、算召回与排序指标、用模型当裁判判忠实度
第二周的每一项优化都要拿数据说话,所以先建评估。这一天从零构造一份标准问答集,实现召回率、平均倒数排名与归一化折损累计增益三个检索指标,再用模型当裁判评忠实度与答案相关性,最后跑出第一周系统的基线报告。
混合检索与重排:两路召回、倒数排名融合,再用交叉编码器把前几名重新排一遍
关键词检索和向量检索各有各的盲区,把两路结果用倒数排名融合合起来往往立竿见影;再拿一个交叉编码器对前几十条做精排,用第八天的评估证明每一步各贡献了多少。
查询侧优化:改写、假设文档嵌入、多路查询、后退提问与意图路由
用户的问题往往写得又短又含糊,检索不到不是索引的错。这一天把功夫下在查询进来之后、检索发生之前:改写、生成假设答案再检索、拆成多个子查询、退一步问更一般的问题,以及先判意图再决定走哪条路。
高级索引:父子文档、摘要索引、上下文检索,以及树状聚合与图检索的取舍
同一批文档可以建出好几种索引结构。这一天实现父子索引与摘要索引,落地上下文检索这一性价比很高的做法,再讲清楚树状递归聚合与图检索各自适合什么问题、贵在哪里,什么时候不该上。
Agentic RAG:把检索做成工具,让模型自己决定查不查、查几次、要不要推翻重来
固定的一次检索应付不了多跳问题和检索失败。这一天把检索包成工具接进 Agent 循环,实现自我反思与结果纠错,处理多跳查询,并给循环设好次数与预算上限,避免它一直查下去。
上生产:增量同步与去重、按权限过滤、缓存分层、链路追踪与成本延迟账
把系统交给真实用户之前还差最后一段:文档会变、人有权限差别、重复问题不该每次都重算、出了问题要能查到是哪一步慢和贵。这一天把这四件事一次做完。
综合项目与复盘:多租户企业知识库问答,一张 RAG 决策地图与面试专题
把十三天的东西收成一个可以放进作品集的项目:多租户、带引用、有评估面板的企业知识库问答。然后把整门课压缩成一张决策地图,回答面试里最常被追问的那些问题。