Skip to main content
Cookbook

RAG 效果优化

按 RAG 各阶段诊断问题并针对性改进,系统性提升检索与回答质量

RAG(Retrieval Augmented Generation)的效果由三个阶段决定:
  1. 建立索引:文档的解析、切片与向量化
  2. 检索召回:根据查询从索引中匹配并召回相关切片
  3. 生成回答:大模型根据召回内容和查询生成最终回答
每个阶段都可能引入效果问题。本文按诊断 → 解决的模式,帮助定位问题并给出对应优化方案。

第一步:建立评估基线

优化前需要一套可量化的评估标准,否则无法判断改进是否有效。

构造评测集

准备至少 100 条测试用例,每条包含一个问题和对应的预期结果。建议覆盖以下类型:
类型示例
事实型"产品 X 的保修期是多久?"
比较型"对比产品 X 和产品 Y 的主要差异"
教程型"如何安装产品 X?"
分析型"为什么近 3 个月产品 X 的销量在上升?"

运行基线测试

使用问答服务的调试窗口或 chat API 完整运行一次评测集,记录每条用例的召回内容和回答结果。这份报告是后续所有优化的对照基准。

第二步:诊断与改进

逐条分析基线报告中效果不佳的用例,按以下分类定位问题并应用对应方案。

2.1 检索无效:没有找到相关知识

知识库中确实存在相关内容,但检索未能命中。
如果知识库中缺少相关知识,大模型无法回答问题。检查知识库是否覆盖了评测用例涉及的主题,缺失的内容需要及时补充。
文档格式问题可能导致关键内容在解析时丢失。建议:
  • 确保标题层次分明,内容结构清晰
  • 移除页面水印
  • 避免使用包含合并或跨页单元格的复杂表格
  • 优先使用 Markdown 格式;PDF/DOCX 等格式建议先转换为 Markdown 再导入
如果查询更多使用英语等外语,建议源文档内容也使用相应语言。对于专业术语,可进行多语言处理(如中英双语标注)。
对相同实体的表述进行统一。例如将文档中的 "ML"、"Machine Learning"、"机器学习" 统一规范为 "机器学习"。
可以将文档输入大模型,让模型帮助统一术语。文档较长时,先拆分为多个部分再逐一处理。
在多轮对话中,用户的输入可能不完整或存在上下文省略。启用 Query 改写后,系统根据会话历史自动将查询补全为更完整的形式,提升检索匹配度。示例:用户输入 手机X1,系统改写为 请提供产品库中所有在售版本的手机X1及其参数信息知识检索知识问答的知识库独立配置中启用 Query 改写 开关。

2.2 检索无效:召回知识不相关

知识库有相关内容,但召回的是不相关的切片。
典型问题:知识库包含多个类别的文档,希望检索 A 类文档时,召回结果中混入了 B 类内容。解决方案:为文档添加标签,检索时通过标签筛选缩小范围。设置方式:
  • 导入时设置:在上传数据的第三步中添加标签
  • 导入后编辑:在文档列表的"更多"菜单中点击"标签"
使用方式:
  • 知识检索知识问答的知识库独立配置中设置标签过滤
  • 通过 API 调用时在请求参数中指定 tags
典型问题:知识库中有多篇结构相似的文档(如都包含"功能概述"章节),检索时召回了错误文档的内容。解决方案:为文档定义元数据,系统在向量检索前先进行结构化搜索,精准定位目标文档。工作原理
  1. 从查询中提取元数据(如 {"key": "name", "value": "手机X1"}
  2. 根据元数据筛选包含该信息的切片
  3. 在筛选结果上进行向量检索
效果对比:未启用元数据时,无关文档的切片(相似度 40-41%)可能排在目标切片(37%)之前。启用后,目标切片相似度提升至 65% 并跃居第一。在文档列表中点击"Meta信息"查看和配置元数据。元数据的常见应用还包括嵌入日期信息以过滤最近的内容。

2.3 切片不完整

切片方式不当会导致以下问题:
问题表现影响
切片过短单个切片仅包含一句话,缺失上下文检索时无法匹配到相关内容
切片过长单个切片混合了多个主题召回时返回大量无关信息
语义截断切片在句子中间被强制截断召回的内容不完整
智能切分基于语义相关性自适应地选择切片点,而非固定长度切分:
  1. 系统先利用内置分句标识符将文档划分为段落
  2. 再根据段落间的语义相关性决定切片边界
适用于大部分场景,在创建知识库导入数据时选择。
自动切片仍可能出现意外截断或解析错误(如空格被解析为 %20)。建议导入完成后人工抽检切片质量。在知识库详情页的切片详情 Tab 中查看切片列表,发现问题后直接编辑修正。修正后的内容立即生效用于检索。
修正仅影响索引中的切片,不会修改源文档。重新导入文档时需要再次检查。
当自动切分无法覆盖的边界情况出现时,可直接在切片层做更细粒度的调整:
  • 新增切片:补充被遗漏的关键信息或额外上下文。需选择所属文档,最多 6000 字符
  • 删除切片:移除包含错误信息或重复内容的切片,不影响同文档其他切片
操作方式见文档管理 — 切片管理

2.4 重排不佳

切片已被召回,但排序不合理导致最终结果不理想。
相似度阈值用于过滤排序后分数低于阈值的切片。
  • 阈值过高:可能丢弃所有相关切片,大模型无法获取足够信息
  • 阈值过低:可能召回大量低相关度切片,引入噪音
没有通用的最佳阈值,需要通过调试窗口反复测试,观察不同阈值下的召回结果。建议从 0.2 开始调整。配置位置:知识检索知识问答的知识库独立配置中的相似度阈值(0.01~1.0)。
最大召回数量决定最终返回的切片数。对于需要总结、列举或比较的复杂问题,提供更多高质量切片(如 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 场景;相似模式适合查找语义相近的段落;自定义高级模式适合特殊排序需求

第三步:持续迭代

每次完成配置变更后:
  1. 重新评测:用同一评测集重跑,量化改进效果
  2. 对比分析:与基线报告对比,确认变更解决了哪些问题、是否引入了新问题
  3. 补充用例:将线上发现的新 bad case 加入评测集,持续扩大覆盖范围
效果优化是迭代过程,通常需要 2-3 轮调整。建议先从索引和检索侧入手,再优化生成侧。