Skip to content

RAG

Retrieval-Augmented Generation,核心是三个部分 ——

  • 索引
  • 增强
  • 生成

(废话

简单来说,就是把知识进行存储,之后在LLM给出答案前,先进行一次检索,把与提问相关的知识塞进 prompt 中,使得LLM给出的答案可以基于真实的知识库,从而缓解大语言模型(LLM)知识更新滞后、且容易“胡编乱造”(幻觉)的问题。

类似于“开卷考试”,模型在训练结束的瞬间,自己积累的知识就存在各个权重之中。引入 RAG 相当于外接一块知识库(开卷),允许在考试(交互)的时候查阅知识库给出答案。

流程

离线数据处理

  1. 数据解析 —— 把承载知识的 pdf, markdown 之类的不同格式文本提取出来
  2. 文本分块 —— 将长文本进行分块
    1. 节省上下文窗口,
  3. 向量化
  4. 存储向量数据库中

在线交互

  1. 接受用户提问
  2. 调用相同的 Embedding 层,把提问向量化
  3. 把向量化后的提问与向量数据库中做匹配,找到比较符合的 K 条目知识(如果插入的文本太多可能会涣散注意力)
  4. 将找出来的文本和用户问题组成新的 Prompt 并且喂给 LLM
  5. 模型生成答案

在基本的框架下有很多 Trick,比如把用户的 Prompt 先调用小点的模型进行规范化或者增强再进行数据库中的查找等

(继续留钩子

Released under the MIT License.