Skip to content

Commit 43b3b25

Browse files
author
snailRun
committed
Merge remote-tracking branch 'origin/main'
2 parents 37478d8 + 82cd96b commit 43b3b25

File tree

2 files changed

+112
-1
lines changed

2 files changed

+112
-1
lines changed

data/blog/post-20.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ app.listen(PORT, () => {
273273
优点:
274274

275275
+ 高度还原视图:Puppeteer 使用的是无头 Chrome 浏览器,所以它生成的 PDF 和截图与用户在浏览器中看到的内容几乎完全一致
276-
+ 丰富的 API: Puppeteer 提供了超多 API,基本可以解决所有遇到的问题,相关文档地址:</font>[https://github.com/puppeteer/puppeteer/blob/v1.5.0/docs/api.md](https://github.com/puppeteer/puppeteer/blob/v1.5.0/docs/api.md),非常多的 API
276+
+ 丰富的 API: Puppeteer 提供了超多 API,基本可以解决所有遇到的问题,相关文档地址:[https://github.com/puppeteer/puppeteer/blob/v1.5.0/docs/api.md](https://github.com/puppeteer/puppeteer/blob/v1.5.0/docs/api.md),非常多的 API
277277
+ 支持最新的 css:由于 Puppeteer 使用的是 Chrome 浏览器,它支持所有现代 Web 特性,因此它在处理复杂网页时非常有优势
278278
+ 跨域资源支持: Puppeteer 通常以无头模式运行,这种模式下浏览器跨域访问的限制会放宽
279279

data/blog/post-21.mdx

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
---
2+
title: LLM RAG (大语言模型检索增强生成技术)的前世今生
3+
date: 2024-10-08T14:53:54Z
4+
slug: post-21
5+
author: chaseFunny:https://github.com/chaseFunny
6+
tags: ["AI","LLM","RAG"]
7+
---
8+
9+
标题:
10+
11+
1. 我发现所有 AI 对话助手都使用了这项技术?
12+
13+
> 整合资料,记录 LLM RAG 技术产生的背景,如何实现,解决了的问题
14+
15+
16+
## 什么是 LLM RAG ?
17+
LLM:Large Language Model (大型语言模型)
18+
19+
RAG:Retrieval-Augmented Generation (检索增强生成)
20+
21+
大语言模型的检索增强生成技术是一项通过结合外部知识库来**优化**大型语言模型的**输出**。这种技术的核心思想是从外部数据库中检索相关的信息,并将其与用户的查询一起输入到生成模块中,以生成更准确、更相关、更实时的响应回复
22+
23+
## 产生背景
24+
其实 RAG 技术在 2020 年就被提出, Facebook 的一篇论文:《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》 中首次引入了 RAG 的概念,这篇论文要解决的一个问题非常简单:如何让语言模型使用外部知识(external knowledge)进行生成。通常,预训练模型的知识存储在参数中,这就导致了模型不知道训练集之外的知识(例如搜索数据、行业的知识)。之前的做法是有新的知识就再重新在预训练的模型上进行**微调**。但是这样有两个问题:
25+
26+
1. 每次有新的知识后都需要进行**微调**
27+
2. 训练模型的成本是很高的
28+
29+
于是就有了 RAG,它利用预训练模型能够学习理解新的知识的能力,通过在 prompt 输入需要的新知识来实现更加可靠的回复,最后我们来看一下 LLM 目前的问题,
30+
31+
![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1728353558736-1dcf2a98-dd73-4b9e-9b4c-188337a369b6.png)
32+
33+
以上来源:[https://github.com/datawhalechina/llm-universe/blob/main/docs/C1/2.%E6%A3%80%E7%B4%A2%E5%A2%9E%E5%BC%BA%E7%94%9F%E6%88%90%20RAG%20%E7%AE%80%E4%BB%8B.md](https://github.com/datawhalechina/llm-universe/blob/main/docs/C1/2.%E6%A3%80%E7%B4%A2%E5%A2%9E%E5%BC%BA%E7%94%9F%E6%88%90%20RAG%20%E7%AE%80%E4%BB%8B.md)
34+
35+
## RAG 系统组成和工作原理
36+
一个最小的 RAG 系统就是由 3 个部分组成的:
37+
38+
1. 语言模型
39+
2. 模型所需要的外部知识集合(以 vector 的形式存储)
40+
3. 当前场景下需要的外部知识
41+
42+
![](https://blog-1304565468.cos.ap-shanghai.myqcloud.com/work/1728353764729-bb5d2fff-01ef-42c3-912c-6dd5caf7970c.jpeg)
43+
44+
上图是 RAG 系统的组成图,简单介绍:
45+
46+
1. 输入查询: 图的左侧显示了三种不同类型的输入查询:
47+
- 问答任务:例如"定义'中耳'"
48+
- 事实验证:例如"巴拉克·奥巴马出生于夏威夷"
49+
- Jeopardy(反向问答)问题生成:例如"神曲",AI 来给出对应的问题
50+
2. 查询编码器(Query Encoder): 将输入查询编码为向量表示q(x)。
51+
3. 检索器pη(Retriever): 这是一个非参数化模型,使用最大内积搜索(MIPS)在文档索引中查找与查询相关的文档。
52+
4. 文档索引d(z): 存储了预先编码的文档向量(z1, z2, z3, z4等)。
53+
5. 生成器pθ(Generator): 这是一个参数化模型,基于检索到的文档生成最终答案。
54+
6. 边缘化(Marginalize): 对不同文档的seq2seq预测进行边缘化处理,得到最终输出。
55+
7. 输出: 根据任务类型生成不同的输出:
56+
- 问答:生成答案,如"中耳包括鼓室和三块听小骨"
57+
- 事实验证:生成标签,如"支持"
58+
- 问题生成:生成问题,如"这部14世纪的作品分为3个部分:'地狱'、'炼狱'和'天堂'"
59+
8. 端到端反向传播: 整个过程通过q和pθ进行端到端的反向传播,以优化模型性能。
60+
9. 方法概述: 该方法结合了预训练的检索器(查询编码器+文档索引)和预训练的seq2seq模型(生成器),并进行端到端的微调。对于查询x,使用MIPS找到top-K相关文档zi。在最终预测y时,将z视为潜在变量,并对不同文档的seq2seq预测进行边缘化。
61+
62+
这种方法的优势在于它能够处理多种 NLP(Natural Language Processing 也就是 自然语言处理) 任务,并通过结合检索和生成模型来提高性能。通过端到端的训练,系统可以学习更好地协调检索和生成过程,从而产生更准确的结果。
63+
64+
RAG 系统的工作流程如下:
65+
66+
![](https://github.com/datawhalechina/llm-universe/raw/main/figures/C1-2-RAG.png)
67+
68+
我们快速和宏观的看一下如何打造一个 RAG chat bot 的全流程:
69+
70+
1. 加载数据
71+
72+
在真实项目,可能数据源的格式多种,例如 pdf、code、现存数据库、云数据库等等,我们需要将这些数据都加载进来,一般使用向量数据库
73+
74+
2. 切分数据
75+
76+
模型可接受的数据是有限的,这时候我们就需要把数据切分,但是数据源的多种多样和自然语言的特点,事实上切分函数的选择和参数的设定是非常难以控制的。理论上我们是希望每个文档块都是语意相关,并且相互独立的。
77+
78+
3. 嵌入
79+
80+
文本转为向量的过程,然后通过相似度匹配,来检索出我们想要的数据,同时解决了内容太大的问题
81+
82+
4. 检索数据
83+
84+
把问题转为向量,和向量数据库中向量进行检索得到想要的结果
85+
86+
这里还可以通过传统的关系形数据库 + Elasticsearch 来进行数据检索
87+
88+
5. 增强 prompt
89+
90+
其实上面所有做的都是为增强 prompt,我们对检索的信息 + 用户提问进行整合得到增强的 prompt ,提交给 LLM
91+
92+
6. 生成
93+
94+
把增强的 prompt 传递给生成结果模型,来生成答案
95+
96+
97+
98+
## 总结
99+
有两个通俗理解 RAG 作用的方式
100+
101+
1. RAG 是给 LLM 开外挂
102+
2. LLM 充当会思考的大脑角色,RAG 是获取相关知识的角色,通过 RAG 得到的知识集合,然后通过 LLM 来思考整理生成结果
103+
104+
## 参考
105+
1. devv 如何构建高效 RAG 系统:[https://x.com/forrestzh_/status/1731478506465636749](https://x.com/forrestzh_/status/1731478506465636749?s=20)
106+
2. RAG 简介:[https://github.com/datawhalechina/llm-universe/blob/main/docs/C1/2.%E6%A3%80%E7%B4%A2%E5%A2%9E%E5%BC%BA%E7%94%9F%E6%88%90%20RAG%20%E7%AE%80%E4%BB%8B.md](https://github.com/datawhalechina/llm-universe/blob/main/docs/C1/2.%E6%A3%80%E7%B4%A2%E5%A2%9E%E5%BC%BA%E7%94%9F%E6%88%90%20RAG%20%E7%AE%80%E4%BB%8B.md)
107+
108+
109+
110+
---
111+
此文自动发布于:<a href="https://github.com/coderPerseus/blog/issues/21" target="_blank">github issues</a>

0 commit comments

Comments
 (0)