检索增强生成(RAG)现在是给AI模型访问知识库的标准模式。构建一个在简单演示中有效的系统是简单的;构建一个在生产中可靠工作的系统则难得多。以下是实际上出了什么问题以及如何解决它。
RAG系统的解剖
RAG系统有五个组成部分:文档处理(摄取和分块文档)、嵌入(将文本块转换为向量表示)、存储(向量数据库)、检索(在查询时查找最相关的块),以及生成(将检索到的上下文传递给LLM生成答案)。每个组件都是潜在的故障点,失败通常是无声的——系统返回答案,但答案是错误的,因为组件在不可见地失败了。
分块:最被低估的问题
你如何将文档分成块对检索质量有巨大影响。常见错误:不考虑语义边界的固定大小分块——在句子中间分割,或将表格跨块分割,意味着检索到的块在语义上是不完整的。太小的块(低于100个令牌):包含太少的上下文以有意义。太大的块(超过1000个令牌):包含太多不相关的信息,稀释了相关性信号。更好的方法:语义分块(在段落或节边界分割,而不是任意令牌计数);用于结构化文档(PDF、HTML)的文档感知分块,分别提取表格、标题和正文;层次化分块(用于检索的小块,但在提示中包含父节作为上下文)。父子分块:一种常见模式,其中索引小块以提高检索精度,但当检索到小块时,在上下文中包含更大的父块。这给你高检索精度(小块完全匹配被问的内容)但足够的上下文让LLM生成好的答案。
嵌入模型选择和检索质量
并非所有嵌入模型都是平等的。通用嵌入模型(OpenAI text-embedding-3-large、Cohere embed-v3、BGE-M3)在不同文档类型上的表现不同。在一般网络文本上训练的模型可能在技术文档、法律文本或领域特定内容上表现不佳。MTEB(大规模文本嵌入基准)排行榜提供跨领域的标准化检索质量指标——在选择嵌入模型之前检查你的特定领域。混合检索:将密集检索(嵌入相似性)与稀疏检索(BM25关键词匹配)相结合,显著提高了大多数现实世界数据集的检索质量。密集检索擅长语义相似性;BM25擅长精确关键词匹配。将两者结合使用互惠排名融合(RRF)是一种标准模式,通常优于单独使用任何一种。重排序:在初始检索后,通过交叉编码器重排序器(Cohere Rerank、BGE-Reranker、Jina Reranker)传递前K个块,显著提高精度。初始检索快但近似;重排序器较慢但更准确。常见的生产模式:用快速嵌入搜索检索前20名,用交叉编码器重排序到前5名,在上下文中包含这5个。
生成失败模式
“上下文填充”失败:检索太多块将上下文窗口填充了切线相关信息,LLM产生了混乱或幻觉的答案。修复:要有选择性——3到7个高度相关的块通常优于20个适度相关的块。迷失在中间:LLM注意力在上下文窗口的开头和结尾更强——放在中间的高度相关块通常比边缘的块使用得更少。将最重要的上下文放在首位或末位。答案基础:要求模型只从提供的上下文中回答,如果上下文中没有答案则说”我不知道”。没有此指令,模型通常会使用其参数知识来填补空白——这可能是正确的,但不是RAG行为。关于来源的幻觉:LLM有时引用在上下文中的来源,但不准确地引用它们,或引用根本不在上下文中的来源。来源验证——检查引用文本是否实际出现在引用块中——对于高风险应用程序是必要的。


