ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

RAG系统全链路深度解析:从向量检索到Agentic架构的工程实践

2026/8/12 13:47:50 拓冰建站 浏览量
RAG系统全链路深度解析:从向量检索到Agentic架构的工程实践

1. 项目概述:为什么我们需要RAG?

如果你最近在折腾大语言模型,肯定对RAG这个词不陌生。它几乎成了所有AI应用开发者绕不开的话题。但说实话,很多人对RAG的理解还停留在“把文档切成块,存进向量数据库,然后问问题”的层面。这就像说“开车就是踩油门和转方向盘”一样,虽然没错,但离真正安全、高效地驾驶还差得远。

我见过太多项目,初期跑个Demo感觉良好,一上真实场景就问题百出:回答不准确、幻觉频发、响应慢、成本高。核心原因往往是对RAG这套流程的每个环节理解不够深,知其然不知其所以然。RAG(检索增强生成)本质上是一个系统工程,它试图解决大模型的两个核心痛点:知识过时幻觉问题。它的思路很直接:当模型遇到不知道或不确定的问题时,不让它瞎编,而是让它去一个“外部知识库”里找找看有没有相关资料,然后基于找到的资料来组织答案。

听起来简单,但“找资料”这个过程,从问题输入到最终答案输出,中间经历了至少五六个关键环节的精密协作。每一个环节的设计和选型,都直接决定了最终系统的效果、性能和成本。今天,我就结合自己踩过的坑和项目经验,把这套流程从头到尾、掰开揉碎了讲清楚。我们不止看“怎么做”,更要深挖“为什么这么做”以及“怎么做更好”。无论你是刚开始接触RAG,还是已经搭建了系统想优化,相信都能从这篇深度拆解中找到答案。

2. RAG系统核心处理流程全景图

在深入每个模块之前,我们必须先建立起对RAG完整流程的宏观认知。一个工业级可用的RAG系统,绝不是“切块-向量化-检索-回答”四步走那么简单。下图描绘了一个经过实践检验的、相对完整的处理流程,它分为离线处理和在线处理两条主线:

离线处理(知识库构建)

  1. 文档加载与解析:从各种来源(PDF、Word、网页、数据库)获取原始文档。
  2. 文本分割(知识切片):将大文档切割成适合检索的片段。
  3. 向量化(Embedding):将文本片段转换为计算机能理解的数值向量。
  4. 向量存储:将向量及其对应的原始文本存入专门的数据库。

在线处理(问答推理)

  1. 用户查询输入:接收用户提出的自然语言问题。
  2. 查询向量化:将用户查询同样转换为向量。
  3. 多路召回:在向量数据库中进行相似性搜索,初步获取一批候选文档片段。
  4. 重排序:对初步召回的结果进行精炼和重新排序,选出最相关的几个。
  5. 提示工程与上下文构建:将用户问题和精选的文档片段,按照特定格式组装成给大模型的“提示”。
  6. 大模型生成:大模型基于提示中的上下文,生成最终答案。
  7. 后处理与输出:可能包括格式化答案、添加引用来源等。

这个流程环环相扣,任何一个环节的短板都会成为整个系统的瓶颈。接下来,我们就按照这个顺序,逐一拆解每个环节的核心机制、技术选型和实战要点。

3. 知识库构建:从原始文档到向量存储

这是RAG系统的基石,决定了你的“外部知识库”质量上限。很多后期难以解决的问题,其实在构建阶段就埋下了种子。

3.1 文档加载与解析:处理格式的“脏活累活”

这一步的目标是把不同格式的文档统一转换成纯文本。听起来简单,但坑非常多。

  • 格式兼容性是第一道坎。PDF有扫描版(图片)和文本版之分。对于扫描版PDF,你必须集成OCR(光学字符识别)引擎,如Tesseract或商业API。文本版PDF也分两种:一种是“真文本”,可以直接提取;另一种是“伪文本”,文字坐标混乱,需要专门的解析库(如pdfplumberPyMuPDF)来按阅读顺序重组文本。Word文档(.docx)相对规范,可以用python-docx库。网页抓取则需要处理HTML标签、JavaScript渲染内容,常用BeautifulSoupSeleniumPlaywright

  • 编码与特殊字符。你永远不知道用户会上传什么编码的文档。确保你的文本提取流程能处理UTF-8、GBK等常见编码,并能妥善处理或过滤掉控制字符、乱码。

  • 元数据提取。除了正文,尽量提取文档的标题、作者、章节、创建日期等元数据。这些信息在后续的重排序、结果展示和溯源时非常有用。例如,你可以优先召回最近更新的文档,或者在答案中注明“该信息来源于《XX产品手册》第3.2节”。

实操心得:不要相信任何一个解析库是万能的。对于核心业务文档,最好建立一个“解析测试集”,包含你们业务中所有可能遇到的文档类型(合同、手册、报告、邮件等),用你的解析流水线跑一遍,人工检查提取结果是否完整、顺序是否正确。这是避免“垃圾进,垃圾出”的第一步。

3.2 文本分割(知识切片):艺术与科学的结合

这是RAG中最容易被低估,也最影响效果的关键步骤。分割的目标是创造出既能被独立理解,又包含足够信息量的文本块(Chunk)。

  • 为什么不能简单按固定长度切?比如固定每500字符切一刀。问题在于,你很可能一刀切在句子中间、段落中间,甚至一个关键词的中间。这会导致检索时,一个完整的语义被分散在两个Chunk里,每个Chunk的向量表示都不完整,召回率大打折扣。

  • 主流的分割策略

    • 按分隔符分割:这是最基础的方法。使用句号、换行符、标题标记等作为分隔符。LangChainRecursiveCharacterTextSplitter是这方面的代表,它会递归地尝试用不同的分隔符列表来分割,直到块的大小符合要求。这种方法简单,但对语义的保持一般。
    • 按语义分割:更高级的方法。使用NLP模型(如句子分割模型)来识别文本中的自然边界。例如,spaCy可以用于分句。还有一些专门用于语义分块的库或模型,它们能更好地在段落或主题边界处进行切割。
    • 重叠分割:无论用哪种方法,都强烈建议使用重叠(Overlap)。即在两个相邻的Chunk之间保留一小部分重复的文本(例如100个字符)。这样做的目的是防止一个关键信息恰好落在两个Chunk的边界上而被完全丢失。重叠部分为检索提供了缓冲。
  • Chunk大小的权衡:Chunk越大,包含的上下文越多,单个Chunk的信息量越足,但检索精度可能下降(因为向量融合了太多信息,不够聚焦)。Chunk越小,检索越精准,但可能缺乏必要的上下文,导致大模型无法理解。常见的实践是,对于事实性问答,Chunk可以小一些(256-512字符);对于需要推理、总结的复杂任务,Chunk需要大一些(1024-2048字符)。没有银弹,需要根据你的数据特性和任务目标进行测试。

踩坑实录:在一个法律合同分析的RAG项目中,我们最初使用固定长度分割。结果经常检索到只包含半条法律条款的Chunk,导致大模型生成的答案完全错误。后来改为“优先按段落分割,段落太长再按句子分割,并保留15%的重叠”,效果立竿见影。分割策略必须贴合你的文档结构。

3.3 向量化(Embedding):将文本映射到语义空间

这是让计算机“理解”文本语义的核心步骤。Embedding模型就像一个翻译官,把人类语言(文本)翻译成机器语言(高维空间中的向量),并且保证语义相似的文本,其向量在空间中的距离也相近。

  • Embedding模型选型:这是技术选型的重中之重。你的选择决定了检索质量的天花板。

    • 开源模型:社区有很多优秀的开源模型,如BGE(BAAI General Embedding)、text-embedding-ada-002的开源替代品(如gte系列)、SentenceTransformers库提供的各种模型。选择时需考虑:
      • 模型尺寸与性能:模型参数量越大,通常效果越好,但编码速度越慢,资源消耗越大。例如,BGE-large效果出色但较慢,BGE-baseBGE-small则是速度和效果的折中。
      • 上下文长度:模型能处理的最大文本长度。如果你的Chunk很大,必须选择支持长上下文的模型(如一些支持8192 token的模型)。
      • 训练语料与领域:模型在什么数据上训练的?通用模型(如基于维基百科、网页)适用性广,但在特定领域(医学、法律、金融)可能不如领域内微调过的模型。这就是为什么常看到“no embedding model is loaded. set rag_embedding_model to a valid sentence transformer model”这类错误提示后,大家会去寻找更适合自己领域的模型。
    • 闭源API:如OpenAI的text-embedding-3系列、Cohere的Embedding API等。优点是不用担心部署和算力,效果稳定,且有官方维护。缺点是会产生持续的费用,并有网络延迟和数据隐私的考虑。
  • 向量维度:Embedding模型输出的向量维度(如384、768、1024、3072)。更高维度通常能承载更多信息,但也会增加存储和计算开销。不同模型的维度不同,选择时需与你的向量数据库兼容。

  • 批处理与性能优化:对大量文档进行向量化是计算密集型任务。一定要使用批处理(Batch)来调用模型,可以极大提升效率。同时,考虑使用GPU进行加速。

技术细节:Embedding模型本身也是一个神经网络(通常是Transformer架构的编码器部分,如BERT)。它通过在海量文本对(如问答对、相似段落对)上进行训练,学习到将文本映射为向量的函数。我们常说的“相似度计算”,在向量空间里通常使用余弦相似度点积。两者在向量经过归一化(模长为1)后是等价的。大多数向量数据库内部默认使用余弦相似度进行检索。

3.4 向量存储:如何高效管理海量向量?

生成向量后,需要将其存储起来供快速检索。这就是向量数据库的用武之地。

  • 为什么不用传统数据库?传统关系型数据库(如PostgreSQL)虽然可以通过插件(如pgvector)支持向量搜索,但在超大规模(数百万、上千万向量)和高并发查询的场景下,专门设计的向量数据库在性能和易用性上优势明显。它们使用近似最近邻(ANN)算法,在可接受的精度损失下,将检索复杂度从线性降低到对数甚至常数级别。

  • 主流向量数据库选型

    数据库核心特点适用场景
    Chroma轻量、易用、Python原生,适合原型快速开发和中小规模项目。学习、实验、小规模生产。
    Weaviate功能全面,不仅支持向量搜索,还支持GraphQL查询、混合搜索(关键词+向量),自带模块化设计。中大型生产环境,需要复杂查询和扩展功能。
    Qdrant用Rust编写,性能极高,支持丰富的过滤条件(Filter),对云原生部署友好。对性能和过滤有高要求的生产环境。
    Milvus老牌向量数据库,功能强大,架构复杂,适合超大规模向量数据(十亿级别)。企业级、超大规模向量检索场景。
    PGVectorPostgreSQL的扩展。优势是与现有PG生态无缝集成,支持ACID事务。已经使用PostgreSQL,且向量数据规模不是特别巨大的场景。
  • 索引类型:向量数据库的核心是索引算法。常见的有HNSW(分层可导航小世界)、IVF(倒排文件)、SCANN等。HNSW是目前在精度和速度上平衡较好的流行选择,它像建立了一个多层次的“高速公路网”,让搜索能快速逼近目标区域。

  • 元数据过滤:这是生产环境必不可少的功能。除了用向量找相似,你经常需要附加过滤条件,比如“只检索2023年之后的文档”、“只检索A部门的产品手册”。好的向量数据库应该支持在ANN搜索的同时,高效地结合元数据过滤。

部署建议:对于刚开始的项目,可以从Chroma或PGVector起步,快速验证想法。当数据量和查询量增长后,再评估迁移到Weaviate或Qdrant。记住,向量数据库的选型也要考虑团队的技术栈和维护成本。

4. 在线问答:从查询到生成的精妙协作

知识库建好了,现在用户来了一个问题。系统如何从海量数据中精准找到答案?这个过程比想象中更复杂。

4.1 查询理解与向量化

用户输入一个查询,比如“公司今年新发布的智能手表有哪些健康监测功能?”。第一步是查询理解。对于简单查询,直接向量化即可。但对于复杂、冗长或模糊的查询,直接向量化效果可能不好。

  • 查询重写/扩展:这是一个高级技巧。利用大模型(一个小型的、快速的即可)对原始查询进行改写或扩展,使其更清晰、更包含可能的关键词。例如,将上述查询扩展为:“公司2024年新发布的智能手表,健康监测功能,包括心率、血氧、睡眠、心电图等”。然后用扩展后的查询去检索,能显著提升召回率。这就是所谓的“Query2Query”或“HyDE”(假设性文档嵌入)思想的变体。

  • 查询向量化:使用与构建索引时完全相同的Embedding模型,将(可能重写后的)查询转换为向量。这是后续向量检索的基础。

4.2 多路召回:不把鸡蛋放在一个篮子里

单一检索路径风险很高。多路召回策略旨在从不同角度、使用不同方法召回候选文档,取长补短,提高召回相关内容的可能性。

  • 1. 向量相似度召回(语义召回):这是RAG的默认路径。计算查询向量与知识库中所有Chunk向量的相似度,返回Top-K个最相似的。它擅长捕捉语义相似性,即使查询和文档没有相同的关键词。

  • 2. 关键词召回(稀疏向量召回):使用传统的全文检索技术,如BM25、TF-IDF。它基于关键词匹配,擅长处理那些包含具体实体、术语或数字的查询。例如,查询“《民法典》第107条”,关键词召回能精准命中,而语义召回可能因为“民法典”和“第107条”的语义被稀释而失效。

  • 3. 混合检索:同时进行向量检索和关键词检索,然后合并结果。合并策略可以是简单的取并集,也可以是根据分数进行加权融合。WeaviateElasticsearch(结合向量插件)等都原生支持混合搜索。

  • 4. 元数据过滤召回:先根据查询中识别出的元数据条件(如时间范围、文档类型、作者)过滤出一批文档,再在这批文档中进行向量或关键词检索。这能极大缩小搜索范围,提升精度和速度。

实战技巧:多路召回的关键在于融合策略。一个简单有效的策略是“加权打分融合”。例如,给向量检索的分数赋予0.7的权重,给关键词检索的分数赋予0.3的权重,然后重新排序。更复杂的策略可以使用学习排序(Learning to Rank)模型。在初期,可以从简单的加权或轮询合并开始。

4.3 重排序:从“找得多”到“找得准”

多路召回会返回一个较大的候选列表(比如50-100个)。但这些结果的质量参差不齐,直接全部塞给大模型,会引入噪声、消耗大量上下文窗口,并可能让模型混淆。重排序的目标是对这个粗排列表进行精炼,选出最相关、最可靠的少数几个(如3-5个)片段。

  • 为什么需要重排序?

    1. Embedding模型的不完美:语义相似的向量不一定代表答案相关。可能存在“语义相似但主题无关”的情况。
    2. 关键词召回的局限性:关键词匹配可能召回大量包含关键词但主题无关的文档。
    3. 上下文窗口限制:大模型的上下文长度有限且昂贵,必须精选输入。
  • 重排序的实现方式

    • 交叉编码器:这是最经典有效的方法。与用于检索的双编码器(Bi-Encoder,即Query和Document分别编码)不同,交叉编码器(Cross-Encoder)将Query和Document同时输入模型,进行深度的交互注意力计算,输出一个更精确的相关性分数。虽然计算代价高(不能预先计算),但用于对少量(如20-50个)候选进行精排非常合适。SentenceTransformers提供了多种预训练的交叉编码器模型。
    • 大模型自排序:使用大模型本身(如GPT-4)对候选文档进行相关性评估和排序。这通常能获得非常好的效果,但成本最高、速度最慢,适用于对精度要求极高、候选集很小的场景。
    • 基于规则的启发式方法:例如,考虑Chunk在原文中的位置(开头和结尾的段落可能更重要)、与查询的关键词共现频率、元数据新鲜度等,设计一个综合打分函数。

经验之谈:在生产系统中,重排序环节的性价比极高。我们通常的流水线是:向量+关键词混合召回Top 50 -> 用轻量级交叉编码器重排 -> 取Top 5送入大模型。相比直接将Top 5向量结果送入大模型,最终答案的准确率能有显著提升(10%-20%绝对值的提升并不罕见)。

4.4 提示工程与上下文构建:给大模型的“任务简报”

这是连接检索系统和大模型的桥梁。如何把用户问题和检索到的文档片段有效地组织起来,极大影响了大模型的表现。

  • 基础提示模板

    请基于以下提供的上下文信息,回答用户的问题。如果上下文中的信息不足以回答问题,请直接说“根据已知信息无法回答该问题”,不要编造信息。 上下文: {context_1} {context_2} ... {context_n} 问题:{question} 答案:
  • 高级提示技巧

    • 角色设定:让模型扮演特定角色,如“你是一个专业的法律助理”、“你是一个技术支持专家”。
    • 分步思考:鼓励模型展示推理过程,例如“请先分析上下文中的关键事实,然后逐步推导出答案”。
    • 引用来源:要求模型在答案中引用它所用到的上下文片段编号,例如“根据上下文1和3...”。这对于可解释性和溯源至关重要。
    • 处理冲突信息:当多个上下文片段信息矛盾时,指示模型如何应对,例如“如果上下文信息有冲突,请以更新时间最新的文档为准”。
    • 结构化输出:要求模型以JSON、列表或特定格式输出答案,便于后续程序处理。
  • 上下文长度管理:检索到的多个Chunk加起来可能很长。你需要一个策略来截断或精选,确保总长度不超过模型的上下文窗口限制,并优先保留最相关的部分。重排序已经帮我们做了初步筛选。

4.5 大模型生成与后处理

最终,组装好的提示被发送给大模型,生成答案。

  • 模型选型:根据任务难度、成本、延迟要求选择。闭源模型(GPT-4、Claude、DeepSeek)通常能力最强但成本高、有延迟。开源模型(Qwen、Llama、GLM)可以私有化部署,数据安全,但需要自己管理算力和优化性能。对于RAG中的生成步骤,模型的理解和遵循指令能力比其知识储备更重要,因此有时中等能力的模型配合优质的检索结果,效果可能比顶级模型瞎编更好。

  • 参数调优:温度(Temperature)控制创造性,RAG任务通常设置较低(如0.1-0.3),以生成更确定、更基于事实的答案。最大生成长度(Max Tokens)根据答案预期长度设置,避免生成不完整答案或浪费资源。

  • 后处理

    • 格式化:清理模型输出中多余的标记或格式。
    • 安全性检查:对生成内容进行必要的审核。
    • 溯源展示:如果提示中要求了引用,将引用信息与对应的原始文档链接起来,呈现给用户。这是建立信任的关键。

5. 进阶架构与未来趋势

基础的RAG流程已经能解决很多问题,但对于更复杂、要求更高的场景,我们需要更先进的架构。

5.1 Agentic RAG:让RAG拥有“思考”和“行动”能力

传统的RAG是“一次检索,一次生成”。Agentic RAG则将智能体(Agent)的思维链(Chain-of-Thought)和工具调用(Tool Use)能力引入RAG。

  • 工作流程:当用户提出一个复杂问题时,智能体不是直接检索,而是可能:

    1. 规划:先拆解问题,生成一系列子问题或检索步骤。
    2. 执行:针对每个子问题,调用RAG检索工具获取信息。它可能进行多轮检索,根据上一轮的结果调整下一轮的查询。
    3. 反思:评估检索到的信息是否足够、是否相关、是否存在矛盾。
    4. 整合与生成:综合多轮检索的信息,最终生成答案。
  • 优势:能处理需要多步推理、信息整合、或查询本身模糊的复杂问题。例如,“对比我们公司产品A和竞争对手产品B在过去一年的市场表现差异”,这种问题就需要拆解、多轮检索和综合对比。

  • 框架支持LangChainLangGraphLlamaIndex等框架都提供了构建Agentic RAG的高级抽象。DifyCoze这类低代码平台也通过工作流(Workflow)的方式支持了类似的多步骤、有条件执行的RAG流程。

5.2 Graph RAG:利用知识间的关联

传统RAG将文档视为独立的“碎片”。Graph RAG则尝试构建文档碎片之间的关联图(知识图谱),检索时不仅考虑片段本身,还考虑其关联的片段。

  • 如何构建:在文本分割后,使用实体识别、关系抽取等技术,识别Chunk中的实体(如人物、产品、概念)和它们之间的关系,构建一个图结构。节点是Chunk或实体,边是关系。
  • 如何检索:当查询进入时,先找到图中相关的节点(Chunk),然后沿着图的边进行扩展检索,获取相关联的上下文。这有助于获取更全面、连贯的背景信息。
  • 适用场景:非常适合文档内部或文档之间具有强逻辑关联、引用关系的领域,如技术文档、学术论文、事件报告等。

5.3 优化与评估:持续迭代的闭环

搭建完RAG系统只是开始,评估和优化是永无止境的。

  • 评估指标
    • 检索阶段:命中率(Recall@K)、平均精度(MAP)、归一化折损累计增益(NDCG)。这些指标衡量检索到的内容是否相关。
    • 生成阶段:答案的事实准确性(Faithfulness)、与参考答案的相似度(如ROUGE, BLEU)、与问题的相关性(Answer Relevance)。人工评估仍然是最可靠的金标准。
  • 评估框架:可以使用RAGASTruLensARES等专门针对RAG系统的评估框架。它们提供了自动化评估上述指标的工具。
  • 持续优化点
    • 分割策略:尝试不同的Chunk大小、重叠度和分割方法。
    • Embedding模型:微调一个在你自己领域数据上的Embedding模型,效果提升可能非常巨大。
    • 检索策略:调整多路召回的权重、尝试不同的重排序模型。
    • 提示词:不断迭代和优化你的提示模板。

6. 常见陷阱与实战排错指南

即使理解了所有原理,在实际搭建中依然会踩坑。这里分享几个高频问题及其排查思路。

问题一:检索结果完全不相关,答非所问。

  • 排查链路
    1. 检查Embedding模型一致性:确认离线构建索引和在线查询使用的是否是完全相同的Embedding模型。即使是同一个名字的模型,如果版本不同或参数不同,向量空间也会不一致。这是最常见的原因之一。
    2. 检查文本预处理:对比一下存入向量数据库的文本和检索时查询的文本,在分词、大小写、标点处理上是否一致?不一致的预处理会导致向量差异巨大。
    3. 检查向量数据库索引:是否成功创建了索引?索引类型是否合适?尝试对同一个查询进行精确最近邻搜索(暴力搜索),对比ANN搜索的结果,如果差异很大,可能是索引构建有问题或需要调整ANN参数(如ef_construction,Mfor HNSW)。
    4. 检查Chunk质量:直接查看被召回的那些不相关的Chunk原文。是不是分割得太差,导致语义破碎?如果是,调整分割策略。
    5. 简化测试:用一个非常简单的查询(如一个明确的实体名称)和一个小型、干净的知识库测试,先确保基础流程是通的。

问题二:大模型忽略检索到的上下文,依然胡编乱造(幻觉)。

  • 排查链路
    1. 强化提示词指令:在提示词中非常明确、强硬地要求模型“必须且只能”基于上下文回答。使用“如果上下文没有提供足够信息,请明确说明‘根据已知信息无法回答’”这类指令。可以尝试不同的指令表述。
    2. 检查上下文是否真的包含答案:把准备送入大模型的上下文和用户问题拿出来,让人工判断一下,这些上下文是否真的能回答问题?如果不能,那就是检索阶段的问题,需要回溯到上一步。
    3. 减少上下文数量:一次性给模型太多上下文(即使相关),它也可能无法专注。尝试只给Top-1或Top-2最相关的Chunk。
    4. 调整模型参数:降低生成温度(Temperature),使输出更确定性。
    5. 使用能力更强的模型:有些较小的开源模型遵循指令和利用上下文的能力较弱,可以尝试换用更大或指令跟随能力更强的模型。

问题三:系统响应速度太慢。

  • 排查链路
    1. 性能剖析:用工具记录每个环节的耗时(查询向量化、向量检索、重排序、大模型生成)。瓶颈通常出现在其中一两个环节。
    2. 向量检索慢:检查向量数据库的索引是否加载在内存?ANN搜索的参数是否太苛刻(追求过高精度导致速度慢)?可以考虑使用更快的索引(如HNSW的ef_search参数调小),或升级硬件。
    3. Embedding慢:查询向量化是否没有批处理?考虑使用更快的Embedding模型(如BGE-small),或使用GPU加速。
    4. 大模型生成慢:这是主要瓶颈。考虑:使用推理速度更快的模型(如量化版的模型);调整生成参数(减少max_tokens);使用流式输出改善用户体验;或者为生成步骤设置超时和回退机制。

问题四:如何处理超长文档或复杂问题?

  • 解决方案
    • 层次化检索:先检索文档的摘要或大纲(粗粒度),定位到相关章节,再在该章节内进行细粒度的Chunk检索。
    • 句子级窗口:检索到相关Chunk后,不仅返回整个Chunk,还精确定位到其中最相关的几个句子,只把这些句子送入大模型,减少噪声。
    • Map-Reduce:将复杂问题拆解,对每个子问题并行执行RAG,最后将子答案汇总成一个最终答案。这正是Agentic RAG和LangGraph这类框架擅长处理的模式。

RAG系统是一个复杂的机器学习工程系统,它的效果是数据、算法、工程三方合力的结果。没有一劳永逸的配置,最好的方法是在理解其核心机制的基础上,针对自己的具体数据和业务需求,进行持续的迭代、测试和优化。从构建一个能跑通的流程开始,然后建立评估体系,再针对性地优化每一个环节,你的RAG系统才会越来越智能、越来越可靠。