初步了解RAG:检索增强生成技术

在大语言模型(LLM)盛行的时代,RAG(Retrieval Augmented Generation,检索增强生成)的技术频繁崭露头角,让我们一同了解下什么是RAG 技术

一、RAG 是什么?

RAG 是检索技术与 LLM 提示的巧妙结合。想象一下,当我们向 LLM 提出一个问题(answer)时,RAG 会如同一位高效的信息调研员,从各种数据源中检索相关信息,并将这些检索到的信息与问题一同注入到 LLM 提示里,最后由 LLM 给出答案。这种方式打破了传统 LLM 仅依赖自身训练数据的局限,为模型的回答引入了更丰富、多元的信息。

二、RAG 解决的关键问题

1、知识局限性

目前主流的大模型,如 ChatGPT、文心一言、通义千问等,其知识完全来源于训练数据。而这些训练集大多构建于网络公开数据,对于实时性信息、非公开数据或离线数据,模型往往无能为力,导致在某些场景下知识储备不足。RAG 通过从外部数据源检索信息,有效地弥补了这一缺陷,让模型能够获取更全面、更及时的知识。

2、幻觉问题

所有 AI 模型基于数学概率的底层原理,使得其输出本质上是数值运算的结果。大模型也难以避免出现 “一本正经地胡说八道” 的情况,特别是在其不熟悉的领域或知识欠缺的场景。并且,识别这种幻觉问题对使用者自身知识储备要求较高。RAG 借助外部检索的真实信息,为模型提供可靠的参考依据,减少幻觉问题的出现。

3、数据安全性

对于企业而言,数据安全是重中之重。没有企业愿意冒险将私域数据上传至第三方平台进行训练,以免造成数据泄露。RAG 可以在企业内部搭建外部知识库,利用企业自有数据进行检索,在保障数据安全的前提下,提升模型对企业特定领域知识的处理能力。

三、RAG技术过程

1、检索

这是 RAG 的信息收集阶段。当用户输入查询内容后,系统会将其通过嵌入模型转换为向量形式。这就好比给查询内容贴上了一种特殊的 “标签”,方便与向量数据库中存储的相关知识进行比对。随后,通过相似性搜索算法,系统会找出与查询最匹配的前 K 个数据,这些数据便是后续生成答案的重要参考信息。

2、索引

在索引过程中,系统首先会将相关文档切分成段落,这有助于更精准地定位和提取信息。然后,计算每个段落的 Embedding 向量,并将其保存到向量库中。当用户进行查询时,用户问题同样会以相似的方式计算 Embedding 向量。通过这种方式,系统能够快速在向量库中找到与用户问题相关度高的段落信息。

3、生成

在生成阶段,系统会将用户的查询内容与检索到的相关知识,一同嵌入到一个预设的提示词模板中,这一步实现了检索增强的关键操作。经过检索增强的提示词内容被输入到大型语言模型中,模型依据这些丰富的信息生成所需的输出,为用户提供更准确、更有价值的答案。

RAG的主要组成,依次是数据提取——embedding(向量化)——创建索引——检索——自动排序(Rerank)——LLM归纳生成

RAG 技术以其独特的架构和功能,为我们在使用 LLM 时遇到的知识局限、幻觉及数据安全等问题提供了创新的解决方案。

学习资料:

《大模型RAG含高级方法https://www.zhihu.com/tardis/zm/art/675509396?source_id=1003

图解高级RAG技术https://zhuanlan.zhihu.com/p/674755232

RAG的介绍——从架构到技术细节https://luxiangdong.com/2023/09/25/ragone/

高级RAG技术学习笔记

https://www.aneasystone.com/archives/2024/06/advanced-rag-notes.html

### RAG检索增强生成技术的实现原理 #### 1. **RAG的核心概念** RAG(Retrieval-Augmented Generation)是一种结合信息检索和文本生成技术的混合模型,其主要目的是通过引入外部知识库来提高自然语言处理任务中生成文本的质量。相比于传统仅依赖预训练参数的语言模型,RAG利用动态检索机制获取实时相关的信息片段,从而显著提升了生成内容的相关性和准确性[^2]。 --- #### 2. **RAG的工作流程** RAG系统的运行可以分为以下几个阶段: - **输入解析** 用户提供一个问题或一段待生成的内容作为输入。该输入会被传递给两个核心模块——检索器和生成器。 - **检索器的作用** 检索器的任务是从大规模文档集合中提取与当前查询最相关的若干段落或句子。这些被选中的段落通常被称为“证据”或“上下文”。检索过程可以通过多种方式完成,例如稀疏向量匹配(BM25)、密集表示学习(DPR, Dense Passage Retrieval),或者两者的组合[^2]。 - **生成器的功能** 生成器接收来自检索器的结果以及原始用户的输入,并将其共同编码为统一的表征形式。随后,生成器依据此联合表征生成最终的回答或目标序列。由于生成过程中融入了额外的真实世界数据支持,因此相比纯解码模式下的预测更加可靠且贴近事实[^3]。 --- #### 3. **关键技术细节** ##### (1) **检索器的设计** 为了有效找到适合特定请求的最佳候选集,现代RAG架构倾向于采用双塔结构来进行高效近似最近邻搜索。具体而言,在离线阶段预先计算好所有可能文档对应的嵌入向量;而在在线推理期间,则针对每次新的提问快速构建相应的查询向量并与存储好的数据库做相似度比较得到Top-K条目[^1]。 ##### (2) **生成器的选择** 目前主流做法是选用强大的Transformer类神经网络充当条件概率估计工具。比如T5/PEGASUS/BART等都是不错选项因为它们具备良好的泛化能力和较强的建模复杂语法关系的能力。值得注意的是,当把多个检索来的片段拼接到一起形成扩展版context feed into generator的时候,还需要特别注意如何平滑过渡各个部分之间的衔接边界以免造成歧义或者逻辑断裂现象发生[^3]。 ##### (3) **端到端微调策略** 尽管单独优化各自独立子系统已经可以获得不错的初步成果,但如果想要进一步挖掘整个pipeline整体表现上限的话,则推荐实施全局范围内的joint training procedure。这意味着不仅要考虑单方面提升retriever recall rate的同时也要兼顾generator fluency & coherence metrics变化趋势之间相互影响因素综合考量调整超参配置直至达到理想平衡状态为止[^1]。 --- #### 4. **优势分析** 借助这种新颖设计思路,RAG成功克服了一些经典Seq2seq范式下难以解决的老大难问题,诸如hallucination(幻觉效应),即无中生有编造不存在的事实情况得到了很好抑制;另外还能灵活适应不同领域应用场景需求无需重新从头开始定制专属corpus corpus preparation周期大大缩短效率倍增[^2]. --- ```python # 下面是一个简单的伪代码展示RAG基本框架 class Retriever: def __init__(self, index_path): self.index = load_index(index_path) def retrieve(self, query, top_k=5): embeddings = encode(query) results = search_in_index(embeddings, self.index, k=top_k) return results class Generator: def generate(self, input_text, retrieved_contexts): combined_input = concatenate(input_text, retrieved_contexts) output = decode(combined_input) return output def rag_pipeline(user_query): retriever = Retriever("path/to/index") contexts = retriever.retrieve(user_query) generator = Generator() response = generator.generate(user_query, contexts) return response ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值