RAG From Scratch: Part 1 (Overview) by LangChain

RAG From Scratch: Part 1 (Overview) by LangChain

整理后的笔记

RAG基本原理及概述

在这里插入图片描述

一、RAG的动机与背景

  1. 数据局限性:大语言模型(LLMs)预训练虽处理了大量token,但对于私人数据或最新数据仍无法涵盖,其预训练的token数量虽庞大,但相对特定数据而言仍是有限的。
  2. 上下文窗口扩展:LLMs的上下文窗口不断增大,从最初的几千个token扩展到更多,能容纳几十页到几百页的内容,这为从外部数据源引入信息提供了可能。
    在这里插入图片描述

二、对LLMs的新视角

  将LLMs看作新型操作系统的内核,连接外部数据是这种新兴操作系统开发的关键功能。
在这里插入图片描述

三、RAG的通用范式

  检索生成(RAG)通常包含三个阶段:

  1. 索引阶段:对外部文档进行索引,以便根据输入查询能轻松检索相关文档。
  2. 检索阶段:根据用户提出的问题,检索与之相关的文档。
  3. 生成阶段:将检索到的文档输入到LLM中,基于这些文档生成答案。
    在这里插入图片描述
    在这里插入图片描述

四、后续内容规划

  本次从基础开始构建对RAG的全面理解,RAG包含索引、检索和生成三个基本组件,衍生出多种方法和技巧。未来视频将详细介绍这些内容,每个视频控制在五分钟左右。接下来三个视频先介绍索引、检索和生成背后的基本思想,再在此基础上探讨更高级的主题。
在这里插入图片描述

五、代码演示

在这里插入图片描述

  1. 前期准备共享公开代码仓库,在笔记本中安装相关软件包,设置LSmith键的环境变量(LSmith对跟踪可观察性,构建RAG管道很有用)。
  2. 代码流程
    • 加载与拆分文档:加载博客文章并拆分,设置块大小为一千字符。
    • 嵌入与索引:对每个拆分进行嵌入,并索引到向量存储(采用开放式嵌入,使用本地运行的色度向量存储)。
    • 定义检索器与提示:找到检索器,为RAG定义提示。
    • 设置LLM与链:定义LLM,进行小的文档处理,设置链。该链接受输入问题,运行检索器获取相关文档,将问题和检索文档放入提示中,传递给LLM并格式化为字符串输出。
  3. LSmith查看:通过LSmith可查看运行情况,包括问题、输出、检索器、检索文档以及最终传递给LM的提示(提示内容为作为QA任务助理,使用检索内容回答问题,包含问题、检索到的内容和答案) 。本次只是对RAG工作原理的概括概述,未来会更详细分解介绍各部分。

六、视频原文

第一页:介绍RAG的一些基本原理,并逐步介绍高级主题
RAG的主要动机之一就是LLMs还没看到你可能关心的所有数据,所以像私人数据或者非常新的数据不会包含在这些LMs的预训练运行中,你可以在xaxis的图表上看到他们预训练的token数量,当然这个数量非常大,但当然,相对于你关心的私人数据或例如最近的数据,它仍然总是有限的,但还有另一个有趣的考虑因素是LLMs的上下文窗口实际上越来越大,所以你知道从几千个token到几千个token,这代表了几十页到几百页,我们可以从外部来源将信息放入其中

第二页:一种思考方式是LLMs是一种新型操作系统的内核,并将它们连接起来外部数据是这种新兴操作系统开发中非常重要的功能,

第三页:因此检索生成或者RAG是一种非常流行的通用范式,通常涉及三个阶段,因此第一阶段是索引一些外部文档,以便可以根据输入查询轻松检索他们,例如,我们提出一个问题,我们检索与该问题相关的文档,我们将这些文档输入到最终生成阶段的LLM中,以基于这些检索文档生成答案。

第四页:现在,我们从头开始,但我们将构建这种更广泛的rag视图,您可以看到这里有很多有趣的方法和技巧,他们从索引检索和生成的三个基本组件中展开。未来的视频实际上将详细介绍这些内容,我们将尝试将每个视频保持在很短的时间内,比如五分钟,但我们首先花很多时间讨论一些更高级的主题,在接下来的三个视频中,我将仅介绍索引背后的基本思想,检索和生成,然后我们在此基础上构建更高级的主题,

第五页:现在我想展示一个快速的代码演示,因为我们想让这些视频也有点互动性,所以就在这里,这个repo将被共享,他是公开的,我打开了一个笔记本,我刚刚安装了一些软件包,并为我的LSmith键设置了一些环境变量,我个人建议他对于跟踪可观察性非常有用,特别是当你构建rag管道时,所以我将在这里展示的是rag快速启动的代码,它链接在这里,我将运行他,然后我将逐步介绍正在发生的一切,所以,实际上,如果我们回想一下,我们的图表,我们在这里所做的就是加载文档,在这种情况下,我正在加载博客文章,然后我们正在拆分他们,我们将在未来讨论这个问题,比如拆分为什么重要的简短视频,但现在只是认识到我们正在拆分它们或设置一个块,你知道一千个字符的大小,所以我们将文档拆分,每个拆分都嵌入并索引到这个向量存储中,所以我们说我们选择了开放式嵌入,我们正在使用色度,我们的向量存储在本地运行,现在我们找到这个检索器,然后我们为RAG定义了一个提示,我们已经定义了我们的LLM,我们已经做了一些小的文档处理,我们设置了这个链,它基本上会接受我们的输入问题,运行我们的检索器来获取相关文档,将检索文档和我们的问题放入我们的提示中,将其传递给LM,将输入格式化为字符串,我们可以看到这是我们的输出,现在我们可以打开lsmith,我们实际上可以看到它是如何运行的,所以这是我们的问题,这是我们的输出,我们实际上可以看看这是我们的检索器,这是我们的检索文档,所以这非常好,所以最终这是我们传递给LM的提示,你是QA任务的助理,使用以下检索内容来回答问题,这是我们的问题,然后这是我们检索到的所有内容,以及DRS答案,所以这个只是对RAG的工作原理进行了非常概括的概述,在将来的短视频中,我们将对这些部分进行分解,我会更详细地介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值