Langchain.js | RAG 👈哦 , 原来是这么回事🤔🤔🤔?!

951 阅读6分钟

前言

书接上文 , 我学到了如何将分割后的文本 , 使用嵌入式模型向量化 , 并且使用 langchain.js 集成的多种向量数据库实现数据持久化

也就是 , 如下所有流程 ,已经跑通 ~

这一次 , 是时候一起学习什么是 RAG ~

RAG

什么是 RAG

RAG(Retrieval-Augmented Generation,检索增强生成) 成功地将检索系统与大语言模型相结合,旨在为用户提供更加精确和相关的答案。

具体来说,当我们提出一个问题时,检索系统首先从海量的文本资料中筛选出与之相关的文本片段,这些片段被称为“上下文”。

随后,大语言模型会利用这些上下文,作为额外的输入信息来生成相关的答案。

这种结合方法的优越性在于 :

  • 传统的语言模型往往依赖其训练数据来回答问题
  • 而RAG机制能够“引导”模型根据特定的、外部的上下文来形成答案。

这意味着,即使面对模型在其原始训练数据中从未见过的问题,只要该问题相关的上下文可以被检索到,RAG机制就能够协助模型生成合理的答案。

RAG 流程

检索增强生成的工作流程可以简要地分为以下两个主要阶段

  • 索引阶段
  • 查询阶段

此处有两个图 :

各位倔友,不妨点个赞 , 我专门染成绿色和浅蓝 , 就是想令各位心旷神怡 , 够走心 😍

索引阶段

1) 知识库构建

在这个步骤中,首先需要收集和整理大量的文本资料。这些资料可以是各种来源,如学术论文、新闻报道、维基百科等。这些文本资料构成了所谓的“知识库”。

2) 文本预处理

对收集到的文本进行分析和预处理,如分词、去除停用词、标注词性等。

这可以帮助后续的检索系统更快速、准确地找到相关信息。

3) 建立索引

使用特定的算法,如对预处理后的文本内容向量化处理后进行索引。这样在后续的查询阶段,可以迅速定位与查询相关的文本片段。

图的上半部分 索引阶段 已经跑通 , 只是一些细节和优化有待探索

索引阶段学习总结如下 :

查询阶段

1) 问题解析

当用户提出一个问题或查询请求时,首先需要对其进行解析,确定关键词

或关键短语,以便进行高效的检索。

2) 上下文检索

基于前一步解析出的关键信息,查询系统从知识库中检索出与之相关的

文本片段,即上下文。

3) 生成回答

拥有相关的上下文信息后,大语言模型(LLM)会将其作为输入,结合问题生成最终的答案。这使得答案更加精确和具有针对性。

LangChain提供了多种先进的技术能力,其中“检索增强生成”是其最主要的功能之一。

后期将会重点学习检索 Retriever ~ , 这一次 ,主要是在了解 RAG 的流程

RAG 原理

结合上述图解 , 以及顾名思义 : 检索(R) => 增强(A) => 生成(G)

  1. 检索(R)

    • 首先,RAG 的起点是检索过程。它会根据用户的问题或输入,在外部信息源中搜索相关信息
  2. 增强(A)

    • 检索到的信息会对模型的输入进行增强。它会将检索到的信息作为额外的上下文提供给模型,使模型能够利用这些信息来生成更有依据和更准确的回答。
  3. 生成(G)

    • 最后,模型根据输入增强的信息进行生成。RAG 的生成过程是基于检索到的信息和原始输入共同完成的,因此它生成的答案可以更具针对性和相关性,能够充分利用外部信息源的丰富内容。

RAG 与 Fine-turing

RAG 即我们上面的检索增强生成 , Fine- turing 即微调

对比 RAG 和 微调 , 他们本质的区别是 : RAG 不改变大模型的参数 , 但是 Fine-turing 会改变大模型的参数

image.png

我么探讨一下

  • 使用RAG
  • 还是微调

1) 使用 RAG 的场景


(1)需要外部信息源:当应用需要回答关于现实世界的特定问题时,RAG 具有独特的优势例如,对于最新的科技新闻、历史事件或特定的科学事实等,RAG能够从外部信息源(如唯基百科)中检索并生成答案。

在我之前的文章: Langchain.js | Ducument Loader👈| 文本这样加载😱

我就提及到 : 使用 google 的搜索引擎 api 加载数据 , 部分如下 :

(2)有限的训练数据:对于那些只有 有限训练数据的项目,RAG可以利用其检索功能从更大的数据集中学习,从而弥补训练数据的不足

2)使用微调的场景


(1)追求高精度 : 微调针对特定任务优化模型,使其更加专业和精确。当准确性是关键需求时,如医学诊断或金融预测,微调是首选方法。

(2)充足训练数据 : 微调需要大量的任务相关训练数据。当你拥有这些数据时,通过微调,模型可以在特定领域获得更好的表现。

(3)追求快速响应 : 尽管微调可能会使模型稍显复杂,但它仍然比RAG 更快。因为微调模型直接生成答案,不需要进行外部信息的检索。当应用场景需要快速反馈,例如紧急响应系统时,微调是更好的选择。

综上所述即

  • RAG

    • 核心在于从外部数据源检索信息,结合自身能力生成答案,更注重信息的检索和整合能力,能有效利用外部的大规模数据,不依赖大量的训练数据。
  • 微调

    • 主要是对模型进行调整优化,使其更好地适应特定任务,通过大量任务相关数据对模型参数进行细致调整,侧重于利用自身已有的大量数据对模型进行针对性训练,提高其在特定领域的专业性和精确性。

总结

学习了

  • 什么是 RAG
  • RAG 流程
  • RAG 原理
  • RAG 与 Fine-turing 的区别

在 RAG 流程中 , 分为

  • 索引阶段
  • 查询阶段

索引阶段 , 已经轻度学习 , 接下来 , 进入查询阶段的学习 ~ , 😋 , 如何根据用户的提问 , 查询到准确的回答 , 避免答非所问 , This is a question !