AI Agent - RAG 了解
RAG
RAG工作流程
在RAG架构中,向量数据库扮演着关键的角色,它能够存储和管理大量的上下文信息,包括数据模型、业务规则、历史查询示例等。 这些信息被转化为向量形式存储在向量数据库中,通过向量检索技术可以快速准确地获取与用户问题语义相近的上下文。其工作流程框图如下所示:
文档预处理与向量库构建阶段
- 非结构化加载器:作为系统的数据入口,通过适配不同文件格式的解析组件,实现对本地多类型文档(.docx/.xlsx/.PDF )的结构化转换, 提取文本内容并统一输出为纯文本流(TEXT)
- 数据切片:基于文本语义与长度约束(如按段落、固定 Token 数)对纯文本(TEXT)进行分段切割, 生成语义相对完整的文本块(CHUNKS) 。核心作用是控制文本单元大小,适配后续向量模型输入限制,同时保留局部语义完整性,为召回精准上下文做准备。
- 向量化(EMBEDDING)利用预训练的文本向量模型,将文本块(CHUNKS)转化为高维向量(EMBEDDING) 。通过语义映射,把文本语义转化为向量空间的数值表示, 使后续可基于向量相似度衡量文本关联度。
- 向量数据库作为向量的持久化存储与检索引擎,接收并存储文本块向量(EMBEDDING) ,构建索引加速相似性查询。支持基于向量距离(如余弦相似度)的快速检索,为问答阶段提供 “语义召回” 能力。
问答推理阶段
- 问题向量化(EMBEDDING):对用户输入的自然语言问题,采用与文档切片相同(或兼容)的向量模型,转化为问题向量(EMBEDDING), 使问题与文档块在同一向量空间具备可比性。
- 问题检索:基于向量数据库,通过向量相似度算法,在已构建的文档向量库中检索与 “问题向量” 最匹配的文本块(CHUNKS) ,输出相关段落(CONTEXT)。 本质是语义层面的 “内容召回”,筛选与问题相关的文档上下文。
- 提示模板与 Prompt 构建:将用户问题与召回的相关段落(CONTEXT),按照预设的提示工程模板(如 Instruction + Context + Question 格式 )拼接, 生成符合 LLM 输入要求的 Prompt(提示词 = 问题 + CONTEXT) 。核心是通过模板约束,引导大模型聚焦上下文进行推理。
- LLM 大语言模型推理:大模型接收格式化 Prompt 后,基于预训练知识与上下文信息,执行语义理解、逻辑推理,生成针对用户问题的回答内容。 利用上下文学习(In-context Learning)能力,实现基于私有文档的精准问答。
数据分块策略
- 固定长度切分:按照预设的字符数或token数量(如每块500字)进行硬性划分,这种方式实现简单、易于执行,但由于忽略了文本的语义结构, 可能会在关键语句中间截断,导致信息碎片化,影响检索结果的连贯性。
- 滑动窗口切分:通过设置一定比例的重叠区域(例如前一块末尾20%与后一块重叠),有效缓解了语义断裂问题,使相邻数据块保持语义衔接。 然而,该方法会增加数据冗余度,在处理大规模数据时可能占用更多存储空间和计算资源。
- 语义切分:依据标点符号、段落结构、标题层级等语义标识进行划分,能够最大程度保留文本完整性,适合处理结构化良好的文档。 但在面对格式不规范或无明显语义边界的数据时,其切分效果会受到影响。
- 父子分段模式(B站创新模式):采用双层嵌套结构设计:上层的父区块(Parent-chunk)以段落、小节等较大文本单元为划分单位,旨在保留丰富的上下文信息, 确保回答具备充足的背景支撑;下层的子区块(Child-chunk)则将父区块进一步细分为句子或短句,用于实现精准的关键词匹配。 系统运行时,首先通过子区块进行细粒度检索,快速定位与查询最相关的数据片段,随后自动调取对应的父区块内容,将精确匹配的子句与完整的上下文信息相结合,从而生成逻辑清晰、内容详实的响应结果。
父子分段模式在问答系统中的准确率提升30%,同时有效减少了因上下文缺失导致的回答偏差问题,为高效的数据检索与知识应用提供了可靠保障。
Embedding 向量化技术
作为知识库中非常重要的一个核心技术。无论是文本、图像,还是单词,Embedding 的目标都是将这些内容转化为高维向量表示。这种向量表示捕捉了数据的语义信息,便于在向量数据库中存储和检索。
向量化的过程实际上是将文本、图像或单词作为一个对象,映射到一个由实数表示的固定向量空间中。可以将这个向量空间想象为一个三维空间,通过一定的向量模型计算完成映射。 向量模型需要经过特殊训练,并依赖大量的文本语言和图像语言数据进行训练。训练完成后,可以将对应的字、文本或图像转化为向量空间中的向量。
模型训练的目的是为了让语义相似的对象在向量空间中的距离尽可能接近。例如,“king”和“queen”,“man”和“woman”之间存在相似性关系,可以通过向量运算表达。 例如,“woman”可以通过“man + queen - king”得出。这表示“man”和“woman”语义相近,因此它们在向量空间中的距离也较近。 “king”和“queen”同样因语义相似,在空间中的距离更短,而“queen”和“woman”之间的相似性也会导致它们距离较近。
可以理解为,将具体的文字或图像投射到向量空间后,通过模型的训练,使得语义相似的内容在向量空间中的距离更近,从而实现语义召回,检索出相似的内容。 对于图像也是类似的。
在实际应用中,向量化过程会计算两个实体在向量空间的距离,以表示它们之间的相似度。 例如,用户询问“北京大兴机场怎么去”,数据库中可能存有“大兴机场的路线”相关知识。此时,用户问题中的“大兴机场”与数据库中的“大兴机场的路线”在向量空间的距离会较近, 因此可以通过相似度计算将相关知识召回。根据相似度距离排序,检索出与用户 Query 相关的知识,并通过大模型整合后,生成完整的回答。
工作流
AI Agent 的运行需要输入一个 Prompt,结合外挂知识库,让 RAG 调用具体工具来连接现实场景和用户需求。然而,为了确保整个执行流程的可靠性和可控性,工作流的能力显得尤为重要。
通过工作流,我们可以将 AI Agent 的业务流程通过编排的方式串联起来,使其具备计划性和执行的可控性。目前在我自己的项目中也实现了自由编排组装 Agent 的能力。用户可以自由定义 Agent 的执行流程以及自由选取调用工具与知识库。 通过这种方式,将复杂任务拆解为各个节点并逐步串联,实现任务的清晰、流畅且可控的执行。让用户能够个性化地设计和控制任务执行的逻辑,确保每一步操作都符合预期,为复杂任务的高效执行提供了可靠保障。
RAG架构分类
- Naive RAG:即RAG的基础实现。它适用于简单的问答场景,但在检索质量和上下文处理方面存在局限。
- Advanced RAG:这种范式在检索前后引入了处理步骤以提升质量。关键策略包括:
- 检索前处理:采用更复杂的文本分块策略、查询转换(如 StepBack-prompting)等优化检索输入。
- 检索后处理:对检索到的文档进行 Re-ranking 以提升相关性,并对上下文进行 Compression。
- Modular RAG:一种更灵活、更面向系统的 RAG 视图,其中不同的组件(如搜索、检索、记忆、路由)被视为可互换的模块。这使得构建更复杂、更定制化的流程成为可能。具体模式包括:
- 带记忆的 RAG:融合对话历史,以处理多轮交互,使对话更具连续性。
- 分支/路由 RAG:引入一个路由模块,根据查询的意图决定使用哪个数据源或检索器。
- Corrective RAG, CRAG:增加了一个自我反思步骤。一个轻量级的评估器会对检索到的文档质量进行打分。如果文档不相关,系统会触发替代的检索策略(如网络搜索)来增强或替换初始结果。
- Self-RAG:让 LLM 自身学习判断何时需要检索以及检索什么内容,通过生成特殊的检索 Token 来自主触发检索。
- Agentic RAG:这是 RAG 最先进的形式,将 RAG 集成到一个智能体循环(agentic loop)中。模型能够执行多步骤任务,主动与多个数据源和工具交互,并随时间推移综合信息。这是 Context Engineering 在实践中的顶峰。
高级 RAG 探究
在初级 RAG 的基础上,高级 RAG 为整个过程引入了一层较为复杂的处理层,以优化回复的相关性和整体质量
索引优化
在数据库中,索引方法在高效组织和检索数据方面起着重要作用。广泛采用的传统的索引方法有 B tree 和 Hash 索引等。然而,这些算法的搜索速度随着数据规模的增加而降低。 因此,需要更高效的索引方法来处理更大规模的数据集,比如自研的 MSTG 多尺度树图向量索引算法。该算法在速度和性能方面优于其他索引方法。
与 HNSW 等流行算法仅依赖于分层图和倒排文件索引(IVF)的两级树结构不同,MSTG 在设计中结合了分层图和树结构的优点。 通常,图算法对于未经过滤的搜索更快,但对于经过过滤的搜索可能不高效。另一方面,树算法在经过过滤的搜索方面表现出色,但对于未经过过滤的搜索速度较慢。 通过结合这两种方法,MSTG 确保了未经过滤和经过过滤的搜索的高性能和准确性,使其成为各种搜索场景的强大选择。
MSTG(Multi-Scale Tree Graph)核心思想是通过多尺度分层聚类和树图混合结构,结合传统树算法与图算法的优势,在保证精度的同时显著降低资源消耗。
- 多尺度分层聚类
- 分层架构:MSTG 采用树状层级设计,将数据集划分为多层聚类。
- 顶层:粗粒度聚类(如 100 个簇),快速定位候选区域。
- 中间层:中等粒度聚类(如 1,000 个簇),细化搜索范围。
- 底层:细粒度聚类(如 10,000 个簇),精确匹配目标。
- 质心压缩:每层仅存储聚类质心(Centroid),而非所有向量。
- 分层架构:MSTG 采用树状层级设计,将数据集划分为多层聚类。
- 树图混合结构
- 树结构:基于聚类质心构建树形索引,支持快速范围查询。例如,通过二分法在树中定位目标簇,避免全量扫描。
- 图结构:在底层聚类中引入图连接,节点间通过相似度边关联。例如,每个节点连接到其 k 近邻节点,形成局部导航图,加速邻域搜索。
- 动态切换:根据搜索条件(如过滤比例)自动选择树或图路径。例如,高过滤比例时优先使用树结构,低过滤比例时切换至图结构。
- 向量化计算优化
- SIMD 指令加速:在距离计算中利用 SIMD(单指令多数据)并行处理向量维度,提升计算吞吐量。
- 量化压缩:对向量进行 8-bit 或 4-bit 量化,减少内存占用并加速相似度计算。
高级分块策略
- 朴素分块的问题:固定大小的分块方法虽然简单,但常常会粗暴地切断句子或段落,导致上下文支离破碎,语义不完整。
- 内容感知分块:
- 递归字符分割:一种更智能的方法,它会按照一个预设的分割符层次结构(如:先按段落,再按句子,最后按单词)进行分割,以尽可能保持文本的自然结构。
- 文档特定分块:利用文档自身的结构进行分割,例如,根据 Markdown 的标题、代码文件的函数或法律合同的条款来划分。
- 语言学分块:使用 NLTK、spaCy 等自然语言处理库,基于句子、名词短语或动词短语等语法边界进行分割。
- 语义分块: 这是最先进的方法之一。它使用嵌入模型来检测文本中语义的转变点。当文本的主题或意义发生变化时,就在该处进行分割,从而确保每个分块在主题上是高度内聚的。研究表明,这种策略的性能优于其他方法。
- 智能体分块:一个前沿概念,即利用一个 LLM 智能体来决定如何对文本进行分块,例如,通过将文本分解为一系列独立的 propositions 来实现。
查询重写
在检索过程开始之前,原始的用户查询经过多次增强以提高准确性和相关性,通常会采用查询重写、扩展和转换等技术。这一步确保检索系统获取最相关的信息。 例如,如果用户的查询过于宽泛,查询重写可以通过添加更多的上下文或特定术语来改进查询,而查询扩展可能会添加同义词或相关术语以涵盖更广泛的相关文档范围。
动态嵌入
在初级 RAG 中,可能会对所有类型的数据使用单个嵌入模型生成固定向量,这可能导致效率低下。 然而,高级 RAG 中使用动态嵌入根据上下文或任务需求动态调整向量表示。 这意味着嵌入模型经过训练或调整,能更灵活地捕捉语义变化,适应多义性、时效性数据及个性化需求。 同时,动态嵌入使大语言模型能够理解细微差别,消除歧义,进而产生更连贯、更相关的回答。
混合检索
高级 RAG 还会利用混合搜索,结合不同的搜索策略来提高检索性能,一般包括基于关键字的搜索、语义搜索和神经搜索的不同组合方式。 例如,我们的 AI 数据库支持过滤向量搜索和全文搜索,且可以使用复杂的 SQL 查询。 这种混合方法通过将不同检索技术结合,能弥补各自的不足,发挥各自优势,适应更广泛的复杂检索场景, 提高检索的精准度和语义相关性,提升大模型在复杂检索任务中的表现。
重新排序
为了平衡检索的速度和准确性,业界普遍采用两阶段检索流程
- 两阶段流程
- 第一阶段(召回): 使用一个快速、高效的检索器(如基于 bi-encoder 的向量搜索或 BM25 等词法搜索)进行广泛撒网,召回一个较大的候选文档集(例如,前 100 个)。
- 第二阶段(精排/重排序): 使用一个更强大但计算成本更高的模型,对这个较小的候选集进行重新评估,以识别出最相关的少数几个文档(例如,前 5 个)。
- Cross-Encoder: 交叉编码器之所以在重排序阶段表现优越,是因为它与双编码器的工作方式不同。双编码器独立地为查询和文档生成嵌入向量,然后计算它们的相似度。 而交叉编码器则是将查询和文档同时作为输入,让模型在内部通过 Attention Mechanism 对二者进行深度交互。这使得模型能够捕捉到更细微的语义关系,从而给出更准确的相关性评分。
重排序显著提高了最终送入 LLM 的上下文质量,从而产出更准确、幻觉更少的答案。在金融、法律等高风险领域,重排序被认为是必不可少而非可选的步骤。
| 对比维度 | 初级 RAG | 高级 RAG |
|---|---|---|
| 检索策略 | 单向量检索(基于语义相似度),仅依赖向量数据库匹配前K个相似块。 | 混合检索(向量检索+关键词检索如 BM25),结合语义与关键词匹配,召回率提升 30%+。 |
| 索引结构 | 单一固定块大小(如 500 - 1000 字符),无/仅基础元数据,索引结构简单。 | 动态块大小+多索引策略,支持细粒度拆分(段落/句子级),含丰富元数据(日期、章节等)。 |
| 查询处理 | 直接用原始查询检索,无优化。 | 含“查询改写(口语转专业表述)”“查询扩展(生成问题变体)”等预处理。 |
| 后检索优化 | 无后处理,直接传前K个块给 LLM。 | 重排序(二次筛选最相关块)+ 上下文压缩(提炼关键信息,减少冗余)。 |
| 领域适应性 | 通用场景适用,专业领域(法律、医疗)罕见术语匹配弱。 | 支持嵌入模型微调,适配特定领域术语/语境,提升专业场景准确性。 |
| 多轮对话支持 | 难关联历史对话,易上下文断裂。 | 整合对话历史,动态调整检索策略,保障多轮回复连贯性。 |
| 抗“幻觉”能力 | 较弱,检索不准时 LLM 易生成无依据内容。 | 较强,通过精准检索+信息校验,减少无根据生成。 |
| 典型应用场景 | 简单知识库问答(如产品手册查询)、低精度闲聊辅助。 | 金融投顾、法律检索、医疗咨询等高精准场景,及多轮复杂任务处理。 |
B站利用RAG结合LLM实现快速获取数据
待解决的挑战与展望
- 向量检索过程需要在海量的向量数据库中进行相似度计算,随着业务数据量的不断增长以及知识库规模的持续扩大,检索耗时也随之增加。
- 大模型在生成SQL时,由于其本身的计算复杂度较高,同样会消耗大量的时间。例如在处理复杂查询时,系统从接收到用户问题到返回SQL语句,有时需要数秒甚至更长时间,这对于追求实时性的数据查询场景来说,用户体验会受到较大影响。
- 在迭代测试方面,由于涉及到自然语言理解、SQL生成等多个环节,每个环节都是非幂等性过程,其中任何一个环节的变动都可能影响到最终结果的准确性和可靠性。
优化
- 在向量检索环节,我们将探索更高效的向量索引算法,同时,对向量数据库进行合理的分片和缓存策略设计,减少不必要的检索开销。
- 对于大模型生成SQL部分,我们考虑采用模型蒸馏、量化等技术,在不显著降低模型性能的基础上,减小模型的计算量和存储需求,从而加快推理速度。
- 建立了半自动化测试工作流,通过后台收集用户Query,然后通过API请求生成测试结果,最后人工对测试报告进行review,评估是否满足上线要求, 不过该方案的缺点就是耗费人力。因此我们计划引入AI Agent,对测试报告进行全面的review,最后人工抽样对Agent生成的结果做二次校验。
Agentic RAG(智能体驱动型RAG)
传统RAG的核心优势在于线性无分支的”检索-生成’流程,整个链路清晰可控,能以较低的成本落地。与传统RAG的“线性单项流程”不同,Agentic RAG的核心创新在于引入了“智能体”模块,赋予了LLM自主思考、规划和执行的能力。 让RAG系统从“被动响应”升级为“主动解决问题”,关键特征体现在循环迭代、动态决策和多工具调用方面。
Agentic RAG工作流程
- 智能体预处理:优化查询与初步判断。在用户输入查询后,现有LLM Agent进行处理,对模糊或者冗长的查询进行重写优化(例如将“怎么提升公司业绩”改写为“2024年中小制造业企业提升营收的3个核心策略,需要包含成本控制和市场拓展维度”), 更符合检索需求,随后智能体进行自我评估,判断当前查询是否需要补充外部信息(“调用行业报告数据库”。“实时搜索最新政策”)。
- 动态规划:工具选择与调用,若需补充信息,智能体思考并选择工具(不仅限于向量数据库,还包括搜索引擎、SQL 数据库、第三方 API 等)。例如查询 “实时天气对农产品价格的影响” 时,会调用天气 API 和农产品价格数据库做关联分析。
- 检索整合与初步生成:收集工具调用结果,整理为结构化上下文,结合重写后的查询生成提示词,输入 LLM 生成初步回答。
- 循环迭代:自我评估与修正,初步回答生成后,智能体二次评估(是否覆盖需求、有无冲突漏洞等);若不通过,回到前序环节重新规划(如换工具、优化查询再检索),直到生成最终回答。“评估 - 修正” 循环是其解决复杂问题的核心。
| 对比维度 | 传统 RAG | Agentic RAG |
|---|---|---|
| LLM 定位 | 被动的“内容生成器”,仅负责基于检索结果生成回答 | 主动的“智能决策者”,主导查询优化、工具选择、评估修正全流程 |
| 流程结构 | 线性单向流程(查询→编码→检索→生成),无循环 | 循环迭代流程(查询→规划→检索→生成→评估→修正),含多个决策节点 |
| 工具支持 | 仅依赖向量数据库,工具类型单一 | 支持多类型工具调用(向量数据库、搜索引擎、API、结构化数据库等) |
| 复杂需求处理 | 无法应对多跳、需推理的复杂需求,仅适用于简单问答 | 擅长处理多步推理、跨数据源整合的复杂需求 |
| 自我评估能力 | 无评估环节,检索结果直接决定生成质量 | 具备自我评估能力,可判断回答相关性、完整性,主动修正偏差 |
| 错误传导风险 | 检索错误会直接传递到生成环节,无法修正 | 可通过评估和迭代阻断错误传导,降低“幻觉”概率 |
| 落地成本 | 开发难度低、资源消耗少,适合快速上线 | 开发难度高、需对接多工具,适合复杂场景的深度应用 |
传统 RAG 是 “基石”,因简洁高效,在简单问答、固定知识库查询、低延迟场景(如产品说明书问答、内部文档检索)仍不可替代,是企业入门首选。 Agentic RAG 是 “进阶方向”,通过 “智能体思维” 突破传统 RAG 边界,更适合复杂决策、跨数据源整合、高准确性场景(如金融分析、科研综述、企业战略规划)。 实际应用中两者非 “非此即彼”:企业可按需选择(简单需求用传统 RAG 控成本,复杂需求用 Agentic RAG 提能力),甚至构建 “混合架构”,让智能体按查询类型自动切换流程,平衡效率与能力。 随着 LLM 能力和工具生态完善,Agentic RAG 会在更多高阶场景落地,成为构建 “强知识、高可靠、高自主”AI 系统的核心技术之一。
