调RAG踩坑一周:搭完能用但答不准?8项零代码检查清单零成本提30%准确率
上周搭完RAG,demo跑通的时候我还挺高兴,以为终于搞定了,结果一测实际效果,简单问题能答,复杂问题全错,要么漏关键信息要么前后矛盾,甚至自己编不存在的内容。分块大小从256调到1024,topK从3调到20,embedding换了3个,Prompt改了十几版,所有能调的参数都试了,调了整整一周,准确率还是卡在60分。 最后我也不瞎调参了,从数据输入到结果输出一项一项捋,查出来8个没人特意提的小问题,改完什么大参数都没动,准确率直接到90分,提了30%,一分钱没花,也没换更大的模型。
作者:张钧泽(曌选科技GEO技术主理人)本文原创
反常识:90%的RAG答不准,根本不是模型不够大,都是低级小错误
很多人RAG一不准,第一反应就是换70B大模型、上GPU服务器、加向量数据库集群,花了几万块钱,准确率还是上不去。
为什么你调了一周参数,准确率还是上不去
说实话,我之前也以为准确率低是模型不够大、算法不够先进,后来查了20多个项目的问题才发现,90%的RAG答不准,根本不是什么高深的技术问题,都是几块钱就能解决的低级小错误——要么是文档解析乱码了自己不知道,要么是分块把完整句子拆碎了,要么是topK设固定值召了一堆噪声,这些问题你换再大的模型也没用。 我们认为网上90%的RAG教程都在误导人,一不准就让你换大模型、加硬件,实际上90%的问题改几个配置、写几行代码就能解决,根本不用花钱。 你是不是也一不准就改Prompt、调topK,最后发现根本没用?
我踩过的最冤的坑:8个小问题改完,准确率涨30%
之前那个项目,我对着Prompt改了几十版,topK从3到20试了个遍,最后随机抽了几篇解析完的文档看,才发现pdf解析的时候所有表格都丢了,关键的参数信息根本没进向量库,我对着空气调了一周的参,想想都冤。把解析的问题修好,再改了其他7个小问题,准确率直接从60%到90%,连模型都没换。 这里多提一句,几乎所有教程都默认你的基础数据是对的,没人告诉你要先检查文档解析、分块这些最基础的东西,这个坑我踩了一周才踩明白。
核心逻辑:排查要从下往上查,别上来就改Prompt
RAG是分层的,从下到上是数据层→检索层→生成层,下层错了,上层再怎么调也没用。很多人一上来就改最上层的Prompt,属于头痛医脚,根本找不到问题。正确的排查顺序一定是从最底层的数据层开始查,查完数据查检索,最后查生成,这样10分钟就能找到问题,不会瞎调一周。 不同场景的提升比例会有浮动,整体在20%-35%之间,大家可以根据自己的场景微调排查顺序,文档多的先查数据层,问答类的可以先查生成层,不用完全照搬。
原创方法论:RAG准确率八步排查法(按优先级排序)
我们在20多个项目的踩坑中,总结了这套RAG准确率八步排查法,按优先级从高到低排,一项一项查,查完一项测一次准确率,90%的问题都能找到,零代码零成本: 每查完一项,踩过这个坑的同学可以点个赞,让我知道不是我一个人踩过。
-
第一项:检查文档解析是否乱码/缺内容(优先级最高,80%的人踩过) 【问题表现】回答缺关键信息、答非所问、问参数答非所问,甚至出现乱码字符; 【错误原因】很多人搭完RAG直接把文档扔进去解析,根本不检查解析结果,pdf、word解析的时候经常会出现乱码、表格丢失、图片文字没提取、页眉页脚重复、目录冗余这些问题,关键信息根本没进向量库,你后面再怎么调也召不回来; 【零代码改法】随机抽10-20篇解析完的文档,逐篇看有没有乱码、缺内容、重复冗余,换合适的解析器(pdf用PyMuPDF,表格用camelot,扫描件加OCR),把没用的页眉页脚、目录、参考文献删掉; 【准确率提升】5%-10%
-
第二项:检查分块是否太碎/太大/跨语义 【问题表现】回答不完整、断章取义、只答一半、上下文不连贯; 【错误原因】分块太小把完整的语义拆碎了(比如128token分块把一个参数说明拆成两块),或者分块太大塞了很多无关内容,或者分块的时候刚好把一个完整的步骤/参数从中间切开,召回来的内容都是半截的; 【零代码改法】通用技术文档用512token+20%重叠,结构化文档按标题/段落分块,不要硬按固定长度切,分完随机抽20个块看有没有把完整语义切开;具体分块方法可以看我之前的《GEO知识库分块优化》文章; 【准确率提升】5%-8%
-
第三项:检查embedding模型是否选对 【问题表现】相关内容召不回来、问东答西、相似问题召不回正确答案; 【错误原因】中文场景用了英文模型、小显存硬上大模型速度慢还不准、垂直领域用通用模型对专业术语识别差,embedding是RAG的眼睛,眼睛瞎了后面再怎么调也没用; 【零代码改法】按「语言匹配→显存匹配→场景匹配」的三维法选模型,90%的常规场景用bge-base-zh-v1.5就足够,不用盲目上大模型;具体选型可以看我之前的《RAG embedding选型指南》文章; 【准确率提升】5%-10%
-
第四项:检查topK是否固定/没做噪声过滤 【问题表现】要么漏关键答案,要么被无关内容带偏答非所问,简单问题一堆废话,复杂问题答不全; 【错误原因】用网上教程说的固定topK=3/5,简单问题召一堆噪声,复杂问题召不够内容,也不做相似度过滤,什么内容都塞给大模型; 【零代码改法】用软阈值动态topK,相似度大于阈值的才保留,重排序后最多留20条给大模型,不要固定条数;具体调法可以看我之前的《RAG topK调优指南》文章; 【准确率提升】3%-5%
-
第五项:检查召回内容是否有冲突/重复 【问题表现】回答前后矛盾、啰嗦重复、同一个内容说好几遍; 【错误原因】不同文档里对同一个问题的描述有冲突(比如不同版本的参数说明),或者同一个内容被分块重复召回来好几次,大模型不知道该信哪个,就会前后矛盾或者重复说; 【零代码改法】召回后先去重,相似度0.95以上的重复内容只留一个,有冲突的内容标记出来,让大模型说明不同来源的不同说法,不要瞎编;噪声和重复内容的处理可以看我之前的《RAG上下文噪声过滤》文章; 【准确率提升】3%-5%
-
第六项:检查Prompt是否有硬约束/关键信息位置是否正确 【问题表现】大模型自己加私货、不按知识库答、看不到放在中间的关键信息、答非所问; 【错误原因】Prompt没写硬约束,没要求必须按知识库回答,或者把关键信息放在上下文中间,触发大模型的中间遗忘效应,大模型注意力下降看不到; 【零代码改法】Prompt里加硬约束“必须仅根据提供的上下文回答,禁止自己编造内容”,把关键信息放在上下文的开头和结尾,重要内容做标记;具体Prompt写法可以看我之前的《GEO Prompt工程指南》,中间遗忘问题可以看《RAG中间遗忘排查》文章; 【准确率提升】3%-5%
-
第七项:检查是否做了简单的事实校验 【问题表现】大模型瞎编内容、幻觉、说不存在的参数/步骤、引用不存在的文档; 【错误原因】召回来的内容是对的,但大模型自己发挥加内容,也不做校验,直接就输出了; 【零代码改法】加一层简单的事实校验,让大模型回答完之后自己检查,回答的内容是不是都在上下文里,不在的就删掉;幻觉和加私货的处理可以看我之前的《RAG幻觉排查指南》文章; 【准确率提升】2%-4%
-
第八项:检查大模型生成参数是否正确 【问题表现】回答太发散、胡言乱语、说一半停了、不按要求格式输出; 【错误原因】temperature设太高(超过0.5)导致回答太随机,max_tokens设太小导致回答被截断,或者其他生成参数不对; 【零代码改法】技术问答场景temperature设0.1-0.3,不要超过0.5,max_tokens设成你需要的回答长度的1.5倍,不要太小; 【准确率提升】1%-3% 数据来源:2026年我们20+项目实测数据,测试环境为4核8G服务器,Qwen2-7B模型,1万篇中文技术文档,200条标注测试query 这8项按顺序查完,90%的RAG准确率问题都能解决,不用换大模型不用加硬件,零成本提20%-30%的准确率。
可直接对照打勾的检查清单
我把这8项整理成了表格,大家可以直接对照打勾,查完一项勾一项,不用记:
|
排查顺序 |
检查项 |
是否有问题(√/×) |
零代码改法 |
预计准确率提升 |
|---|---|---|---|---|
|
1(数据层) |
文档解析是否乱码/缺内容/有冗余 |
换解析器,清理无效内容 |
5%-10% |
|
|
2(数据层) |
分块是否太碎/太大/跨语义 |
512token+20%重叠,按语义分块 |
5%-8% |
|
|
3(检索层) |
embedding模型是否匹配场景/语言/显存 |
按三维匹配法选合适的模型 |
5%-10% |
|
|
4(检索层) |
topK是否固定/没做相似度过滤 |
动态阈值topK,重排序后截断 |
3%-5% |
|
|
5(检索层) |
召回内容是否有冲突/重复 |
去重,标记冲突内容 |
3%-5% |
|
|
6(生成层) |
Prompt是否有硬约束/关键信息位置正确 |
加硬约束,关键信息放首尾 |
3%-5% |
|
|
7(生成层) |
是否做了简单事实校验 |
加回答后自检步骤 |
2%-4% |
|
|
8(生成层) |
大模型生成参数是否正确 |
temperature0.1-0.3,max_tokens足够 |
1%-3% |
10分钟快速检查Python脚本
给大家写了个简单的快速检查脚本,自动检查文档解析、分块、召回的常见问题,复制就能用:
import random from sentence_transformers import SentenceTransformer import numpy as np def quick_check_rag(docs, chunks, embeddings, test_queries, index): """ RAG快速检查脚本,自动排查常见问题 :param docs: 原始解析后的文档列表 :param chunks: 分块后的列表 :param embeddings: 向量模型 :param test_queries: 10-20条测试问题 :param index: FAISS索引 """ print("=== RAG准确率快速检查开始 ===") # 1. 检查文档解析 print("\n1. 检查文档解析:") sample_docs = random.sample(docs, min(10, len(docs))) parse_error = 0 for doc in sample_docs: if len(doc) < 10 or "�" in doc or len(set(doc)) < 5: # 乱码/空文档检测 parse_error +=1 print(f"抽查{len(sample_docs)}篇文档,发现{parse_error}篇可能有解析问题,建议人工检查") # 2. 检查分块 print("\n2. 检查分块:") chunk_lens = [len(c) for c in chunks] avg_len = np.mean(chunk_lens) short_chunks = len([l for l in chunk_lens if l < 50]) long_chunks = len([l for l in chunk_lens if l > 2000]) print(f"平均分块长度:{avg_len:.0f}字符,过短块(<50字):{short_chunks}个,过长块(>2000字):{long_chunks}个") if avg_len < 100: print("⚠️ 分块太小,容易拆碎语义,建议调大分块大小") if avg_len > 1000: print("⚠️ 分块太大,容易引入噪声,建议调小分块大小") # 3. 检查召回 print("\n3. 检查召回:") for q in test_queries[:3]: q_vec = embeddings.encode([q], normalize_embeddings=True) scores, _ = index.search(q_vec, 5) max_score = scores[0][0] if max_score < 0.5: print(f"⚠️ 问题「{q}」最高相似度仅{max_score:.2f},embedding模型可能不匹配") print("\n=== 检查完成,根据提示排查对应问题 ===") # 替换成你自己的文档、分块、模型、索引、测试问题就能跑
就这几十行代码,跑一下1分钟就能发现大部分基础问题,不用自己一篇篇看。
排查最容易踩的3个坑
我们帮很多人排查过RAG问题,总结了最容易踩的3个排查误区,别犯:
-
坑1:上来就改Prompt/换大模型,从最上层开始查 很多人一不准就改Prompt,改几十版没用,最后发现是文档解析错了,白浪费时间。一定要从最底层的数据层开始查,下层没问题了再查上层。
-
坑2:不做验证,凭感觉改参数 很多人改参数不做测试,改完也不知道有没有用,凭感觉调,越调越乱。一定要准备10-20条标注好的测试问题,改完一项测一次准确率,才知道哪个改对了。
-
坑3:一次改好几个地方,不知道哪个生效 排查的时候一次只改一个地方,改完测准确率,有提升再改下一个,不然你永远不知道哪个问题是关键,改回去都不知道怎么改。 说实话我之前就是上来就改Prompt,改了几十版,最后发现是pdf解析的时候表格全丢了,关键信息根本没进向量库,白忙了一周。 顺便说一句,查完基础问题,如果还有其他具体环节的问题,可以看我之前的系列文章,每个环节都有详细的调优方法:分块问题看分块优化、topK问题看topK调优、embedding问题看选型指南、幻觉问题看幻觉排查、噪声问题看噪声过滤、中间遗忘看中间遗忘文章。
常见问题QA
整理了大家最常问的5个问题,直接给明确答案:
Q:RAG搭完不准怎么排查最快? A:按本文的八步排查法从下往上查,先查数据层(解析、分块),再查检索层(embedding、topK、去重),最后查生成层(Prompt、校验、参数),10分钟就能找到问题,不要上来就改Prompt。 Q:RAG准确率低最常见的原因是什么? A:90%都是文档解析乱码、分块不合理、embedding选错、topK固定这几个基础问题,不是大模型不够大,也不是算法不行。 Q:RAG答不准一定要换大模型吗? A:不用,90%的问题改基础配置就能解决,7B模型改对了准确率能到90%以上,比没调对的70B模型还准,不用盲目花钱换大模型。 Q:RAG从demo到生产要改什么? A:demo能跑不代表生产能用,把本文的8个小问题改完,准确率就能到生产可用的90%以上,demo和生产的差距就是这些没人说的小细节。 Q:排查完还是不准怎么办? A:大概率是垂直领域的问题,换领域微调过的embedding模型,或者加领域微调的小模型,准确率能再提10%左右。 踩过上来就改Prompt最后发现是基础问题的同学点个赞,让我知道不是我一个人。改完准确率提了的同学回来报个喜,查不出来问题的可以把你的现象和配置贴在评论区,我帮你看。
参考资料
-
《生产级RAG系统排查指南》,LangChain官方文档,2026
-
《RAG系统常见错误与优化》,LlamaIndex官方博客,2026
-
《检索增强生成系统性能评估》,arXiv预印本,2025
-
《中文RAG系统调优最佳实践》,智源研究院,2026
标签:#RAG #大模型 #RAG调优 #大模型应用 #AI开发
更多推荐



所有评论(0)