R

RAG

RAG

索引、检索、生成与系统优化

33 篇 · 约 115 分钟
01

什么是RAG?

在前面的章节中,我们介绍过了大模型的原理,他其实是基于基于自身的训练语料和概率统计,加上用户的prompt来预测下一个token(词或符号)的出现概率。这就意味着: 模型输出的文本是“语言上最合理”的,但未必是“事实上的正确”。 我…

3 min
02

深入理解RAG技术原理——索引构建

索引构建的开始:文档;索引构建的结束:索引 文档预处理 文档预处理指的是将原始文档进行加载、解析,并转换为能够统一处理的标准化格式。 在这一步中,我们首先要将文档按照不同的类型加载,并转换成统一格式document,然后还需要去除文…

6 min
03

深入理解RAG技术原理——检索生成

我们这篇文章介绍下RAG中的检索生成的主要步骤。一般来说,检索生成是发生在实时链路上的,也就是用户提问的过程我们就去做检索生成。主要包含以下几个步骤: 用户提问 这个很好理解,用户提出一个问题或请求(例如:“2024年诺贝尔物理学奖…

2 min
04

使用 LlamaIndex 构建一个简单的RAG系统

LlamaIndex是一个专为大语言模型设计的数据连接与检索框架,其核心目标是让 LLM 能够高效、准确地访问和利用私有或结构化/非结构化的外部数据。它在构建基于私有知识库的问答系统、智能客服、文档摘要、RAG(Retrieval …

5 min
05

RAG的范式演进

Navie RAG Naive RAG,也叫基础 RAG,是最基础、最标准的 RAG 实现方式。它完整的体现了“检索 + 生成”的核心思想,没有加入复杂的优化策略。整个流程简单、直观,是体验 RAG 工作机制的最佳实践。 Advan…

3 min
06

文档预处理

文档预处理指的是将原始文档进行加载、解析,并转换为能够统一处理的标准化格式。 在这一步中,我们首先要将文档按照不同的类型加载,并转换成统一格式document,然后还需要去除文档中存在的大量无效内容,比如多余的空格、换行符、无意义的…

5 min
07

常见文档分片方式

由于大模型上下文窗口的限制,这意味着我们不可能一次性把整篇文档送入模型。而在RAG中,我们需要将文档拆分成很多的小文本块(chunk),到检索生成环节的时候,检索的就是与用户问题最相似的一部分小文本块,从而让RAG这个“知识外挂”的…

6 min
08

文档分片的代码实现

前面我们介绍了常见的分片方式,那么借助Spring AI (Alibaba)和LangChain4j我们可以实现哪些分片呢?在Java中,我们想要做分片,代码该怎么写呢? 本文主要介绍三种: 1、Spring AI的固定长度分片 2…

5 min
09

什么是父子分片?

除了前面讲的传统的分块以外,还以一种比较常见的分块方式,在dify、coze这种智能体平台上也比较常用的,那就是父子分块。 父子分片通过将大块文本作为父块保留上下文,将其切分为多个子块用于检索,从而兼顾两者优势。 小分片(如句子或短…

4 min
10

(选学)自定义支持父子分片的基于Markdown标题的分片器

我们介绍下一种针对文档比较好用的分片方案——分层父子分片。 比如有下面这个文档,如果单纯按照传统的分片方案,一定会把内容拆的乱七八糟的,比较可行的就是基于markdown的标题期分块,如langchain中的MarkdownHead…

1 min
11

(选学)自定义支持父子分片的基于Word标题的分片器

我们在项目中用的比较多的是这个基于work文档中标题做分片的分片器。主要的功能和markdown标题分片差不多,但是还有一些差异。 首先,markdown的标题是有明确的语法的,比如 这种,而word不一定的。虽然有些文档中的标题会…

1 min
12

向量模型&向量数据库&向量存储

经过前面的文档清洗与分片处理,我们已经成功获得了一组结构化、干净的 List 数据。接下来,我们将继续对这些文档片段进行向量化处理,并将其存储到向量数据库中,从而完成索引的构建,搭建起完整的向量知识库。 向量模型 SpringAI提…

5 min
13

向量数据库如何选型?

向量数据库的核心作用就是支持检索增强生成。我们再回顾下RAG中与向量数据库相关的流程: 1. 将私有数据(如文档、知识库)转换成向量,存储在向量数据库中。 2. 当用户提问时,Spring AI 首先将用户的问题也转换成一个向量。 …

7 min
14

如何使用离线向量模型

在前面的介绍中,我们了解到 Embedding 模型就是用于将文本转成可供相似度检索的向量。常用的在线服务,如 OpenAI、百炼 等在线向量模型,它们都需要联网,且如果长期调用,就会存在大量的调用成本,还可能涉及数据泄露的问题。为…

2 min
15

相似度搜索的常见算法

前面介绍过了衡量两个向量是否“相似”的算法,即语义相似度算法,如余弦相似度、欧式距离等。 那么实际在检索的时候,当数据量达到百万、千万甚至亿级别时,逐一计算查询向量与库中所有向量的相似度会变得极其缓慢。如KNN算法。 KNN (K …

4 min
16

索引构建流程(ETL)总结与查缺补漏

前面我们用了很多个章节,介绍了如何把一个在磁盘上文档,经过我们的一番处理之后保存在向量数据库中。 这里面涉及到了文档读取、文档清洗、文档切分、向量化、以及向量结果保存。 如果我们把这些步骤提炼一下,其实就是关键的三个步骤:提取、转换…

2 min
17

Spring AI 和 LangChain4J中文档处理功能对比

前面两个章节我们介绍过了Spring AI和LangChain4J中的RAG中文档分段的相关支持,我们把他们放一起做个简单的对比: 对比项 Spring AI(+Alibaba) LangChain4J 文档读取(读取到内存中) 本…

1 min
18

检索增强生成

在完成了前面的知识库构建工作后,我们已经实现了对原始文档的各种处理,最终成功将向量及文本数据写入向量数据库。 接下来,将进入 RAG 的核心环节——检索增强生成。首先通过向量相似度检索,我们能够从知识库中筛选出与用户问题最相关的内容…

4 min
19

RAG优化技术:元数据过滤

什么是元数据 在RAG中,元数据(Metadata) 是附加到文本块(Chunk)上的结构化信息,它是描述了该文本块的“数据”。 一个文本块的元数据可以包含:文件名、页码、userid等等。这些信息可以用于一些特殊的功能要求。 我们…

4 min
20

RAG优化技术:问题改写

在RAG的相似度检索中,检索效果的好坏,很大程度取决于用户问题的表达方式。用户输入的提问是不可控的,往往存在模糊、信息缺失、上下文依赖等问题,难以直接高效地匹配到高质量的相关文档块。因此需要在检索前对用户输入的查询进行优化,从而显著…

4 min
21

RAG优化技术:查询路由

RAG到这里,相信很多人都有了一些基本的了解了,但是其实我想说,还不够。 在回顾一下RAG的概念: RAG(Retrieval Augmented Generation,检索增强生成)从外部知识源中检索相关信息,将相关的知识注入LL…

2 min
22

RAG优化技术:查询构造

查询构造 前面我们提到的查询路由中,可以把用户问题路由到不同的数据库中去查询。如果是向量数据库,那么就可以去向量数据库查询了。 但是如果是图数据库或者关系型数据库,就需要先把自然语言转成SQL或者Cypher 才行。 所以,在查询这…

1 min
23

RAG优化技术:问题澄清

问题澄清 虽然我们介绍了问题重写、查询优化等方案,来解决用户不会提问的问题,但是并不代表一定就能把用户的问题给回答好。 很多时候,当用户的问题存在模糊、不完整、歧义或需要额外上下文才能被准确回答时,还有一种简单直接的优化手段,那就是…

1 min
24

RAG优化技术:HyDE

HyDE(Hypothetical Document Embeddings,假设性文档嵌入) 是一种创新的 RAG 增强技术。它的核心思想是:不要让用户问题直接去匹配答案,而是先让大模型“想象”一个假设的答案,然后用这个“假设答案”…

2 min
25

RAG优化技术:混合检索

在检索增强生成流程中,混合检索(Hybrid Search)是提高检索阶段质量的关键高级技术。它确保了大模型在生成答案之前,能够获得语义最相关、关键词最精确的上下文信息。 传统检索方式 传统的单一检索方式存在以下局限: 稠密检索/向…

5 min
26

RAG优化技术:重排序

什么是重排序? 重排序(Reranking)是在通过混合检索(或其他方式)获得初步检索结果(候选文本块)后,再通过更强的模型(通常是 Cross Encoder 或专用 Reranker 模型)对这些候选文本块进行重新打分和排序,将…

3 min
27

RAG优化技术:Graph RAG

前面我们在介绍查询路由的时候,提到过可以用图数据库来增强RAG的效果,同时在提示词改写的时候也提到过,通过问题拆解,可以解决多跳问题回答效果不好的问题。 这些都和我们这一期要讲的Graph RAG有关系。 Graph RAG 是一种…

3 min
28

Spring AI中的Modular RAG支持

前面我们介绍RAG的范式的时候,提到过Advanced RAG和Modular RAG,前面我们已经介绍了很多Advanced RAG的相关技术,但是我们使用这些技术的时候还都是自己拼接的流程代码。 而Spring AI其实也提供了…

6 min
29

LangChain4J中的Modular RAG支持

除了Spring AI中提供了模块化RAG的支持,其实LangChain4J中也有,甚至功能更加强大。 LangChain4J中提供了RetrievalAugmentor接口,他有一个默认的实现DefaultRetrievalAug…

7 min
30

基于LangChain4J实现简单的RAG检索

使用LangChain4J的DefaultRetrievalAugmentor实现一个简单的RAG检索。

2 min
31

Spring AI 和 LangChain4J的模块化RAG功能对比

前面两个章节我们介绍过了Spring AI和LangChain4J中的模块化RAG的相关支持,我们把他们放一起做个简单的对比: 对比项 Spring AI LangChain4J 核心组件 RetrievalAugmentation…

2 min
32

多模态RAG

多模态 RAG 是一种先进的 RAG 架构,它扩展了传统 RAG 仅处理文本的能力,使其能够理解和处理包含文本、图片、表格、公式等多种数据类型(即“多模态”)的文档。在处理复杂的 PDF 文档时,传统方法往往会丢失图片中的关键信息。…

5 min
33

实战:多模态RAG智能问答系统

在前面的学习中,我们了解到,多模态 RAG 相比传统 RAG 的优势在于:它不仅能够处理纯文本,还可以解析包含图片等非文本元素的复杂文档(如 PDF),实现“文本 + 图片”的联合理解与问答,从而突破传统 RAG 仅支持文本的局限。…

2 min