一个能跑的基础 RAG 系统其实不难搭——文档切片、向量化、相似度检索、交给大模型生成。但跑起来之后您会发现,它对简单问题答得不错,遇到稍微复杂或专业的提问就开始"答非所问"或"胡编一通"。基础 RAG 的准确率往往只有 50% 到 70%,离企业可用还有距离。要把它提升到 90% 以上,需要一系列进阶技巧。本文聊聊 RAG 从"能用"到"好用"的关键优化。
分块策略:远不止按字数切
分块是 RAG 里最被低估的环节。朴素的按固定字数切分(比如每 500 字一段)会粗暴切断语义——一个完整的产品说明可能被劈成两半,导致检索到的那一半信息不全。进阶做法是语义分块:按段落、章节、或者语义边界切分,保证每块是一个相对完整的信息单元。
更进一步可以采用层级分块——同一份文档同时生成不同粒度的块,检索时用小块做精确匹配,用大块提供完整上下文。对于结构化文档(如产品规格表、政策条款),还可以做结构感知切分,保留标题层级,让每个块带上它所属章节的路径信息,模型回答时更有上下文感。
针对不同文档类型采用不同策略,往往比追求一个"万能切分方案"更有效。
混合检索:向量 + 关键词
纯向量检索擅长语义匹配——"退货怎么办"能匹配到"退换货流程",因为意思相近。但它对精确匹配不敏感——搜"型号 XJ-2000"时,向量可能把语义相近但型号不同的结果也排上来。反之,纯关键词检索(BM25)擅长精确匹配,却无法理解同义表达。
混合检索把两者结合,用向量召回语义相关结果、用关键词召回精确匹配结果,再通过加权或 Reciprocal Rank Fusion 等算法融合排序。这是性价比极高的优化,能显著提升召回率,尤其是文档中包含大量专有名词、型号、代码的场景。
重排序:把最相关的推到最前
检索回来的候选段落,相关性参差不齐。向量相似度高不代表真正回答了问题。**重排序(Reranking)**用一个专门的模型对候选段落与问题的真实相关度做精细评估,把最相关的几段排到最前面。由于重排序模型计算量大,通常只对召回的前 20 到 50 个候选做。
重排序带来的提升常常让人意外——它对最终回答质量的贡献,可能比换一个更贵的嵌入模型还大。开源的 bge-reranker、Cohere 的 rerank API 都是常用选择。
查询改写与扩展
用户提问往往口语化、模糊或带省略。直接拿原始问题去检索,效果会打折。查询改写在中途加一步——先用 LLM 把用户问题改写得更清晰、更完整,或者从多个角度扩展成几个子查询,分别检索后再合并结果。
对于多轮对话,还要做指代消解——把"它的价格是多少"里的"它"替换成上一轮提到的具体产品名,否则检索会完全跑偏。这些预处理虽小,却能避免大量低级错误。
嵌入模型与微调
嵌入模型的选择和调优是 RAG 的另一大杠杆。通用嵌入模型对企业专有术语的覆盖可能不足——比如行业黑话、产品代号、内部缩写。对于这类场景,可以用企业语料对嵌入模型做微调,让它更好地理解您的领域语言。
微调不必从零训练,可以用对比学习在小规模标注数据上微调已有的开源模型。即使是几十到几百对正负样本,也能带来可感知的提升。但微调要配合严格的评估,避免过拟合或意外退化。
评估指标:用数字驱动优化
RAG 的优化如果没有量化评估,就是在凭感觉调参。建议建立一套评估集——几十到上百个真实问题配上标准答案与相关文档,每次改动后跑一遍,用指标衡量变化。常用指标包括:召回率(正确文档是否被检索到)、准确率(检索结果中相关比例)、回答正确性(生成的答案是否正确)、忠实度(答案是否基于检索内容,有无幻觉)、引用准确率(标注的来源是否真的支持答案)。
像 RAGAS、TruLens 这类评估框架能自动化大部分指标计算。用数字驱动优化,才能判断每个改动是真改进还是噪声。
减少幻觉与多轮对话
幻觉是 RAG 最致命的失败模式——模型编造了检索结果里没有的内容,还言之凿凿。减少幻觉要从几方面入手:在提示词里严格要求"只依据提供的资料回答,资料不足时明确说明不知道";控制检索内容的相关性(无关内容反而会误导模型);对关键事实让模型标注引用来源,便于核验。
多轮对话则要管理好上下文——既要记住对话历史,又不能让无关的历史干扰当前检索。常见做法是用 LLM 提炼对话的关键上下文,与当前问题一起送入检索,而非把整段历史都塞进去。
总结
把 RAG 从"能跑"做到"精准",靠的不是某个银弹,而是分块、检索、重排、查询处理、评估等多个环节的协同优化。每一个环节的提升叠加起来,才能让系统真正胜任企业级问答。如果您已经有了一个基础 RAG 但准确率不够,或者正打算从头搭建一个高质量的企业问答系统,欢迎与我们交流,我们可以帮您把每个环节打磨到位。