为什么你的RAG系统回答问题总是不准确

也在公众号发布

张坤zkun
扫码关注公众号,这篇也在那边。
张坤zkun 2026年4月3日 09:00
01 缘起:一个让我学会"管理预期"的项目
去年六月份,我们团队接了一个制造业客户的项目——搭建企业内部知识库问答系统。
客户的IT负责人找到我们时,需求很明确:他们有三年积累下来的产品手册、技术规范、售后FAQ,两万多份文档,想做一个内部问答机器人,主要给客服和售后团队用,减少重复咨询的压力。
我们评估了一下,文档量够、需求清晰、场景典型,签了合同,进场。
前三周做得很顺。文档清洗、切分、向量化、入库、接大模型,一气呵成。Demo阶段在客户会议室里演示了三十多个问题,准确率测出来95%,效果相当好。客户的业务负责人当场拍板:“就这个方向,尽快上线。”
当时我坐在会议室里,心里其实有点不安。
Demo用的问题,是我们的实施顾问和客户的IT一起挑的。三十多个问题,天然就是"好回答"的问题——文档里有明确答案、表述和文档原文高度接近、不涉及多步推理。
但我没拦住。项目排期紧,客户催得急,CEO在周会上已经说了"这个月底要看到效果"。
先上再说。
上线第一周,我每天晚上都能收到客户IT负责人的微信。
第一天,语气还算客气:
“客服反馈有个问题答得不太对,我发你看看。”
第三天,开始带情绪了:
“今天又收到三个投诉,一个是答非所问,一个是关键信息没给全,还有一个最离谱——回答里出现了我们根本没生产过的产品型号。你们的系统是在’编’吗?”
我连夜拉了我们的算法工程师排查。结果让人头疼:
那个"答非所问"的问题,客户问的是"XX型号在海拔3000米以上怎么调试"。我们去查检索日志,发现Top5的chunk里确实有调试相关内容,但没有一条提到"高海拔"的具体参数调整。模型拿到了一堆通用调试步骤,自然就只能回答通用内容。
那个"编造产品型号"的问题更离谱。检索结果里根本没有相关信息,但模型"自信地"编了一段看起来很专业的回答,连产品型号都编得有模有样——格式对、命名规则对,但那款产品根本不存在。
上线第三周,客户的VP拉了一个紧急会议。
会议室里坐着七八个人,客户的VP、IT负责人、客服主管,我们这边是我和两个工程师。VP没发火,但说了一句让我到现在都记得的话:
“准确率从测试时的95%,掉到了上线后的不到60%。这个系统,我不敢开放给外部客户用了。”
作为乙方项目经理,那一刻我最怕的不是技术问题——技术问题总有解法。最怕的是信任崩塌。客户开始怀疑的不是某个功能点,而是"你们这个团队到底行不行"。
这个项目后来花了两个月才把准确率拉回到90%以上。过程很痛苦,但值了——不是因为项目交付了,而是因为这次翻车让我彻底想明白了一件事:
RAG不准确,从来不是某一个环节出了问题。
它是检索→理解→生成这条链路上的累积误差。检索偏一点,理解偏一点,生成再偏一点,三个"偏一点"叠在一起,最终答案可能离正确答案差了十万八千里。
后来我复盘了我们团队过去两年做过的十几个类似项目,发现一个规律: 几乎每一个从Demo走向生产的RAG项目,都会经历一次准确率的断崖式下跌。 Demo阶段所有条件都是"理想态"——问题是精心挑的,数据是干净的,场景是简化的。一旦进入真实环境,用户的问题千奇百怪,数据质量参差不齐,准确率自然大幅下滑。
2026年1月,InfoWorld的一项调查更是揭示了一个残酷的事实: 企业RAG系统失败的根本原因不是模型不够强,而是28%的文档已过时,22%的政策相互矛盾,19%的知识散落各处。 另一项来自斯坦福的研究发现,当知识库超过约1万篇文档时,语义搜索会开始明显失灵——这不是模型变笨了,而是向量空间本身出了问题,学界称之为"语义崩塌"(Semantic Collapse)。
这篇文章,我想把我这两年踩过的坑、趟过的路,以及2026年最新的技术进展,系统地讲一遍。不是写给学术圈看的,是写给正在做RAG、或者准备做RAG的项目负责人的——你的系统为什么不准,到底该从哪里修起。
02 拆解:RAG准确率的四个断裂层
在展开讲之前,我先给一个框架。后面所有的分析和解法,都围绕这个框架展开。
先学会"翻译"客户的反馈
客户说"系统不准确"的时候,他们描述的症状其实可以归为四类:
| 客户原话 | 翻译成技术语言 | 问题出在哪 |
|---|---|---|
| “答非所问,根本不是在说我问的东西” | 检索拿到了错误或无关的文档 | 检索层 |
| “说的对但不全,关键信息没提到” | 检索对了,但模型没充分理解 | 理解层 |
| “看起来很对,但细查发现是编的” | 模型理解了,但生成时自由发挥 | 生成层 |
| “上个月还行,这个月突然不准了” | 知识库退化、向量漂移、数据腐烂 | 运维层 |
作为乙方PM,学会听懂客户的"症状描述"并翻译成技术语言,是第一个要练的基本功。客户不会告诉你"检索层的召回率不够",他只会说"这系统不行"。你得会追问、会定位。
四个断裂层
后面第三章,我会逐层拆解每一层到底出了什么问题。第四章讲那些只有做过项目才知道的坑。第五章给解法,按投入产出比排序,告诉你先改什么最划算。
先建立这张地图,后面才不会迷路。
03 深挖:逐层击破
检索层:你的知识库在"答非所问"
检索层的问题是最常见、也是最容易被忽视的。很多人觉得"我检索出来的文档和问题很相关啊",但相关≠精确。检索层的问题,本质上可以拆成三个子问题:分块策略、嵌入模型、检索方式。
分块(Chunking)——最被低估、也最容易翻车的环节
我们团队早期做文档切分,用的是最朴素的策略:按512 token切分,overlap 50 token。简单粗暴,Demo阶段也看不出问题。
上线后,问题全暴露了。
回到开头那个制造业客户。他们的产品手册里有一段调试流程,原文是这样的:
“在海拔超过2000米的环境下使用本设备时,需将参数X调整为1.5,参数Y调整为0.8,并关闭辅助散热模块。”
按512 token切分后,“海拔超过2000米"和"参数X调整为1.5"被分到了两个不同的chunk。用户问"高海拔怎么调”,检索引擎匹配到了含"海拔"的chunk,但参数值在另一个chunk里——模型拿到的上下文只有半截话,它能怎么办?只能猜。
这就是分块策略中最典型的 语义断裂 问题:关键概念被切断到不同分块中,每个分块的向量表示都因上下文缺失而变得模糊。
但分块的问题远不止"切错了位置"这么简单。它背后有一个更本质的 结构性矛盾 :
| 任务类型 | 最优Chunk大小 | 核心需求 | 冲突表现 |
|---|---|---|---|
| 语义匹配(召回) | 100-256 tokens | 语义焦点明确,减少无关信息干扰 | 小切片导致信息支离破碎 |
| 上下文理解(利用) | 1024+ tokens | 逻辑完整性,背景信息充足 | 大切片引入噪声,丢失细节区分度 |
也就是说, 小chunk有利于检索匹配,但不利于模型理解;大chunk有利于模型理解,但不利于检索精度。 用单一粒度的chunk同时承担这两项任务,本质上就是一种妥协。
我们后来踩过一个更极端的坑:某客户要求全部采用"语义分块",结果向量数量增加了4.2倍,月度成本从6000元涨到25000元,平均chunk大小降到了38个token——检索准确率反而下降了12%。原因很简单:chunk太小,每个chunk携带的语义信号太弱,embedding根本表达不出有意义的信息。
我们现在的做法: 语义切分(按段落/标题/表格边界切)+ 滑动窗口重叠(20-50%重叠保留上下文边界)+ 父子文档检索(检索时返回子chunk做匹配,但同时附带父级完整文档作为上下文)。对于表格数据,单独建立处理管线,保留行列结构,将表格转化为结构化描述或Markdown格式,必要时为表格生成自然语言摘要,摘要和结构化数据同时索引。
光是调整chunk策略,那批高海拔相关问题的准确率就从30%提到了70%。
嵌入模型(Embedding)——通用模型在垂直领域经常翻车
我们试过好几个通用embedding模型,在通用场景表现还行,但在垂直领域经常出问题。
那个制造业客户内部文档里把某设备简称为"K3机",但用户提问时写的是全称"KX-3000型智能控制器"。通用embedding把两者算成了低相似度,检索直接漏掉了。
但这还不是最严重的问题。嵌入模型有一个更底层的缺陷: 有损压缩 。
嵌入模型将一整段文本压缩为固定维度的向量(比如768维),这是一种有损压缩。当把一个长而细致的段落压缩为768个浮点数时,语法信息、否定关系、特定实体关系都会丢失。有研究发现,同义句(如"已取消订单"vs"订单未被确认")在256维嵌入下的余弦相似度从0.82骤降到0.41,而逻辑对立的表达(“禁止吸烟"vs"不反对吸烟”)相似度却异常升到0.76。
这意味着: embedding模型在处理否定、对比、条件限定等逻辑关系时,天然就是弱的。 而企业文档中恰恰充满了这类表述——“在海拔超过2000米时”“除XX型号外”“当且仅当”。
还有一个容易被忽视的问题: 向量漂移(Vector Drift) 。当embedding模型升级后(比如从text-embedding-ada-002升级到text-embedding-3-large),新旧向量不在同一个语义空间,混在一起检索,结果近乎随机。我们在一个项目上踩过这个坑——客户升级了模型但没重建索引,排查了两天才发现问题。
检索方式——纯向量检索的盲区
向量检索擅长语义匹配,但不擅长精确匹配。当用户问的是产品型号、参数值、日期等精确信息时,向量检索经常失准。
举个例子:用户搜索"error code ERR-4012",纯向量检索可能返回一篇"通用错误处理指南",因为语义上"错误处理"和"error code"确实相关——但用户要的是ERR-4012这个特定错误码的解决方案。
还有一个更隐蔽的问题: 向量相似度只能找到数学上相似的文本,无法提供判断准确性所需的元数据。 比如法律团队问"Johnson Industries合同的责任限额是多少?“,向量搜索找到了"责任每年不超过500万美元”(相似度0.94),但系统无法知道这是2019年的合同还是2023年的修正案,是母公司的条款还是子公司的条款,是否有后续条款修改了这个限额。
我们现在的标准配置是混合检索(向量+BM25关键词)+ Reranker精排。 向量负责语义匹配,BM25负责关键词精确匹配,Reranker从Top20里精排选出Top3。这套组合在我们最近几个项目里,检索准确率稳定在90%以上。
这里展开讲一下Reranker为什么这么重要。向量检索用的是Bi-Encoder架构——查询和文档分别编码为向量,然后计算余弦相似度。这种方式快,但查询和文档之间没有真正的"交互"。Cross-Encoder Reranker则不同,它把查询和文档拼接在一起输入模型,让模型真正"阅读"这对文本,给出一个相关性分数。精度高得多,但速度慢得多——所以不能用来直接检索百万级文档,只能用来对Top20-50的候选结果做精排。
两阶段架构(快速召回+精排)是目前生产级RAG的标配。
理解层:模型"看到了但没看懂"
检索层解决了"给模型什么"的问题,理解层解决的是"模型能不能用好给它的东西"。
上下文窗口污染——"大海捞针"问题
我们做过一个对比实验,结果让我很意外:
| 方案 | 配置 | 模型回答准确率 |
|---|---|---|
| A | 返回Top10 chunks | 67% |
| B | 返回Top3 chunks(加reranker精排) | 84% |
| C | 返回Top1 chunks(最精确的那条) | 78% |
不是给模型越多信息越好,而是越精准越好。Top10里有大量噪声,模型的注意力被稀释了,真正关键的那1-2条反而被淹没。Top3加精排的效果反而最好——信息够用,噪声可控。
这就是业界常说的"大海捞针"(Needle in a Haystack)问题:当上下文窗口里塞满了不相关信息时,模型可能无法精准定位到其中真正有用的关键信息。更糟糕的是,检索到的信息总量如果超过模型的上下文窗口长度,关键信息会被直接截断,完全丢失。
Prompt设计的隐性差异
很多客户以为prompt很简单,"不就是写几句话吗?"但我们实测下来,同一组上下文,不同prompt的效果差异巨大:
| Prompt写法 | 准确率 |
|---|---|
| “请回答以下问题” | 约40% |
| “请基于以下上下文回答” | 约55% |
| “请仅基于以下上下文回答。如果上下文中没有相关信息,请回复’根据现有资料无法回答’” | 约75% |
| 上面那句 + “请在回答中标注引用来源(文档编号)” | 约85% |
从40%到85%,改的不是模型,是prompt。这也是为什么我们现在每个项目都会花专门的时间做prompt工程——它是ROI最高的优化手段,成本几乎为零。
但prompt工程能解决的问题是有限的。它本质上是在做"约束"——约束模型的行为边界。当约束不够时,模型会回归它的"固有倾向"。
模型的固有倾向——参数知识压制检索证据
这个坑我们踩过一次,印象深刻。某客户的保修政策在2024年从1年更新为2年,文档已经更新入库了,但模型回答时仍然说"保修期为1年"。
排查后发现:模型训练数据里的知识是旧的,它更"相信"自己的参数知识,而不是检索到的上下文。这种现象在学术上叫做 “知识脱节”(Knowledge Disconnect) ——模型基于预训练知识生成文本的倾向性极强,可能压制检索到的外部证据。
解法不复杂——在prompt里明确加一条指令:"当上下文中的信息与你的已有知识不一致时,以上下文为准。"但你得先意识到这个问题存在,才能去解它。
还有一个更棘手的情况: 多跳推理失败。 当回答一个问题需要组合多条检索信息时(比如"2025年Q3由于政策变更导致的合规性变动有哪些"),模型需要跨文档、跨段落建立关联,但传统RAG架构将检索片段视为独立的"事实孤岛",模型缺乏对跨文档逻辑链条的理解能力。这也是GraphRAG(图检索增强生成)技术兴起的核心原因——后面第五章会展开讲。
生成层:理解了,但"自由发挥"
这是最隐蔽的一层。检索没问题,理解也没问题,但模型输出的时候"加了点料"。
编造细节——最危险的情况
模型基于上下文给出了一个大致正确的回答,但在细节处"合理地"编造了一些上下文中不存在的信息——产品编号、参数值、引用条款。因为编得"很合理",客户和测试者都不容易发现。
有一次我们的系统回答了一个售后流程问题,整体流程是对的,但里面引用了一个条款编号"第3.2.1条"——客户翻遍了文档,找不到这个条款。后来查日志发现,上下文里确实没有这个条款编号,是模型自己"补"上去的,而且补得格式完全正确。
学术研究显示, 即使在检索结果准确的情况下,模型的faithfulness分数(忠实度)可能从0.91跌到0.67,意味着每三个回答中就有一个在提出检索上下文不支持的主张。 这种情况比"答非所问"危险得多,因为用户可能直接拿这个错误答案去执行。
答案粒度失控
客户要精确数据,模型给了概括性描述。客户要步骤列表,模型给了段落叙述。这不算"错",但客户感知就是"不准确"。
多轮对话的上下文漂移
客服场景特别明显。第一轮检索准确,但随着对话深入,用户的指代(“那款设备”“刚才说的那个参数”)让检索越来越偏。我们实测过,第三轮之后,准确率通常会下降20-30个百分点。
运维层:之前对的,现在不准了
这一层是最容易被忽视的,但对生产系统的长期可靠性影响最大。
数据腐烂(Data Rot)
斯坦福HAI研究院的实验揭示了一个残酷的事实: 当知识库中15%的文档过期时,RAG回答错误率会飙升至67%。 而在受监管行业(如医疗、金融),数据腐烂可能导致严重的合规风险。
我们有一个客户,知识库上线时准确率85%,半年后掉到了60%出头。排查发现:期间有30多份文档更新了,但知识库没有同步更新。更麻烦的是,新旧版本同时存在于知识库中,模型随机引用,答案自相矛盾。
向量漂移
前面提到过,embedding模型升级后,新旧向量不在同一个语义空间。如果只更新了部分文档的向量而没有全量重建索引,检索结果会变得混乱。
评估缺失
很多团队不知道如何科学地、自动化地评估一个RAG系统的好坏。当用户反馈"答案不对"时,很难定位问题究竟出在检索环节还是生成环节。没有评估体系,所有优化都是盲人摸象——你不知道自己改完之后到底变好了还是变差了。
04 坑点:只有做过项目才知道的坑
前面三章讲的是技术层面的问题。但做过项目的人都知道,真正让项目翻车的,往往不是技术问题。
数据层的坑——“80%的问题根源在数据”
| 坑 | 我们踩过的场景 | 正确做法 |
|---|---|---|
| PDF解析丢表格 | 客户的技术规范里大量参数以表格形式存在,通用PDF解析工具直接把表格内容变成乱码,关键参数全丢了 | 用专门的解析工具(如Unstructured、Docling),表格单独处理 |
| OCR引入错别字 | 客户有一批扫描件,OCR把"压力阀"识别成了"压力阀"(字形相近),检索时关键词匹配直接失败 | OCR后做自动纠错+人工抽检,关键术语做白名单校验 |
| 过期文档没清理 | 知识库里同时存在2022版和2024版产品手册,模型随机引用,答案自相矛盾 | 文档入库时加版本标签和生效时间,检索时按时间排序 |
| 重复文档 | 同一份技术规范存了三个版本(Word、PDF、扫描版),检索结果被重复内容占据 | 入库前做去重(指纹哈希+语义去重) |
| 文档权限没隔离 | 有些文档只对特定角色可见,但检索时没做权限过滤 | 检索层加权限过滤,按用户角色控制可见范围 |
| 视觉信息丢失 | 客户文档中60%以上包含图表、流程图、产品图片,纯文本RAG系统"看不见"这些内容 | 引入多模态RAG(如ColPali),直接以视觉方式处理文档页面 |
我现在跟客户谈项目,第一句话一定是:"我们先看数据。"数据质量不过关,后面所有优化都是空中楼阁。
评估层的坑——“没有度量就没有改进”
最常见的坑是"肉眼测了几个case觉得还行"。我们早期也这样,挑了十几个问题测一下,效果不错就交付了。上线后翻车。
现在我们每个项目必须构建系统化评测集:至少200个问题,每个问题标注期望引用的文档和期望答案的关键要素。没有评测集,所有优化都是盲人摸象。
这里分享一个我们现在的评估框架—— RAG Triad(三元组评估) ,这是目前业界比较成熟的评估方法:
| 维度 | 评估内容 | 核心指标 |
|---|---|---|
| Context Relevance(上下文相关性) | 检索到的上下文与查询的相关程度 | Precision@k, Recall@k, nDCG |
| Faithfulness(忠实度) | 生成内容对检索证据的忠实程度 | 幻觉率、事实一致性 |
| Answer Relevance(答案相关性) | 答案对用户原始意图的回应程度 | 用户满意度、任务完成率 |
三个维度缺一不可。只看检索指标,你不知道模型有没有用好检索结果;只看生成指标,你不知道是检索的问题还是生成的问题。 三个维度一起看,才能精准定位问题在哪一层。
项目管理的坑——乙方视角特有的问题
这些坑和技术无关,但对项目成败的影响比技术大得多。
Demo≠生产。 客户看完Demo觉得"已经很好了",不愿意再投入做优化。我现在Demo前就跟客户明确:Demo是验证方向,不是交付标准。准确率基线要在真实数据+真实问题上建立,不是在精心挑选的case上建立。
"准确"的定义不一致。 技术团队觉得"答案包含关键信息就算对",业务方觉得"要跟标准答案一字不差才算对"。我们在一个项目上因为这个问题吵了两周。后来的解法是:项目启动时就定义清楚"准确"的评判标准,双方共同标注一批case作为校准基准。
客户期望管理。 很多客户觉得"上了RAG就万事大吉",系统上线后知识库没人更新,准确率逐月下降。我们现在的交付物里一定包含"运营手册"和"监控看板",明确客户侧的日常维护职责。不然后面出问题,客户还是会找你。
05 解法:从能用到好用
按投入产出比排序,不是按技术难度排序。你最想知道的一定是"先做什么最划算"。
速赢方案
| 方案 | 预期提升 | 实施难度 | 说明 |
|---|---|---|---|
| Prompt工程 | 准确率提升10-20% | ★ | 加拒绝机制、引用溯源、答案格式约束、上下文优先于参数知识的指令 |
| TopK调优 | 准确率提升5-15% | ★ | 从Top10降到Top3-5,减少噪声 |
| 相似度阈值过滤 | 减少幻觉15-25% | ★ | 设置最低相似度阈值,低于阈值的结果直接丢弃,避免用无关内容强行生成 |
这三项加起来,基本能解决你当前30-40%的准确率问题。成本几乎为零,今天改今天生效。
中期方案
| 方案 | 预期提升 | 实施难度 | 说明 |
|---|---|---|---|
| 混合检索(Hybrid Search) | 准确率提升15-25% | ★★ | 向量检索+BM25关键词检索并行,用RRF(Reciprocal Rank Fusion)融合结果 |
| Cross-Encoder Reranker | 准确率提升10-20% | ★★ | 对Top20-50候选结果精排取Top3-5,推荐Cohere Rerank 3.5或开源的ms-marco-MiniLM |
| 构建评测集(RAG Triad) | 不直接提升,但让所有优化有据可依 | ★★ | 200+问题,标注期望答案,建立Context Relevance+Faithfulness+Answer Relevance三维评估 |
| 数据清洗+元数据治理 | 准确率提升10-15% | ★★ | 去重、纠错、过期文档标记、版本控制、为文档添加时间戳/来源/权限等元数据 |
这四项是我们现在每个项目的标配。做完之后,大部分场景的准确率能到80-85%。
这里重点讲一下混合检索为什么比纯向量检索好这么多。
纯向量检索的问题在于:它只看语义相似度,不看关键词精确匹配。当用户搜索"error code ERR-4012"时,向量检索可能返回一篇"通用错误处理指南"——语义上相关,但不是用户要的。BM25关键词检索则能精确匹配到"ERR-4012"这个字符串。
但BM25也有盲区:用户说"发烫",文档里写的是"温度异常",BM25匹配不到。
混合检索把两者的优势结合起来了:向量负责语义匹配,BM25负责精确匹配,然后用RRF或学习权重把两路结果融合。 2026年所有主流向量数据库(Milvus、Pinecone、Qdrant、Weaviate)都原生支持混合检索,接入成本很低。
深度方案(长期投入,适合核心业务场景)
| 方案 | 预期提升 | 实施难度 | 说明 |
|---|---|---|---|
| 领域Embedding微调 | 准确率提升15-30% | ★★★ | 用业务数据微调embedding模型,解决行业术语理解问题 |
| 父子文档检索(Parent-Child) | 准确率提升10-20% | ★★★ | 检索子chunk做匹配,附带父级完整文档作为上下文 |
| Query改写(HyDE) | 准确率提升10-15% | ★★★ | 用LLM先生成假设答案,再用假设答案做检索查询,在RAGTurk基准上达到85%准确率(基线78.7%) |
| GraphRAG(知识图谱增强) | 复杂问题准确率提升20-40% | ★★★★ | 将实体关系构建为知识图谱,支持多跳推理和跨文档关联 |
| Agentic RAG(智能体RAG) | 复杂问题准确率提升20-40% | ★★★★ | 多步检索+自验证+迭代查询,Agent自主决定何时检索、检索什么、检索几次 |
| 多模态RAG(ColPali/VisRAG) | 视觉类文档准确率提升30-50% | ★★★★ | 跳过OCR,直接将文档页面作为图像进行嵌入和检索 |
这些方案投入大,但对垂直场景效果显著。建议先用速赢和中期方案把准确率拉到80%以上,再看剩余的薄弱环节在哪里,针对性引入深度方案。
这里重点展开讲两个2026年最有突破性的方向:
GraphRAG 的核心思想是:不再把文档视为孤立的文本块,而是从中抽取实体和关系,构建知识图谱。当用户提问时,系统不仅做向量检索,还在知识图谱上做图遍历,找到跨文档的关联信息。这对需要多跳推理的问题(比如"找出所有与该项目相关的合同及其修订版")效果显著。研究显示,GraphRAG在医疗、法律和金融等对逻辑链条要求极高的行业,可将准确率平均提升54.2%。
Agentic RAG 的核心思想是:从被动检索转向主动决策。传统RAG是"查一次、生成一次"的固定管线,Agentic RAG则让AI Agent自主决定何时需要检索、检索什么、检索几次、是否需要补充搜索。如果首次检索结果不理想,Agent会自动重新表述查询、切换检索工具、甚至触发多轮检索。Self-RAG模型通过特殊的"反思Token"(如 IsREL 相关度、 IsSUP 支持度、 IsUSE 实用度)让模型自我评估,如果发现证据不足,会拒绝回答而非强行编造——这直接将幻觉率从14%降到了5.8%。
我们现在的项目标准流程
第一步:数据体检
→ 文档数量、格式分布、质量抽检、权限梳理、元数据梳理
→ 输出:数据质量报告
第二步:构建评测集(RAG Triad)
→ 与客户业务团队共同定义200+问题
→ 标注期望引用文档和期望答案关键要素
→ 建立Context Relevance + Faithfulness + Answer Relevance三维评估
→ 输出:评测基线(当前准确率)
第三步:速赢优化
→ Prompt工程 + TopK调优 + 相似度阈值过滤
→ 用评测集验证效果
第四步:检索优化
→ 混合检索 + Reranker + Chunk策略调整 + 元数据治理
→ 用评测集验证效果
第五步:按需引入深度方案
→ 根据评测结果定位剩余薄弱环节
→ 针对性选择(微调/GraphRAG/Agentic/多模态)
第六步:交付与运营移交
→ 运营手册 + 监控看板 + 知识库更新流程
→ 明确客户侧的日常维护职责
→ 建立持续评估机制,定期回归测试
前三步做完,大部分项目准确率能从60%左右拉到85%以上。这是我们十几个项目验证过的路径。
06 总结:你无法优化你无法衡量的东西
回头看一下,这篇文章其实就讲了四件事:
第一,RAG不准确是链条上的累积误差。 检索、理解、生成、运维,每一层偏一点,最终结果就差很远。不要只盯着一个环节优化。2026年的数据很残酷——28%的文档已过时,22%的政策相互矛盾,19%的知识散落各处。模型再强,喂给它的数据是烂的,结果就是烂的。
第二,先建评估体系,再做优化。 RAG Triad(上下文相关性、忠实度、答案相关性)三维评估是目前最成熟的框架。没有评测集,你不知道自己到底在优化什么,也不知道优化完之后到底变好了没有。这是我们交了最贵学费学到的一件事。
第三,80%的准确率问题不需要换模型。 混合检索+Reranker+Prompt工程+数据治理,这四件事做好,大部分场景就够用了。别被"换个更强的模型就能解决"这种话忽悠了。从GPT-4o换到Claude 4,对准确率的提升可能只有5%;但把Top10降到Top3加Reranker,提升可能是15-20%。
第四,RAG正在从"检索+生成"的简单管线,演进为"图谱+智能体+多模态"的复合架构。 GraphRAG解决跨文档推理问题,Agentic RAG解决自适应检索和自我纠错问题,ColPali/VisRAG解决视觉信息丢失问题。2026年,这三个方向正在从实验室走向生产。但对大部分企业来说,先把基础的混合检索和数据治理做好,比追新技术重要得多。
做了十几个RAG项目,我最大的体会是:
客户以为最难的是选模型,实际上最难的是洗数据。你以为最难的是洗数据,实际上最难的是跟客户对齐"什么算准确"。而你真正应该最先做、也最容易被忽视的事,是建评估体系——你无法优化你无法衡量的东西。
你们的RAG项目遇到过哪些"不准确"的坑?最后是怎么解决的?或者,你正在被准确率问题困扰,卡在哪一步了?评论区聊聊,说不定能互相帮到。

张坤专注企业 AI Agent 落地的项目经理
我是张坤,专注企业 AI Agent 落地的项目经理。 这里沉淀 RAG、知识库、数据治理、Agent 项目从立项、落地交付到成本算账的一手实践,也坦诚记录项目失败与踩坑复盘。 少聊大模型纸面能力,聚焦 AI 在真实企业场景里如何落地、存活,真正产生业务价值。