用例(User Case)
问答(QuestionAnswering)
索引(Index)

使用 RAG 进行问答

概述

LLM 所能实现的最强大的应用之一是复杂的问答(Q&A)聊天机器人。这类应用可以回答关于特定源信息的问题。这些应用使用一种称为检索增强生成(Retrieval Augmented Generation,RAG)的技术。

什么是 RAG?

RAG 是一种用额外数据增强 LLM 知识的技术。

LLM 可以推理广泛的主题,但它们所知仅限于训练时所依据的、截至某个特定时间点的公开数据。如果你想构建能够推理私有数据或模型截止日期之后引入的数据的 AI 应用,你需要用模型所需的具体信息来增强它的知识。将适当的信息取回并插入模型提示的过程称为检索增强生成(RAG)。

LangChain 有许多组件旨在帮助构建问答应用,以及更广泛的 RAG 应用。

注意:这里我们重点介绍非结构化数据的问答。我们在其他地方涵盖的两个 RAG 用例是:

RAG 架构

一个典型的 RAG 应用有两个主要组件:

索引(Indexing):从源摄取数据并对其建立索引的流水线。这通常离线进行。

检索与生成(Retrieval and generation):实际的 RAG 链,它在运行时接收用户查询,从索引中检索相关数据,然后将其传递给模型。

从原始数据到答案最常见的一整套流程如下:

索引

  1. 加载(Load):首先我们需要加载数据。这通过 文档加载器 完成。
  2. 拆分(Split):文本拆分器 将大型 Document 拆分为较小的块。这对于建立索引和将数据传入模型都很有用,因为大块更难搜索,并且无法放入模型有限的上下文窗口。
  3. 存储(Store):我们需要一个地方来存储和索引我们的拆分,以便之后可以对其搜索。这通常使用 向量存储 和 嵌入 模型来完成。

index_diagram

检索与生成

  1. 检索(Retrieve):给定用户输入,使用 检索器 从存储中检索相关的拆分。
  2. 生成(Generate):聊天模型/LLM 使用包含问题和检索数据的提示来生成答案

retrieval_diagram

目录