Advertisement

第8章:LangChain检索增强生成RAG--1概述

阅读量:

本章主要介绍基于 LangChain4j 中的 RAG(Retrieval-Augmented Generation,检索增强生成)
概念及其实现方式。RAG 是一种通过检索相关知识来增强语言模型生成能力的技术,特别适用于需要结合特定领域知识或私有数据的场景

RAG(检索增强生成)| LangChain4j

1. RAG 是什么?

语言模型(LLM)的知识仅限于其训练数据。如果希望让 LLM 了解特定领域的知识或私有数据,可以采用以下方法:

  • 使用 RAG(检索增强生成),本文将详细介绍。
  • 使用你的数据对 LLM 进行微调(fine-tuning)。
  • 结合使用 RAG 和微调。

RAG 的核心思想 :在将提示(prompt)发送给语言模型之前,从你的数据中找到并注入相关信息片段。这样,LLM 将获得(希望是)相关的知识,并能够利用这些知识生成回答,从而降低“幻觉”(生成无关内容)的可能性。

2. RAG 的工作原理

RAG 的工作原理可以分为两个阶段:索引(Indexing)和检索(Retrieval)。

2.1 索引阶段(Indexing)

索引阶段的目标是预处理文档,以便在检索阶段能够高效地搜索相关信息。具体步骤可能因检索方法而异。对于向量搜索(vector search),通常包括以下步骤:

  • 清洗文档。
  • 为文档添加额外数据和元数据。
  • 将文档分割成较小的片段(称为“分块”或 chunking)。
  • 将这些片段嵌入为向量。
  • 最后,将向量存储在嵌入存储(embedding store,也称为向量数据库)中。

索引阶段通常是离线进行的,用户不需要等待其完成。例如,可以通过每周一次的定时任务(如 cron job)重新索引公司内部文档。索引代码也可以是一个独立的应用程序,专门处理索引任务。
然而,在某些情况下,用户可能希望上传自定义文档,以便让 LLM 访问这些文档。在这种情况下,索引需要在线进行,并成为主应用程序的一部分。

下面是一张索引阶段的简化图,便于理解
在这里插入图片描述

2.2 检索阶段(Retrieval)

检索阶段通常在线进行,当用户提交问题时,需要使用已索引的文档回答问题。具体步骤可能因检索方法而异。对于向量搜索,通常包括以下步骤:

  • 将用户的查询(问题)嵌入为向量。
  • 在嵌入存储中执行相似性搜索。
  • 将检索到的相关片段(原始文档的部分内容)注入到提示中,并发送给 LLM。

下面是检索阶段的简略图,辅助理解
在这里插入图片描述

3. LangChain4j 中的 RAG 实现

LangChain4j 提供了三种 RAG 实现方式:

  • Easy RAG :最简单的 RAG 入门方式。
  • Naive RAG :使用向量搜索的基本 RAG 实现。
  • Advanced RAG :一个模块化的 RAG 框架,支持额外的步骤,如查询转换、从多个来源检索和重新排序。

因为每个不同实现章节的内容比较多,这里分开来讲,请持续关注后续章节的更新

导读说明:
这是LangChain开发智能体的系列文档,欢迎连读

全部评论 (0)

还没有任何评论哟~