从零搭建个人知识库问答:我的 RAG 实践笔记
这段时间在自学检索增强生成(RAG),把自己的资料整理成一个可以问答的小系统。 这篇笔记记录整体流程和我踩过的坑,仅供个人学习参考。
一、整体链路
我理解的 RAG 主要分四段:文档解析 → 切分与向量化 → 检索召回 → 生成回答。 看起来简单,实际效果好坏几乎全在细节上。
二、文档切分比模型选择更重要
一开始我按固定字符数硬切,结果经常把一张表格切成两半,检索出来的片段缺头少尾。 后来改成按标题层级切,再对过长的段落做二次切分,答案的完整度明显变好。 我的体会是:切分策略决定了检索的天花板,模型只是决定接近天花板的程度。
三、检索召回与重排
- 向量检索对语义相近的问题效果好,但专有名词、编号类查询容易漏;
- 加上关键词检索做混合召回,能明显补上这一类漏召;
- 召回数量先放宽,再用重排模型收敛到前几条,比一开始就卡得很死更稳。
四、评估环节不能省
我最初靠肉眼看几个例子判断效果,很容易自我感觉良好。 后来整理了一批固定的问题和标准答案,每次改完都跑一遍,才发现有些「优化」其实是负向的。 现在固定三类指标:召回命中率、答案正确率、以及无答案时是否正确拒答。
五、几点教训
- 不要在上线前才考虑评估,先建评估集再动手调参;
- 「答不出来」比「答错」更可接受,拒答策略要显式设计;
- 文档质量差的时候,先清洗文档,比换更大的模型收益更高。
以上均为个人学习过程中的理解,可能存在疏漏,欢迎交流指正。