RAG检索增强生成、文档切割策略、Re-rank、Embedding向量检索算法和多路召回

📅 2026/7/21 0:47:57
RAG检索增强生成、文档切割策略、Re-rank、Embedding向量检索算法和多路召回
前面几篇我们已经聊过 LLM、ReAct、工具调用、MCP 和 Skills。它们解决的是 Agent 如何思考、如何调用外部能力、如何复用操作流程的问题。但只靠这些还不够一个真正可落地的 Agent还必须能在回答问题之前找到可靠的外部知识。这就是 RAG 要解决的问题。它不是一个单点技术而是一条完整链路文档先被处理成可检索的 Chunk再通过 Embedding 变成向量必要时还要结合 BM25 做多路召回查询时先召回候选内容再用 Re-rank 精排最后再用评估指标判断系统到底有没有变好。下面这几个问题正好可以按这条工程链路依次展开。什么是 RAG用来解决什么问题核心思想和工作流程是怎样的1. 什么是 RAGRAGRetrieval-Augmented Generation检索增强生成通过在 LLM 生成回答之前先从外部知识库中检索出与用户问题最相关的信息并将这些信息作为上下文Context提供给 LLM从而引导模型生成更准确、更可靠的回答。2. RAG 用来解决什么问题原生 LLM 虽然强大但在实际企业级落地中面临四大核心痛点RAG 正是为了解决这些问题而生•幻觉问题HallucinationLLM 找不到回答依据的时候倾向于“一本正经地胡说八道”。RAG 通过提供事实依据强制模型基于给定上下文回答大幅降低幻觉。•知识时效性Knowledge CutoffLLM 的知识停留在训练数据截止的那一天。RAG 允许动态接入最新数据如实时新闻、最新产品文档无需重新训练模型。•私有/领域数据缺失Domain-specific Knowledge企业内部的规章制度、代码库、客户数据是私有的公有模型从未见过。RAG 让 LLM 能够“安全地”访问和利用这些私有数据。•长上下文成本与“中间丢失”现象LLM 处理超长文本时容易出现“Lost in the Middle”忽略中间关键信息的现象。RAG 实现了“按需供给”只输入最相关的片段。3. 核心工作流程RAG 检索增强生成完整链路RAG 的工作流程通常被划分为两个主要阶段离线索引阶段Indexing和在线检索与生成阶段Retrieval Generation。阶段一离线索引阶段Indexing—— 构建知识库数据加载Data Ingestion从多源异构系统如 PDF、Word、Wiki、数据库、API中提取原始数据。文本切分Chunking将长文档切分为适当大小的文本块Chunks。这是 RAG 的关键切分策略如按固定字符数、按段落、按语义或 Markdown/Html 结构直接影响后续的检索效果。向量化Embedding使用 Embedding 模型如 BGE、text-embedding-ada-002将每个文本块转化为高维稠密向量Dense Vector捕获其语义信息。持久化存储Storage将生成的向量及其对应的原始文本块、元数据Metadata如文件名、日期、作者存入向量数据库Vector DB如 Milvus、Qdrant、pgvector 等中并建立索引以加速查询。阶段二在线检索与生成阶段Retrieval Generation—— 响应用户查询处理Query Processing接收用户的自然语言问题。高级 RAG 会在此步骤对 Query 进行重写Query Rewriting、纠错或扩展以提升检索命中率。向量检索Retrieval将处理后的 Query 同样进行 Embedding然后在向量数据库中执行相似度搜索如余弦相似度 Cosine Similarity 或 ANN 算法召回最相关的 Top-K 个文本块。提示词组装Prompt Assembly将用户的原始问题与检索到的 Top-K 文本块按照预设的模板Template组装成最终的 Prompt。例如“请根据以下参考资料回答问题。参考资料[Context]。问题[Query]。”生成与输出GenerationLLM 接收组装好的 Prompt进行推理并生成最终回答。优秀的 RAG 系统还会要求 LLM 在回答中标注引用来源Citation以增强可解释性和可信度。【加分项 / 面试官视角点拨】在面试或技术深度讨论中如果只答出上述基础流程只能拿到“及格分”。要脱颖而出可以主动补充以下观点“传统的 RAG 是一个线性的、单向的 PipelineNaive RAG它在面对复杂问题时容易失效例如检索不到、检索到太多噪音、多跳推理失败。这正是目前技术演进的方向从 Naive RAG 走向 Advanced RAG 和 Agentic RAG。我们需要引入 Query 路由、混合检索Hybrid Search、重排序Rerank甚至让 Agent 具备自我反思Self-Reflection和多次迭代检索的能力才能真正解决复杂场景下的落地问题。”理解 RAG 的整体流程之后下一步就会遇到一个非常实际的问题企业知识库里的文档往往是 PDF、网页、手册、代码仓库或表格它们不可能原封不动塞进向量库。RAG 的检索质量很多时候从“怎么切文档”这一刻就已经被决定了。RAG 为什么需要切割文档RAG 的切割策略有哪些1. 为什么需要切割文档 (Why Chunking?)在将文档送入向量数据库之前必须将其切分为较小的文本块Chunks主要基于以下原因•Embedding 模型的硬性限制大多数 Embedding 模型如 OpenAI 的text-embedding-3-small或开源的BGE都有严格的输入 Token 限制通常为 512、8192 等。超过限制的文本会被截断导致语义丢失。•检索精度与“噪音稀释”效应如果整个文档作为一个 Chunk其中可能包含大量与用户问题无关的“噪音”信息。在向量相似度计算时这些噪音会稀释核心关键词的权重导致真正相关的段落无法被召回。2. RAG 的核心切割策略 (Chunking Strategies)切割策略最佳实践高度依赖于数据类型和业务场景。以下是按复杂度递增的主流策略① 基础策略固定长度切分 (Fixed-Size Chunking)固定长度切分与 Overlap•原理按固定的 Token 数或字符数如每 500 个 Token进行硬性截断。通常会设置一个Overlap重叠区如 50 个 Token。•优点实现极其简单计算速度快。•缺点极易在句子中间或段落中间强行切断破坏语义完整性。•适用场景对精度要求不高、文本结构松散的初步验证POC阶段。• 关键点Overlap 是必须的它能确保被切断的上下文在相邻的 Chunk 中得到保留。② 结构感知切分 (Structure-Aware Chunking) —— 最推荐的通用方案•原理利用文档本身的自然边界进行切分而不是盲目按字数切。•按段落/句子切分以换行符、句号作为切分边界。•按 Markdown/HTML 标题切分 (Header-based)识别#,##,###等标题层级将同一个标题下的内容作为一个 Chunk。•优点最大程度保留了文本的语义完整性和逻辑结构。•适用场景HTML网页、Wiki、产品文档、API 文档、Notion 导出文件等具有明显层级结构的文本。③ 语义切分 (Semantic Chunking)语义切分根据相邻句子相似度判断边界•原理不依赖固定字数或标点而是先按句子切分然后计算相邻句子之间的 Embedding 相似度。当相似度出现“断崖式下跌”时意味着话题发生了转换就在此处进行切分。•优点确保每个 Chunk 内部的主题高度一致语义凝聚力极强。•缺点需要对整个文档进行预计算耗时较长成本较高。•适用场景长篇论述文、缺乏明显格式标记的纯文本、法律合同。④ 父子文档检索 (Parent-Child / Small-to-Big Retrieval) —— 解决“精度”与“上下文”矛盾的高级策略•痛点Chunk 太小检索精准但 LLM 回答时缺乏足够上下文Chunk 太大上下文充足但检索时容易被噪音稀释导致召回失败。有没有一种策略能同时兼顾检索精度和上下文完整父子切割就是在回答这个问题。核心思路可以用一句话概括检索时用放大镜小块精准定位返回时用全景图大块上下文完整。•原理索引时将文档切分为较小的“子 Chunk”用于高精度向量检索同时保留其所属的较大的“父 Chunk”或整个文档。检索时用用户的 Query 去匹配“子 Chunk”。生成时一旦某个“子 Chunk”被命中系统不返回这个小块而是提取并返回它对应的完整的“父 Chunk”给 LLM。•优点完美结合了“小 Chunk 的高检索召回率”和“大 Chunk 的丰富上下文”。•缺点存储量翻倍索引构建也更复杂•适用场景对回答完整性和准确性要求极高的企业级知识库。⑤ 特定格式专用切分•代码切分 (Code Chunking)不能按行或字数切必须按 AST抽象语法树的节点如按Class类或Function函数进行切分保留完整的代码逻辑。•表格切分 (Table Chunking)直接切分会破坏行列关系。通常需要将表格转换为 Markdown 格式或者为表格生成一段自然语言的“摘要描述”一同存入向量库。RAG 常见切割策略对比文档切成 Chunk 只是第一步。真正进入检索系统时每个 Chunk 都必须变成一条可索引、可过滤、可回溯的数据记录。也就是说我们不仅要关心“怎么切”还要关心“切完之后每条记录到底存什么”。每条 Chunk 记录存什么为什么需要同时存 Chunks 的向量和原文在 RAG 系统中一条 Chunk 记录绝不仅仅是一段文本。它是一个结构化的数据对象包含了用于“机器理解”的向量、用于“人类/LLM 阅读”的原文以及用于“精准定位和过滤”的元数据Metadata。向量和原文的分离存储本质上是“检索阶段”与“生成阶段”职责解耦的必然要求。每条 Chunk 记录到底存什么标准 Schema 设计生产级 Chunk 记录的标准 Schema一个生产级别的向量数据库如 Milvus, Qdrant, pgvector中的 Chunk 记录通常包含以下四个核心字段字段名称数据类型作用与说明chunk_idString / UUID唯一标识符。用于去重、更新或删除特定 Chunk也是关联外部系统如文档管理系统的主键。text(原文)StringChunk的原始文本内容。这是最终喂给 LLM 的“原材料”。必须保持语义完整通常长度在 200~1000 Tokens 之间。vector(向量)Float Array稠密向量表示 (Dense Vector)。由 Embedding 模型将text转化而来如 1536 维或 768 维的浮点数数组。仅用于计算相似度LLM 无法直接阅读。metadata(元数据)JSON / Dict描述性标签。这是 RAG 系统的“灵魂”包含source_url(来源链接),file_name(文件名),page_number(页码),section_title(所属章节),update_time(更新时间),doc_type(文档类型) 等。为什么必须同时存储“向量”和“原文”很多初学者会问“既然向量是由原文生成的包含了原文的语义为什么不能只存向量?”答案在于RAG 工作流的两个阶段对数据的需求完全不同•阶段一检索阶段Retrieval需要“向量”向量是高维空间中的数学表示。向量数据库通过 ANN近似最近邻算法能在毫秒级计算出 Query 向量与千万级 Chunk 向量之间的余弦相似度。而原文无法直接进行高效的数学相似度计算。•阶段二生成阶段Generation需要“原文”LLM 是一个文本处理模型它看不懂[0.023, -0.15, 0.88...]这样的浮点数数组。只能是通过chunk_id把对应的原始文本Text提取出来拼接进 Prompt 中LLM 才能进行理解。•阶段三溯源与可信度Citation需要“元数据 原文”企业级 RAG 必须提供“引用来源”。系统需要利用 Chunk 中的metadata如页码、文件名或引用网址和text在回答末尾生成类似 “[来源: 2026年Q4财报.pdf, 第15页]” 的标注让用户可以点击跳转核实从而消除对 AI 幻觉的担忧。 【加分项 / 面试官视角点拨工程落地的高级玩法】在面试中如果能抛出以下三个基于“存储设计”的高级优化方案将极大展现你的工程深度① 元数据过滤Metadata Filtering比向量检索更精准的“杀手锏”如果用户在提问时指定了范围例如“2023年的报销制度是什么”最佳实践不是让向量去硬扛而是在向量检索时加上元数据过滤条件WHERE update_year 2023。•优势先通过元数据将搜索范围从 100 万条缩小到 1 万条再在这 1 万条中做向量相似度计算。这不仅将检索速度提升了数量级还彻底排除了过时文档的干扰。② 父子文档检索Small-to-Big Retrieval的存储实现正如前一个问题所述为了解决“小 Chunk 检索准但上下文少大 Chunk 上下文多但检索噪音大”的矛盾存储层需要特殊设计•存储设计数据库中同时存在Parent Chunk大块包含完整上下文和Child Chunk小块高度聚焦。Child Chunk的 metadata 中会记录其parent_id。•工作流Query 与Child Chunk的向量进行匹配命中后系统不返回 Child 的 text而是根据parent_id去提取Parent Chunk的 text 发送给 LLM。这完美平衡了检索精度与生成质量。③ 混合存储架构Vector DB Relational DB / Object Storage在生产环境中向量数据库如 Milvus通常不适合存储大量的长文本原文这会浪费昂贵的内存/高性能存储资源且不利于文本的复杂查询。•最佳实践采用分离存储。向量数据库只存chunk_id、vector和轻量级的metadata。而完整的text原文则存储在关系型数据库如 PostgreSQL或对象存储如 AWS S3, MinIO中。检索时向量库先返回 Top-K 的chunk_id应用层再通过 ID 去关系型数据库/S3 中批量拉取原文。这种架构更具扩展性和成本效益。当 Chunk 的存储结构确定之后RAG 的核心检索能力就落到了 Embedding 上。在 RAG 中 Embedding 和语义检索是什么如何选择和评估一个 Embedding 模型1. 什么是 Embedding直观理解与核心作用在 RAG 中Embedding文本嵌入是一种将离散的、人类可读的自然语言文本映射为连续的、机器可计算的高维稠密向量Dense Vector的技术。•直观理解embedding模型不关心字面是否完全匹配而是将文本转化为高维空间中的一个“坐标点”。在这个空间里语义相似的文本其向量坐标的角度如余弦相似度就更近不看向量坐标的直线距离只看角度距离。• 例如“苹果手机”和“iPhone”在字面上完全不同但它们的 Embedding 向量在空间中会非常靠近而“苹果手机”和“苹果水果”则会相距甚远。•核心作用它是实现语义检索Semantic Search的前提让 RAG 系统能够跨越字面表达的鸿沟理解用户的真实意图。Embedding 向量空间中的语义相似语义检索又叫做向量检索就是将用户问题向量化处理后在向量数据库中通过语义相似检索如ANN找到语义相似度Top K个向量化的文本块及其原文的检索方式。2. 如何选择 Embedding 模型四大核心选型维度Embedding 模型选型四维度在实际工程中没有“绝对最好”的模型只有“最适合业务场景”的模型。选型需综合考量以下四个维度① 语言与领域匹配度首要原则•中文/多语言场景首选专门针对中文或多语言优化的模型。例如智源研究院的BGE (BAAI General Embedding)系列如bge-m3或bge-large-zh-v1.5或 Jina AI 的jina-embeddings-v3。它们在中文语义理解上远超通用的英文模型。•纯英文场景OpenAI 的text-embedding-3-small/large或开源的Nomic-embed-text、GTE系列是极佳选择。② 上下文窗口长度Context Length• 传统模型通常限制在 512 个 Token。如果业务涉及长文档如法律合同、长篇技术手册必须选择支持长上下文的模型如 8K 或 32K Token以便配合前文提到的Late Chunking延迟分块策略保留全局语义。③ 向量维度Dimensionality与存储成本• 维度越高如 1536 维、4096 维模型捕获细微语义的能力越强但向量数据库的内存占用和检索计算量也会呈线性甚至平方级增长。Embedding 检索解决的是“快速从海量文档里找出一批可能相关的候选内容”它并不等于最终答案所需的最优上下文。候选内容召回之后还需要再经过一轮更精细的相关性判断这就是 Re-rank 登场的位置。什么是 Re-rank解决了什么问题Bi-Encoder 和 Cross-Encoder 的区别是什么为什么不直接用 Cross-Encoder 检索主流模型有哪些1. 什么是 Re-rank解决了什么问题在 RAG 系统中向量检索阶段用的是 Bi-Encoder双编码器也就是 Embedding 模型。它的工作方式是把查询和文档分别编码成向量然后通过计算向量之间的余弦相似度来判断相关性。这种方式有一个先天的不足它是把查询和文档「分别」处理的所以叫做双编码器。模型在编码一篇文档的时候根本不知道用户会问什么问题。所以它只能生成一个「泛化的、平均化的」语义向量。因此用这种泛化的用户问题向量与文档向量计算出来的相似度也只能是一种泛化的相似度换而言之向量检索只能做粗筛。Re-rank重排序是 RAG 检索链路中的“第二阶段”。在通过第一阶段的向量检索或 BM25 关键字检索初步召回 Top-K例如 Top 50个候选文本块后使用一个更复杂、更精准的模型Re-rank模型对这 K 个候选块进行重新打分和排序最终只截取 Top-N例如 Top 5喂给大模型LLM生成答案。Re-rank通过Cross-Encoder来实现。2. Bi-Encoder 与 Cross-Encoder 的核心区别 面试高频考点要理解 Re-rank必须搞懂底层模型的两种架构维度Bi-Encoder (双塔模型 / 用于向量检索)Cross-Encoder (交叉编码器 / 用于 Re-rank)输入方式Query 和 Document分别独立输入模型将 Query 和 Document拼接在一起如[CLS] Query [SEP] Doc [SEP]输入同一个Transformer模型。计算过程各自生成一个独立的稠密向量最后计算两个向量的余弦相似度。模型内部通过 Self-Attention 机制让 Query 的词元和 Doc 的词元进行深度的交叉注意力计算最后直接输出一个相关性标量得分。交互深度浅层交互仅在最后计算向量距离时交互。深层交互在模型的每一层都在进行词元级别的语义比对。核心优势速度极快Doc 向量可离线计算在线只需计算 Query 向量适合海量数据检索。精度极高。能捕捉极其细微的语义差异和逻辑关系。3. 为什么不直接用 Cross-Encoder 进行检索工程权衡既然 Cross-Encoder 精度这么高为什么第一阶段不直接用它去 100 万个 Chunk 里找答案答案在于Cross-Encoder计算复杂度高且响应速度慢。•Bi-Encoder 的计算量100 万个 Doc 的向量已经离线算好存在数据库里了。用户提问时只需要把 Query 算 1 次向量然后在数据库里做 100 万次简单的向量点积运算通过 ANN 索引如 HNSW 优化后实际只需计算几百次。耗时毫秒级。•Cross-Encoder 的计算量它必须把 Query 和 Doc 拼接后实时送入 Transformer 模型。如果知识库有 100 万个 Chunk意味着用户提一个问题模型需要进行100 万次完整的 Transformer 前向推理• 后果这不仅需要极其庞大的 GPU 算力集群而且延迟会高达几分钟甚至几十分钟用户体验直接崩溃。 结论两阶段架构的精髓RAG 的检索必须是“漏斗型”的。•第一阶段召回 Recall用 Bi-Encoder向量或 BM25关键字做“海选”利用其速度优势从 100 万中快速筛出最可能的 50 个Top 50。•第二阶段排序 Rank用 Cross-Encoder 做“精选”对这 50 个进行深度交叉计算选出最完美的 5 个Top 5。这是用“精度”换“速度”的经典工程折中Trade-off。4. 主流的 Re-rank 模型有哪些目前业界有非常多优秀的 Re-rank 模型按部署方式可分为两类① 开源/本地部署模型适合私有化部署、数据敏感型企业•BGE-Reranker 系列 (智源 BAAI)国内目前最主流、效果最好的开源重排模型。特别是bge-reranker-v2-m3支持多语言、跨语言检索且在长文本上表现优异。•Jina RerankerJina AI 推出的模型与其 Embedding 模型配合极佳支持 8K 长上下文。•ms-marco-MiniLM / Cross-EncoderHuggingFace 上非常经典的基于 MS MARCO 数据集微调的 Cross-Encoder 模型轻量且效果好。•Cohere Rerank (开源版/平替)虽然 Cohere 以 API 闻名但社区有很多基于其架构微调的开源版本。② 闭源 API 服务适合快速接入、不想维护 GPU 资源的团队•Cohere Rerank API业界公认的 Re-rank 标杆效果极佳支持多语言和 Rerank 3.0/3.5 版本。•阿里云 / 腾讯云 / 百度智能云 Rerank 服务国内大厂提供的 API通常与其自家的 Embedding 和 LLM 深度集成。•Jina AI API提供开箱即用的 Rerank 接口。③ 前沿探索LLM as a Reranker (如 RankGPT)• 直接用大语言模型如 GPT-4来做重排。通过 Prompt 让 LLM 阅读候选文档并输出排序列表。效果上限极高但成本极其昂贵目前多用于学术研究或极高价值场景的兜底。5. 【加分项 / 面试官视角点拨工程落地的避坑指南】在面试或架构设计中关于 Re-rank 还有两个极具价值的实战经验1. 阈值截断Score Thresholding比 Top-N 更重要不要死板地每次都取 Re-rank 后的前 5 名。应该设置一个相关性分数阈值例如 0.5。如果 Re-rank 后得分最高的文档只有 0.3说明知识库中根本没有相关信息。此时应该直接触发 Agent 的“拒答”机制或“重写 Query 重新检索”而不是把低分噪音喂给 LLM 导致幻觉。2. 动态调整召回数Top-KTop-K送入 Re-rank 的数量不是越大越好。K 太小如 10可能漏掉正确答案K 太大如 200不仅增加 Re-rank 延迟还会引入过多噪音干扰 Cross-Encoder 的注意力。通常经验值是Top 30 到 Top 100之间需根据具体业务通过评估集如 RAGAS进行 A/B 测试调优。有了 Re-rankRAG 系统可以把粗召回的结果重新排得更准。但这里还有一个前提第一阶段召回本身不能漏掉关键文档。单纯依赖向量检索容易丢失订单号、代码变量、专有名词这类精确匹配信息所以工程上通常会进一步引入多路召回。什么是多路召回方法有哪些如何将多路结果融合成统一排名1. 什么是多路召回多路召回是指在 RAG 的第一阶段检索不依赖单一的检索算法而是同时使用两种或多种不同原理的检索策略分别获取候选文档块Chunks然后将这些结果合并、去重送入下一阶段的过程。核心目的打破单一算法的“偏科”现象通过取长补短同时兼顾“语义理解”和“精确匹配”从而大幅提升召回的准确率Recall。2. 多路召回的两种核心方法最经典、性价比最高的组合就是“向量检索 关键字检索”。① 关键字检索Keyword Retrieval / BM25—— 重点解析BM25 关键字检索工作原理•核心原理基于字面匹配。它不关心词的意思只关心词是否出现以及出现的频率。目前最主流的算法是BM25它为文档打分的逻辑包含以下几点• 逻辑一本 10 页的小册子提到了 3 次“电池”和一本 1000 页的百科全书提到了 3 次“电池”哪本更专注讲电池显然是小册子。• BM25 的聪明之处它会对长文档进行“惩罚”。如果文档很长即使包含了查询词得分也会被稀释短文档如果命中了关键词得分会更高。词频TF, Term Frequency越多越好但有上限饱和一个词在当前文档中出现的次数越多该文档的得分越高。但存在饱和度如果一本书里“电池”这个词出现了 1000 次它不会给 1000 分而是会给一个“饱和”的高分比如 10 分。因为它判断出现 20 次和 1000 次在相关性上差别不大了防止某些文档通过恶意堆砌关键词来作弊。逆文档频率IDF, Inverse Document Frequency越稀有权重越高一个词在所有文档中出现的频率越高比如“的”、“是”、“公司”它的区分度就越低得分权重就越低反之一个词在所有文档中出现的频率越低如生僻词或专业术语它的权重就极高。文档长度惩罚Length Normalization短小精悍者胜•工作流程离线建索引对知识库所有文档进行分词建立倒排索引Inverted Index。即记录“每个词出现在哪些文档的哪个位置”。在线查询用户输入 Query 后系统对其进行分词去倒排索引中查找包含这些词的文档并根据 BM25 公式快速计算出每个文档的匹配得分按得分从高到低排序。•优势对专有名词、订单号、代码变量名、特定人名的精确匹配能力极强绝不“张冠李戴”。② 向量检索Vector Retrieval / Dense Retrieval•核心原理基于语义匹配。通过 Embedding 模型将文本转化为高维向量计算 Query 向量与文档向量之间的余弦相似度。•优势具备强大的“语义泛化”能力。即使字面完全不同只要意思相近如 Query 搜“苹果手机”文档里写的是“iPhone”也能被准确召回。•劣势对精确匹配极其不敏感搜特定订单号容易召回语义相近但错误的其他订单。 两者核心区别对比维度关键字检索 (BM25)向量检索 (Embedding)匹配依据字面完全一致词频统计语义空间距离余弦相似度底层数据结构倒排索引 (Inverted Index)向量索引 (如 HNSW, IVFFlat)擅长场景专有名词、ID、代码、精确事实意图理解、同义词、模糊描述不擅长场景同义词替换、 paraphrase换种说法精确字面匹配、生僻专业术语3. 如何将多路结果融合成统一排名这是多路召回最核心的工程难点。因为两路检索返回的分数体系完全不同例如向量相似度通常是 0~1 之间的小数而 BM25 的得分可能是 5.0、15.0 甚至更高不能直接将分数相加。业界最主流、最鲁棒的解决方案是RRFReciprocal Rank Fusion倒数排名融合。 RRF 的通俗原理解释无需复杂公式RRF 的核心哲学是“抛弃绝对分数只看相对排名”。在 RAG 中的具体运作方式向量检索召回了 Top 50BM25 也召回了 Top 50。系统将这两份列表合并去重。对于每一个 Chunk查看它在向量列表里排第几在 BM25 列表里排第几。排名越靠前赋予的“排名分”越高第 1 名得分最高第 2 名次之依次递减。将两路的排名分相加得到最终总分按总分重新排序取最终的 Top 5 或 Top 10 交给大模型。(注工程实现中为了防止第 1 名和第 2 名的分差过大RRF 会在分母上加一个平滑常数通常设为 60。即排名分 1 / (排名 60)。这使得排名靠后的文档也有机会通过“双路同时命中”实现逆袭。)4. 【加分项 / 面试官视角点拨】在面试或架构设计中补充以下两点能展现你真实的工程落地经验1. 多路召回不是“越多越好”警惕噪音反噬很多初学者喜欢把能用的检索全加上。实际上每增加一路就会引入一批该路特有的“低分噪音”。如果没有强大的 Re-rank重排序模型在后续进行过滤这些噪音会被直接塞进 LLM 的 Prompt 中导致严重的幻觉。最佳实践是保持“向量 BM25”双路召回并将优化重心放在后链路的 Rerank 模型上。2. 结合 Agent 的“动态路由”Dynamic Routing降本增效最高级的玩法不是每次都死板地执行“双路召回”而是引入 Agent 进行意图识别• 如果用户问“订单号 ORD-12345 的状态”Agent 判断为精确查询只触发 BM25 检索节省算力。• 如果用户问“如何排查网关超时”Agent 判断为语义查询只触发 向量检索。• 只有面对复杂、模糊的综合性问题时才触发双路召回 RRF 融合。这能在保证效果的同时将检索延迟和系统负载降低 30% 以上。到这里RAG 的主要链路已经完整了文档被切分和存储查询通过 Embedding、BM25、多路召回、RRF 和 Re-rank 得到候选上下文最后交给 LLM 生成回答。但一个系统是否真的变好不能只靠主观感觉必须用指标量化。如何量化 RAG 的效果量化的指标有哪些主流评估框架RAGAS目前业界最流行、最标准的开源 RAG 评估框架是RAGAS。它巧妙地利用了LLM-as-a-Judge用大模型当裁判的理念通过预设的 Prompt 让 LLM 对系统的输出进行打分0 到 1 之间从而替代昂贵且低效的人工评估。你只需要提供测试数据集包含问题、标准答案、检索到的文档、模型生成的回答RAGAS 就能自动计算各种RAG效果量化指标。RAGAS 将 RAG 系统拆解为两个核心阶段并提出了四大核心量化指标RAG 四大核心量化指标详解① Context Relevance上下文相关性—— 衡量“检索阶段”的噪音控制•它衡量什么检索回来的文档Context中有多少内容是真正与用户问题相关的•通俗理解检索器有没有“滥竽充数”如果检索回来 5 段话只有 1 段有用其他 4 段都是废话这个分数就会很低。•计算逻辑LLM 裁判会提取 Context 中与 Query 相关的句子数量除以 Context 的总句子数量。得分越接近 1说明检索结果越精炼、越相关。② Faithfulness忠实度 / 事实一致性—— 衡量“生成阶段”的幻觉程度•它衡量什么LLM 生成的最终答案Answer是否完全基于检索回来的上下文Context有没有自己“脑补”或“胡编乱造”•通俗理解LLM 有没有“超纲答题”即使答案在现实世界中是正确的但如果检索到的 Context 里没提LLM 却写出来了Faithfulness 得分也会很低。•计算逻辑LLM 裁判会从生成的 Answer 中提取出所有的“事实主张Claims”然后逐一去 Context 中验证这些主张是否能被找到。得分 (在 Context 中找到依据的主张数) / (总主张数)。③ Answer Relevance答案相关性—— 衡量“生成阶段”的答题切题度•它衡量什么LLM 生成的最终答案Answer是否直接且完整地回答了用户的原始问题Query•通俗理解LLM 有没有“答非所问”或“顾左右而言他”•为什么重要有时候检索到的 Context 很相关Faithfulness 也很高LLM 严格照着念但 LLM 组织的语言并没有直接回答用户的核心诉求。•计算逻辑LLM 裁判会根据生成的 Answer反向生成几个“这个问题可能的原始提问”。如果反向生成的提问与用户的真实 Query 在语义上高度一致说明 Answer 是高度相关的。④ Context Recall上下文召回率—— 衡量“检索阶段”的漏检情况需标准答案•它衡量什么检索回来的上下文Context是否包含了回答该问题所需的所有关键事实•通俗理解检索器有没有“漏掉关键证据”•计算逻辑(注意此指标需要一个人工标注的“标准答案 Ground Truth”)。LLM 裁判会将“标准答案”拆解为多个事实主张然后去检查这些主张有多少个能在检索到的 Context 中找到。得分越高说明检索越全面。指标诊断矩阵如何用这些指标定位系统问题在工程实践中我们不会孤立地看某个指标而是将它们组合起来进行根因分析现象组合诊断结论优化方向建议Context Recall 低 Faithfulness 低检索彻底失败。关键信息没找到LLM 被迫靠自身知识瞎编。优化 Chunking 策略、尝试 Query Rewrite、引入多路召回。Context Recall 高 Context Relevance 低检索到了正确答案但带回了大量噪音。优化 Top-K 数量、引入或加强 Rerank重排序模型。Context Relevance 高 Faithfulness 低检索很精准但 LLM 产生了幻觉。优化 System Prompt如加强“严格基于上下文回答”的约束、降低 LLM 的 Temperature。Faithfulness 高 Answer Relevance 低LLM 严格照着文档念但没有直接回答用户问题。优化生成阶段的 Prompt要求 LLM 先给出直接结论再引用上下文解释。总结和回顾回过头看RAG 并不是“接一个向量数据库”这么简单而是一套围绕外部知识使用的完整工程体系。第一层是数据准备先把原始文档切成合适的 Chunk再为每条 Chunk 设计好原文、向量和元数据的存储结构。切分策略决定了后续检索能不能命中正确片段存储设计则决定了系统能不能过滤、溯源和扩展。第二层是检索链路Embedding 负责把语义相近的问题和文档拉到一起BM25 弥补精确匹配短板多路召回提升候选覆盖率RRF 负责融合不同来源的结果Re-rank 再对候选内容做精细排序。第三层是效果评估Context Recall、Context Relevance、Faithfulness 和 Answer Relevance 分别对应“有没有找全”“有没有噪音”“有没有幻觉”“有没有答到点上”。只有把这些指标串起来看才能判断问题到底出在切分、召回、排序还是生成阶段。所以真正可落地的 RAG 系统关键不只是“能检索”而是能稳定地找到正确证据、过滤无关噪音、约束模型基于事实回答并且能用指标持续优化。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】