RAG 效果差,先别急着换模型:按这五层排查更有效
AIAI Summary (BLUF)
RAG效果不好,问题可能出在索引、检索或生成任何一个环节。这篇文章按「诊断→解决」的思路,帮你定位具体问题并给出对应的优化方案,还教你如何建立评估基线来量化改进效果。
核心洞察
这篇文章最有意思的点是它把 RAG 优化拆成了一条清晰的诊断链路:先建基线,再按“检索不到、召回不相关、切片不完整、重排不佳、模型理解有误”逐层排查。很多人调 RAG 效果不好时第一反应是换模型,但大部分问题其实出在索引和检索阶段,换模型解决不了。另外,文中的元数据抽取为文档定义元数据,系统在向量检索前先进行结构化搜索,精准定位目标文档,再进行向量检索。方案有具体的效果对比数据,这个在实际调优中参考价值比较大。
RAG(检索增强生成)的效果由三个阶段决定:
- 建立索引:文档的解析、切片与向量化
- 检索召回:根据查询从索引中匹配并召回相关切片
- 生成回答:大模型根据召回内容和查询生成最终回答
每个阶段都可能引入效果问题。本文按诊断 → 解决的模式,帮你定位问题并给出对应的优化方案。
核心结论
RAG 效果优化应遵循“建立基线 → 逐层诊断 → 迭代验证”的链路,按“检索不到、召回不相关、切片不完整、重排不佳、模型理解有误”五个层级依次排查,大部分问题出在索引和检索阶段,换模型解决不了。
优化前需构造至少 100 条测试用例的评测集,覆盖事实型、比较型、教程型、分析型四类问题,并完整运行一次基线测试作为后续所有优化的对照基准。
元数据抽取可显著提升检索精度:未启用时无关文档切片(相似度 40-41%)可能排在目标切片(37%)之前;启用后目标切片相似度提升至 65% 并跃居第一。
切片策略直接影响召回质量:切片过短会丢失上下文导致无法匹配,切片过长会混合多主题引入无关信息,语义截断会导致召回内容不完整;建议使用智能切分基于语义相关性自适应选择切片点的文档切分策略,先利用内置分句标识符划分段落,再根据段落间语义相关性决定切片边界。并人工抽检修正。
效果优化是迭代过程,通常需要 2-3 轮调整,建议先从索引和检索侧入手,再优化生成侧,每次变更后用同一评测集重跑并对比基线报告。
第一步:建立评估基线
优化前需要一套可量化的评估标准,否则你没法判断改进是否有效。
构造评测集
准备至少 100 条测试用例,每条包含一个问题和对应的预期结果。建议覆盖以下类型:
| 类型 | 示例 |
|---|---|
| 事实型 | “产品 X 的保修期是多久?” |
| 比较型 | “对比产品 X 和产品 Y 的主要差异” |
| 教程型 | “如何安装产品 X?” |
| 分析型 | “为什么近 3 个月产品 X 的销量在上升?” |
运行基线测试
使用问答服务的调试窗口或 chat API 完整运行一次评测集,记录每条用例的召回内容和回答结果。这份报告是后续所有优化的对照基准。
第二步:诊断与改进
逐条分析基线报告中效果不佳的用例,按以下分类定位问题并应用对应方案。
2.1 检索无效:没有找到相关知识
知识库中确实存在相关内容,但检索未能命中。
补充知识库内容
如果知识库中缺少相关知识,大模型无法回答问题。检查知识库是否覆盖了评测用例涉及的主题,缺失的内容需要及时补充。
优化源文档内容与排版
文档格式问题可能导致关键内容在解析时丢失。建议:
- 确保标题层次分明,内容结构清晰
- 移除页面水印
- 避免使用包含合并或跨页单元格的复杂表格
- 优先使用 Markdown 格式;PDF/DOCX 等格式建议先转换为 Markdown 再导入
与查询语言保持一致
如果查询更多使用英语等外语,建议源文档内容也使用相应语言。对于专业术语,可进行多语言处理(如中英双语标注)。
消除实体歧义
对相同实体的表述进行统一。例如将文档中的 “ML”、“Machine Learning”、“机器学习” 统一规范为 “机器学习”。
可以将文档输入大模型,让模型帮助统一术语。文档较长时,先拆分为多个部分再逐一处理。
启用 Query 改写
在多轮对话中,用户的输入可能不完整或存在上下文省略。启用 Query 改写后,系统根据会话历史自动将查询补全为更完整的形式,提升检索匹配度。
示例:用户输入 手机X1,系统改写为 请提供产品库中所有在售版本的手机X1及其参数信息。
在知识检索或知识问答的知识库独立配置中启用 Query 改写 开关。
2.2 检索无效:召回知识不相关
知识库有相关内容,但召回的是不相关的切片。
使用标签过滤
典型问题:知识库包含多个类别的文档,希望检索 A 类文档时,召回结果中混入了 B 类内容。
解决方案:为文档添加标签,检索时通过标签筛选缩小范围。
设置方式:
- 导入时设置:在导入数据的第三步中添加标签
- 导入后编辑:在文档列表的“更多”菜单中点击“标签”
使用方式:
启用元数据抽取
典型问题:知识库中有多篇结构相似的文档(如都包含“功能概述”章节),检索时召回了错误文档的内容。
解决方案:为文档定义元数据,系统在向量检索前先进行结构化搜索,精准定位目标文档。
工作原理:
- 从查询中提取元数据(如
{"key": "name", "value": "手机X1"}) - 根据元数据筛选包含该信息的切片
- 在筛选结果上进行向量检索
效果对比:未启用元数据时,无关文档的切片(相似度 40-41%)可能排在目标切片(37%)之前。启用后,目标切片相似度提升至 65% 并跃居第一。
在文档列表中点击“Meta信息”查看和配置元数据。元数据的常见应用还包括嵌入日期信息以过滤最近的内容。
2.3 切片不完整
切片方式不当会导致以下问题:
| 问题 | 表现 | 影响 |
|---|---|---|
| 切片过短 | 单个切片仅包含一句话,缺失上下文 | 检索时无法匹配到相关内容 |
| 切片过长 | 单个切片混合了多个主题 | 召回时返回大量无关信息 |
| 语义截断 | 切片在句子中间被强制截断 | 召回的内容不完整 |
选择智能切分策略
智能切分基于语义相关性自适应地选择切片点,而非固定长度切分:
- 系统先利用内置分句标识符将文档划分为段落
- 再根据段落间的语义相关性决定切片边界
人工检查和修正切片
自动切片仍可能出现意外截断或解析错误(如空格被解析为 %20)。建议导入完成后人工抽检切片质量。
在知识库详情页的切片详情 Tab 中查看切片列表,发现问题后直接编辑修正。修正后的内容立即生效用于检索。
修正仅影响索引中的切片,不会修改源文档。重新导入文档时需要再次检查。
手动新增或删除切片
当自动切分无法覆盖的边界情况出现时,可直接在切片层做更细粒度的调整:
- 新增切片:补充被遗漏的关键信息或额外上下文。需选择所属文档,最多 6000 字符
- 删除切片:移除包含错误信息或重复内容的切片,不影响同文档其他切片
操作方式见文档管理的切片管理部分。
2.4 重排不佳
切片已被召回,但排序不合理导致最终结果不理想。
调整相似度阈值用于过滤排序后分数低于阈值的切片,阈值过高可能丢弃相关切片,过低可能引入噪音,建议从0.2开始调整。
相似度阈值用于过滤排序后分数低于阈值的切片。
- 阈值过高:可能丢弃所有相关切片,大模型无法获取足够信息
- 阈值过低:可能召回大量低相关度切片,引入噪音
没有通用的最佳阈值,需要通过调试窗口反复测试,观察不同阈值下的召回结果。建议从 0.2 开始调整。
配置位置:知识检索或知识问答的知识库独立配置中的相似度阈值(0.01~1.0)。
增加最大召回数量决定最终返回的切片数,复杂问题建议增大(如K=20),但过大可能超出大模型输入长度限制。
最大召回数量决定最终返回的切片数。对于需要总结、列举或比较的复杂问题,提供更多高质量切片(如 K=20)通常比仅提供 5 个效果更好。
但召回数量也非越大越好,过多的切片拼装后可能超出大模型的输入长度限制,导致内容被截断。
配置位置:知识库独立配置中的最大召回数量(1~20)。
选择排序模型和模式
排序模型对初步召回的切片进行重排序,决定最终送给大模型的切片顺序。可选模式:
| 模式 | 适用场景 |
|---|---|
| 问答模式(默认) | 用户输入完整问题,期望从切片中找到答案 |
| 相似模式 | 查询与切片表述风格相近,如查找历史记录、政策条款 |
| 自定义高级模式 | 需要特殊排序规则,如“优先返回最近一年的内容” |
- 知识库独立配置:在检索服务或问答服务中,展开知识库配置面板选择排序模型和模式
- 全局混排模型:在知识检索的全局检索配置中配置,对所有绑定知识库统一排序
2.5 模型理解有误
正确的切片已被召回,但大模型生成的回答不准确。
更换生成模型
典型问题:回答看起来是生硬拼凑的,模型未能理解知识与问题之间的关系。
不同模型在指令遵循、知识理解、长文本处理等方面存在能力差异:
| 场景 | 建议模型 |
|---|---|
| 简单信息查询和总结 | 参数较小的模型(如 qwen3-flash) |
| 复杂逻辑推理 | 参数更大的模型(如 qwen3-max) |
| 需要查阅大量切片 | 上下文长度更大的模型 |
在问答服务的配置页中切换模型即可。
优化提示词
典型问题:返回结果没有按照要求,或不够全面。
三种常见优化方法:
方法一:限定输出内容
如果所提供的信息不足以回答问题,请明确告知
“根据现有信息,我无法回答这个问题”。切勿编造答案。
方法二:添加少样本示例
在提示词中给出期望的输入-输出示例,引导模型按照指定格式和风格回答。
# 要求
请从下方文本中提取技术规格,并按示例的字段格式输出 JSON。
# 示例
## 输入:星尘S9Pro, 6.9英寸, 512GB存储, 16GB RAM, 6000mAh电池
## 输出:{"product":"星尘S9 Pro","screen_size":"6.9inch","ram_size":"16GB","battery":"6000mAh"}
方法三:分隔知识内容
将提示词中的指令和知识库内容用分隔标记明确分开,便于大模型理解结构。
启用拒答策略当检索结果不足以回答问题时,模型拒绝回答并返回自定义话术,而非编造答案。
典型问题:回答中包含了模型自身的通用知识,未严格基于知识库。
在问答服务配置中开启拒答功能。开启后,当检索结果不足以回答问题时,模型拒绝回答并返回自定义话术,而非编造答案。
配置位置:知识问答的生成控制参数中的拒答开关。
调整模型参数
典型问题:相同问题每次回答不同,或期望不同但回答雷同。
通过模型配置按钮调整 temperature模型参数,值越高生成内容越多样(适合创意写作),值越低生成内容越确定(适合事实查询、技术文档)。 参数:
- 值越高:生成的内容越多样,适合创意写作、头脑风暴
- 值越低:生成的内容越确定,适合事实查询、技术文档
在问答服务配置页,点击模型右侧的 设置 图标调整。
2.6 多知识库场景优化
绑定多个知识库时,以下策略可提升联合检索效果:
| 策略 | 说明 |
|---|---|
| 设置知识库权重/优先级 | 为核心知识库设置更高的权重或排序,使其结果在最终排序中占主导 |
| 启用知识库路由多知识库场景下,系统根据查询意图自动判断需要检索哪些库,减少无关库的干扰。 | 系统根据查询意图自动判断需要检索哪些库,减少无关库的干扰。在知识检索的全局检索配置中配置 |
| 选择混排模型模式 | 问答模式适合 QA 场景;相似模式适合查找语义相近的段落;自定义高级模式适合特殊排序需求 |
第三步:持续迭代
每次完成配置变更后:
- 重新评测:用同一评测集重跑,量化改进效果
- 对比分析:与基线报告对比,确认变更解决了哪些问题、是否引入了新问题
- 补充用例:将线上发现的新 bad case 加入评测集,持续扩大覆盖范围
重要:效果优化是迭代过程,通常需要 2-3 轮调整。建议先从索引和检索侧入手,再优化生成侧。
常见问题(FAQ)
RAG效果不好,应该先换模型还是先建评估基线?
应先建评估基线。准备至少100条测试用例,覆盖事实、比较、教程、分析等类型,运行基线测试记录召回和回答结果。这份报告是后续优化的对照基准,没有它无法判断改进是否有效。
知识库有相关内容但检索不到,有哪些优化方法?
可补充知识库内容、优化源文档排版、统一查询与文档语言、消除实体歧义、启用Query改写在检索前用LLM对用户问题进行扩展、修正和补全,使改写后的查询更贴近知识库文档的用词习惯。。例如将文档中的“ML”和“机器学习”统一为“机器学习”,或让系统根据会话历史补全查询。
召回的知识不相关,如何精准定位目标文档?
可使用标签过滤或启用元数据抽取。元数据抽取会先从查询中提取元数据(如产品名),筛选包含该信息的切片,再进行向量检索。效果对比显示,目标切片相似度可从37%提升至65%并跃居第一。
版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。



