RAG 落地实战:从文档切分到检索优化的完整指南
大模型能力再强,也记不住你公司的内部文档。检索增强生成(RAG)把“外部知识库 + 大模型”组合起来,已经成为企业 AI 落地最主流的技术路线。但真正做过 RAG 项目的人都知道:demo 很惊艳,生产很骨感。本文结合一线实践,梳理 RAG 落地的完整链路与关键优化方法。
一、RAG 的标准链路
一个完整的 RAG 系统包含五个环节:文档解析 → 切分(Chunking)→ 向量化与索引 → 检索与重排 → 生成回答。线上效果不佳时,九成问题出在前四个环节,而不是大模型本身。
二、文档切分:RAG 的第一道坎
切分质量直接决定检索上限。常见误区是“一刀切”:所有文档都按固定长度切分。
1. 按文档类型选择切分策略
- Markdown / 技术文档:按标题层级切分,保持语义完整,一个 chunk 对应一个小节。
- PDF / 扫描件:先做版式还原(标题、表格识别),再按段落切分,避免把表格拦腰切断。
- 长文本:滑动窗口切分,chunk 大小 512~1024,overlap 保留 10%~20%,保证上下文连续。
2. chunk 大小的权衡
chunk 太大:噪声多,模型容易被无关信息带偏;chunk 太小:语义碎片化,检索到了也拼不出完整答案。经验值:中文场景 300~800 字,配合 50~100 字的重叠区。
三、向量化与索引选型
1. Embedding 模型
中文检索场景优先选择在中文语料上充分训练的模型,并参考 C-MTEB 中文榜单的检索分数。注意:query 和 document 必须用同一模型编码,混用模型是新手最常见的坑。
2. 向量数据库
十万级以下数据量,内存型方案(如 FAISS)足够;百万级以上或需要多租户隔离,考虑 Milvus、Elasticsearch(向量 + 全文混合检索)等。选型时重点看:混合检索支持、标量过滤能力、运维成本。
四、检索优化:从召回到精排
这是 RAG 效果提升最明显的环节,三个手段按投入产出比排序:
1. 混合检索(Hybrid Search)
向量检索擅长语义匹配,BM25 擅长关键词精确匹配。两者取并集再用 RRF(倒数排名融合)合并,召回率通常能提升 10~20 个百分点。
2. 重排(Rerank)
先用向量检索粗排召回 Top 50,再用 cross-encoder 重排模型精排取 Top 5。这是性价比最高的优化:延迟增加约 100~300ms,但答案准确率提升显著。
3. 查询改写
用户问题往往口语化、省略主语。可以用小模型先做查询改写或扩展(如 HyDE 生成假设性文档),再去检索。多轮对话场景下,记得把历史轮次压缩成独立问题。
# 混合检索 + 重排的典型流程(伪代码)
query_vec = embedder.encode(user_query)
candidates = vector_db.search(query_vec, top_k=50) # 粗排召回
candidates += bm25.search(user_query, top_k=50) # 关键词补充
reranked = reranker.rerank(user_query, candidates, top_k=5) # 精排
context = "\n".join([c.text for c in reranked])
answer = llm.generate(prompt.format(context=context, query=user_query))
五、生成阶段:让引用可追溯
要求模型“基于检索内容回答,并标注每句话的来源 chunk 编号”,既能减少幻觉,也方便用户核验。检索不到相关内容时,明确让模型回答“知识库中没有相关信息”,而不是编造。
六、评估与迭代
没有评估的优化都是玄学。推荐用 RAGAS 框架,重点看三个指标:答案忠实度(Faithfulness)、答案相关性(Answer Relevancy)、上下文召回率(Context Recall)。准备 50~100 条真实问答对作为回归测试集,每次改动跑一遍,用数据说话。
总结
RAG 落地的核心经验可以归纳为一句话:把七成精力放在数据(切分、索引、检索)上,而不是模型上。模型年年换,扎实的数据工程才是长期资产。希望这篇指南能帮你少走弯路。
- 点赞
- 收藏
- 关注作者
评论(0)