轻松认识RAG(二):RAG——让 AI“会查资料”的关键技术
大家好啊,我是北极熊。上一篇文章给大家介绍了现在的大模型(LLM)存在的致命性问题——模型幻觉!并引出了RAG的概念,这篇文章就带大家来深入了解一下 检索增强生成(Retrieval-Augmented Generation,简称 RAG) 技术,到底是什么,它又是如何做到让模型不再“胡言乱语”的呢?
目录
前言
大家好啊,我是北极熊。上一篇文章给大家介绍了现在的大模型(LLM)存在的致命性问题——模型幻觉!并引出了RAG的概念,这篇文章就带大家来深入了解一下 检索增强生成(Retrieval-Augmented Generation,简称 RAG) 技术,到底是什么,它又是如何做到让模型不再“胡言乱语”的呢?
一、传统搜索、纯 LLM 与 RAG 的对比
要理解 RAG 的优势,我们需要先比较传统搜索引擎、纯 LLM 以及 RAG 三者的区别。
1.1 传统搜索引擎
传统搜索引擎依赖于关键词匹配技术。
关键词匹配技术是一种传统的信息检索方法,它的核心思想是通过用户输入的关键词,在预先建立的索引库中查找包含这些关键词的文档,并按照相关性进行排序。 这种方法类似于在一本书的索引页上查找某个词,然后找到包含这个词的所有页数。
在实现上,关键词匹配通常依赖于倒排索引(Inverted Index),这是一种高效的数据结构,可以快速定位包含特定词语的文档。最简单的匹配方式是布尔检索(Boolean Retrieval),即查询中包含的词必须同时出现在结果中。然而,布尔检索往往过于严格,导致查全率低,因此出现了更加先进的排序算法,例如 BM25,它会根据词频、文档长度等因素计算匹配度,确保更相关的文档排在前面。
关键词匹配的主要缺点是对语义的理解能力较差。例如,“苹果”可能指的是水果,也可能指的是 Apple 公司,而传统的关键词匹配无法区分不同的语境。因此,现代搜索系统逐渐引入了语义匹配技术,如基于 BERT 的深度检索模型,使得搜索结果更加智能化。
1.2 纯LLM进行搜索
纯 LLM 通过对海量文本数据的训练,学习语言模式和知识。
纯 LLM 进行搜索时的语义匹配技术,依赖于深度学习模型对自然语言的理解能力。不同于传统关键词匹配,它不会简单地查找相同的词,而是会分析句子的整体意义,确保查询和文档之间的匹配是基于语义,而非表面上的词汇相似度。
这种语义匹配通常依赖于预训练的 Transformer 模型,比如 BERT、GPT 或者 Sentence-BERT(SBERT)。当用户输入查询时,模型会先将查询转换成向量表示,然后将整个语义嵌入到高维空间中。这些向量不仅考虑了单个词的含义,还结合了上下文信息。例如,对于“苹果公司”和“苹果水果”这样的句子,语义匹配模型可以理解它们的不同含义,并匹配到相关的文档,而不会仅仅因为“苹果”这个词相同而误判。
在 LLM 进行搜索时,通常会采用两种主要的技术路径:双编码器(Bi-Encoder)和交叉编码器(Cross-Encoder)。 双编码器的方式是先独立对查询和文档进行编码,然后在高维向量空间中计算它们的相似度,适用于大规模检索任务。而交叉编码器则是将查询和文档一起输入模型,进行更精确的语义计算,通常用于排序阶段,以确保最相关的内容排在前面。
这种语义匹配技术使得纯 LLM 在没有外部知识库的情况下,也能够进行一定程度的智能搜索。然而,由于 LLM 依赖于固定的训练数据,它的知识无法实时更新,因此在处理最新信息时仍然存在局限性,这正是 RAG 需要引入检索机制的原因。
1.3 使用RAG进行搜索
RAG 结合了上述两者的优势。当用户提出问题时,系统首先使用检索机制从外部知识库或互联网获取相关资料,然后将这些资料输入到语言模型中,辅助生成答案。这样,生成的内容既包含了语言模型的流畅表达,又基于最新、相关的事实信息,减少了幻觉的发生。
二、RAG 的工作原理与具体流程
像我们上文当中提到的一样,RAG 的核心在于“检索”和“生成”两个环节的协同工作。整个流程包括多个关键步骤,从初步检索到最终答案生成,每个环节都对结果的质量产生重要影响。下面就来给大家从头介绍一下RAG的全流程,看看它到底是怎么工作的。
2.1 查询解析与向量化
首先,由用户提出问题,比如说,你提了一个问题:“我该如何学习RAG?”,等你输入问题后,系统就需要将这个问题解析并转换为适合检索的格式。传统搜索引擎依赖关键词匹配,而 RAG 采用自然语言处理(NLP)技术,将查询转换成向量表示,便于后续检索。
向量化的过程通常基于深度学习模型,最常见的技术是使用 Transformer 架构的预训练模型,如 BERT、SBERT(Sentence-BERT)或 OpenAI 的 CLIP 变体。这些模型通过训练,学会将语义相似的句子映射到相近的向量空间。例如,“苹果公司”与“Apple Inc.”在普通的关键词匹配中可能被视为完全不同的词组,但在向量空间中,它们的向量距离会很近,从而便于检索。这种方式大大提升了检索质量,特别是在处理同义词、概念相似度以及复杂的自然语言查询时,向量化能够确保 AI 检索到最符合语义需求的内容。
2.2 召回(Recall)
召回是 RAG 系统中的第一步,目的是从庞大的知识库或互联网中找到与用户查询最相关的内容。它的核心思想是,在浩如烟海的数据中快速筛选出一批可能有用的候选文档,供后续的排序和生成模块进一步处理。
这一技术的核心在于 文本向量化,即用深度学习模型将文本转换为高维向量,并存储在向量数据库(如 FAISS、Milvus、Weaviate)中。当用户输入查询时,系统会将其同样转换为向量,并利用 近似最近邻搜索(ANN) 算法,在数据库中查找与其最相似的文档。这种方式能够突破关键词限制,直接基于语义相似性进行召回,提高召回结果的精准度。
向量检索之外,还有一些结合传统方法和现代 AI 的混合召回策略。例如,一些系统会先用 BM25 这样的关键词匹配方法进行初步召回,再结合向量检索的结果进行融合,以兼顾精准度和召回率。此外,还有基于知识图谱的召回方法,利用实体关系来扩展查询范围,尤其适用于专业领域的知识检索。
在实际应用中,召回的质量直接影响后续排序和答案生成的效果。如果召回阶段筛选出的文档质量较差,那么即使后面的 LLM 生成能力再强,也难以给出准确的答案。因此,优化召回策略是提升 RAG 系统整体性能的关键之一。
2.3 粗排(First-stage Ranking)
召回阶段可能会返回大量相关文档,但其中很多可能并不完全符合用户的查询意图。因此,RAG 系统需要对这些文档进行初步排序,以筛选出最具参考价值的信息。
想象一下,你在网上搜索“如何做红烧肉”,搜索引擎可能会找到几千条相关的网页(这就是召回的结果)。但其中有的可能只是提到了“红烧肉”这个词,而并没有真正的做法。这时,系统会用一些简单但高效的排序方法,比如 BM25(基于关键词匹配) 或者轻量级的神经网络,把明显无关的内容排除,留下更有可能包含正确答案的几十条结果。
粗排的目标不是找到最终的最佳答案,而是减少无用信息,为后续更精细的筛选打好基础。
常见的粗排方法通常包括 BM25(一种经典的文本匹配算法)或深度学习模型(如 ColBERT)。BM25 通过计算查询词与文档之间的匹配度来进行排序,而 ColBERT 等深度模型则结合了语义信息,使排序更加智能化。
2.4 精排(Fine-ranking)
经过粗排的文档集合仍然可能包含不够精准的信息,因此需要进一步精排。
在技术上,精排的工作包括:
- 系统会根据查询从数据库里找到多个候选答案,这些答案可能有不同的质量;
- 系统会分析每个答案,看看它和问题的相关程度如何,比如答案是不是准确、是否符合问题的上下文。为了做到这一点,系统会使用一些工具(比如通过“理解”文本的深度学习模型)来检查每个答案的内容和问题的匹配度;
- 最后,系统会给每个答案打分,分数高的就被选为最终的答案。
在这一阶段,模型通常会结合上下文理解能力,对召回的文档进行重新打分,以确保提供给 LLM 的资料是最符合用户意图的。
精排阶段通常采用更复杂的神经网络模型,例如 Cross-Encoder(交叉编码器)或者基于 Transformer 的 reranker。这些模型会考虑文档的上下文,并基于语义相似度计算最相关的内容。
2.5 生成(Generation)
完成检索后,系统会将最相关的文档输入到 LLM 中,由模型基于这些信息生成最终答案。 生成部分的核心任务是将从数据库中检索到的信息整合成一个连贯、准确的答案,通常是通过一个生成模型来完成的。
在技术上,生成部分通常会用到一种叫做“生成模型”的工具,比如GPT或T5。这些模型可以根据给定的上下文和信息生成自然流畅的语言。生成的过程就是从候选答案中选取的关键信息出发,自动生成一段可以回答问题的文本。
具体来说,生成模型会理解问题和相关的上下文(例如精排后选出的文本),然后根据这些信息产生一个符合语法和逻辑的完整回答。生成模型的优势是,它能够不仅仅复述检索到的信息,还可以将不同的信息点整合在一起,生成更自然、连贯的答案。
三、使用博查 API 来理解RAG
博查搜索提供的API包括:
- Web Search API:就是RAG流程中的查询解析、召回与粗排部分,这个API内部会对用户查询进行改写,充分理解你的问题究竟是什么,然后通过在网络上进行搜索返回相关的网页和图片等信息,最后还会根据时效性进行简单排序。
- Semantic Reranker API:就是RAG流程中的精排部分,通过Web Search API返回的内容,这个rerank API可以根据深度的语义信息进行重新排序,让和你的问题更相关的部分排在最前面。
然后你可以通过这两个API返回的内容,再接入自己的LLM,让LLM进行总结回答,具体使用什么样的模型可以看你的实际需求。具体的实现方法可以看我之前的文章 【手把手教学】博查API+LangChain+DeepSeek:三步实现你的AI智能搜索!,手把手带你实现一个简单的RAG。
结语
RAG 通过结合检索与生成技术,弥补了纯 LLM 的不足,使 AI 能够更准确、可靠地回答用户的问题。从查询解析、召回、排序到最终的答案生成,每个环节都涉及不同的技术挑战,而博查 API 可以帮助你快速实现RAG的相关流程,它提供了高效的检索能力,帮助 AI 获取更精准、实时的信息。
在未来,随着检索技术和生成模型的不断进步,RAG 仍然有巨大的优化空间,值得更多开发者深入研究和应用。
🔗 系列文章推荐:
【你不知道的搜索进化史(一):从图书馆到AI搜索助手的演变】
【你不知道的搜索进化史(二):为什么有些问题,你在搜索引擎上永远找不到答案?】
更多推荐
所有评论(0)