背景随着大语言模型的快速发展RAG检索增强生成 已成为构建企业知识问答系统和智能助手的常见架构。RAG 通过从知识库中检索相关文档并将其作为上下文提供给大模型生成回答从而提升回答的准确性并减少模型幻觉。在实际工程实践中RAG 系统的效果往往受 检索阶段 的影响较大。如果检索结果与问题不相关、语义不完整或排序策略不合理即使使用能力较强的大模型也难以生成高质量的回答。因此如何提升检索质量成为 RAG 系统优化中的关键问题。本文结合实际项目经验总结了 RAG 系统中常见的几类检索问题并给出相应的优化思路和实践方案。常见问题与解决方案文档分块后语义不完整在构建向量知识库时原始文档通常需要被切分为多个 Chunk文档片段。如果分块策略不合理可能会导致语义结构被破坏使得单个 Chunk 无法表达完整语义从而降低检索质量。根据业务场景选择合适的 Chunk Size不同类型的知识内容适合不同粒度的分块例如FAQ类文档适合较小 Chunk技术文档或规范适合较大 Chunk需要通过实验确定最佳分块大小。采用递归切分 重叠策略推荐使用 递归文本切分 Chunk Overlap 的方式例如 LangChain 中的 RecursiveCharacterTextSplitter。该策略通过以下方式减少语义破坏按段落 → 句子 → 字符逐级递归切分在相邻 Chunk 之间设置一定重叠这样可以保证语义上下文的连续性。检索结果与用户问题不相关在召回阶段返回的 Chunk 与用户问题语义相关性较低导致下游生成阶段无法获得有效知识支撑。确保知识库覆盖相关知识如果知识库中不存在相关知识需要及时补充或更新知识库内容。统一领域实体表达对同一实体的不同表述进行统一例如“ML”、“Machine Learning”和“机器学习”可以统一规范为“机器学习”。统一实体表达可以显著提升向量检索的语义匹配能力。引入元数据过滤为每个 Chunk 添加结构化元数据例如文档类别发布时间来源系统检索流程可以优化为用户问题 → 提取元数据 → 元数据过滤 → 向量检索这种 “结构化过滤 向量检索” 的组合策略可以有效减少无关召回。调整向量检索参数通过调整以下参数优化召回结果相似度阈值Top-K 返回数量可以通过命中率测试找到最佳参数组合。查询重写对用户查询进行语义重写使其更适合检索将模糊、口语化或不完整的问题转换为 结构化查询根据历史对话补充必要的上下文信息例如原始查询这个怎么部署 重写查询如何部署XX系统到Kubernetes环境查询扩展将单一查询扩展为多个语义相近的查询提高召回率。示例原始查询 如何优化RAG检索 扩展查询 RAG检索优化方法 RAG召回率提升 RAG Retrieval Optimization多个查询分别检索后合并结果。多路召回采用 向量检索 关键词检索BM25的混合检索再通过 RRFReciprocal Rank Fusion 融合排序。这种方式能够同时兼顾语义匹配能力关键词精确匹配能力使用重排序模型进行精排对初步召回的 Chunk 使用 Cross-Encoder 重排序模型 进行精排只保留排名靠前的 Top-K 结果。相比向量相似度排序Cross-Encoder 通常具有更高的语义理解能力。HyDE使用 LLM 生成 假设答案或假设文档然后使用该内容进行检索。流程如下用户问题 → LLM生成假设答案 → 用假设答案进行向量检索这种方法在语义模糊查询场景中效果显著。基于知识图谱的 GraphRAG使用 GraphRAG 构建知识图谱通过实体关系进行知识扩展从而发现潜在关联信息。相比纯向量检索GraphRAG 更适合复杂关系查询多跳推理问题重排序效果不佳在召回阶段已经获取到相关 Chunk但在重排序阶段被错误降权或过滤导致最终上下文质量下降。选择更适合任务场景的重排序模型优先选择在目标语言或领域任务上表现更好的模型。比如中文场景优先选择 中文优化的 Cross-Encoder 模型。调整召回范围适当调整召回参数降低相似度阈值提高 Top-K 数量扩大候选集合可以降低误过滤概率。多模型重排序结果融合使用多个重排序模型进行结果融合以提升系统鲁棒性。大模型生成效果不佳系统已经检索到相关知识但大模型生成的回答仍然质量较低。选择更强的生成模型使用参数规模更大或推理能力更强的模型可以显著提升生成质量。调整生成参数调整 Temperature 参数控制生成随机性较低 Temperature提高回答稳定性较高 Temperature提高创造性RAG场景通常建议 较低 Temperature。优化提示词模板通过优化提示词模板约束模型行为。例如加入明确的输出约束如果所提供的信息不足以回答问题请明确告知“根据现有信息我无法回答这个问题”切勿编造答案。同时可以使用 Few-shot Prompting少样本提示 提供问答示例。上下文压缩对召回结果进行进一步压缩减少噪声信息。常见方法包括将 Chunk 拆分为句子或段落并计算相似度仅保留最相关部分使用 LLM 提取与问题相关的关键句使用 LLM 对上下文进行摘要使用 Chain-of-Thought 推理提示在提示词中加入CoTChain-of-Thought指令引导模型进行分步推理例如请遵循以下步骤 1. 分析问题明确用户的核心意图。 2. 提取证据从文档中找出相关事实。 3. 逻辑推理基于证据进行推导。 4. 得出结论给出最终答案。回答后处理在生成阶段后增加自动校验流程以降低幻觉风险计算回答与检索 Chunk 的 Embedding 相似度偏差过大则判定为可能幻觉让 LLM 对生成结果进行 自检Self-Verification确认是否符合引用材料