一、RAG介绍
1. LLM的缺陷,为什么需要RAG
| 问题 | RAG 的解决方案 |
|---|---|
| 知识过时(LLM的知识不具备自动更新能力,无法获取最新信息) | 检索最新数据,确保答案实时更新 |
| 缺乏专业领域知识(LLM不知道你的专业领域或业务知识) | 连接企业文档、数据库等内部知识源 |
| 模型幻觉 | 基于检索到的真实信息生成,减少虚构 |
| 训练成本高 | 无需重新训练模型,只需更新外部知识库 |
2. RAG概念
RAG(Retrieval Augmented Generation,检索增强生成)顾名思义,通过检索外部数据,增强大模型的生成效果。
RAG为LLM提供了从某些数据源检索到的信息,并基于此修正生成的答案。RAG基本上是 Search + LLM 提示 的组合:通过大模型回答查询,并将搜索算法所找到的信息作为大模型的上下文。查询和检索到的上下文都会被注入到发送给LLM的提示语中。
3. RAG工作流程
RAG 的工作流程如下:
用户提问
↓
【检索】从知识库/数据库/网络中搜索相关信息
↓
【增强】将检索到的信息 + 用户问题 组合成提示词
↓
【生成】大语言模型基于提供的上下文生成答案
↓
返回最终回答
带来的优点如下:
- 提高准确性:通过检索相关的信息,RAG可以提高生成文本的准确性。
- 减少训练成本:与需要大量数据训练的大型生成模型相比,RAG可以通过检索机制减少所需的训练数据量,从而降低训练成本。
- 适应性强:RAG模型可以适应新的或不断变化的数据。由于它们能够检索最新的信息,因此在新数据和事件出现时能够快速适应并生成相关的文本。
4. RAG搭建流程
加载文件 → 读取文本 → 文本分割 → 文本向量化 → 输入问题向量化 → 在文本向量中匹配出与问题向量最相似的 top k 个 → 匹配出的文本作为上下文和问题一起添加到 prompt 中 → 提交给 LLM 生成回答
索引(Indexing)
- 数据清洗与提取:首先清理和提取各种格式的原始数据,如 PDF、HTML、Word 和 Markdown,然后将其转换为统一的纯文本格式。
- 文本分割:为了适应语言模型的上下文限制,文本被分割成更小的、可消化的块(chunk)。
- 向量化与存储:使用嵌入模型将文本块编码成向量表示,并存储在向量数据库中。这一步对于在随后的检索阶段实现高效的相似性搜索至关重要。
- 总结:知识库分割成 chunks,并将 chunks 向量化至向量库中。
检索(Retrieval)
- 查询向量化:在收到用户查询(Query)后,RAG 系统采用与索引阶段相同的编码模型将查询转换为向量表示。
- 相似性计算:计算索引语料库中查询向量与块向量的相似性得分。
- Top-K 筛选:系统优先级和检索最高 k(Top-K)块,显示最大的相似性查询。
例如,二维空间中的向量可以表示为 (x, y),表示从原点 (0, 0) 到点 (x, y) 的有向线段。。。向量的空间距离代表文本的语义相似度(距离越近,语义越相似)
5.RAG 与 Fine-tuning 对比
- RAG:让模型学会 "查资料" (知识来自外部)
- Fine-tuning:让模型学会 "懂业务" (能力来自内部)
| 维度 | RAG(检索增强生成) | Fine-tuning(微调) |
|---|---|---|
| 核心原理 | 将内部文档数据先进行 embedding,借助检索先获得大致的知识范围答案,再结合 prompt 给到 LLM,让 LLM 生成最终答案 | 用一定量的数据集对 LLM 进行局部参数的调整,让 LLM 更好地理解业务逻辑 |
| 数据使用方式 | 外部知识库(动态更新,不修改模型本身) | 训练数据集(固定数据集,修改模型参数) |
| 对模型的影响 | 不改变 LLM 的权重,只改变输入上下文 | 改变 LLM 的权重,对模型进行参数微调 |
| 主要目标 | 引入外部知识,弥补模型知识不足 | 让模型更理解特定业务逻辑,提升 zero-shot 能力 |
| 更新成本 | 低(只需更新知识库,无需重新训练模型) | 高(需要重新训练或微调模型) |
| 适用场景 | 需要实时更新知识的场景、私有知识问答 | 需要特定风格、术语、逻辑的任务,如客服机器人、领域专家 |
6.RAG的一篇学习论文
学习资料地址:arxiv.org/pdf/2312.10…