首页 > 其他分享 >吴恩达大模型教程笔记-一-

吴恩达大模型教程笔记-一-

时间:2024-10-01 18:13:16浏览次数:9  
标签:吴恩达 提示 可以 教程 笔记 文档 然后 我们 加载

吴恩达大模型教程笔记(一)

【LangChain大模型应用开发】DeepLearning.AI - P1:基于LangChain的大语言模型应用开发1——介绍 - 吴恩达大模型 - BV1iZ421M79T

欢迎参加语言链课程。

通过提示LLM开发应用,现在开发AI应用更快,应用需多次提示LM并解析输出,因此需编写大量胶水代码,Harrison Chase创建的语言链简化此过程,很高兴Harrison能来。

与深度学习合作开发此课程,AI教授如何使用此工具,感谢邀请,我真的很高兴来到这里,长链最初是一个开源框架,当我与领域内的一群人交谈时,他们正在构建更复杂的应用程序,并看到了开发过程中的一些共同抽象。

我们一直对长链社区的采纳感到兴奋,所以期待与这里的每个人分享,并期待看到人们用它构建什么,实际上,作为长链动力的标志,但也有数百开源贡献者,这对快速开发至关重要,团队以惊人速度发布代码和功能。

所以希望短期课程后,你能快速用Line Chain开发酷应用,也许你甚至决定回馈开源Line Chain,Lang Chain是构建LM应用的开源框架,有两个不同包,一个是Python。

一个是JavaScript,专注于组合和模块化。

它们有许多可单独使用或相互结合的独立组件,这是关键价值之一。

另一个关键价值是一系列不同的用例,因此,这些模块化组件可以组合成更多端到端应用程序,并且使开始使用这些用例变得非常容易。

我们将涵盖lang chain的常见组件。

我们将讨论模型,我们将讨论提示,这是如何让模型做有用和有趣的事情。

我们将讨论索引,数据摄入方式有哪些。

这样您就可以与模型结合,然后讨论端到端用例的链条,连同代理商,这些是令人兴奋的端到端用例类型,将模型用作推理引擎。

我们也感谢阿尼什·戈拉,与哈里森·蔡斯一起创办的人是谁,深入思考这些材料,并协助制作这门短课。

在深度学习AI方面,杰夫,路德维希,埃迪舒和迪亚拉作为院长也贡献了这些材料。

那么让我们继续看下一个视频,在那里我们将学习空白模型。

【LangChain大模型应用开发】DeepLearning.AI - P10:2——文档加载 - 吴恩达大模型 - BV1iZ421M79T

为了创建一个应用程序,您可以在其中与您的数据聊天,您首先必须将数据加载到可以使用的格式中,这就是长链文档加载器发挥作用的地方,我们有80多种不同类型的文档加载器,在这节课中,我们将讨论一些最重要的问题。

让您对这个概念感到满意,一般来说,我们跳进去吧,文档加载器处理访问和转换数据的细节,从各种不同的格式和来源变成标准化的格式,我们可以在不同的地方从类似的网站加载数据,不同数据库,YouTube。

这些文档可以有不同的数据类型,比如PDF。

html json,然后呢,所以,文档加载器的全部目的是获取各种数据源,并将它们加载到标准文档对象中,它由内容和相关的元数据组成。

链接链中有许多不同类型的文档加载器,我们没有时间把它们都盖住。

但这里有一个八十个的粗略分类,另外,我们有很多处理加载非结构化数据的方法,就像来自公共数据源的文本文件,比如YouTube。

推特,黑客新闻,还有更多的处理加载非结构化数据,从专有数据源,您或您的公司可能有像Figma概念,文档加载器还可用于加载结构化数据,表格格式的数据,可能只是在其中一个单元格或行中有一些文本数据。

你还想做的问题,回答,或语义搜索,所以这里的来源包括像AirByte这样的东西,条纹,可空气。

好了现在,让我们跳到有趣的东西,实际使用文档加载器,第一批,我们将加载一些我们需要的环境变量,比如openai api键,我们要处理的第一类文档是PDF,因此,让我们从长链导入相关的文档加载器。

我们要用圆周率PDF漂浮物,我们已将一堆PDF文件装入工作区的文档文件夹。

所以让我们选择一个,把它放在装载机里,现在让我们通过调用load方法来加载文档,让我们看看我们到底装了什么,所以这个,默认情况下,将加载文档列表,在这种情况下,这个PDF中有22个不同的页面。

每一个都是自己独特的文档,让我们来看看第一个,看看它是由什么组成的,文档的第一件事是一些页面内容,哪个是页面的内容,这可能有点长,所以让我们打印出最初的几百个字符。

另一个真正重要的信息是与每个文档相关联的元数据,这可以使用元数据元素访问。

你可以看到这里有两个不同的部分,一是源头信息,这是PDF,我们从另一个加载的文件的名称是页面字段,这与PDF的页面相对应,它是从我们将要看到的下一种文档加载程序加载的,是从YouTube上加载的。

YouTube上有很多有趣的内容,所以很多人使用这个文档加载器可以问问题,他们最喜欢的视频或讲座,或者类似的东西。

我们将在这里进口一些不同的东西,关键部分是YouTube音频加载器,从YouTube视频中加载音频文件,另一个关键部分是开放的AI耳语解析器,这将使用openai的耳语模型,一种语音到文本模型。

将YouTube音频转换为我们可以使用的文本格式。

我们现在可以指定一个URL。

指定保存音频文件的目录,然后创建通用加载程序作为这个YouTube音频加载程序的组合,结合openai耳语解析器,然后我们可以调用加载器点加载来加载与这个YouTube相对应的文档。

这可能需要几分钟。

所以我们要加快速度,现在它已经装完了。

我们可以看看我们加载的页面内容,这是YouTube视频的第一部分,现在是暂停的好时机,去选择你最喜欢的YouTube视频,看看这个转录是否适合你。

我们要看的下一组文件,如何从Internet加载URL,互联网上有很多非常棒的教育内容,那不是很酷吗?如果你能和它聊天。

我们将通过从链接链导入基于Web的加载器来实现这一点。

然后我们可以选择任何URL,我们最喜欢的URL,我们将从这个GitHub页面中选择一个标记文件,并为它创建一个加载器。

然后接下来我们可以调用加载器点加载,然后我们可以看看页面的内容。

在这里你会注意到有很多空白。

然后是一些初始文本,然后是更多的文本,这是一个很好的例子,说明为什么您实际上需要对信息进行一些后处理,使其成为可行的格式。

最后,我们将介绍如何从Concept加载数据,Notion是一个非常受欢迎的个人和公司数据存储,很多人创造了聊天机器人,与你笔记本上的概念数据库对话。

您将看到有关如何将数据从概念数据库导出为格式的说明,通过它我们可以把它加载到链接链中,一旦我们有了那种格式,我们可以使用概念目录加载器来加载数据,得到我们可以处理的文件。

如果我们看看这里的内容,我们可以看到它是降价格式的,这份概念文件来自混合的员工手册,我相信很多听众都认为,并有一些概念数据库,他们想与之聊天。

所以这是一个很好的机会去导出这些数据。

把它带进来,开始用这种格式工作,这里的文档加载到此结束,我们已经介绍了如何从各种来源加载数据,并将其放入标准化文档界面,然而,这些文件仍然相当大。

在下一节中,我们将学习如何把它们分成更小的块,这是相关的,也是重要的,因为当你在做这个检索增强生成时,您只需要检索最相关的内容片段,所以您不想选择我们在这里加载的整个文档,但只有这一段。

或者一些与你所说的最相关的句子,这也是一个更好的机会来思考数据的来源,我们目前没有装载机,但你可能还是想探索谁知道。

也许你甚至可以做一个公关链接。

【LangChain大模型应用开发】DeepLearning.AI - P11:3——文档分割 - 吴恩达大模型 - BV1iZ421M79T

我们刚刚讨论了如何将文档加载到标准格式,现在我们要讨论如何把它们分成更小的块,这听起来可能很容易,但这里有很多微妙之处,对未来产生了巨大的影响,让我们跳进去吧,将数据加载到文档格式后会发生文档拆分。

但在它进入矢量存储之前,这可能看起来很简单,你可以根据每个字符的长度或类似的东西来分割块。

但作为一个例子,为什么这既棘手又非常重要,让我们看一下这里的这个例子,我们有一个关于丰田凯美瑞的句子和一些规格。

如果我们做一个简单的分裂,我们可以把句子的一部分分成一大块,句子的另一部分在另一大块中,然后当我们试图回答一个问题时。

关于凯美瑞的规格是什么。

我们实际上在这两个块中都没有正确的信息,所以它分裂了,所以我们不能正确地回答这个问题,因此,在如何分割大块时,有很多细微差别和重要性,这样你就可以把语义上相关的块放在一起。

车道链中所有文本拆分器的基础都涉及到在块上拆分,在一些块大小和一些块重叠的情况下。

所以我们在下面有一个小图来显示它是什么样子的,所以块大小对应于块的大小,块的大小可以用几种不同的方法来测量,我们将在这节课中讨论其中的一些,所以我们允许传入一个length函数来测量块的大小。

这通常是字符或令牌,块重叠通常保持为两个块之间的一点重叠,就像一扇滑动的窗户,当我们从一个移动到另一个,这允许相同的上下文在一个块的末尾,在另一个的开始,并有助于创造一些一致性的概念。

文本拆分器和链接链都有一个创建文档和拆分文档的方法,这涉及到引擎盖下相同的逻辑,它只是暴露了一个稍微不同的界面。

一个接收文本列表,另一个接收文件列表,在长链中有很多不同类型的分配器,我们将在这节课中介绍其中的一些,但我会鼓励你在业余时间看看其余的,这些文本拆分器在一系列维度上有所不同。

它们可以根据如何分割大块而有所不同,里面有什么角色,它们可以根据,他们如何测量块的长度,是按人物写的吗,是用代币吗,甚至有些人使用其他较小的模型来确定句子的结尾可能是,用它来分割大块。

分割成块的另一个重要部分也是元数据。

在所有块中维护相同的元数据,但也会在相关时添加新的元数据,所以有一些文本拆分器真正关注于此。

块的拆分通常可以特定于,我们正在处理的文档类型。

当您在代码上分裂时,这一点非常明显,所以我们有一个语言文本拆分器,它有一堆不同的分隔符。

对于各种不同的语言。

就像蟒蛇,Ruby c,当拆分这些文件时,它考虑到了这些不同的语言和这些语言的相关分隔符。

当它先劈开的时候,我们将像以前一样通过加载打开的ai api密钥来设置环境。

接下来,我们将导入两种最常见的文本拆分器和长链。

递归字符文本拆分器和字符文本拆分器,我们将首先讨论一些玩具用例,只是为了了解这些到底是做什么的,所以我们要设置一个相对较小的26块大小。

更小的四块重叠,好让我们看看这些能做什么。

让我们将这两个不同的文本拆分器初始化为r拆分器和c拆分器,然后让我们来看看几个不同的用例。

让我们加载第一个学期,一直到z,让我们看看当我们使用各种拆分器时会发生什么。

当我们用递归字符文本拆分器拆分它时。

它最终仍然是一根弦,这是因为它有26个字符长,我们指定了26的块大小,所以现在甚至不需要在这里做任何分裂,让我们用稍微长一点的绳子来做,它比我们指定的块大小的26个字符长。

这里我们可以看到创建了两个不同的块,第一个以z结尾,那就是两个六个字,下一个我们可以看到的是以W开头的,X,Y,Z,这就是四块重叠,然后它继续与字符串的其余部分,让我们看一个稍微复杂一点的字符串。

我们在角色之间有一堆空格,我们现在可以看到它分成三块,因为有空间,所以它占用了更多的空间,所以如果我们看看重叠,我们可以在第一个中看到,有llm,l和m也出现在第二个中,好像只有两个角色。

但是由于l和n之间的空间,然后在L之前和M之后,这实际上算作组成块重叠的四个,现在让我们尝试使用字符文本拆分器。

当我们运行它时,我们可以看到,它实际上根本没有试图分裂它,那么这里发生了什么,问题是字符文本在单个字符上拆分。

默认情况下,该字符是一个新的行字符,但这里没有新的,如果我们将分隔符设置为空白。

我们可以看到会发生什么,然后呢。

这里和以前一样分裂,这是暂停视频并尝试一些新示例的好点,都是你编的不同的琴弦,然后交换分离器,看看会发生什么,实验块大小和块重叠也很有趣,并大致了解几个玩具例子中发生了什么。

所以当我们转向更多现实世界的例子时,你会对幕后发生的事情有很好的直觉。

现在呢,让我们用一些更真实的例子来尝试一下。

我们这里有很长一段,我们可以看到,就在这里,我们有这个双新线符号。

它是段落之间的典型分隔符,让我们看看这篇课文的长度。

我们可以看到它大约是500,现在让我们定义两个文本拆分器,我们将像以前一样使用字符文本拆分器,以空间为分隔符,然后我们将初始化递归字符文本拆分器,在这里我们传递一个分隔符列表。

这些是默认的分隔符,但我们只是把它们放在这个笔记本里,以便更好地显示发生了什么。

所以我们可以看到我们有一个双新行的列表,单新线空间,然后什么都没有,一个空字符串,这些意味着当你拆分一段文本时,它将首先尝试用两条新线来分割它,然后如果它还需要更多地分割单个块,它将继续单行新线。

如果它还需要做更多,它继续到空间。

最后它就会一个字符一个字符地,如果它真的需要这么做,看看它们在上面的文本中的表现。

我们可以看到字符文本拆分器在空格上拆分。

所以我们以句子中间奇怪的分离而告终。

递归文本拆分器首先尝试在双新行上拆分,所以这里它把它分成两段,即使第一个比指定的450个字符短,这可能是一个更好的分裂,因为现在两个段落各自是自己的段落在块中,而不是在句子中间分开。

现在我们把它分成更小的块,只是为了更好地了解发生了什么,我们还将添加句点分隔符。

这是为了在句子之间分开,如果我们运行这个文本拆分器,我们可以看到句子上的分裂,但经期实际上在错误的地方。

这是因为场景下发生的Reg X,为了解决这个问题,我们实际上可以通过查看后面的内容来指定一个稍微复杂一点的reg x,现在如果我们运行这个,我们可以看到它被分成句子,它是正确地分裂的,句号在正确的地方。

现在让我们在一个更真实的例子上这样做。

使用我们在第一个文档加载部分中使用的PDF文件之一,让我们把它装进去,然后让我们在这里定义我们的文本拆分器,我们在这里传递length函数,这是用孤,内置的蟒蛇,这是默认值。

但我们只是为了更清楚而具体说明。

幕后发生了什么,这是计算字符的长度,因为我们现在想使用文档,我们使用拆分文档的方法,我们正在传递一份文件清单。

如果我们将这些文件的长度与原始页面的长度进行比较。

我们可以看到已经创建了更多的文档。

因为这种分裂,我们也可以用我们在第一节课中使用的db概念来做类似的事情。

并再次比较原始文档和新拆分文档的链接。

我们可以看到我们有更多的文件,现在我们已经做了所有的分裂,这是一个很好的点暂停视频和尝试一些新的例子到目前为止。

我们已经根据角色做了所有的拆分,但还有另一种方法,这是基于代币,为此,让我们导入令牌文本拆分器。

这之所以有用,是因为lms通常有上下文窗口,由令牌计数指定的,因此,了解代币是什么以及它们出现在哪里是很重要的,然后我们可以在他们身上分头行动,对LLM如何看待他们有一个更有代表性的想法。

为了真正了解代币和字符之间的区别,让我们初始化令牌文本拆分器,块大小为1,块重叠为零,因此,这将把任何文本拆分为相关令牌的列表,让我们创建一个有趣的编造文本。

当我们分开的时候,我们可以看到它分裂成一堆不同的代币,它们的长度都有点不同,其中的字符数,所以第一个就是foo,然后你有一个空间,然后是酒吧,然后你在B中有一个空格,然后是一个Z,然后是z。

然后是foo,这显示了在字符上拆分和在令牌上拆分之间的一点区别,让我们将此应用于上面加载的文档,以类似的方式,以类似的方式,我们可以调用页面上的拆分文档。

如果我们看一下第一份文件,我们有了新的拆分文档,页面内容大致是标题,然后我们得到了源的元数据和它来自的页面,您可以在这里看到源的元数据,块中的页面与原始文档中的页面相同,所以如果我们看看。

只是为了确保第0页,元数据,我们可以看到它是一字排开的,这很好,它将元数据适当地传递到每个块,但也有一些情况,您实际上希望向块添加更多的元数据,当你把它们分开的时候,这可以包含文档中的位置等信息。

这一大块来自,它在哪里,相对于文档中的其他事物或概念,一般来说,这些信息可以在回答问题时使用,提供更多关于这个块到底要看什么的上下文,这方面的一个具体例子,让我们看看另一种类型的文本拆分器。

它实际上将信息添加到每个块的元数据中,您现在可以暂停并尝试您想出的几个示例。

此文本拆分器是标记头文本拆分器,它会做的是,它将根据标头或任何子标头拆分标记文件,然后我将把这些标题作为内容添加到元数据字段中,这将被传递给任何源于这些分裂的块。

让我们先做一个玩具示例,然后玩一下文档,我们有一个标题,然后是第一章的副标题,然后我们得到了一些句子,然后是一个更小的子标题的另一部分。

然后我们跳回到第二章,在那里的一些句子中,让我们定义一个要拆分的标题列表,那些标题的名字,首先我们有一个标签我们称它为标题一,然后我们有两个标签标题二,三个标签标题三。

然后,我们可以用这些标头初始化markdown标头文本拆分器,然后拆分我们上面的玩具示例,如果我们看几个例子,我们可以看到第一个有内容嗨,我是吉姆嗨,我是乔,现在在元数据中,我们有标题一。

然后我们把它作为标题和标题二作为第一章。

这是从这里传来的。

在上面的示例文档中,让我们来看看下一个,我们可以看到这里我们跳到了一个更小的部分,所以我们得到了嗨的内容,我是兰斯,现在我们不仅有头球,也是头球二,也是头球三,这又一次来自内容和名称。

在上面的降价文档中。

让我们在一个现实世界的例子中尝试一下,在我们使用concept目录加载器加载concept目录之前,它加载了文件来标记。

与标记标头拆分器相关,所以让我们加载这些文档,然后将标头为1的markdown拆分器定义为单个标签,标题二作为双重标签。

我们对文本进行拆分,如果我们看一下它们,我们就会得到拆分。

我们可以看到第一个有一些页面的内容,现在如果我们向下滚动到元数据,我们可以看到,我们已经加载了标题一作为blendel的员工手册,我们现在已经讨论了如何使用适当的元数据获得语义上相关的块。

下一步是将这些数据块移动到向量存储中。

【LangChain大模型应用开发】DeepLearning.AI - P12:4——向量和嵌入 - 吴恩达大模型 - BV1iZ421M79T

我们现在把文件分成了小的,语义有意义的块,是时候把这些块放入索引中了,在那里我们可以很容易地找回它们,当需要回答关于这个数据库的问题时,我们将利用嵌入和矢量存储,让我们看看这些是什么。

我们在上一节课中简要介绍过,但我们将重新审视它,原因有几个。

第一批,这些对于在数据上构建聊天机器人非常重要。

第二,我们要深入一点,我们将讨论边缘情况,这个通用方法实际上可能失败的地方。

别担心,我们以后会解决的,但现在让我们讨论矢量存储和嵌入。

这是在文本拆分之后出现的,当我们准备好以易于访问的格式存储文档时,什么是嵌入。

他们拿了一条短信,他们创建了文本的数字表示。

具有相似内容的文本将在此数字空间中具有相似的向量。

意思就是,然后我们可以比较这些向量,找到相似的文本片段。

所以在下面的例子中,我们可以看到这两个关于宠物的句子非常相似。

而关于宠物的句子和关于汽车的句子不是很相似。

作为完整端到端工作流的提醒,我们从文件开始。

然后我们创建这些文档的较小拆分,然后我们创建这些文档的嵌入。

然后我们把所有这些都存储在向量存储中,向量存储是一个数据库,您以后可以在其中轻松地查找类似的向量。

当我们试图找到与手头问题相关的文档时,这将变得有用。

然后我们就可以回答手头的问题了,创建嵌入,然后与向量存储中的所有不同向量进行比较。

然后挑出最相似的末端,然后,我们把这些和大多数相似的块,把它们和问题一起传递给LLM,得到一个答案。

我们稍后会讨论所有这些,现在是深入研究嵌入和矢量存储本身的时候了。

开始,我们将再次设置适当的环境变量。

从现在开始我们要处理同一套文件,这些是CS二十九节课,我们要装载,这里有几个,请注意,我们实际上要复制,第一讲,这是为了模拟一些脏数据。

加载文档后,然后,我们可以使用递归字符文本拆分器来创建块。

我们可以看到我们现在已经创造了200多个不同的块,是时候进入下一个部分并为所有这些创建嵌入了。

在跳入真实世界的示例之前,我们将使用openai来创建这些嵌入。

让我们用几个玩具测试用例来尝试一下。

只是为了了解引擎盖下发生了什么,我们有几个例句,其中前两个非常相似。

第三个是没有关系的。

然后,我们可以使用嵌入类为每个句子创建嵌入。

然后我们可以使用Numpy来比较它们,看看哪些是最相似的。

我们期望前两句应该非常相似,然后第一个和第二个与第三个相比不应该几乎相似。

我们将使用点积来比较两个嵌入。

如果你不知道什么是点积,那很好,重要的是要知道越高越好。

这里,我们可以看到前两个嵌入有一个相当高的分数点9。6。

如果我们将第一个嵌入与第三个嵌入进行比较。

我们可以看到它在点七明显较低,如果我们把第二个和第三个比较。

我们可以看到它是正确的大约在点七六。

现在是停顿一下,尝试一下你自己的句子的好时机,看看点积是什么。

现在让我们回到现实世界的例子,现在是为PDF的所有块创建嵌入的时候了。

然后把它们储存在一个矢量中,存储我们将在本课中使用的向量存储是色度,所以让我们导入莱恩链,它与30多个不同的矢量商店集成在一起。

我们选择色度是因为它在内存中是轻量级的。

这使得它很容易站起来开始。

还有其他Vector商店提供托管解决方案,当您试图持久保存大量数据时,这可能很有用,或持久存在于云存储中。

我们要把这个矢量存储保存在某个地方,这样我们就可以在以后的课程中使用它。

因此,让我们创建一个名为持久化目录的变量,我们将在稍后的《色度博士》中使用。

我们也要确保那里什么都没有。

如果那里已经有东西了,它可以把东西扔掉,我们不希望这种情况发生。

所以让我们rm破折号rf文档色度,只是为了确保那里什么都没有。

现在让我们创建向量存储,所以我们从以分裂方式传递的文档中调用色度,这些是我们之前创建的分裂传递和嵌入。

这是开放的AI嵌入模型,然后传入持久化目录,它是一个特定于色度的关键字参数,允许我们将目录保存到磁盘。

如果我们看看收集数,做完这个之后,我们可以看到它是二百零九,这和我们之前的分裂次数一样。

让我们现在开始使用它,让我们想一个问题,我们可以问这个数据,我们知道这是关于一个课堂讲座。

所以让我们问问是否有任何电子邮件可以寻求帮助,如果我们在课程或材料或类似的事情上需要任何帮助。

我们将使用相似搜索法,我们将通过这个问题,然后我们也通过k等于三,这指定了我们要返回的文档数。

所以如果我们运行它,我们看看文档的长度,所以我们可以看到它是我们指定的三个。

如果我们看看第一份文件的内容。

我们可以看到它实际上是关于一个电子邮件地址,CS二二九破折号QA CS,斯坦福,Edu,这是我们可以发送问题的电子邮件,所有的助教都读了,这样做之后,让我们确保保持向量数据库。

以便我们可以在以后的课程中使用它,通过运行向量db点持久化。

这涵盖了语义搜索的基础知识,并向我们展示了我们可以仅仅基于嵌入就得到相当好的结果。

但它并不完美,在这里,我们将讨论一些边缘案例,并展示它可能失败的地方。

让我们尝试一个新问题,他们怎么说matlab,让我们运行这个指定k等于五的程序,并得到一些结果。

如果我们看看前两个结果,我们可以看到它们实际上是相同的,这是因为当我们加载PDF时,如果你还记得我们故意指定,重复条目,这很糟糕,因为我们在两个不同的块中得到了相同的信息。

我们将把这两个块传递给语言模型,第二条信息没有真正的价值,如果有一个不同的,语言模型可以从中学习的不同块,我们下节课要讲的一件事,如何同时检索相关和不同的块,这是另一种类型的故障模式,也可能发生。

让我们来看看这个问题,他们在第三堂课上对回归说了什么。

当我们拿到文件的时候,直觉上,我们希望他们都是第三讲的一部分。

我们可以检查这一点,因为我们在元数据中有关于它们来自哪些讲座的信息。

因此,让我们循环所有文档并打印出元数据。

我们可以看到实际上有一个结果的组合。

第三讲的一些,有些是第二节课的,有些是第一节课的,关于为什么这是失败的直觉是,第三讲。

事实上,我们只需要第三堂课的文档,这是一个结构化的信息。

但我们只是在做一个基于嵌入的语义查找。

它为整个句子创建了一个嵌入。

它可能更专注于回归,因此,我们得到的结果可能与回归非常相关。

所以如果我们看看第五个,做第一堂课的那个,我们可以看到它确实,事实上,提及回归,所以它开始注意到这一点,但它没有意识到这样一个事实,它只应该查询第三堂课的文件,因为再一次,这是一个结构化的信息。

并没有真正完美地捕捉到,我们创建的语义嵌入,现在是暂停并尝试更多查询的好时机,你还能注意到出现了哪些边缘情况,你也可以玩改变K,检索的文档数,正如你可能已经注意到的,在本课中,我们先用了三个。

然后用了五个,你可以试着把它调整成你想要的任何东西,你可能会注意到,当你把它做大的时候,您将检索更多的文档,但结尾的文件可能不如开头的文件相关,现在我们已经介绍了语义搜索的基础知识,以及一些失效模式。

让我们继续下一节课。

【LangChain大模型应用开发】DeepLearning.AI - P13:5——检索 - 吴恩达大模型 - BV1iZ421M79T

在上一课中,我们介绍了语义搜索的基础知识,并看到它在大量的用例中工作得很好,但我们也看到了一些边缘情况,看到了事情可能会出一点问题,在这节课中,我们将深潜回收,并介绍一些克服这些边缘情况的更先进的方法。

我真的很兴奋,因为我认为检索是一种新的东西,我们谈论的很多技术都出现了,在过去的几个月里,这是一个前沿的话题,所以你们将站在最前沿,我们找点乐子吧,在这节课中,我们将讨论检索,这在查询时很重要。

当您有一个查询进来时。

你想检索最相关的分裂。

我们在上一课中谈到了语义相似性搜索,但我们将在这里讨论一些不同的、更先进的方法。

我们要讨论的第一个问题是最大边际相关性。

所以这背后的想法是。

如果您总是获取与查询最相似的文档,在嵌入空间中,你可能会错过不同的信息,就像我们在一个边缘案例中看到的那样。

在本例中。

我们有一个厨师问所有的白蘑菇,所以如果我们看看最相似的结果,这将是前两份文件,他们有很多类似于子实体查询的信息。

全身都是白的,但我们真的想确保我们也能得到其他信息。

比如它真的有毒,这就是mmr发挥作用的地方,因为它将为一组不同的文档选择。

mmr背后的想法是我们发送一个查询。

然后我们最初得到一组响应,取下划线k是我们可以控制的参数,为了确定我们得到了多少回应。

这完全基于语义相似性,从那里,然后,我们处理这组较小的文档,并优化。

不仅是基于语义相似性的最相关的,但也有多样化的,从这组文档中,我们选择最后一个k返回给用户。

我们可以做的另一种类型的检索是我们所说的自我查询。

因此,当你遇到问题时,这很有用,这些问题不仅仅是关于,要从语义上查找的内容。

但也要提到一些要对其进行筛选的元数据,所以让我们来回答这个问题,1980年拍的关于外星人的电影有哪些?这真的有两个组成部分,它有一个语义部分,外星人咬了。

所以我们想在我们的电影数据库中查找外星人,但它也有一个真正引用每部电影元数据的部分,这就是年份应该是1980年的事实。

我们能做的就是,我们可以使用语言模型本身将最初的问题分成两个独立的东西,筛选器和搜索词。

大多数向量存储支持元数据筛选器,因此,您可以轻松地基于元数据筛选记录。

就像1980年。

最后我们将讨论压缩,这对于只提取检索到的段落中最相关的部分是有用的,例如,在问问题时,你拿回储存在。

即使只有前一两句是压缩的相关部分。

然后,您可以通过语言模型运行所有这些文档,并提取最相关的段。

然后只将最相关的段传递到最终的语言模型调用中。

这是以对语言模型进行更多调用为代价的。

但它也非常有利于将最终答案集中在最重要的事情上。

所以这有点折衷,让我们看看这些不同的技术在起作用。

我们将从加载环境变量开始,就像我们一直做的那样。

进口色度和开放AI是多少,就像我们以前用的那样。

我们可以从收藏中看到,数一数,它有我们之前加载的209份文件。

现在让我们来看看最大边际相关性的例子。

因此,我们将从示例中加载文本,我们有关于蘑菇的信息,对于本例,我们创建一个小数据库,我们可以把它当作玩具使用,例。

我们有问题了,现在我们可以进行相似性搜索,我们将k等于2设置为只返回两个最相关的文档。

我们可以看到没有提到它有毒的事实,现在让我们用mmr运行它,除非通过k等于2,我们还要还两份文件,但是让我们把fetch k设为3,我们把这三份文件,原来。

我们现在可以看到,有毒的信息在我们检索的文档中返回。

让我们回到上一课的一个例子。

当我们询问Matlab并得到文档时,这些文档中有重复的信息来刷新您的记忆。

我们可以看看前两份文件。

只是看看最初的几个字符,因为它们很长,否则,我们可以看到他们是一样的,当我们在这些结果上运行mmr时。

我们可以看到第一个和之前一样。

因为那是最相似的,但当我们进入第二个,我们可以看到它是不同的。

它得到了一些不同的反应。

现在让我们进入self查询示例,这是我们有问题的地方。

他们在第三堂课上对回归说了什么,它返回的结果不仅仅是第三次讲座。

也是第一个和第二个,如果我们用手把它修好。

我们要做的是指定一个元数据过滤器,所以我们传递这个信息,我们希望源等于第三个讲座。

PDF,然后如果我们看看会被检索到的文件,它们都来自那个讲座。

我们可以使用语言模型来为我们做到这一点,所以我们不必手动指定,做这件事。

我们将导入一个语言模型开放AI,我们将导入一个称为自查询检索器的检索器。

然后我们将导入属性信息,我们可以在元数据中指定不同的字段,以及它们对应于什么。

元数据中只有两个字段。

来源和页面,我们填写名字的描述。

每个属性的描述和类型,这些信息实际上将被传递给语言模型。

因此,使其尽可能具有描述性是很重要的。

然后,我们将指定有关此文档存储中实际内容的一些信息,我们将初始化语言模型,然后,我们将使用from lm方法初始化自查询检索器。

并将我们将要查询的底层向量数据库传递到语言模型中,有关描述和元数据的信息,然后我们还将传递详细等于真实的设置。

冗长等于真井,让我们看看引擎盖下面是怎么回事,当LLM推断应该与任何元数据筛选器一起传递的查询时。

当我们运行带有此问题的自查询检索器时。

我们可以看到感谢若等于真的,虽然我们正在打印引擎盖下发生的事情。

我们得到一个回归查询,这是语义位,然后我们得到一个过滤器,在那里我们有一个平等的比较器,在source属性和docs值之间。

然后这个路径,也就是第三个机器学习讲座的路径,所以说,这基本上是告诉我们在回归的语义空间中进行查找,然后做一个筛选,我们只查看源值为此值的文档。

所以如果我们在文档上循环并打印出元数据,我们应该看到他们都来自第三课。

他们确实如此,这是一个例子,其中可以使用自查询检索器准确地筛选元数据。

我们可以谈论的最后一种检索技术是上下文压缩,所以让我们在这里加载一些相关的模块。

上下文压缩检索器,然后是一个LLM链条提取器。

接下来要做的是,这将只从每个文档中提取相关的位。

然后将这些作为最终的返回响应传递给,我们将定义一个很好的小函数来漂亮地打印文档。

因为它们往往又长又乱,这将使人们更容易看到发生了什么。

然后我们可以用LLM链提取器创建一个压缩机。

然后我们可以创建上下文压缩检索器,通过压缩机。

然后向量存储的基检索器,当我们现在通过这个问题,他们怎么说matlab。

我们看看压缩的文档,如果我们看了文件,我们可以看到两件事,一个,它们比正常的文件短得多,但第二,我们仍然有一些重复的事情发生,这是因为在引擎盖下,我们使用的是语义搜索算法。

这就是我们在本课前面使用mmr解决的问题,这是一个很好的例子,说明您可以结合各种技术来获得最好的结果,为了做到这一点,当我们从向量数据库创建检索器时,我们可以将搜索类型设置为Mr。

然后我们可以重新运行这个,确保我们回来,不包含任何重复信息的筛选结果集,到目前为止,我们提到的所有附加检索技术都建立在矢量数据库之上。

值得一提的是,还有其他类型的检索根本不使用矢量数据库。

取而代之的是其他,更传统的nlp技术。

这里,我们要重新建立一个检索管道,有两种不同类型的寻回器,和SVM寻回器和一个TF IDF寻回器。

如果你从传统的NLP或传统的机器学习中认识到这些术语,那就太好了。

如果你不,也很好,这只是其他一些技术的一个例子。

除了这些,还有很多,我鼓励你去看看,他们中的一些人。

我们可以很快地通过通常的装货和拆分管道。

然后这两个检索程序都公开一个from text方法,其中一个接受嵌入模块,即svm检索器,tf idf寻回器直接接收分裂。

现在我们可以用其他的寻回者,我们进去吧,他们怎么说matlab,到svm检索器,我们可以看看顶部的文档,我们回来了,我们可以看到它提到了很多关于Matlab的东西,所以它在那里取得了一些好的结果。

我们也可以在tf idf寻回器上尝试一下,我们可以看到结果看起来有点糟糕,现在是停下来尝试所有这些不同检索技术的好时机,我想你会注意到他们中的一些人在各种事情上都比其他人好。

所以我鼓励你们在各种各样的问题上尝试一下,自我查询检索器尤其是我最喜欢的,所以我建议用越来越复杂的元数据过滤器来尝试,甚至可能在有嵌套元数据结构的地方编造一些元数据,你可以试着让LLM推断。

我觉得这很有趣,我想这是一些更先进的东西,所以我真的很兴奋能和你们分享,既然我们已经谈到了回收,我们将讨论这个过程的下一步。

【LangChain大模型应用开发】DeepLearning.AI - P14:6——问答聊天机器人 - 吴恩达大模型 - BV1iZ421M79T

我们已经讨论了如何检索与给定问题相关的文档,下一步就是把那些文件,接受最初的问题,把它们都传递给一个语言模型,并要求它回答这个问题,我们将在这节课中复习这一点,完成这项任务的几种不同方法。

让我们开始上这节课吧。

我们将讨论如何做问题,使用您刚刚检索到的文档进行应答,这是在我们完成整个储存和摄入之后,在我们检索到相关的分裂后,现在我们需要把它传递给一个语言模型来得到答案。

一般的流程是这样的,问题来了。

我们查阅相关文件,然后我们通过这些分裂,伴随着系统提示符。

和人类的问题到语言模型并得到答案,默认情况下,我们只需将所有块传递到同一个上下文窗口中,语言模型的相同调用。

然而,我们可以使用一些不同的方法,对此有利弊。

大多数优点来自于这样一个事实,即有时会有很多文件,您不能简单地将它们都传递到相同的上下文菜单中。

Mapreduce,精炼。

我们将在今天的课上讨论其中的一些,让我们开始编码。

第一批,我们会像往常一样输入环境变量。

然后,我们将加载以前持久化的向量数据库,我要检查它是否正确。

我们可以看到它有以前的209份文件。

我们做一个快速的相似性搜索,为了确保它对第一个问题起作用,即这门课的主要主题是什么。

现在我们初始化我们要用来回答问题的语言模型。

我们将使用聊天开放人工智能模型GPT三点五。

我们要把温度设为零,当我们想要真实的答案出来时,这真的很好。

因为它的可变性很低,通常只给我们最高的保真度,最可靠的答案。

然后我们将导入检索QA链,这是在回答问题,由检索步骤支持。

我们可以通过传入一个语言模型来创建它。

然后向量数据库作为检索器。

然后,我们可以调用它,查询等于我们想要问的问题。

当我们看到结果时,我们得到了答案,这堂课的主要主题是机器学习,另外,这门课可以在讨论部分复习统计学和代数。

本季度晚些时候,讨论部分还将涵盖主要讲座中教授的材料的扩展。

让我们试着更好地理解一点,引擎盖下面是怎么回事,并暴露一些不同的旋钮,你可以把主要部分,这里很重要的是我们正在使用的提示符,这是接收文档和问题并将其传递给语言模型的提示符。

关于提示的复习。

你可以看到我和安德鲁一起上的第一堂课,这里我们定义一个提示模板。

它有一些关于如何使用以下上下文的说明,然后它有一个上下文变量的占位符,这就是文件要去的地方,以及问题变量的占位符。

我们现在可以创建一个新的检索,Qn,我们将使用与以前相同的语言模型,在与以前相同的矢量数据库中,但我们将通过几个新的论点,所以我们得到了返回源文件,所以我们要把这个等于零设为真。

这将使我们能够轻松地检查我们检索的文档。

然后我们还将传递一个提示。

相当于QA链,我们在上面定义的提示,让我们尝试一个新问题:概率,课堂主题。

我们得到一个结果,如果我们检查里面的东西,我们可以看到是的,概率被假定为该类的先决条件。

讲师假设熟悉基本的概率统计,我们将在讨论部分讨论一些先决条件,作为复习课程,谢谢你的询问,当它回应我们时,它也很好,为了更好地了解它从哪里获得这些数据。

我们可以看看一些被退回的源文件。

如果你看穿它们,您应该看到,回答的所有信息都在这些源文档中的一个中,现在是停下来考虑几个不同问题的好时机,或者您自己的不同提示模板,看看到目前为止结果是如何变化的。

我们一直在用东西技术,我们默认使用的技术,它基本上只是把所有的文档塞进最后的提示符中,这真的很好,因为它只涉及到对语言模型的一次调用,然而,这确实有一个限制,如果文件太多。

它们可能并不都适合上下文窗口,一种不同类型的技术,我们可以用来做问题,回答文档是这种技术中的mapreduce技术,每个单独的文档首先被单独发送到语言模型以获得原始答案。

然后这些答案被组成一个最终的答案,最后调用一个语言模型。

这涉及到更多的语言模型调用,但它确实有优点,因为它可以对任意多的文档进行操作。

当我们通过这个链运行前一个问题时,我们可以看到这种方法的另一个局限性,或者实际上我们可以看到两个一,慢多了,两个,结果其实更糟,这个问题没有明确的答案,根据文件的给定部分,可能会发生这种情况。

因为它是根据每个文档单独回答的。

因此,如果有信息分散在两个文档中,它并没有把所有的东西都放在同一个背景下。

这是利用车道链平台获得感提升的好机会,因为这些锁链里面发生了什么。

我们将在这里演示这一点,如果你想自己用的话。

教材里会有说明,关于如何获得API密钥,一旦我们设置了这些环境变量,我们可以重新运行地图,减少链条,然后我们可以切换到用户界面,看看发生了什么。

在引擎盖下,从这里我们可以找到我们刚才运行的运行。

我们可以点击它,我们可以看到输入和输出,然后我们可以看到孩子跑去很好地分析发生了什么,在引擎盖下,第一批,我们有MapReduce文档链,这实际上涉及到对语言模型的四个单独调用。

如果我们点击其中一个电话,我们可以看到我们有每个文档的输入和输出。

如果我们回去,然后我们可以看到,在它运行这些文档之后,它在最后的链条中结合在一起,填充文档链,它将所有这些响应塞进最后的呼叫中,点击进入。

我们可以看到我们得到了系统消息,我们从以前的文件中得到了四个摘要,然后用你的问题,然后我们就有了答案,我们可以做类似的事情,将链类型设置为细化。

这是一种新型的链条,让我们看看引擎盖下面是什么样子,我们可以看到它正在调用精炼文档链,包括4次连续呼叫,让我们来看看这个链中的第一个调用,来看看这里发生了什么,在它被发送到语言模型之前。

我们已经得到了提示,我们可以看到一个由几个比特组成的系统消息,这篇文章的上下文信息如下,是系统消息的一部分,它是我们提前定义的提示模板的一部分,下一段,这里的所有文字,这是我们检索到的文件之一。

下面是用户的问题,答案就在这里,如果我们回去,我们可以在这里查看对语言模型的下一个调用,我们发送给语言模型的最后一个提示,是将以前的响应与新数据相结合的序列,然后要求改进回应。

所以我们可以在这里看到我们得到了最初的用户问题。

我们就得到了答案,这是和以前一样的,然后我们说我们只有机会改进现有的答案,如果需要,请在下面提供更多上下文,这是提示模板的一部分,部分说明,剩下的部分是我们检索列表中第二个文档的文档,然后我们可以看到。

在新的上下文中,我们有更多的指示,改进原始答案以更好地回答问题,然后在下面我们得到了最终的答案,但这只是第二个最终答案,所以它运行了四次,在得到最终答案之前,它会遍历所有的文档,最终的答案就在这里。

这门课假定熟悉基本的概率和统计学,但是我们会有复习部分来刷新先决条件,您会注意到这是一个比地图缩减链更好的结果,这是因为使用细化链确实允许您组合信息,尽管按顺序。

它实际上鼓励了比mapreduce链更多的信息传递,这是一个暂停的好机会,尝试一些问题,尝试一些不同的链条,尝试一些不同的提示模板,看看它在UI中是什么样子的,这里有很多东西可以玩。

聊天机器人的伟大之处之一,为什么它们变得如此受欢迎是因为你可以问后续的问题。

你可以要求澄清以前的答案,所以让我们在这里做,让我们创建一个QA链,我们就用默认的东西。

我们去问问吧,一个问题是概率,课堂主题。

然后让我们问它一个后续问题,它提到概率应该是一个先决条件,所以让我们问,为什么需要这些先决条件,然后我们得到答案。

这门课的先决条件假定是计算机科学的基础知识。

以及与之前答案完全无关的基本计算机技能和原理,我们在问概率,这是怎么回事,基本上,我们使用的链没有任何状态的概念,它不记得以前的问题或以前的答案是什么,为此我们需要引入记忆。

【LangChain大模型应用开发】DeepLearning.AI - P15:7——完整功能的聊天机器人 - 吴恩达大模型 - BV1iZ421M79T

我们离拥有一个功能正常的聊天机器人如此之近,我们从装载文件开始,然后我们把他们分开,然后我们创建了一个向量存储,我们谈到了不同类型的检索,我们已经证明了我们可以回答问题,但是我们不能处理后续的问题。

我们不能和它进行真正的对话,好消息是,我们会解决的,在这节课中,让我们弄清楚,我们现在要做一个问题来结束,回答聊天,它要做的是看起来和以前非常相似,但我们要加入聊天历史的概念。

这是您以前与连锁店交换的任何对话或信息,这将允许它做什么,它会允许它将聊天历史纳入上下文吗,当它试图回答问题时,所以如果你问一个后续问题,它会知道你在说什么。

要注意的一件重要的事,到目前为止,我们谈到的所有很酷的检索类型,像自查询或压缩,或者类似的东西,你绝对可以在这里使用它们,我们谈到的所有组件都是非常模块化的,可以组合在一起,很好。

我们只是加入了聊天历史的概念。

让我们先看看它是什么样子,一如既往,我们要加载环境变量。

如果你设置了平台,打开它也可能很好,从一开始,会有很多很酷的东西想看,引擎盖下是怎么回事。

我们将加载我们的向量存储,其中包含所有的嵌入,所有的课堂材料。

我们可以在向量存储上进行基本相似性搜索。

我们可以初始化我们将用作聊天机器人的语言模型。

然后,这都是以前的。

这就是为什么我这么快就浏览了一遍,我们可以初始化一个提示模板,创建检索QA链,然后递进一个问题,得到一个结果。

但现在让我们做更多,让我们给它添加一些记忆,所以我们将使用会话缓冲内存,它的作用是,它只是简单地保留一个列表,历史上聊天消息的缓冲区,它会把这些和问题一起传递给聊天机器人,每次我们要指定内存键。

聊天历史记录,这只是将它与提示符中的一个输入变量对齐,然后我们将指定返回消息等于true,这将以消息列表的形式返回聊天历史记录,与单个字符串相反,这是最简单的内存类型,可以更深入地研究内存。

回到我和安德鲁教的第一堂课,我们详细报道了这件事。

然后呢,现在让我们创建一种新型的链,会话检索链,我们传入语言模型,我们通过寻回器,我们通过记忆,会话检索链在检索的基础上增加了一个新的位,Qa链,不仅仅是记忆,尤其是,它增加的是,它增加了一个步骤。

带着历史和新的问题,把它浓缩成一个独立的问题,传递到向量存储,查阅有关文件,我们将在UI中查看这一点,在我们运行它,看看它有什么影响。

但现在让我们试试,我们可以问一个问题,这是没有任何历史的。

看看我们得到的结果,然后我们可以问一个后续问题,这和以前一样,所以我们要问的是,课堂主题,我们得到一些答案,教师假设学生对概率和统计学有基本的了解,然后我们问,为什么需要这些先决条件,我们得到一个结果。

让我们看看。

我们得到一个答案,现在我们可以看到答案是指基本的概率和统计作为先决条件,在此基础上,不要把它与计算机科学混淆。

就像以前一样。

让我们来看看UI的引擎盖下发生了什么,所以在这里我们已经可以看到有更多的复杂性。

我们可以看到,现在链的输入不仅有问题。

也是聊天历史,聊天历史是从记忆中走来的,这将在链被调用并登录到日志系统之前应用。

如果我们看一下痕迹,我们可以看到有两件独立的事情在发生,首先是对一个项目的调用,然后有人打电话给填充文件链,让我们来看看第一个电话。

我们可以在这里看到一个带有一些说明的提示符,鉴于下面的对话,后续问题,将后续问题改写为独立问题。

这里我们有以前的历史,所以我们有一个问题,我们首先问的是课堂主题的概率,然后我们就有了帮助答案,然后在这里我们有一个独立的问题,要求基本概率和统计作为类的先决条件的原因是什么。

发生的情况是,独立的答案随后被传递给检索器,我们取回四或三份文件,或者不管有多少,我们指定,然后,我们将这些文档传递到填充文档链,并试图回答最初的问题。

所以如果我们调查一下,我们可以看到我们有了系统答案,使用以下上下文来回答用户的问题。

我们有一堆背景。

然后我们在下面有问题的摊位,然后我们得到一个答案,以下是与手头问题相关的答案。

它是关于概率和统计作为先决条件,现在是暂停并尝试这个链的不同选项的好时机,您可以传递不同的提示模板,不仅仅是为了回答问题,但也因为把它变成了一个独立的问题。

您可以尝试不同类型的内存,有很多不同的选择可以离开这里。

在这之后,我们要把它放在一个漂亮的UI中,会有很多代码来创建这个用户界面,但这是最重要的一点。

尤其是,这是一个完整的演练,基本上整个班,所以我们要加载一个数据库和检索链,我们要传递一份文件,我们要用PDF加载器加载它,他们会把它加载到文档中,我们要把那些文件分开,我们将创建一些嵌入。

并将其放在向量存储中,然后我们要把矢量存储变成寻回器。

我们将在这里使用相似性和一些K的搜索线。

我们将其设置为一个参数,我们可以传入,然后我们将创建会话检索链,这里要注意的一件重要的事情是,我们不是在记忆中传递,我们将从外部管理内存,为了方便下面的GUI,这意味着聊天历史将不得不在链外进行管理。

然后我们在这里有更多的代码--我们不会在上面花太多时间,但指出这里我们在聊天历史中传递到链中。

这也是因为我们没有附加的记忆。

然后我们在这里扩展聊天历史记录,有了结果,然后我们就可以把它放在一起了,运行这个来获得一个漂亮的用户界面,通过它我们可以与我们的聊天机器人交互,然后呢,我问你一个问题,助教是谁。

助教是保罗,布淀粉。

张凯蒂,你会注意到这里有几个标签,我们也可以点击查看其他东西。

所以如果我们点击数据库,我们可以看到我们对数据库提出的最后一个问题。

以及我们从那里得到的消息,这些是文件。

这些是在分裂发生后,这些是我们检索到的每个块,我们可以看到带有输入和输出的聊天历史记录。

然后还有一个地方来配置它,在那里你可以上传文件。

我们也可以要求跟进,所以让我们问问他们的专业是什么。

我们得到了关于前面提到的TA的答案,我们可以看到保罗正在学习机器学习和计算机视觉,凯蒂其实是个神经学家。

这节课基本上就结束了,所以现在是暂停的好时机,再问它一堆问题,在这里上传您自己的文档,享受这个端到端的问题回答机器人,配有令人惊叹的笔记本UI,这就结束了与您的数据进行车道链聊天的课程,在这门课上。

我们已经介绍了如何使用链接链从各种文档源加载数据,使用链接链,80多个不同的文档加载器,从那里我们把文件分成几块,并谈论许多这样做的细微差别,然后我们把这些大块,为它们创建嵌入,把它们放进矢量仓库。

展示了如何轻松地启用语义搜索,但我们也讨论了语义搜索的一些缺点,它可能在某些边缘失败的地方出现下一件事,我们涵盖的是检索,可能是我最喜欢的部分,在那里我们讨论了许多新的、先进的、非常有趣的检索算法。

为了克服这些边缘情况,我们在下一次会议上把它和llms结合起来,我们把那些检索到的文件,我们接受用户的问题,我们把它交给一个LLM,我们对最初的问题产生一个答案,但还缺一样东西,这是它的对话方面。

我们就在那里上完了课,通过在数据上创建一个功能齐全的端到端聊天机器人,我真的很喜欢教这门课,我希望你们喜欢,我要感谢开源领域的每一个人,他为这门课的成功做出了很多贡献。

就像你看到的所有提示和许多功能一样,当你们和朗链一起建造的时候,并发现新的做事方式、新的技巧和技巧,我希望你在推特上分享你所学到的东西,甚至在链接链中开设公关,这是一个变化非常快的领域。

这是一个激动人心的时刻。

【LangChain大模型应用开发】DeepLearning.AI - P16:8——完结 - 吴恩达大模型 - BV1iZ421M79T

这就结束了与您的数据进行长链聊天的课程,在这门课上,我们已经介绍了如何使用链接链从各种文档源加载数据,使用链接链,80多个不同的文档加载器,从那里我们把文件分成几块,并谈论许多这样做的细微差别。

然后我们把这些大块,为它们创建嵌入,把它们放进矢量仓库,展示了如何轻松地启用语义搜索,但我们也讨论了语义搜索的一些缺点,在某些边缘情况下它可能会失败,接下来我们讨论的是检索,可能是我最喜欢的部分。

在那里我们讨论了许多新的、先进的、非常有趣的检索算法,为了克服这些边缘情况,我们在下一次会议上把它和llms结合起来,我们把那些检索到的文件,我们接受用户的问题,我们把它传给一个LLM。

我们对最初的问题产生一个答案,但还缺一样东西,这是它的对话方面,这就是我们通过创建一个功能齐全的端到端来完成这个类的地方,通过您的数据聊天机器人,我真的很喜欢教这门课,我希望你们喜欢。

我要感谢开源领域的每一个人,他为这门课做出了很多贡献,就像你看到的所有提示和许多功能一样,就像你们和朗链一起建造一样,并发现新的做事方式、新的技巧和技巧,我希望你在推特上分享你将学到的东西。

甚至在链接链中开设公关,这是一个变化非常快的领域,这是一个激动人心的时刻。

我真的很期待看到你是如何申请的。

【LangChain大模型应用开发】DeepLearning.AI - P2:2——模型,提示和输出解析 - 吴恩达大模型 - BV1iZ421M79T

第一课,第一课。

将涵盖模型,将涵盖模型,提示和解析器,提示和解析器,所以模型指语言模型,所以模型指语言模型,支撑很多方面,支撑很多方面,提示指创建输入的风格,提示指创建输入的风格,然后解析器在另一端。

然后解析器在另一端,涉及将模型输出解析为更结构化的格式,涉及将模型输出解析为更结构化的格式,以便下游使用,以便下游使用,所以当你使用lm构建应用时,所以当你使用lm构建应用时,通常会有可重用模型。

通常会有可重用模型,我们反复提示模型,我们反复提示模型,解析输出,解析输出,因此启动提供了一组简单的抽象来执行此类操作,因此启动提供了一组简单的抽象来执行此类操作。

所以让我们深入了解一下模型、提示和解析器,所以让我们深入了解一下模型、提示和解析器,要开始,要开始。

这里是一些起始代码,这里是一些起始代码,我将导入os、openai并加载我的openai密钥,我将导入os、openai并加载我的openai密钥。

openai库已经安装在我的jupyter笔记本环境中,openai库已经安装在我的jupyter笔记本环境中。

如果你本地运行并且还没有安装open ai,如果你本地运行并且还没有安装open ai。

你可能需要运行pip,你可能需要运行pip,安装open ai,安装open ai。

但我不在这里做,但我不在这里做,然后这是一个辅助函数,然后这是一个辅助函数,这实际上与你在聊天,这实际上与你在聊天,Gpt提示工程开发人员,Gpt提示工程开发人员,课程中看到的辅助函数非常相似。

课程中看到的辅助函数非常相似。

我与open eyes一起提供的fulford,我与open eyes一起提供的fulford。

所以使用这个辅助函数你可以说完成1加1是什么,所以使用这个辅助函数你可以说完成1加1是什么,这将调用try gpc,这将调用try gpc,或技术上模型gpt三点五 turbo给你答案。

或技术上模型gpt三点五 turbo给你答案。

像这样现在为了激励,像这样现在为了激励。

模型提示和解析器的抽象,模型提示和解析器的抽象。

假设你收到一封非英语客户的电子邮件,假设你收到一封非英语客户的电子邮件,嗯,嗯,为确保可访问性,为确保可访问性。

我将使用的另一种语言是英语海盗语言,我将使用的另一种语言是英语海盗语言,当涉及到r时,当涉及到r时,我会很生气,我会很生气。

我的搅拌机盖子飞掉并把我的厨房墙溅满了奶昔,我的搅拌机盖子飞掉并把我的厨房墙溅满了奶昔,更糟糕的是,更糟糕的是。

保修不包括清理厨房的费用,保修不包括清理厨房的费用,我现在需要你的帮助,我现在需要你的帮助,伙计,伙计。

因此我们将要求这个lm将文本翻译成美式英语,因此我们将要求这个lm将文本翻译成美式英语,以冷静和尊重的语气,以冷静和尊重的语气,因此我将将样式设置为美式英语,语气常见且尊重。

因此我将将样式设置为美式英语,语气常见且尊重。

为了实际完成这个,为了实际完成这个,如果你之前看过一些提示,如果你之前看过一些提示。

我将使用f字符串指定提示,包含指令,我将使用f字符串指定提示,包含指令。

然后插入这两种样式,然后插入这两种样式,因此生成提示说,因此生成提示说。

翻译文本等,翻译文本等。

我建议你暂停视频并运行代码,我建议你暂停视频并运行代码,也尝试修改提示以查看是否可以得到不同的输出,也尝试修改提示以查看是否可以得到不同的输出。

你可以,你可以。

然后提示大型语言模型以获取响应,然后提示大型语言模型以获取响应。

让我们看看响应是什么,让我们看看响应是什么,所以它将英语海盗的消息翻译成这种非常礼貌的,所以它将英语海盗的消息翻译成这种非常礼貌的。

我真的很沮丧,我的搅拌机盖飞掉了,我真的很沮丧,我的搅拌机盖飞掉了。

把我的厨房墙搞得一团糟,把我的厨房墙搞得一团糟,如此顺滑的奶昔等,如此顺滑的奶昔等,我现在真的需要你的帮助,我现在真的需要你的帮助。

我的朋友那听起来很好,我的朋友那听起来很好,所以如果你有不同的客户用不同的语言写评论,所以如果你有不同的客户用不同的语言写评论。

不仅仅是英语海盗,不仅仅是英语海盗,而是法语,而是法语,德语,德语。

日语等等,日语等等,你可以想象需要生成一整序列的提示来生成这样的翻译,你可以想象需要生成一整序列的提示来生成这样的翻译。

让我们看看如何以更方便的方式做到这一点,让我们看看如何以更方便的方式做到这一点,使用lang chain,使用lang chain。

我将导入chat openai,我将导入chat openai,这是lang cha对chat gpt API端点的抽象,这是lang cha对chat gpt API端点的抽象。

因此如果我然后说had等于chat open ai并查看chat是什么,因此如果我然后说had等于chat open ai并查看chat是什么。

它创建了这个对象如下,它创建了这个对象如下,它使用chat gpt模型,它使用chat gpt模型,也称为gpt三点五 turbo,也称为gpt三点五 turbo。

当我构建应用程序时,当我构建应用程序时,我经常会将温度参数设置为等于零,我经常会将温度参数设置为等于零。

所以默认温度是零点七,所以默认温度是零点七,但让我实际上重新做一下,温度,但让我实际上重新做一下,温度,等于零点零,等于零点零,现在温度被设置为零以使其输出稍微少一些随机。

现在温度被设置为零以使其输出稍微少一些随机。

现在让我定义模板字符串如下,现在让我定义模板字符串如下。

将文本翻译成由样式指定的样式,将文本翻译成由样式指定的样式,然后这里是文本,然后这里是文本。

为了反复重用此模板,为了反复重用此模板,让我们导入lang chains,让我们导入lang chains,聊天提示模板,聊天提示模板。

然后让我使用上面编写的模板字符串创建提示模板,然后让我使用上面编写的模板字符串创建提示模板。

从提示模板,从提示模板,你可以实际提取原始提示,你可以实际提取原始提示,它意识到这个提示有两个输入变量,它意识到这个提示有两个输入变量,样式和文本,如这里用花括号所示,样式和文本,如这里用花括号所示。

这里是原始模板,我们实际上也指定了,这里是原始模板,我们实际上也指定了。

嗯,嗯,它意识到有两个输入变量,它意识到有两个输入变量。

样式和文本,样式和文本,现在,现在,确定风格,确定风格,这是客户消息要翻译成的风格,这是客户消息要翻译成的风格,我将称之为客户风格,我将称之为客户风格,这是我之前的客户电子邮件,现在。

这是我之前的客户电子邮件,现在。

如果我创建自定义消息,如果我创建自定义消息,这将生成提示,这将生成提示。

我们将传递这个,我们将传递这个,一分钟后的大语言模型以获取响应,一分钟后的大语言模型以获取响应,所以如果你想看类型,所以如果你想看类型,自定义消息实际上是一个列表,自定义消息实际上是一个列表,嗯,嗯。

如果你看列表的第一个元素,如果你看列表的第一个元素,这基本上是您期望它创建的最后提示,这基本上是您期望它创建的最后提示。

让我们将这个提示传递给LM,让我们将这个提示传递给LM。

因此我将调用聊天,因此我将调用聊天,我们之前说过,我们之前说过,嗯,嗯,作为对OpenAI GPT端点的引用,作为对OpenAI GPT端点的引用。

如果我们打印出客户响应内容,如果我们打印出客户响应内容,那么它会给你回,那么它会给你回,嗯,嗯,从英语海盗翻译成礼貌的美国英语,从英语海盗翻译成礼貌的美国英语,当然你可以想象其他用例。

客户电子邮件是其他语言的,当然你可以想象其他用例,客户电子邮件是其他语言的。

这两个可以用于将消息翻译成英语,这两个可以用于将消息翻译成英语。

说英语的人理解和回复,说英语的人理解和回复,我建议你暂停视频并运行代码,我建议你暂停视频并运行代码,并尝试修改提示以查看您是否可以获得不同的输出现在,并尝试修改提示以查看您是否可以获得不同的输出现在。

希望我们的客户服务代理用他们的原始语言回复了客户,希望我们的客户服务代理用他们的原始语言回复了客户。

所以让我们说,所以让我们说,说英语的,说英语的,客户服务代理出现,客户服务代理出现,说嘿,说嘿,客户保修不包括厨房清洁费用,客户保修不包括厨房清洁费用,因为是你误用搅拌机,用叉子戳盖子。

因为是你误用搅拌机,用叉子戳盖子,运气不好,运气不好,再见,不是很礼貌的信息,再见,不是很礼貌的信息,但假设这是客户服务代理想要的,但假设这是客户服务代理想要的。

我们将指定,我们将指定,服务消息将翻译成这种海盗风格,服务消息将翻译成这种海盗风格,我们希望它是用英语海盗语说的礼貌语调,我们希望它是用英语海盗语说的礼貌语调,因为我们之前创建了提示模板。

因为我们之前创建了提示模板。

酷的是,酷的是,我们现在可以重复使用那个提示模板,我们现在可以重复使用那个提示模板,并指定我们想要的服务风格海盗,并指定我们想要的服务风格海盗,文本是此服务回复,文本是此服务回复,如果我们这样做。

如果我们这样做。

这是提示,这是提示。

如果我们提示,如果我们提示,嗯,chagpt t,嗯,chagpt t。

这是它给我们的回应,这是它给我们的回应,我必须为你进来,保修不包括费用或清洁你的船舱等。

运气不好,法老,我的心,你可能想知道。

为什么使用提示模板而不是,你知道,只是一个f字符串,答案是,随着你构建复杂的应用程序,提示可以相当长和详细。

因此,提示模板是一个有用的抽象,帮助你重用好的提示。

当你能,嗯,这是一个相对较长的提示示例,为在线学习应用程序评分学生的提交。

像这样的问题可能相当长,你可以要求LM首先解决问题,然后以特定格式输出。

并将此包装在lang链中,使用提示使重用这样的提示更容易。

你稍后也会看到lang链为一些常见操作提供了提示,如摘要或问答,或连接到SQL数据库。

或连接到不同的API,因此,通过使用一些lang链内置的提示,你可以快速构建一个应用程序,而不需要um。

设计你自己的提示,lang cha的提示库的另一个方面是它也支持输出解析,我们稍后会讲到这一点,但当你使用一个LLM构建一个复杂的应用程序时,你经常指示LM以特定格式生成其输出,如使用特定关键字。

左侧的例子说明了如何使用一个LLM执行称为链式思维,推理,使用称为React的框架,但不用担心技术细节,但关键是思想是LM在想什么,因为给LM思考的空间,它往往能得出更准确的结论。

然后行动作为关键字来执行具体行动,然后观察显示它从该行动中学到了什么,等等,如果你有一个提示,指示LM使用这些特定关键字,思想,行动和观察,然后可以将这个提示与解析器耦合。

以提取出带有这些特定关键字标记的文本,因此,这共同提供了一个很好的抽象,来指定输入给LM,并让解析器正确解释,让我们回到一个输出解析器的例子。

在这个例子中,让我们看看如何让lm输出,并使用lang chain传递该输出。

运行我将使用的示例,将是从产品评论中提取信息。

并将该输出格式化为相邻格式。

这是您希望输出的技术示例,这是一个Python字典,其中产品是否为礼物,花费的天数,快递员是5人,价格相当实惠,这是一个期望输出的例子。

这是一个客户评价的例子。

以及尝试达到该JSON输出的模板,这是一个客户评价,睡眠模糊效果相当惊人,它有4个设置,蜡烛吹灭器,性别,微风,风城与龙卷风,两天后到达,及时为妻子周年礼物,我认为我妻子很喜欢,她至今无语。

我一直是唯一使用者等,以下为文本评论模板,从指定信息提取,这是动图吗,这种情况下是,因为这是个动图,还有送货日期,送达用了多久,看起来,这次两天就到了,价格多少,你知道,稍微贵点,鼓风机等。

因此,将评论模板作为输入的LM,客户评论,并提取这三个字段,然后格式化为输出,嗯,使用以下键。

好的,所以这是如何用lang chain包装的。

让我们导入聊天提示模板,我们之前已导入,技术上这行多余,但我会再导入,然后从评审模板创建提示模板。

这是提示模板。

类似我们之前使用提示模板,创建要传递给Open Eye的消息,嗯,端点,处理开放端点,调用该端点,然后打印响应,鼓励你暂停视频并运行代码。

就是它,它说,如果为真,这是二,价格值看起来也很准确。

嗯,但请注意,如果我们检查。

响应的类型,这实际上是一个字符串,所以看起来像JSON,看起来像键值对,但实际上不是一个字典,这只是一个长字符串。

所以我想做的是去响应内容并获取。

如果键的值,应该是真,但运行这个,应该会报错,因为,嗯。

这实际上是一个字符串,这不是Python字典,所以让我们看看如何使用Lang Chains解析器。

为了做到这一点。

我将导入,响应模式和结构化输出解析器从Lang Chain,并告诉它我想要暂停。

通过指定这些响应模式。

所以礼物模式名为礼物,描述是购买的礼物送给别人。

回答真或是,假,如果不是,那么未知。

等等,所以有一个好的模式,交付模式价格值模式,然后将它们全部放入列表如下。

现在我已经指定了这些模式的启动,实际上可以给你提示本身,输出为正,告诉你指令,若打印格式指令,她有精确指令,生成可解析输出,这是新评论模板。

评论模板含格式指令。

可从模板创建提示。

创建传递给OpenAI的消息。

若想,可查看实际提示,含提取熔断器指令,若送货天数,价格值,这是文本,然后这是格式指令,最后,若调用OpenAI端点,看看响应,现在这样。

若使用创建的输出解析器。

可传入输出字典。

区域打印看起来像这样。

非字符串,可提取与礼物键关联的值,或与送货天数关联的值。

或提取与价格值关联的值。

这是将LM输出。

解析为Python字典。

使输出便于下游处理,建议暂停视频并运行代码,模型、提示和解析结束,希望你能重用提示模板,轻松分享,与合作者,甚至使用Lang Chains内置模板,如你刚见。

常与输出解析器结合,使输入提示到特定格式输出,然后解析器解析该输出,存储数据于Python字典。

或其他数据结构,便于下游处理。

希望这在你的应用中很有用。

就这样,让我们看下一个视频,Lang Chain如何帮你建更好的聊天机器人,或让LM,更有效地聊天。

【LangChain大模型应用开发】DeepLearning.AI - P3:3——记忆 - 吴恩达大模型 - BV1iZ421M79T

与这些模型互动时,与这些模型互动时,它们自然不记得你之前说过什么或之前的对话,它们自然不记得你之前说过什么或之前的对话,这是一个问题,这是一个问题,当你构建如聊天机器人等应用时,你想与他们交谈。

当你构建如聊天机器人等应用时,你想与他们交谈,因此,在这一节中我们将涵盖记忆,因此,在这一节中我们将涵盖记忆,基本上是如何记住对话的前一部分并将其输入语言模型。

基本上是如何记住对话的前一部分并将其输入语言模型,这样,当你与他们互动时,它们可以有这种对话流程,这样,当你与他们互动时,它们可以有这种对话流程,是的,是的,lang提供了多种高级选项来管理这些记忆。

lang提供了多种高级选项来管理这些记忆,让我们深入了解一下,让我们深入了解一下,首先导入API密钥,首先导入API密钥。

然后导入所需工具,然后导入所需工具。

以记忆为例,以记忆为例。

使用lag链管理聊天或聊天机器人对话,使用lag链管理聊天或聊天机器人对话。

为此,为此,我将设置lm为OpenAI的聊天界面,我将设置lm为OpenAI的聊天界面。

温度为0,温度为0,并将内存用作对话缓冲内存,并将内存用作对话缓冲内存。

稍后您将看到这意味着什么,稍后您将看到这意味着什么,嗯,嗯,稍后我将重建对话链,稍后我将重建对话链。

在这门短课中,在这门短课中,哈里森将更深入探讨链的本质和土地链,哈里森将更深入探讨链的本质和土地链,现在不必太担心语法的细节,现在不必太担心语法的细节,但这构建了一个LLM,但这构建了一个LLM。

如果我开始对话,如果我开始对话,对话点预测,对话点预测,给定输入嗨,给定输入嗨。

我叫安德鲁,我叫安德鲁,看看它说什么 你好,看看它说什么 你好,很高兴见到你等,很高兴见到你等,然后假设我问它,然后假设我问它,一加一等于几,一加一等于几,嗯,一加一等于二,嗯,一加一等于二。

然后再次问它,然后再次问它,你知道我的名字吗,你知道我的名字吗,你的名字是安德鲁,你的名字是安德鲁,如你之前所说,如你之前所说。

那里有一点讽刺,那里有一点讽刺,不确定,不确定,所以如果你想,所以如果你想,可将此变量设为真查看实际操作,可将此变量设为真查看实际操作。

运行predict high时,运行predict high时,我叫安德鲁,我叫安德鲁,这是lang chain生成的提示,这是lang chain生成的提示。

它说以下是人类与AI的对话,它说以下是人类与AI的对话。

健谈等,健谈等,这是lang chain生成的提示,这是lang chain生成的提示,让系统有希望和友好对话,让系统有希望和友好对话,并保存对话,并保存对话,这里是回应,这里是回应,当你执行这个时。

当你执行这个时。

嗯,嗯,因果的第二三部分,因果的第二三部分,它保持提示如下,它保持提示如下,注意当我念出我的名字时,注意当我念出我的名字时,这是第三个术语,这是第三个术语。

这是我的第三个输入,这是我的第三个输入,它已将当前对话存储如下,它已将当前对话存储如下。

你好,我叫安德鲁,你好,我叫安德鲁,1加1等,1加1等,因此,对话的历史越来越长,因此,对话的历史越来越长。

实际上在顶部,实际上在顶部,我用内存变量存储了记忆,我用内存变量存储了记忆。

所以如果我打印内存缓冲,所以如果我打印内存缓冲,它已存储到目前为止的对话,它已存储到目前为止的对话。

你也可以打印这个,你也可以打印这个。

内存加载内存变量,内存加载内存变量,嗯,嗯,这里的花括号实际上是一个空字典,这里的花括号实际上是一个空字典。

有一些更高级的功能你可以使用,有一些更高级的功能你可以使用。

但在这门短课程中我们不会讨论它们,但在这门短课程中我们不会讨论它们,所以不用担心,所以不用担心。

为什么这里有一个空的花括号,为什么这里有一个空的花括号,但这是lang chain记住的,但这是lang chain记住的。

到目前为止对话的记忆,到目前为止对话的记忆,它只是AI或人类所说的一切,它只是AI或人类所说的一切,我鼓励你暂停视频并运行代码,我鼓励你暂停视频并运行代码。

lang chain存储对话的方式是使用这个对话缓冲内存,lang chain存储对话的方式是使用这个对话缓冲内存。

如果我使用组合,如果我使用组合。

缓冲内存指定几个输入和输出,缓冲内存指定几个输入和输出,这就是你如何向记忆中添加新东西,这就是你如何向记忆中添加新东西。

如果你想明确地这样做,记忆,如果你想明确地这样做,记忆,保存上下文说你好,保存上下文说你好。

怎么了,怎么了,我知道这不是最令人兴奋的对话,我知道这不是最令人兴奋的对话。

但我想让它有一个简短的例子,但我想让它有一个简短的例子,有了这个,这就是记忆的状态,有了这个,这就是记忆的状态。

再次让我实际上显示,再次让我实际上显示,嗯,嗯,内存变量现在,内存变量现在,如果你想添加额外的,如果你想添加额外的。

嗯数据到内存,嗯数据到内存,你可以继续保存更多上下文,你可以继续保存更多上下文,因果继续不多,因果继续不多。

只是冷静地挂着,只是冷静地挂着,如果你打印出内存,如果你打印出内存。

你知道现在有更多的内容,你知道现在有更多的内容,所以当你使用大型语言模型进行聊天对话时,所以当你使用大型语言模型进行聊天对话时。

嗯大型语言模型本身实际上是无状态的,嗯大型语言模型本身实际上是无状态的。

语言模型本身不记对话,语言模型本身不记对话,每笔交易,每笔交易,每次API调用独立,每次API调用独立。

聊天机器人,聊天机器人,仅因为通常有代码提供,仅因为通常有代码提供,迄今为止的完整对话作为上下文,迄今为止的完整对话作为上下文。

因此内存可以明确存储,因此内存可以明确存储。

嗨,嗨,我叫安德鲁,我叫安德鲁,很高兴见到你等,很高兴见到你等,这种内存存储用作输入或附加上下文,这种内存存储用作输入或附加上下文。

以便它们可以生成输出,以便它们可以生成输出,就像只有下一个对话回合,就像只有下一个对话回合。

知道之前说了什么,知道之前说了什么。

随着对话变长,随着对话变长,所需内存量变得非常长,所需内存量变得非常长,发送大量令牌到LM的成本也会增加,发送大量令牌到LM的成本也会增加。

通常按需要处理的令牌数收费,通常按需要处理的令牌数收费。

因此链提供了几种方便的内存类型,因此链提供了几种方便的内存类型。

以存储和累积对话,以存储和累积对话。

我们一直在看对话缓冲内存,我们一直在看对话缓冲内存,让我们看看另一种类型的内存,让我们看看另一种类型的内存。

我将导入对话缓冲窗口AR,我将导入对话缓冲窗口AR。

它只保留一段内存,它只保留一段内存,我设置内存为缓冲窗口内存,k等于一,我设置内存为缓冲窗口内存,k等于一。

变量k等于一,变量k等于一,指定我只想记住一次对话交换,指定我只想记住一次对话交换。

即一次我的回合,即一次我的回合,和一次聊天机器人的发言,和一次聊天机器人的发言。

所以现在如果我让它保存上下文嗨,所以现在如果我让它保存上下文嗨,怎么了,怎么了,不只是挂着,不只是挂着。

如果我查看内存加载变量,如果我查看内存加载变量。

它只记得最近的发言,它只记得最近的发言,注意'嗨'被丢弃,注意'嗨'被丢弃。

怎么了,怎么了,它只说人类说不多,它只说人类说不多,只是挂着,只是挂着,AI说酷,AI说酷。

因为k等于一,因为k等于一,这是一个很好的功能,这是一个很好的功能。

因为它让你跟踪最近的几次对话,因为它让你跟踪最近的几次对话。

实践中你可能不会用k等于一,实践中你可能不会用k等于一,你会用k设置为较大的数字,你会用k设置为较大的数字。

嗯,但这防止了内存无限制增长,嗯,但这防止了内存无限制增长。

随着对话变长,随着对话变长,如果我们重新运行刚才的对话,如果我们重新运行刚才的对话,我们说嗨,我们说嗨,我叫安德鲁,我叫安德鲁。

1加1等于几,1加1等于几,我叫什么名字。

因为k等于一,它只记得最后交流。

哪个是一加一,答案是1,加等于2,然后它忘记了,这个早期交流。

现在说抱歉,我没有访问这些信息。

我希望你会暂停视频,在左边的代码中改为true,并重新运行此对话,verbose等于true。

然后你会看到实际使用的提示。

当你调用lm时,希望你能看到记忆。

我叫什么名字,记忆已经丢失这个交流,我学到,我叫什么名字,这就是为什么现在说不知道,我叫什么名字。

使用对话令牌缓冲记忆,记忆将限制保存的令牌数。

因为许多lm定价基于令牌,这更直接地映射到lm调用的成本。

如果我设定最大令牌限制等于五十,实际上让我插入一些注释。

比如对话是人工智能是什么惊人的反向传播,美丽的教堂是什么迷人的,我用abc作为所有这些国家术语的第一个字母,我们可以跟踪何时说了什么。

如果我以高令牌限制运行,它几乎有整个对话,如果我增加令牌限制到一百,现在它有整个对话,人工智能的标志是什么,如果我减少它,那么你知道它切掉了对话的早期部分,以保留对应最近交流的令牌数。

但受限于不超过令牌限制,如果你想知道为什么我们需要指定,因为不同的lm使用不同的计数令牌方式,所以这告诉它使用聊天openai lm使用的计数令牌方式。

我鼓励你暂停视频并运行代码,并尝试修改提示以查看是否可以得到不同的输出,最后,这里有一种我想说明的最后一种记忆,即对话摘要缓冲记忆。

想法不是限制记忆到固定数量的令牌。

基于最近的陈述,而是基于最相关的陈述,或固定对话次数。

用语言模型写对话摘要。

让那成为记忆,示例如下。

我将创建某人日程长字符串,与产品团队会议,需PPT等,长字符串说。

你的日程如何,你知道,中午在意大利餐厅结束如何,与客户一起,带上笔记本电脑,展示最新电影演示,因此让我使用对话摘要。

缓冲,内存,嗯,最大标记限制为400。

在这种情况下,很高的标记限制,我将要。

我们以'你好'开始的一些对话术语,怎么了,没,就挂着,嗯,酷。

今天日程上有什么,回答是。

你知道那长长的日程,现在这段记忆包含了很多文本。

实际上让我们看看记忆变量,包含全部文本,400个标记足够存储,但若减少最大标记数,比如100个标记,记住存储全部对话历史,若减少标记数至100,实际上使用了OpenAI的lm端点,因为我们说过。

让lm生成对话摘要,所以摘要是人类和AI闲聊,通知人类早会,blah blah blah,嗯,与对AI感兴趣的客户午餐会议,因此,如果我们进行对话,使用此LM,让我创建对话链,与之前相同,嗯。

假设我们要问。

你知道输入,展示什么好呢?我说详细为真,所以这是提示,Dlm认为对话已讨论这些,因为那是对话总结,还有注意点,若熟悉openai聊天API,有特定系统消息,例如中,这不是使用官方OpenAI系统消息。

只是将其作为提示的一部分,但它仍然工作得很好,考虑到这个提示,你知道,输出基本上很有趣,发展正在展示我们最新的NLP能力,好的,那很酷,好吧,你知道,给酷演示提建议,让你思考,如果见客户,我会说,伙计。

若开源框架可用,助我建酷NLP应用,好东西,比如,有趣的是,看内存发生了什么,注意,这里整合了最新AI系统输出,我询问的演示不会好,已集成到系统消息中,嗯,你知道到目前为止的对话概要,缓冲内存。

它试图做的是保持消息的显式存储,直到我们指定的标记数为止,所以你知道这部分显式存储,或尝试限制在一百个标记,因为这是我们要求的,然后任何超出部分它将使用lm生成摘要,这就是上面所见的。

尽管我已用聊天示例,说明了这些不同记忆,这些记忆对其他应用也有用,在那里你可能不断收到文本片段,或不断接收新信息,例如,若系统反复在线搜索事实,但你想保持总记忆量,不要让列表任意增长,我建议你暂停。

视频并运行代码,你看到几种内存。

嗯,包括基于交换次数或标记数的缓冲内存,或可总结超过一定限制标记的内存。

实际上,该链还支持其他类型的内存,最强大的是向量数据内存。

如果你熟悉词嵌入和文本嵌入。

向量数据库实际上存储这样的嵌入(如不知道,别担心)。

别担心,哈里森稍后会解释,然后检索最相关文本块,使用这种向量数据库存储记忆。

Lankan也支持实体记忆,适用于你想记住特定人或特定实体的细节时。

比如谈论特定朋友,可以让Lang Chain记住关于那个朋友的事实,这应该以明确实体方式。

在用Lang Chain实现应用时,也可以使用多种类型记忆。

如使用视频中看到的对话记忆类型之一,另外,还有实体记忆以回忆个人。

这样你可以记住对话的概要,以及关于对话中重要人物的重要事实的明确存储方式。

当然,除了使用这些记忆类型,开发人员将整个对话存储在传统数据库中也不罕见,某种键值存储或SQL数据库。

标签:吴恩达,提示,可以,教程,笔记,文档,然后,我们,加载
From: https://www.cnblogs.com/apachecn/p/18443053

相关文章

  • 吴恩达大模型教程笔记-十一-
    吴恩达大模型教程笔记(十一)LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI-P96:5.L4-rerank.zh-吴恩达大模型-BV1gLeueWE5N欢迎来到第四课,我非常兴奋要向您展示一种我特别喜欢的方法,叫做重新排名。现在您已经学习了关键词搜索和密集检索,重新排名是一种改进两者......
  • 吴恩达大模型教程笔记-十-
    吴恩达大模型教程笔记(十)LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI-P76:使用指令对LLM进行微调3——对单一任务进行微调-吴恩达大模型-BV1gLeueWE5N虽然LLMs因其能够在单个模型中执行许多不同语言任务而闻名,您的应用程序可能只需要执行单个任务,在这种情况下......
  • 吴恩达大模型教程笔记-三-
    吴恩达大模型教程笔记(三)【ChatGPT提示词工程师】DeepLearning.AI-P6:第6集转换-吴恩达大模型-BV1Wf421q7cd大型语言模型非常擅长将其输入转换为不同的格式,例如用一种语言输入一段文本,把它转换成另一种语言。或者帮助拼写和语法纠正,所以作为输入,一段可能不完全符合语法......
  • 吴恩达大模型教程笔记-七-
    吴恩达大模型教程笔记(七)LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI-P29:5——基于文档的问答-吴恩达大模型-BV1gLeueWE5N人们构建的最常见复杂应用之一。使用llm是一个可回答文档内或关于文档问题的系统,给定一段文本可能来自PDF文件或网页,或公司内部文档......
  • 吴恩达大模型教程笔记-六-
    吴恩达大模型教程笔记(六)LangChain_微调ChatGPT提示词_RAG模型应用_agent_生成式AI-P21:3.第二篇-RAG指标三元组(RAGTriadofmetrics)中英文字幕-吴恩达大模型-BV1gLeueWE5N本节课我们将深入探讨评估,我们将带你了解如何评估服务器架设的核心概念,具体来说,我们将介绍......
  • 吴恩达大模型教程笔记-二-
    吴恩达大模型教程笔记(二)【LangChain大模型应用开发】DeepLearning.AI-P4:4——链-吴恩达大模型-BV1iZ421M79T这节课,这节课。哈里森将教授土地链最重要的基础构建块,哈里森将教授土地链最重要的基础构建块,即链条,即链条,链条通常结合一个大语言模型和一个提示,链条通常结合一......
  • 【防忘笔记】测试过程与技术
    测试人员应该想些什么我自己是做后端的,对于模棱两可的需求和莫名其妙的测试case是深恶痛绝的,所以有时候我就会想测试人员应该会需要注意什么?以他们的角度,他们更在乎什么最近有机会了解相关的知识,遂整理记录一下,以便之后在工作中更好的理解发生的各种事情以客户为中心这个真的......
  • 昇思MindSpore进阶教程--使能图算融合
    大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。技术上主攻前端开发、鸿蒙开发和AI算法研究。努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧正文开始图算融合是MindSpore特有的网络性能优化技术。它可以通过自动分析和优化现有网络计算图逻......
  • [rCore学习笔记 028] Rust 中的动态内存分配
    引言想起我们之前在学习C的时候,总是提到malloc,总是提起,使用malloc现场申请的内存是属于堆,而直接定义的变量内存属于栈.还记得当初学习STM32的时候CubeIDE要设置stack和heap的大小.但是我们要记得,这么好用的功能,实际上是操作系统在负重前行.那么为了实现动态内存分配功......
  • 电影风格夏季氛围旅拍人像照Lr调色教程,手机滤镜PS+Lightroom预设下载!
    调色教程电影风格夏季氛围旅拍人像照的Lr调色旨在将旅拍人像赋予电影般的质感和夏季独有的氛围感,让照片仿佛是从电影中截取的一帧,充满故事性与美感。预设信息调色风格:电影风格预设适合类型:人像,模特,街拍,自拍,特写,海滩,夏季等预设格式:XMP+DNG资源编号:00766支持软件:Lightroom......