RAG
Retrieval-Augmented Generation,核心是三个部分 ——
- 索引
- 增强
- 生成
(废话
简单来说,就是把知识进行存储,之后在LLM给出答案前,先进行一次检索,把与提问相关的知识塞进 prompt 中,使得LLM给出的答案可以基于真实的知识库,从而缓解大语言模型(LLM)知识更新滞后、且容易“胡编乱造”(幻觉)的问题。
类似于“开卷考试”,模型在训练结束的瞬间,自己积累的知识就存在各个权重之中。引入 RAG 相当于外接一块知识库(开卷),允许在考试(交互)的时候查阅知识库给出答案。
流程
离线数据处理
- 数据解析 —— 把承载知识的 pdf, markdown 之类的不同格式文本提取出来
- 文本分块 —— 将长文本进行分块
- 节省上下文窗口,
- 向量化
- 存储向量数据库中
在线交互
- 接受用户提问
- 调用相同的 Embedding 层,把提问向量化
- 把向量化后的提问与向量数据库中做匹配,找到比较符合的 K 条目知识(如果插入的文本太多可能会涣散注意力)
- 将找出来的文本和用户问题组成新的 Prompt 并且喂给 LLM
- 模型生成答案
在基本的框架下有很多 Trick,比如把用户的 Prompt 先调用小点的模型进行规范化或者增强再进行数据库中的查找等
(继续留钩子