RAG 调优是经验活,不同业务表现差异大,本文给排查顺序,具体参数按你的数据调。
按教程把 RAG 搭起来了——文档切块、向量化、检索、喂给大模型,一测发现回答完全不对,答非所问。很多人第一反应是"模型不行"就去换更大的模型,其实问题八成出在前面三个环节。按顺序查。
原因 1:检索就没检对(chunk 切分问题)
先看最源头:把检索到的片段直接打印出来,跟用户问题对一下。如果检索回来的内容根本不相关,那后面模型再强也没用——垃圾进、垃圾出。
常见坑:
- chunk 切太大:一个块里塞了太多内容,检索匹配时语义被稀释;
- 切太小:一句话就一块,上下文不完整;
- embedding 模型不对:用了个和你业务领域不匹配的向量模型,检索天然不准。
解决:先把 chunk size 调到一个常见的中间值试,加上适当重叠;换一个更适合你业务语言的 embedding 模型。
原因 2:检索到了,但模型根本没用到(prompt 模板问题)
第二种很隐蔽:你打印检索结果,发现相关内容明明检回来了,但模型回答就是不引用它。
常见坑:
- prompt 模板里没把检索到的上下文正确塞进去;
- 上下文太长,超出模型窗口被截断了,关键部分没送到;
- 模板里没明确告诉模型"只根据提供的资料回答",模型开始自由发挥。
解决:检查 prompt 结构,确保上下文真的传进去了、没被截断;明确写"仅依据以下资料回答,资料里没有就说不知道"。
原因 3:检索和 prompt 都对,模型能力不够
第三种:前面两步都查过了,检索相关、prompt 也对,但生成出来还是绕、还是错。这时候才轮到模型本身。
常见情况:用了个 7B 小模型做复杂 RAG,它理解长上下文、按资料组织答案的能力就是不够。
解决:换更大一档的模型,或者在 prompt 里加几个 few-shot 示例,教它怎么依据资料回答。
你的 RAG 是哪种?
| 现象 | 大概率原因 | 先做什么 |
|---|---|---|
| 检索结果就不相关 | chunk / embedding 问题 | 调 chunk、换向量模型 |
| 检到了但模型没用 | prompt 模板问题 | 检查上下文是否真传进去 |
| 都对但生成还是错 | 模型能力不够 | 换大模型 / 加 few-shot |
记住顺序:先查检索,再查 prompt,最后才怪模型。大部分答非所问在前两步就解决了。
你的 RAG 现在回答准确率怎么样?用的什么模型和 embedding?评论区说一下,我帮你看卡在哪一步。