很多人按教程搭完 RAG(检索增强生成) demo 后,兴冲冲灌入自己的文档,然后发现:问简单问题还行,稍微复杂一点就开始"一本正经地胡说"。问题通常不在大模型,而在检索链路。本文按排查顺序给你五个调优杠杆。
先建立一个关键认知:RAG 的回答质量上限由检索质量决定。模型再强,喂给它的上下文是错的,回答就是错的。所以排查永远从检索端开始。
杠杆一:文档切分(Chunking)
切分是新手最容易敷衍、影响却最大的一步。常见问题与对策:
- 切太大(如整块 2000 字):检索噪声多,关键句被稀释。降到 300–500 字试试。
- 切太小:语义不完整,"它支持 30 天退款"没了主语。切分要尊重语义边界——按标题、段落切,而不是硬按字符数切。
- 上下文丢失:给每个块加上文档标题和章节路径作为前缀,例如
[退款政策 > 特殊商品],检索命中率会明显提升。
杠杆二:Embedding 模型
默认用的通用 Embedding 未必适合你的语料。中文场景优先考虑中文优化过的模型(如 BGE 系列)。验证方法很简单:准备 10 个典型问题,人工标注每个问题对应的目标文档块,对比不同 Embedding 模型的召回命中率,选高的那个。
杠杆三:混合检索(向量 + 关键词)
纯向量检索对"语义相近"敏感,但对专有名词、型号、编号很差——用户问"A-3000 型怎么复位",向量检索可能召回一堆"复位"相关但型号不对的段落。
解法:向量检索与 BM25 关键词检索并行,结果按加权融合。多数向量数据库(如 pgvector、Elasticsearch)都支持这种混合查询,改动的只是检索层,收益立竿见影。
杠杆四:重排序(Rerank)
检索返回 top 20,再用一个 Rerank 模型(如 bge-reranker)对这 20 条精排,取 top 3–5 喂给大模型。粗排快、精排准,这是目前性价比最高的一个环节,通常能把答案相关度再抬一档。
杠杆五:提示词约束
检索都对但回答仍出错,才轮到提示词。核心两条:
你只能基于以下检索到的资料回答问题。
如果资料中没有答案,直接回答"根据现有资料无法确定",不要推测。
资料:
{检索结果}
"不知道就承认"这条指令能砍掉一大半幻觉。要求回答时标注引用的资料编号,还能顺便方便用户溯源核对。
建立评估集,别凭感觉调
调优最大的陷阱是"改了一个参数,试了三个问题感觉变好了"。正确做法是维护一个 30–50 题的评估集,每题有标准答案,每次改动后跑一遍,记录两类指标:
- 检索命中率:正确文档块是否进入 top K
- 回答正确率:最终答案与标准答案是否一致(可用另一个 LLM 做评判)
没有评估集的调优都是玄学。
排查顺序速查表
- 看检索结果对不对 → 不对就调切分、换 Embedding、上混合检索
- 检索对但排序靠后 → 加 Rerank
- 上下文对但回答错 → 改提示词约束、换更强的生成模型
- 任何改动 → 跑评估集验证
一个真实调优案例
某客服知识库 RAG 上线后投诉"答案经常答非所问"。按上面的顺序排查:
- 抽查 20 个失败问题,发现 14 个的检索结果里根本没有正确文档——检索端问题。
- 深入看,这批问题都含产品型号(如"X9 Pro"),纯向量检索把它们归到了"外观相似"的其他型号文档。上混合检索后命中率从 30% 升到 75%。
- 剩下的错误多为"正确文档在 top 10 但不在 top 3",加 Rerank 后 top 3 命中率到 90%。
- 最后给提示词加上"回答必须标注引用编号",幻觉投诉基本消失。
三轮改动各花半天,但每一步都有评估集数字背书,上线前就能预估效果。
小结
RAG 调优的主线是一句话:先保证喂给模型的上下文是对的,再要求模型好好说话。切分、Embedding、混合检索、重排序解决"喂得对",提示词解决"说得好"。配上一个小评估集,你的每次改动都有据可依。
