今天我们来分享一下在 lanchen 的使用中潜在的会存在的一些问题,或者会存在的一些安全漏洞,同时来分享一下如何使用更安全的方式来进行数据的查询。 今天的主角是 sequel database chain 和 sequel agent, 从网上找了一些数据集用于测试演示。 现在我们就按照最传统的方式加载实力,画一个 sql database gen。 我们在这里可以看到我们 通过刚才下载 skle 数据集来实力化一个数据库,同时实力化一个 opai 的变量。乐母使用的是默认的模型,那现在就可以来创建一个 sql database gin, 基于这个大模型和数据库,我们来创建一下。 当完成了数据库的实力的创建呢,就可以进行交互了。我们通过自然语言交互。刚才我们从数据其中看到有 views, 这个表格当中存在一系列的列,其中有一列就是 reviews, 实时的点评评估评价, 那这一列当中可以看到有些整数值。首先我期望将所有的 review 改为一 看看他的执行情况,这里会看到他会进入一个执行,得到一条 sql 语句 update reviews that real and score reviews equals 负一,这就是把所有的行中 real reveal 这一列改成了负一。那我现在从数据表中取第一行出来看看它的结果,在这 这里会看到它这里倒数第二列已经改成了负一,倒数第二列就是 reviews, 说明这个更改是生效了。大家会发现 sql database change 智慧 如实地将自然语言转换的 s, q, l 语句进行执行,因此在这个 update 或者更新的操作时也会如实去操作。那接下来呢,我们尝试一个更危险的操作,就是删除所有的 review, delete all the reviews。 那在这个操作当中可以看到他转换出来的语句是 delete from reviews, 这条语句相当于直接将所有数据型全部删除了, 清空了,得到的结果是 all reviews have been deleted。 那接下来呢,我们来看看现在还有多少行收 me the can of reviews 得到的是零,说明 整个表中的数据都被删除了。这个例子呢,主要是给大家演示。在 sql database chain 的使用当中,需要特别注意一点,在应用或者说基于安全的 ai 应用的开发中,或许我们会给到用户一些基于自然语言交互,当用户提出删除所有数据的时候, 他是会被如实地转换成 delete 语句,因此呢,这对数据源是非常危险的。接下来我们看看另外一种相对比较安全的使用方式。我们是会与数据库进行交互, 但这个交互我们利用 s q l agent, 也就 s q l 代理。同样我们会将这个 s q l light 数据集下载,这次呢,下载一份新的叫 retain r slight, 这个数据集同样还是 去加载这个数据集,得到一个数据库。实力不同的是,这次我们不再利用 sql database chain 不使用链,我们使用这个 create sql agent, 这个代理会用到大模型落幕, 刚才我们创建过的另一个是 sql database toolkit, 这是一个工具集或者一个工具箱, 我们来看看它主要的区别在哪里。首先我们来看看它第一行 review 的第一行数据,有哪些数据可以看到,在这里呢,它给到了我们第一行的数据,那我们同样来做修改操作,第一步呢,是将所有的 review 改成复议, 看看他给到我们的操作是什么样的一个操作。会看到在这里,同样他生成的思考语句是 update review sereal reviews, 等于 同样是对这一列进行了修改。我们同样将第一行数据读取出来,看看它的修改效果,会看到倒数第二列是改成了负一, 说明在数据修改方面,这个 s q l 代理是没有什么差异的,它跟 s q l database chain 几乎做了同样的工作。那接下来我们来尝试删除所有的 reviews。 在这里执行的时候,可以看到这个 rebuil 数据并没有被删除。通过这个 agent executor 执行最后步 可以看到,他认为我不应该删除任何数据库里的数据,所以应该返回 i don't know。 因此这个执行的结果呢,会看到文本的回复或者响应是 i don't know 表示在删除操作上, s q l a lanchen 是会决定不去做这个操作的。好吧,今天的分享就先到这里,我们来做一番总结。 lanchen 框架对于数据库的交互提供两种机制,一种是使用 s q l chen, 一种是 s q l agent。 它们的差别在于, s q l chen 并不会去评估 用户输入是否是一个删除操作,他会如何将自然语言转换成 s q l 语句并执行。因此,在某些 ai 应用场景中,当我们将用户的输入 提供给 sql tm 或者链,他会如实转换成可能的删除操作,并对数据进行删除,这是有风险也很危险的。而 sql agent 他在删除操作上会作出决策,并不执行这类操作,因此呢,给 到了我们相对更安全的一种与数据进行交互的解决方案。最好的还是在数据库用户角色层面对它进行一些访问控制。我们可以给到 s q l chen 或 s q l agent 一个只有读权限的 数据库连接。这样呢,可以最完美的确保基于自然语言的数据操作仅仅局限在读取操作,而不能进行修改或删除操作。 好吧,这就是对这部分的一些分享。那么在安全框架使用中,虽然自然语言很强大,能够帮助我们实现很多的代理,在代理的使用中,大家也要谨慎, 自然语言也有可能转换出很多具有破坏性的操作。那么在什么场景下适合使用什 什么样的?嗯,功能或接口,大家需要谨慎的评估。
粉丝710获赞2127

郎辰是一个神奇的开源框架,他让使用 ai 开发者能够把像 g p t 四这样的大语言模型和自己的计算或数据资源结合起来。今天我们就来给想了解郎辰的朋友们介绍一下他的基本原理。我们都知道像 g p t 或者 g p t 四这样的模型具有丰富的知识,问啥都能回答的不错。但想象一下,如果你能让这个模型从你的数据文件里 找点特定的东西,那该有多好。这可能是一本书,是一个 pdf 文件,或者是带有专有信息的数据库。 long chain 就能让你把 gps 这样的模型连接到你自己的数据源。我们说的可不是把文本文件的一小部分粘贴到叉 gpt, 而是使他能引用一个装本你自有数据的数据库。而且一旦找到所需信息, long chan 还能够帮你采取行动,比如说发个带有特别信息的电子邮件等等。要实现这个功能,你得把想让语言模型用的文档切成小块,然后存到向量数据库里,这些小块以嵌入的形式储存,也就是说他们是文本的向量表 表示。这样你就能构建遵循通用流程的语言模型应用了。例如,用户提一个问题发到语言模型,在向量数据库里,用这个问题的向量表示搜相似内容,这样就能从向量数据库里找到相关的信息块给到语言模型。现在语言模型既有了初始问题,又有来自向量数据库的相关信息,所以能回答问题或采取行动了。 long chain 就是帮你搭建这种流程的应用,这些应用既能用我们自己的数据,又能采取实际行动,而不仅仅是回答问题。 这种能力为很多实际用力提供了可能性,像个人助手方面就显得尤为重要。你可以让大语言模型帮你预定机票、转账、交税等等。你还可以让大语言模型引用教学大纲,帮你快速学习资料,包括编码数据、数据科学分析都会因此受益。狼犬的核心价值可以分为三部分, 有 l l m 的包装器,让我们连接到像 t p、 t 四这样的大型元模型,或者是哈利 f 的模型。然后有锁眼,让我们为 l l m 提取相关信息链,也就是 chain, 让我们把多个组件组合起来,解决特定任务,构建整个 l l m 应用程序。 最后有 agent 让 l l m 跟外部 api 互动。当然, long chant 有很多东西要了解,而且每天都有新东西加进来,但大体上这个框架就是有模型和模型包装,有 prompt, 有链,有嵌入和项链存储,然后有 agent。 希望这段简介能帮助你快速入门 long chant。 这里是未来 ap 社,关注我,了解更多 ai 咨询。

大家好,我是小木头,又到了学习技术的时间,最近我一直在学习 lanchen js 版本,发现了一些在 python 版本中所不具备的功能,非常的有趣。 今天就来分享一下 gs 版本中如何利用 cluff layer 作为 l l m 也就是大语言模型的缓存。 大家应该知道,在 lanching 中提供了 cashing 的机制,帮助我们来缓存大约模型的响应。 如果我们频繁的使用同样的 completion 来与模型交互,那么缓存可以帮助我们减少 a p i 调的次数,从而提高响应的速度,也降低 a p i 的开销。那么在这个缓存的机制中,特别是在 g s 版本的完全框架下, 提供了一系列支持。那在最后这里文档中也介绍了利用 club flare k v 来做缓存。在 文档中,当然了,已经提供了一个相对完整的代码,实现了一个最基本的与墨性的交互,并利用 cluffle k v 实现了缓存。那我们究竟在端到端该如何完成代码编写,部署和测试呢? 让我们今天的视频来一起完成这最后一公里的工作, clove layer worker 的实现以及步数,并成功的测试一个端到端的 a p i 调用,也就是完成一次端到端的大圆模型的问语答,首先呢,我们需要注册一个 clove layer 账号,在这里呢,我已经完成了注册, 大家只需要来到 dash dot club layer dot com 就可以完成注册与登录。在注册完成以后,我们需要来到 club layer 后台,在这里呢,首先创建一个 k v 存储,这会作为缓存的 数据存储。 k v 存储呢,在 workers and pages 这个模块底下,但大家第一次如果进来点击 k v 呢,可能没有效果。 经过我的测试,我发现在这里首先需要创建个 worker, 也就是我们需要至少有一个有效的 worker 才能进行下一步就 k v 的创建。那我们在这里随便创建个 worker, 这 worker 呢是通过图形界面在网页上来创建,当然这个我们不需要去改名字,因为在后续的 代码开发部署测试中,我们会用到命令行接口。因此呢,这个 worker 只是确保我们可以创建个 k v, 直接点击 deploy, 这就完成了一个 worker 的创建。接下来就可以点击这个 k b, 那我们现在来到了这个 k b 的创建界面,点击 create a name space, 创建一个名字空间,我们可以给 他任意取名。我也不知道为啥,最近我挺喜欢用这个名字,那就叫 amazing j o, 点击 add, 这样呢,就完成了一个 k v 的创建。好了,现在我们完成了 cloudflare 账号的创建,也完成了 k v 存储的创建。 在我们完成了 k b 的创建后,我们先回到 launcher 的文档,来看一下他简要的介绍在这里呢,他介绍到我们使用 cluffle k v, 仅仅适合于一个基于 launcher 框架的 cluffler worker 项目才可以使用。 好了,那我们首先就了解了这个背景情况。接下来呢,回到我们的 cluffler 后台, 我们可以来到这个 workers and pages 这里的 overview。 如果我们进入刚才创建的随 机创建这个项目,然后来到 quick edit, 在这里呢会看到有一个右边,在这里有个 deploy with wrangler zeri, 我们点击它可以看到怎么去安装 wrangler 命令号接口, 并如何实现登录以及项目的管理。首先呢,来安装 wrangler cri 命令呢,很简单, npm install dash g wrangler, 我们来到命令行来执行一下这个命令进行安装。完成安装以后,大家可能需要重启一下这个控制台绘画来让这个 regular 生效。我其实在之前已经安装过了,所以这里呢已经直接就可以使用了,可以看到这个 regular meaning, 我们回到文档,回到文档可以看到这里在安装以后需要做 instantication, 也就是登录 logging, 那大家如果在浏览器中已经完成了注册, 可以登录。那接下来这个登录操作呢,也很简单,在命令行中我们就使用 wrangler logging, 他会拉起一个浏览器中页面完成登录,我们只需要做必要的授权, 这样我们就完成了授权。回到命令行接口,可以看到已经完成登录,那接下来我们就可以做后续的步骤, 后续的步骤在刚才的文档中也同样的为我们介绍了。我们回到这里,通过 wrangler in it 来初始化一个新的项目,再通过 wrangler publish 来实现部署。那我们首先初始化一个 worker 项目, 我们比如取名叫拆 g b t cash, 这样我们就完成了一个项目的创建。完成项目创建以后呢,可以进入这个文件夹加 gbt cash, 我们可以看一下这个项目的目录结构,在这个目录当中,除了常见的一个 notice 应用的文件加结构呢,还有几个文件我们可以注意的,首先是 regular dot tommo, 这个文件是 regular 配置文件,我们的环境变量啊, k v, 名字,空间绑定等等都会在这个配置文件当中去指定。另一个呢就是在这个 source 里面的 index t s, 这个是 modern worker 的执行文件,这个文件呢也是在我们如果通过 regular tom 来查看, 可以看到这里面也指定了这个 index t s 是它的主文件。接下来做的 事情是将刚才我们所看到的文档当中的代码和依赖进行安装和编写。我们回到文档来看看刚才这个完全的文档里为我们介绍了一些什么步骤。首先需要安装一个 cloth layer 的 type script 类型类型包, 那我们来安装一下。完成安装以后,第二步就是代码的编写,那代码编写很简单了,我们只需要将它复制过来就好。那么为了方便我们的编写呢,我们可以到这里 在我们的集成开发环境当中来进行这部分操作。那 source index ts 这个就是我们需要编写代码的地方,我们将刚才代码贴进来,这就完成了代码的迁移以及依赖的安装。 接下来呢需要做一些配置工作,配置工作主要在 regular toma 当中,在这里面我们需要配置几个东西。首先我们来回顾一下原代码,在这代码里面大家会看到 这个 e n v, 这个 e n v 呢是 worker 的环境设置,这个环境呢一个是 open net api key, 一个是 kv name space 这两块东西。第一个 openaiepik, 这是一个变量,这个变量呢我们定义在这里,我们可以看到在这个脱模当中已经有了一些视力,这视力当中呢,第一部分就是变量的绑定,这变量绑定我们将这个注视去掉。 open a i a p i k 这就是我们指定变量的位置,这个变量呢,当完成了发布或部署以后,就会出 出现在 worker 的环境变量设置当中,我们一会会看到这部分内容,好了,我取了一个 api key 粘贴到这里,这就是一个 open a 的 api key。 接下来是 kv name space 的绑定, 大家可以看到这里第二部分注视里面,第二部分就是一个 kv name space 绑定这个呢的配置,我们该怎么做呢?我们首先将这个 绑绑定这部分的注视去掉啊,首先是一个 bending name 绑定的名字,我们需要来到代码这里 可以看到这个绑定的名字,怎么读取呢?是 e n v 点 k v name space 表示是从环境当中去取到这个 k v name space, 这个绑定,这个名字或者这个变量名就是我们要在 regular tomal 当中配置的,因此这个 这个 kv 的 space 就设置为这个绑定这个绑定。那这个 id 是什么呢? id 就是刚才我们在后台创建的这个 kv 的 id, 我们如果来到刚才创建这个 kv, 可以看到这里有个 id, 这个 id 我们复制一下,回到代码当中将它粘贴进来, 这样就完成了 k v 的一个绑定。那这一块我们后续会在这个应用的设置当中看到有专门的 k v name space 这一块的绑定的配置,我们会看到这一块是如何将对应的这个 k v 存储绑定到这个 worker 上, 那完成的这部分配置就可以做我们刚才在文档中看到的发布,我们就用 angler publish。 在这里我们忘了做一件事情,就是 m p m install launcher, 我们没有安装 launch 依赖,这也是为什么这里会失败。 ph 我们用的是 p m 片,大家如果使用的 m 片或者用的是一二呢?也可以选对应的管理工具来安装,我们来装一下蓝圈。 接下来我们再次发布,在这里可以看到这个命令行输出当中呢,对于这个 worker 的绑定做了如下的声明,一个是 kv name space, 一个是变量,我朋友也 api key。 接下来呢,我们先不点击这个链接,我们先回到 cluffler 后台来看看这个 overview 一共有两个 worker, 那我们点击这, 这就是刚才我们发布的,点击这个 settings 这里。接下来你在 variables 会看到一系列我们刚才做的配置, vrs vars 配置的其实就被放进了 environ variable 环境变量,环境变量的访问呢,正是我们代码当中刚才看到的 e m v 点 open a i a p i key 这种形式来访问。那在 k v 名字空间绑定这里呢,会看到这个变量 k v name space 被绑定到刚才创建的这个 k v 存储, amazing j o 那这样看起来一切就已经如我们所期望完成了 b r 的配置了。最后一步就是点击这个链接,就可以直接访问这个 worker, 那这 这个 worker 究竟做的是什么吗?我们最后回顾一下这个代码非常简单,当我们点击 url 一个请求发送给这个 worker, worker 会触调用这个或触放这个 fetch 函数的执行。这里面呢,他首先会去初始化一个 cloudflare 的 k v cash, 基于的是我们刚才创建的这个 k v 的内名字空间 name space。 那这个 open ai 使用了这个开始,同时呢模型使用的是 gpt 三点五 table instruct, 这也是最新版本 open ai 的 api key 呢,来自于环境中的 open ai api key, 这个变量与魔性之间的交互呢。提问是 how are you today? 这是 in 编码,在这个 worker 当中呢, 那通过提问来做应答,模型会给到我们一个 response, 那这个 response 就会以 jason 的数据格式的形式返回, 这就是 workers 所做的工作。那现在就来点一下这个链接,可以看到非常非常的简单, 那这就是我们这个 worker 所做的事情。那完成了这次访问以后呢,如果我们来到后台,再来看一下刚才这个 k b, 我们点击 view 会看到这里面就会有一条简直对,这是刚才我们的提问了。那如果我们再次访问,如果我们打开这个嗯 network 看看这个响应的情况呢? 这次非常的快,一百二十八毫秒就已经完成了这次调用了,他应该来自于缓存,也就是来自这个响应就来自于这个 k b 存储,如果我们刷新一下,应该不会看到有新的记录在这个 存储当中,还是刚才那一条,那我们如果小小的对这个题文做一些调整, show me today 做一些改动,那我们再来做一次 publish, 嗯, publish, 我们再来刷新一下这个请求,他告诉我他是一个 ai, 他没有实时的信息的访问渠道,我不要紧,我们现在回到后台来刷新一下这个 k v 存储,这里 应该会看到两条记录,那这就是我们如何使用 claw flare 的 k b 存储来做 launcher 应用的一个大圆模型的缓存。要注意的是,再次强调这个方案呢,仅仅适合于 claw flare worker, 那有兴趣同 也可以来尝试一下这部分的实现以及部署。这里要提示一下,在目前这个 clove worker 的实现和部署场景中,我们没有对域名做任何保护,因此呢,是过可以公开访问的,换句话说,所有的访问都会记账在这个环境 中变量 open ai p i key 的配置上,那这一点是需要大家特别注意的。好吧,那今天的分享就到这里,感兴趣的同学赶紧来尝试一下 club fear flare 上面还有非常强大的一些云端的服务可供我们来构建 大元模型应用。后续呢,希望我们也能够分享更多这方面的知识给大家,那咱们就下次视频再见啊!对了,在结束之前也欢迎大家继续关注我们频道,感兴趣的同学呢,请给我们来一波三连,那咱们就下次再见,同学们拜拜!

如何使用这个 lan smith 和那个 ruggis 啊?包括 lan chen 这个三个框架,然后去跟踪我们,或者去评估我们的这些搜索增强生成的这样一些应用, 我们一起来看看这个工具啊。 rockies 的话,这个框架我们之前也已经给大家介绍过了,这个框架我前两期视频也跟他大家介绍过,所以我就 在这重点讲了啊。那么它整个 ig 应用,它是一般是分成两个阶段,一个的话呢,是从项链库里面获取获取信息啊,这是第一部分,那么它有两个指标, context 的准确率和 context 的 record 这样一个,还有一个呢,深层,深层的这个准确率,它 深沉的这些回答的这个问题是否符合上下文啊?另外一个的话的这个问题和答案的这个相关性啊,它主要是这个四个指标来衡量 rig 整个应用的评估啊,上次我们也跟 大家介绍啊,呃,用这个框架前也讲了,就非常方便,很容易去衡量。给大家看一下我们一般日志的话是这样的啊,如果你要去衡量一下的话啊,他他会最终会把这个答案给输出出来啊,他会你可以看一下这个指标的这个情况啊,他等于是这样啊,这个是我们输出的这样的一个东西啊,这个是指标, 这个是问题,对吧?这个是回答啊,等于是这样的,这个呢是文档的参考,等于是。好,那我们来看看啊,他到底是怎么来弄的?这种方式的话,看日志的不是太方便啊,我们看看能不能有一些图形化的工具叫 land smith, 这个工具的话呢,就是这个啊, land smith 啊,这个工具它也是有 lanchen 来开发的, lanchen 来开发,我前面就创建了这样的一个项目啊,这个项目里面的话呢,它就可以把一些把你这个调用的这个 a p i 的这个过程都能够把它给记录下来,而且 会比较方便。哦,看看像我做了这样的一个康,我们看看这个吧。 ruggis 的这样一个 force forcefulness 的这样的一个评估啊,这个评估里面的话呢,我是 它是调了八次 a p i 啊, chart g p t 的 a p i, 那它这个里面你可以看到它每一次调用,每一次调用的话,它这个里面它都它都会这个的, 他都会进行评估的,他等于是钱啊。好,我们看啊,他是怎么用的?在那个 ig 那个这样一个框架评估当中,他会有这个四五个方,四个方法啊,他这个里面是五个,我这个指标没有放 timefulness 啊, nice 啊,这个我没有放啊,我只放了这四个,评估了这个四个指标一二三四,这个是真实程度啊,回答的相关性,上下文的准确性和上上下文的那个召回率的这样的一个准确性啊,他主要是讲的这个,我们可以看 他比较方便,如果你是那个的话,他他是可以去看到你这每一次评估他到底掉了多少函数,他这个里面他都是比较清楚的,你可以看他每一个是怎么掉的。好,我们再来看看这个, 他这个每次调用的话呢,他这个上下文,他这个是我们是怎么请求的啊? ai 是怎么回答的?他这边都是比较清楚的啊,他这这个是我们请求的啊,这是 ai 回答的, 它都会有,那么它是怎么来用的呢?我们可以看一下啊,它是怎么来用的啊?这个是它的 a p i, 它也是比较简单的,首先的话呢,就是在这 大家看一下先怎么配置啊?先你要创建一个这样的一个项目,创建完项目之后你可能要更新一下那个啷啷欠的这样的一个内内裤啊内。然后的话呢,你可以设环境变量,设这个环境变量四个变量,你可以设进去,设进去之后只要你掉那个墙, oppo ai 的一些东西啊,那么他就会自动的帮你把这个数据给回传回来,他是等于是这样他他就会比较方便,他等于是啊,然后你也可以监控他的这个数据啊,到底是怎么跑的?他也有一些图表啊,他就比较方便一些。这个是项目的 api 的使用啊,那么调其实跟你平时调用的是一样的啊, 没有任何差异,回头他就可以得到了这些数据啊,可以对这些数据进行分析啊,用这个工具的话呢,就是好事在于就是你可以详细的去了解,详细的去了解你的每一个项目,你到底是目前是怎么来调用的他这个我们再看一下,他像这个应用的话, 他主要是调了两步,对吧?第一步他就是信息的获取啊,他的问题是补充医疗保险个人所得税处理啊,他这个问题啊,他就会去到这个库里面去,因为我这个是加载了五百六十三 个这样的一个内容啊,这个内容加了五百五百六十三个网页啊,他的内容就像这样的啊, 加载进去了之后,他就是先返回,返回十个,我是让他五个,十个啊,返回完了之后再加载在这个上下文里面,你可以看到他会加载在这个上下文里面快速群啊,然后 input 的 documents, 然后这个是 ai 的这个输出。 是这样,所以我们万一发现有些 ai 回答的不太准确的话呢,那么你就可以通过这种方式去弄,而且他还可以把它加到那个训练的那个 date center 里面去啊,数据集里面去,回头的话你这个数据集还是可以再调用重复来进行微调和训练,那所以的话这个也是比较有好处的。 好好,今天这篇文章啊,就跟大家介绍到这啊,我们主要还是介绍了那个 lan smith 这样的一个工具,它也是 lan 欠的这样一个团队一起开发的啊,这样一个工具可视化,可以把一些 lan 欠的一些应用啊,可以把它可视化的进行展示。好啊,今天的话就跟大家交流到这。

在这个视频中,我要探讨在构建 r a g 系统检索增强生成系统时遇到的最大问题之一。我发现许多人在这方面存在问题,那就是他们试图在所有情况下都使用语音搜索。 实际上,你应该只在试用羽翼搜索的情况下才使用它。如果你正在进行的是针对那些在普通数据库中的可以通过查找整数或字符串等进行查找的内容的搜索,那么你其实并不希望用这些内容来做羽翼搜索。 你真正需要使用语意搜索的情况是,当你面对的是文本,并且试图从中提取语意含义的时候,这就引出了自我查询检索的整个概念。从图中我们 可以看到,这里的构想是这样的,在检索和输入之间存在一个中间步骤,所以当用户输入他们的查询时,我们会利用大型语言模型来重新格式化该查询, 这样既能获取其中的语音要素,又能将其转换,以便在处理过程中能够对原数据执行实际的搜索。 这是一个基本事实,即如果你正在寻找一部电影并想要指定年份,你并不希望通过语音搜索中的向量存储来查找年份, 你更愿意直接进行查找,根据输入的年份筛选结果。 同样的,如果你是在 spatifi 上搜索音乐或者用户提供了艺术家的名字时,你不 应该使用羽翼搜索来查找艺术家的名字。相反,你应该先执行查找该艺术家名字的查询,然后在羽翼搜索表现强大的部分运用它来进行相关搜索。 现在,让我们深入了解一下如何在量券中实现这一过程。我们将在这里使用自我查询检索器。 目前我采用的是 openai 嵌入式模型,你可以像我在之前的许多视频中做过的那样,将这些模型替换为其他模型,比如 lomo 二和 bge 嵌入模型。 目前我选择这些是因为他们在这个环节并不是最重要的部分,而且代码不会占用太多空间。在这个例子中,我使用 come 作为我的向量存储。 正如我所说,我采用的是 open ai 的嵌入技术,然后我会传入数据,这部分是你需要花大力气准备数据的地方。 在这个案例中,我将对葡萄酒进行搜索。每款葡萄酒包含多个不同的属性。可以看到这里有葡萄酒的描述、名称、年份评分、葡萄品种、颜色以及产地等信息。 所有这些都是我们输入的原数据。在这里,我为多款不同的葡萄酒提供了这些信息。 接下来,我们要明确在哪些部分使用语义搜索。我们将对这里的描述部分使用语义搜索,也就是说,描述内容将成为进行搜索的关键依据。随着搜索的进行,如果我们提到诸如 果香之类的特征,系统就能够识别出杏子。桃子是水果,黑色水果、核果类水果与水果有关,柑橘风味也与水果相关。但如果涉及的是年份,我们并不希望对其进行羽翼搜索,而是要根据特定年份进行精确过滤。 我们在这里已经加载了数据,可以花费一些时间仔细梳理并确定最适合你的应用场景的原数据。我注意到很多人在处理 csv 文件时,其中很多数据可以很好的作为原数据使用, 而部分数据则适合用于语意搜索。这就是一个完美的应用视力。你可以编写一个小函数,让他便利你的 csv 文件提取所需信息,并将其转化为类似上述结构的 数据格式,适用于你的所有不同实力。一旦我们有了这些数据,基本上就需要将他们嵌入并放入向量存储中。最后一行代码就是在做这件事。他通过文档创建了一个 chrome 数据库。 我们传入这些文档,同时也指定了用于嵌入的方法。系统会将这些部分进行嵌入,并且会将原数据分开保存。接下来的步骤是创建我们的自我查询检索器,这是亮圈内置的功能, 关键在于我们需要告诉他关于原数据的信息。可以看到这些信息分别对应于我们之前定义的各种类型的原数据。例如, grape 葡萄种类是用来酿造葡萄酒的。 name, 葡萄酒名称。这里是一串 字符串或字符串列表。月儿年份是一个整数。 cut 产地是一个字符串,表示葡萄酒的国家。 color 颜色代表葡萄酒的颜色。 reading 评分在这个例子中也是一个整数,但如果你使用的评分系统是五分制, 可能出现三点七分这样的分数,那么在这种情况下,你需要将其改为辅点数类型。 我们所使用的模型实际上知道 robert park 评分是什么。这是一位著名的酒评家,这里的评分基于他的评价体系。我不确定这里的评分是否完全准确,但他能让你对这个概念有个大致了解, country 产地显然也是一个字符串类型。而对于羽翼部分,这里我们将提供一份简短的葡萄酒描述。设置好这些后, 我们就基本完成了大型语言模型的配置工作。再次强调,在本例中,我们使用的是 openai 模型,但你也可以选择 lama 二或其他多种模型。 随后,我们基本上设置了检索器传递近大型语言模型 l, l, m 和向量存储。 这部分的操作与亮券中的常规检索增强生成非常相似。接下来我们要传递的是查询条件以及原数据字段信息, 这是我们相对于常规 rag 系统所做的两个主要区别。现在可以看到我们可以进行查询操作。实际上模型会接受我们的输入,比如在这个例子中输入是有哪些红酒, 然后模型会构造一个查询。此时查询本身并未涉及羽翼操作,仅仅是基于筛选,但这种筛选是一种基于属性比较的高质量筛选。我们可以看到属性被设置为了颜色之为红色。 果然,当我们查看返回的结果时,发现确实得到了一系列意大利红酒,每个结果中都有红色这一颜色属性。 现在如果我们想要进行某种羽翼搜索,比如说想找一款带有果香的葡萄酒,这时模型就会执行搜索。 我们可以看到这款葡萄酒具有清脆的白色热带水果和柑橘风味,这符合我们的描述要求。同时我们还获取到了所有相关的原数据。另外还有一个结果显示 这款酒具有深色水果风味。综上所述,通过自我查询检索器,我们可以灵活的结合原数据筛选和语意搜索,从而在构建检索增强生成系统时得到更为精准和丰富的搜索结果。 如此一来,我们能够进行各种不同的搜索。假设我说我想要一款果香浓郁且评分高于九十七分的葡萄酒。 在这种情况下,检索器会设定一个比较器,其中包含大于等于九十七分的评分条件,并且回馈的信息依然与果香相关,如杏子、桃子及红色水果和泥土的气息。 如果我说我想找来自意大利的葡萄酒,那么此处就没有具体的语意查询,而是在原数据层面 设定了国家为意大利,于是我们就得到了意大利红酒的搜索结果。进一步的,如果我们想组合多个条件怎么办呢?比如,我可以要求找到所有具有泥土气息且年份介于二零一五至二零二零之间的葡萄酒。 可以看到系统准确的识别出了泥土这个羽翼元素,并且在这里运用了按逻辑运算符,同时设置了年份大于两千零一十五且小于两千零二十的比较条件,这样就能成功检索并返回满足这些条件的数据。 这就展示了我们可以通过综合过滤源数据以及利用向量存储中的语意检索功能对描述信息进行多样化的搜索。此外,我们还可以限制返回的结果数量。 例如,如果有一万款葡萄酒的数据库,我们可能并不希望一次性返回五千款,因此可以在此处设置一个限制条件,比如,我可能会说只显示评分高于九十七分的前几款葡萄酒, 这里的 lima 就是只由模型计算得出的限制条数。在视力中,我提出寻找评分高于九十七分的葡萄酒,并没有指定任何语义查询。 总之,通过这样的检索系统,我们可以灵活定制搜索条件,包括但不限于原数据筛选、 语意匹配、时间范围限制以及结果数量控制等,以便快速找到最符合用户需求的葡萄酒信息。在这段话里,我们设置了评分大于九十七分,并且限制 返回数量为两款。这样一来,很可能会显示最先符合条件的两款葡萄酒。由于我们利用大型语言模型重写查询,即使在输入时出现错误或不规范的情况, 例如为正确使用大小写,甚至有拼写错误,只要拥有一个优秀的语言模型,他都能够理解其中的差异并修正这些问题。 举个例子,当我询问两款来自澳大利亚或新西兰的葡萄酒时,故意没有按照标准格式书写国民手字母大写。 即便如此,语言模型仍能正确识别并返回两款葡萄酒品质,分别为澳大利亚或新西兰,并且正如我们请求的一样,返回结果的数量限制为两款。最后,我们得到了新西兰产的克劳迪杯葡萄酒,评分九十 十二分,以及澳大利亚产的 penfolds grange 葡萄酒。通过这个例子,希望能让你体验到如何构建一个更为先进的检索增强生成系统,不仅利用语音搜索,还结合原数据过滤的方式进行检索。 这一理念适用于其他语言模型,并非必须局限于 open ai。 正如前面所述,我在这里选择 open ai 仅仅是为了方便演示。实际上,你完全可以使用 lamer 二等其他模型。 但是请注意,你需要确保选用的语言模型能够处理这类查询并进行有效解析。尝试一下这种方法,你会发现人们在利用检索增强生成技术时能做的远不止简单的基于语意搜索的标准查找。最后, 如往常一样,如果你有任何疑问,请在评论区留言。如果你觉得这个视频有用,并希望看到更多类似的内容,请关注我的频道,点赞订阅等下个视频,再见!拜拜!

在这个视频中,我想探讨一个名为副文档检索器的概念。这个概念在 r a g 中非常重要,同时,了解 l l m s 和 embeddings 之间的区别也很重要。 虽然 lms 中大量使用了 in beddings 技术,但这里我们关注的是用于检索的 in beddings, 他们的作用方式大不相同。 实际上,只要我们有一个性能良好的 l o n 模型,他就非常擅长识别什么是相关的,什么是不相关的上下文信息。 因此,如果你有一个质量上乘的 r a g 模型,并向其中输入大量信息,前提是不要输 输入过多已至混淆模型,你会发现他其实很擅长提取出相关信息片段。例如,假设你有一堆不同的文档,这些斋字谷歌的收益电话会议记录可以看到, sunder pici 正在对各种产品收益和其他相关事项进行更新。 在这次通话中,他们讨论了许多详细的内容,所以我们并不想把所有内容都输入进去。为了得到更好的结果,我们需要尽可能的帮助语言模型并剔除无关的部分,而这正是 rag 所要实现的。 在传统的 r a g 方法中,我们有这样的过程,首先拥有原始文档,然后将这些文档分割开来。比如,这是其中一个文档,我们将它分割成多个部分, 并为每个部分生成一个 inviting 表示。请注意,这个 inviting 是该部分所有语意细节的一种表现形式。 如果这里的某个拆分文档部分特别大,那么生成的 inviting 可能会变得相对模糊,不够具体。 而若这部分文档内容较小,则生成的 inviting 可能更为精确特定。 举例来说,如果文当中谈论的是收益,并对比了不同产品的表现,一旦涉及多个数据和多种描述,关于收益这一主题的整体 in battle 就会比较笼统。然而,如果我们将其分割为更具体的快,如这是广告收入, 这是班带来的收入,这是 power 产生的收入等,这样得到的 inviting 会更加针对我们想要查询的具体问题。 尽管如此,我们往往希望利用大型语言模型处理多个信息快的能力,因为他可能需要做对比分析,例如,指出某一特定产品的收入,并与产品 a 和产品 b 进行对比。 为此,我们需要针对所需的信息快生成特定的 viding, 同时也要传递整体上下文中更大的信息快,这就是副文档检索器发挥作用的地方。 在这个设想中,原始文档被分成合适大小的部分,我们称之为副文档块。不同于直接对这些副文档块进行 inbiding, 我们会将这些副文档块进一步细分为子文档。 所以现在我们有了副文档和子文档。一个副文档可能对应三个子文档,所有子文档的内容都源自同一个副文档。接着,我们分别为每个子文档生成 inbiting。 这样一来,原本一个 inbiting 的地方现在就有了三个不同的 inbiting, 他们提供了更为细致的表述。 最后,当我们实际应用时,我们针对此文档生成问题的 inbiding 并不是仅仅返回此文档本身,而是返回包含更多信息的副文档。 这样一来,大型语言模型获取到了更大范围的上下文,但 inbeating 表示则是基于较小的上下文,因而更加具体。同时,大型语言模型也能利用额外提供的上下文信息来提升效果,这就是副文档检索器的 的工作原理。 接下来让我们跳转到代码层面,看看在量圈中如何实现这一操作。咱们来看看这里正在进行的操作。在这个笔记本中,我做了一点不一样的尝试,即使用 bge embeddings, 而不是 open ai 的 embeddings。 我现在引入了一个 zip 文件,里面包含了一些亮倩博客文章,是我刚刚抓取并保存为文本文件的,我们将用这些文章来进行搜索操作。 那么副文档检索器有两种使用方法,在前面的部分我已经解释过其中一种,不过 让我在简要梳理一下这两种方式,并在代码中展示他们的应用。第一种方式是与其返回较大的文本快,不如直接返回完整的文档。假如我们的文档篇幅不是很长,那么可以将文档本身当做副文档。 这样一来,当通过较小的文本块进行查询时,检索器会直接返回原始的完整文档。 这对于那些原始文档数量很多,但单个文档体积不大的情况非常适用,比如产品描述之类的。可能每篇文章只有半夜左右的文本,每个文档代表一个单独的产品介绍,而且这样的文档可能有很多。 我们可以把这些文档分割成更小的快进行查找,然后返回对应的完整文档。第二种方式更像是我之前用图表 解释过的那样,从查找小块内容出发,返回更大的文本块。现在我们一起来看一下这部分代码。这里我们先做一些标准的导入操作,包括导入副文档检索器。 接下来我们要对文本进行一些切割和处理。关于 open ai in beddings 部分,我已经将其注视掉,但仍然保留在那里,如果你想使用的话,随时可以启用。 在这里我选用的是 bg invitings, 具体使用的是小型版本。我记得最近也刚更新过这款小型版本的 invitings 模型大小仅为一百三十四兆,非常小巧。 现在我在 collab 中使用 t 四显卡运行这个模型。如果你没有 gpu 资源,可以在操作过程中退回 到使用 open ai 的 in beddings 模型。现在我要引入几个亮倩的博客文章样本,这里有两篇,一篇是宣布亮 smith 的发布,另一篇是关于基准问答的。可以看到,当我引入这些文章后,得到了两个文档对象。 查看其中一个文档,可以看到我抓取的方式是将标题和 url 一起保存下来。如果你希望将他们作为原数据,其实是可以过滤出来的。这里首先是 url, 接着是博客文章的标题,然后是正文内容。 我使用的是一种自定义爬虫工具抓取的,因为对于这种任务而言,其实实现起来相当简单。在这个例子中,每个大对象就是一个完整的博客文章。接下来我们要将这些文章 当分割成更小的快。这里会用到一个子文档分割器,也就是地规字符分割器。我采用的这些设置基本上是参照亮线文档中的说明。当然,我已经将 embeddings 模块换成了 bge embedding。 如果你打算使用 open ai invadings, 只需取消这段代码的注视,删除关于 bg 的部分即可。然后,我们将完整的文档存储在一个内存中的 store。 可以看到我们的全尺寸文档检索器实际上是一个副文档检索器,他带有向量存储及我们分割出来的小块。还有存放全尺寸文档 档的 duck store, 我们已经传入了此文档分割器。当我们执行添加文档操作时,系统会自动帮我们生成 inbiding 项量,并将所有内容整合在一起。现在,如果我们查看这里的 store, 可以看到其中只有两个文档。 也就是说,在当前情况下,我们仅有两个博客文章。但这里的思路是,这两个文档是较大的快。 如果我在向量存储中进行相似性搜索,比如查找与什么是亮 smith 最相关的文档,并设定返回数量 k 等于二,确实会看到有两个文档被检索出来。 如果进一步查看其中一个文档,可以看到第一个文档。大意是,今天我们正在介绍 lame smith 这一平台。这个文档并不长,只有几 句话,这就是其中的一个小片段。现在我们找到了两个这样的小片段。当我们将什么是亮斯妹子这一问题传递给全尺寸文档检索器时,他首先确定与该问题相关的小片段,然后找出这些小片段所属的负极文档。 在本历中,这些负极文档就是全尺寸的原始文档。随后检索器返回这些全尺寸文档。因此,当我们询问什么是亮思那时,确实能够得到与此问题匹配的第一个完整文档。 尽管刚才那个小片段只有几百个字符,而返回的全尺寸文档则有一万一千六百个字符,这是因为它是原始的完整博客文章,内容正是关于宣布亮 smith 发布的。这是通过一次性操 做完成整个流程的一种方法。另一种方式则是分布检索更大的文档片段。这种方式适用于处理那些无法一次性将整篇文档输入到语言模型的情况。 例如,如果您的全尺寸文档是多页文档,直接将整个文档传递给模型可能会过大。 这时就需要采取分层的方法,先获取较大但尚可管理的文档片段,再逐步处理。 在这种情况下,我们需要原始文档负极快以及较大的快和较小的快。同样,我们会继续使用之前的子文档分割器,但现在我们还引入了一个负极分割器, 你会注意到它的分割力度要大得多。负极分割器设置为两千个字符,而指纹档分割器设置为四百 个字符。这些参数都是从亮倩文档中选取的,你需要针对你的特定需求进行试验调整。接着,我们再次配置 chroma, 这次依然采用 bge in beddings, 存储方式与之前相同,没有什么变化。而现在唯一不同之处在于,当我们创建副文档检索器时,同时包含了子文档分割器和负极分割器,这意味着我们将有多层文档结构。 现在在这个 duck store 中存放的是较大的快急奈两篇博客文章经过分割后的结果。当我们查看 store 时,会发现这两篇文章已经被分割成了十八个大块。这是因为每个快大约是两千个字符场。至于此文档,在 进行搜索时他们将会更小。现在,当我执行搜索操作时,会得到四个字文档的结果。这意味着在搜索过程中,系统会找到与查询最为相关的那些小片段,然后通过这些片段定位到较大的快,最终指向原始的全尺寸文档。 通过这种方式,即使面对多页的大型文档,我们也能有效的进行处理,并避免一次性将整个文档输入到语言模型中。好的,当我查看第一个子文档时,确实能看到。今天我们正在介绍 linusness, 并且可以根据需要更改返回文档的数量。 k 默认值是四,之前我改为了二。现在,当我们调用检索大块文档功能时,即使用大块检索器获取与问题。什么是梁思美相 相关的文档?可以看到只返回了两个文档。这两个文档虽大,但并非完整的原始文档或整个博客文章,而是博客文章的不同部分。查看返回的两个大块,第一个显然是该篇博客文章的开头部分, 而第二个文档看起来也是来自同一篇博客文章,只是属于文章的另一个部分。因此,我们现在拥有的是这篇博客文章的两个片段,即将他们分别作为独立的内容传递给上下文学习模型。 最后,为了完善这个流程并测试一下,我们构建了一个检索式问答链。此处我只是用了 open ai 的语言模型,但实际上你可以使用任何性能较好的语言模型。像 lama 二这类模型应该 能很好的适应这种情况。我们将所有内容都传递给上下文学习模型。在这个过程中,我将大块检索器直接传递给了检索组件。 所以现在当我问什么是 landsmith, 系统会首先运行查询已获取小片段,然后通过这些小片段找到相应的大块内容。需要注意的是,最初我们得到了四个子文档片段,但最终仅返回了两个大块内容, 这表明这些片段存在重叠,这是一个很好的迹象。果然,现在我们得到了一个恰当的回答。通过最终的语言模型处理,亮 smith 是一个只在帮助开发者弥合原型 生产之间差距的平台。现在,我们已经得到了这个问题的完整答案。这就展示了如何使用副文 解锁器。在许多情况下,尤其是当你有许多精细信息需要处理时,这种方法非常有用。你既需要非常具体的 inviting 表示,同时也希望在最后返回更大的上下文信息给语言模型,以便他能给出连贯且准确的答案。 一如既往,如果你有任何问题,请在评论区留言。如果你觉得这个视频对你有所帮助,请点赞并订阅。 接下来,我还会发布更多关于检索器以及如何在未来使用 r a g 技巧的视频。好了,我们下次视频再见,现在先拜拜了。

也是介绍过啊,阿里的这个通一千万的这个模型,他啊,他这个最大的特色呢,就是他对这个 api 的这个调用,他的这个能力啊,他要超过 gd 四的这样的一个能力 啊,它对工具的这个选择的这个能力,它要超过啊,超过一些一些主流的一些模型,你可以看到它这个 g p t 四,它的工具选择的准确性,它只有百分之九十五, 但是通一千分这个七 b 的模型的话,他准确性可以上升到百分之九十九,他大概率都是会对的啊,那而且他错误选择之不到百分之十啊,那像 gd 四的话要百分之十五啊, gg gpd 三点五的话要达到百分之七十五啊,所以这个通一千分这个模型,他对这个工具的使用 选择,让那个大模型跟其他的 a p i 结合,这个方面的能力是非常强的啊,所以我们今天来讲一下这个方面的一些功能啊,好,我们看看啊。啊,这个代码我已经已经用了 一下啊,这个也是通过他的这个,他的这个商铺的这个例子啊,啊,稍微改了一下啊,给大家看一下啊,他这个例子里面呢,他的工具的话呢,他会有四个啊,四个啊,有一个搜索啊,有一个数学方程式计算啊,数学公式计算的这样的一个工具的增强 啊,还有一个啊,查询论文的这个 api 啊,还有一个是拍审这个代码的这个自我的运行啊,他有这样四个工具啊,我主要是测一下这个啊,因为其他这个两个,这两个是要有 api 的这个支持的,就像你要有一,他是有收费的 api 的 key 啊,如果你没有的话,你可能就做不了啊,他这个事情啊, 拍摄他因为他这个环境要拍摄三点九版本啊,所以我这个也没跑起来啊,我这个是三点八的,所以我主要撤几个给大家看一下啊,他大概是怎么跑的?首先呢肯定还是要定义这个工具啊,这个定义这样一个工具,你要 告诉他这个工具是干嘛的啊?这个这个工具的名称是什么啊?他这个里面会讲啊,如果你要去,你要去回答一些,要去搜索到里面要去搜索一些 ai、 a, r x i v 的这样一个文档的话,你就可以利用这样一个工具啊,它的这个参数啊,它主要是输入一个字符串的这样一个参数啊。 啊?他的 a p i 主要是这样的啊,他会介绍一下,他的 a p i 主要是这表这个函数,他等于是这样。好,我们可以看一下是他的这个工具的模板啊,因为他用一个 reaction 的这样的一个提示的工程啊,他这个提示工程,他主要是经历这四个阶段,就是问题要去思考,要去行动,要去观察,再要去思考 啊,最后去回答这个问题啊,他要经过这几个步骤啊,他要经过这样几个步骤,要去判断这个模型目前是处于什么样的一个阶段, 然后要做一个什么样的动作,他在这个里面循环,循环完了之后,他最后去根据你这个问题去回答,他主要是做这个啊,这个主要是 beau 的这个提示工程的啊,这个里面会讲啊,你用些什么工具,对吧?你要回答一些什么问题?你要做一些什么事啊?他这个这个里面 提示工程,提示工程的话就把这个里面前面那些东西把它给录入进来,他主要做这样一件事情,他只要做一个 reaction 的这样一个提示模板,他的核心就是 构建这个提示模板这部分代码,他主要是装载啊通一千万的这样的一个七币的这样一个模型啊,因为我本地已经下载了,所以我要他要下载一下啊,啊,装载模型完了之后,这个地方的话呢,他主要是要去就要去调用啊,调用这样的一个帕拉格印的这样的一个 api 啊,然后他调用完了之后 要去分析分析这个 plug in 的那个参数到底是什么?掉哪个 plug in, 然后掉的参数是什么?它主要是做这样一件事情, 那么他会根据这个反馈这个模型反馈的这个 action 和 action input 和观察到的这个数据去调这个,调这个参数,调这个 plug in 的一些参数啊,这个地方就用这个 plug in 啊,就调用这个 a p i, 它主要是, 那么这个是主函数的话呢,它主要是把上面所有的这些东西给串起来啊,那么首先他会根据你这个问题和你选择的工具,他首先要去做一个计划啊,要做前面这个东西就做啊,问题思考、观察行动,对吧?观察最终答案,他要做这样一个 计划,计划完了之后,他会根据他的这个观察到的这个情况去做这样的一个反馈,他会把这个结论会拿到啊,他会根据这个反馈的这样的一个东西是最终去回答输出这个啊,那么我呢,就简单的,他这个问题,就是编号是这样的一个论文,他讲了些什么啊?如果你用大 模型的话,因为他是缺乏这个方面的知识的啊,他是不知道这篇论文的啊,所以的话呢,他会选择这样一个工具啊,备选的工具注视,把它注入进去啊,这个是他的反馈的情况啊,你可以看到啊,这个 answer for in question for best you, 这个就是提示工程,然后 他会把这个工具给输入进去啊,然后这个参数到底是什么,对吧?返回的是一个 jason 的格式,他会跟你讲的啊,然后 follow some, 这个是 format, 他是根据这个问题输入的这个问题,思考这个就是提示模板前面的提示模板,提示工程里面 啊,他这个问题是这个,他的反馈又来了,他思考这个模型,思考是我需要调这样的 a p i 来获取这个论文的信息,他就去调了啊,调的这个参数,他也准确的捕捉到了啊,他观察到的这个信息啊,那他的这个 publish 的时间对吧?他的这个标题 对吧?他的作者,他的 summary, 他的摘要是什么?他拿到这个信息了之后,他认为他可以去回答这样一个问题了,所以他最终的答案是啊,这篇论文是研究的是一个什么东西,对吧?他的摘要是什么?这个 还是蛮蛮好的,假设我的问题就是输入一个,你好啊,他会不会会用这个工具呢?那么这也是一样的,他这个提示工程,提示模板啊,他会看一下啊,他会告诉你 啊,这个回答概问题的帮助比较小,我将不使用这个工具直接回答,然后他的最终的回答是,你好,很高兴见到你他的事情啊,所以这个我们也可以反映出啊,他他的这个工艺千万的这样的一个模型啊,他可以通过这些工具的定义, 他可以通过工具去增强他的这个模型的这种能力啊。他,呃,如果他觉得他需要有必要用工具的时候呢,他就会去用啊,去把这个利用这个工具的这个能 把一些内容,能够能够获取到这个 contex 这个上下文里面,他根据大模型的这个上下文里面的内容去最终去回答你这个问题啊,他只是一种方式,另外一种的方式,他可能觉得,呃,回答这个问题不用这些工具也是可以的,那么他就不不会用这些工具就直接的去回答你这些问题啊 的话,这个通一千分的这个能力,我,我上次也是介绍过啊,他这个能力就会非常强,他这个模型是七 b 的一个模型,但他可以通过工具的这个使用的这个工具的赋能, 可以干更大模型的事啊。在这个 luncheon 里面,它其实也定义了啊,各种各样的工具啊,你可以把这个工具跟这个模型 集成在一起,然后去告诉他,当然你可以定制开发一些你自己的工具,用这些工具跟这个模型的结合,能够做出一个非常智能的这样的一个机器人出来啊,他不但可以回答你各种各样的问题,对吧?他也可以结合你的本地知识库啊,去做这样一些事情啊, 当然他也可以去做,就是是呃,利用你这个工具去拓宽他各种各样的能力,他等于说,呃,你这个工具他比如说是环境控制啊,你这个工具是调用一些 api, 你这个工具是那个查询数据库里面的一些结构化的一些数据啊,他其实都是可以作为一些增强的, 你这个模型跟其他的这个外部的工具能够做到一个非常好的支持啊,这样我们清楚之前恰的 g p t 它是有这方面的能力的啊,它是可以调用外部工具啊,它会可以去告诉你,你可以去调一些外部工具去增强恰的 g p t 的这个能力的。那么目前看这个独立部署的像 通一千问的这样一个模型,它也能去掉这个 a p i, 去掉外部工具去增强这方面能力啊,它也是非常强的啊,好吧,好。


今天来聊一点关于写代码的如何通过蓝线架构来调用 google 新出的 jamile pro 的文字和图片的 api, 用到的语言是拍摄。 先给不知道什么是蓝倩的同学解释一下,为什么要用蓝倩。各种 ai 的模型每周都会出来新的,每一个新的模型都有一套自己的 api, 那势必会对使用的人造成很多麻烦。切换新的模型就得重新写代码,重新开发。而蓝倩的出现就是为了解决这个问题, 他提供了一个开源的框架,让应用开发者只要开发一次应用程序,就能对接多种大语言模型。 你今天想用 check gbt, 明天想用 gma, 后天想用 misstral, 没问题,不用改代码,只需要改改配置就可以无缝的切换。它的功能不仅极限于 ai 模型上,更是实现了超多工序的集成,比如说搜索引、 个人知识库,关系型和非关系型的数据库,网页数据爬取, pdf 文件的读写,多套说都说不完。这也就是开源的好处,就如他的名字所表示的, lam 表示语言, chin 代表链条。他把大语言模型列入了科技领域的方方面面。 好了,介绍完毕,进入正题。首先你得有一个 gcp 账号,并且进入这个网址, ctrl 点 google dot com。 如果你是第一次进入,会让你同意一些条款,并且输入付款信息。不过不用担心,使用 japan 是免费的,并且新用户会有三百刀,你也可以使用 google 的其他产品。 进入 google cloud 以后,如果你没有创建 project, 它这里会提示你创建一个 project。 创建好 project 之后,它这里会有显示你的 project 名字,代表你就可以进行工作了,然后你会得到 到一个欢迎界面。首先我们看一下网页版是如何使用的,在搜索栏里边搜索 vertics ai, 然后进入 vertics ai 界面,打开左边的快捷栏,可以看见它,这里出现一个 multi model, 在这里 multi model 里边我们可以看见他,这里有很多例子,比如说根据这张图片写一个故事, 我们可以点击 open, 这里是 gemni 的版本,是 pro vision。 然后左边是一张图片,提示词是 write a creative story inspired by this image。 也就是说他需要根据这张图片来写一个故事,点击 submit 就可以用。 如果你是第一次使用呢,他会要求你开一些 api, 这个我会待会详细的给你介绍。 ok, 这里是可以用的。那怎么开 api 呢?我们首先进入这个色区,然后打开 api, 在这里会显示 enabled api and service, 点击这个 enabled api and service 点 continue。 我这里一共开启了三个 api, 一个是 vertics ai api, 一个是 generatic language api, 另外一个是 notebook api。 做我今天这个视频呢,其实只要开这一个就够了,不过我建议你们把 vertics ai 和 genres language 都开开来,如果你是想要玩 ai 的话,基本上这两个都是要开的。 具体怎么开呢?我们点击这里 enable api and service, 点击,在这里输入 generative language api, 然后点击这里, 这个时候它就会显示 genetic language api, 在这里点击。如果你没有开的话,它这里会显示一个 in able disable 的 button, 我这里是已经开了,所以它显示 api in able。 你把这里点击一下,它就会进行一个打开的操作。 回去之后呢,我们再换一个 vertex ai, 同样点开这里,然后点击 manage 或者点击 unable, 就可以把 api 给打开。打开大概需要五分钟左右的时间,所以我们先做一下,待会再去携带嘛。把这里关闭,回到 googlecolo 的主页面。 我们接下去呢,需要创建一个 google cloud 的 api key, 这个也是很容易的。在这里刚刚我们输入了 api, 我们在这里输入 api key, 然后在这里选择 credentials。 看这里我已经有了其他的 key, 这个不用管,我们需要创建一个新的 key, 点击这里 create credentials, 然后选择 apm key, 这个时候他就非常快了,帮你生成了一个 a p i k, 非常容易。有了 a p i k 之后,我们把这个字符串给复制下来,待会我们会用。到现在为止,我们勾勾 这边的操作已经全部完成了,接下去我们开始正式进入代码环节,左边打开我们的命令号。 windows 和麦克都是一样的,因为我们是写代码,没有任何区别。我这里就用麦克演示了,因为我麦克的电脑性能稍微好一点。 首先我们创建一个目录, m k d i r m k d i r mk gemini 创建好以后 cd 进入这个目录。进入好之后, python 创建一个虚拟环境, python 三杠, m v and v v and v 创建好之后,激活 sauce v and v being activate 好,激活完成。能写代码的小朋友对这些已经是非常熟悉了,我也不多解释了。拍摄的版本是三点十一点六,第一点高一点,没什么关系,因为我们是调用 api, 而不是做本地的训练。接下去我们需要安装一个依赖包,这个依赖包大概只出来了十八个小时,非常新的。 这个一百包的名领是 pip install lanchen google g a i pillow, 是关于一个图像处理的一个包,把这个给安装进去,安装不会很慢,安装成功,然后清掉命令行。接下去我们会用到 v s s, 也就是我们的代码编辑器,打开 v s s, 然后选择 open, 选择刚刚我们创建的目录 lanchen jimini, 点击 open, 这个时候可以看见出现了一个空的项目,点击这个小按钮,我们新建一个文件,比如说叫 m e 点 p y, 这是一个 python 的文件,我们把这段代码给复制进来, 我待会解释一下这辆代码是干嘛的。先来演示一下他,这里会有第三行出现一个 google a p i k, 在这里是 t b a。 我们回到我们刚刚的 google 的界面,把这个 a p i k 给 复制一下,粘贴到这里,这样我们第一个代码就完成了。然后我们切回 time 拍摄 m, 一点 p y 进行运行,就可以看见他进行实时的调用了。 这次我给的提示词呢是写一段关于蓝倩的介绍,于是他就开始写了,所以他的输出是正确的。如果我们试一下把 apik 给弄错,然后再次运行这个 python m 一,就会出现一些错误,如果你也出现一些错误的话, 第一个检查你的 api k 是不是对,另外检查你在 google cloud 里边那几个 api 有没有赢 a 某,一般来说错误就是这两个能够正常运行了。之后我来解释一下这个代码, 这一行就是我们的 a p i k, 我不用多说,接下去这个就是他一个蓝天的安装包,直接可以下载,不用下载整个蓝天。而这一 他就是创建一个 l l m 的 object, 这个 l l m 是可以和其他蓝嵌的各种模块进行整合的,而当这个 l l m object 生成好以后,他可以定义你的模型,这里用的 james pro。 接下去我们会实现一下图片的模型,然后通过 l l m in look 一个提示词,直接就可以生成一个结果,把这段结果打印出来,这是我们能看见屏幕上显示的一大串英文,好,没问题。 做完这个东西之后呢,我们来试一下蓝线里面它自带的另外两个功能,一个是 streaming, 一个是 batch。 什么是 streaming 呢?演示一下你就知道。 我们把这一行 print 改成 stream, 然后把这个 result 给注视掉,这样的话它 l l m 直接调用一个 stream 函数,然后再进行同样的提示词,并且要求一千个 切到命令行清掉,然后再进行 ism m 一点 p y 进行运行,这个时候你就看见它的结果不是一下出来的,而是一段一段一小段出来的。为什么呢?它就是一个 streaming 的一个过程,就像加起 gpt 一样,它的字是一个一个蹦出来的, 如果他生成的非常慢,这个 stream 会给用户提供一个非常好的体验。然后是这个 batch, 如果你有多个提示词,多个结果想一口气一下去生成,那你就可以用到这个 batch 的功能, 我们可以通过这一段代码进行标志的操作,他一一次提了两个问题,二加二,三加五,然后最后把所有的 content 全部都打出来,我们来跑一下 pasen demo, 这个时候我们就看见他出来是一行四,一行八,尤其是你需要处理大量的文档,大量的问题,这个会是非常有用的。好, 讲完了这些,我们来讲一下如何进行图片的多模态的演示。我们在这里创建一个新的文件,叫 demo 二点 py, 把这里给关掉, 把这些代码给复制进来。同样我们需要 a p i k。 我们从刚才的 m 一把这个 a p i k 给复制进来,然后粘贴到这里。 第一个我要演示呢,是一个远程的图片,他这个图片是在网上的,他可以支持网上的图片输入。我把这个图片打开,他这里好像是一个雪山的图片啊。 这个网上的图片可以通过一个 image url 的形式直接输入到 message 里边,然后把这个 message 打包给 l l n 这大语音模型,然后它就可以直接 invoke, 然后输出人造来。我们来看一下结果,这个是 m 二这条批网。在等结果的时候,我们可以看一下这个 model 是 germany provision 的 模斗,和刚刚的模型是不一样的,刚刚的模型是 jamina pro。 我每次创建 l l m 模型的时候,得定义他具体是一个哪个模型, 当然介于蓝倩的优势。如果你想用拆 gpt 的话,你直接可以生称成一个 l l m 等于 opple ai 的一个模型,然后 model 等于 gpt for, 我们就可以实施无缝的切换,把它切成 google 的,或者切成 obani 的,或者切成其他的。好,我们这里的结果已经出来了,它的结果是 the image contains a snow capped mountain pick a sunset。 这个是对的啊,因为他那个他的图片就是一个雪山, 覆盖了山顶,并且有一个日落的效果。如果你想调用一张本地的图片呢?那也很简单,我们把这个英美局幺二二给换一换。这张架构图呢,是说 gpt 四是一个八个专家级模型组成的, 而不是由单一个模型组成的,并且详细解释了如何通过一个绕挺的机制把用户的请求输送给不同的专家及用户,并且进行多核的处理。 看一下姑姑是怎么解释的。姑姑说, the images shows how the palm two works it's a language model that to use generate text。 他完全避开了 g p t 四这么大一个字,也非常有意思,因为 punt 他其实也是姑姑他自己的一个模型,而不是 obani 的一个模型。那么他的 g p t 四他看不见吗?还是他故意的? 那这我也不知道了。好了,这就是我今天要演示的东西,一个是文字处理,一个是图片的处理,多模态的,你通过蓝圈可以把你把它整合在一起,你可以把这张图片导入到你的 c 和数据库,可以上传到 你的云端,或者连接各种各样的云,亚马逊云,谷歌云,阿里云,什么云都可以,而且还可以开发你自己的自动应搭机器人等各种各样有意思的应用。这个只是一个抛砖引玉吧。谢谢你的观看,我们下期再见。

![[茉卷知识库]#Langchain教程 [21] 文本分割器 练习代码 #langchain #aigc](https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/09c22bdeb0f9eec7b66d87bdc5ede04d~tplv-dy-resize-origshort-autoq-75:330.jpeg?lk3s=138a59ce&x-expires=2086538400&x-signature=ib36v7VR4Y0Ob9ApGRQL0SZVQdw%3D&from=327834062&s=PackSourceEnum_AWEME_DETAIL&se=false&sc=cover&biz_tag=pcweb_cover&l=2026021602095136B9851F6536A49765B1)
大家好,这里是墨卷频道,那么我们继续来回顾一下我们之前所说过的一些内容,然后我们把这些内容的一些代码放到这个网站上,让大家可以去自己去实践一下。那么今天我们来说第二部分,也就是文档的载入和分割。 当我们想处理这些数据的时候,我们需要把我们的一些 t x 文件啊,或者是我们的 h, t, m, l, 或者是 pdf 等等这些数据从外部的形式把它转化成我们 lanchen 中内部可以处理的一些对象。那么在 lanchen 中实际上他比较处理的对象呢?是叫做 document 对象。 这个 dockman 的对象呢?大家如果去看 lantern 的话,实际上可以看到他实际上是一个类似这个东西啊,他就是这样一个类,这样类的一个对象。 dockman 他的主要内容是说你有一个 page content, 然后你还有一个 metadata, 那么 page content 呢?实际上就是你 要保存的这个数据的主要内容,它是一个字幕串。那么 mate day 的部分呢?可以是说一些额这个文件相关的一些额外信息,比如说如果是太损本的话,它可以是一个路径, 如果你是一个呃 url 的话,它可能它可以是一个什么呀?是一个 url url 链接。 那我们可以看到实际上他可以处理的数据类型,包括 csv 文件,包括 html 文件,包括杰斯文件,包括 markdown 文件,包括 pdf, txt, 还有就是还有 url, 对吧?都都可以解析。然后他你传入一些数据之后,我们通过 loader 把它散入到我们的开发环境中去, 那么 lantern 其实定义了很多 loader, 然后呢大家有兴趣的话可以看一下他的 loader 有哪些?他 loader 有很多,对不对? doctor loader 啊,这么 在哪?我们看一下,然后大家有兴趣的话可以看一下它这个动作啊。好,那我们继续,那我们先从比较简单的 t x t 开始,那么对于 t x t, 我们可以用于它的 text loger, 对吧? 但是这个 types 录上可能不太好用啊,有些问题,有些解码了,一些报错,那么这里呢,我推荐大家使用,我使用他另外一个叫做 directory loader, 那么 directory loader 的时候, 你可以通过使用这种叫做叫什么呢?叫做 loader class。 哎,你通过 loader class 用 text loader 来使用它,然后从而帮助我们来解析 ts 文件。那这里的话,你可以指定一个路径,包括就是说你的 ts 文件放在什么地方, 然后呢,你可以还可以就是告诉他啊,你需要怎么着? supergress, 然后呢,包括一些 啊,你的这个 incoding, 一些一些参数呢?它自动识别你的编辑码,这样的话呢,可能就避免了很多错误啊,这是个推荐的方法。 那好,首先呢,你创建一个啊,首先我们有个 pass 路径,这路径下面我们放了一些 t s 文件,对吧?我两个 t s 文件在这个路径下面,然后呢,我们开始啊,创建这么一个 directory load 这么对象,然后呢,这个对象之后呢,已经 low 点 low 的这个方法,把你的这个数据载入到你的系统中去,那么成功之后你会看到,那么你的 doc docs 实际上是个例子,里面就会来有两个文件对象啊, documents。 好,这是一个非常基本的一个载入方法。那我们看一下文本分割啊,那么文本分割是说啊,因为我们的文本可能比较大嘛,但是我们希望把它 进行一些处理,把它切割成一些小的块,一些小的 chunks, 然后针对不同 chunks 进行处理。你比如说在最早的时候,我们可能我们的上下文大模型只能处理,比如说一 k、 两 k, 或者是啊四 k 这种情况,当然了,现在其实大模型能够处理的。 呃,这个上下文已经非常大了,比如说现在的那个啊,智普 ai 能够处理一百二八 k, 百度温馨的四 k 或者八 k, ok, 当然不用不用说了,是不是啊?四 k, 八 k 的,十六 k 的,三,十二 k 的。 好,我们继续看。那么他其实文本分割的目的就是说我们把大的一个段,这个字幕串一些内容分割成小段,那你可以指定小段内容。那其实单程也提供了很多文本分割器,包括什么呀?包括最针对文本的,比如说有低规拆分,对吧?这 cursive loader, 这个后面我们看一下,然后还有 html 拆分, 比如说你传给他一个哎 html 相关的这个东西,然后他给你拆分,还有类似的 markdown, 然后然后代码拆分,对吧? token 拆分, g token 拆分,然后这个居字符的拆分等等等等。大家有兴趣的话呢,可以在官网去看一下啊他的 text splitter 具体部分。 好,我们继续。那这里的话,我们通过一个非常简单的 这个啊,一定的大小,对吧?我们可以分割成,比如说我需要啊按照烂死来来进行分割,然后每一千个这样单位,我把它分割成一个快,那么快和快 之间没有重叠的部分,好就完事了。那这也非常简单,首先第一步呢,你需要把,你需要读文件,对不对?你需要得到一个啊 txt 文本中的搜串,那么比较简单的方法,你可以 这里不要演示,非常方便的话,我们就用这什么 oppo 打开文件把它读进来就完事了。然后你创建这么一个 speed 对象,对吧? 啊?你设置一下一些参数,比如说我就是设置一千个没有充电部分,通过 let's 计算好了,然后你只要用 tax speeder 点 create documents 这个方法,同时传入一个例子,这个例子是, 哎,之前的这个例子里面就是你要放的那个自助串,然后,哎,分割就完事了。然后呢你这个 tic 实实际上就是一个什么呢?就是一个一个列表,然后他这个例子里面会保存着道客们对象,然后这个道道客们对象中的配 它里面的内容长度,就是你之前分割的这个按这个长度来进行分割的就完事了,非常简单一部分。好,那么那如何?那这个例子呢?是是说我们从外部文档读一个东西,然后进行分割,那么如果我们已经有了一个 啊,如果已经有了一个这个这个这个这个这个文档的话,那我们我们如何分割它呢?实际上也是可以的,比如说你先准备一个空的栗子,用于保存你分割后的这些文档,然后你只要, 那么我们看到那这个丢啊到这个 dogs, 实际上就说假如说这个 dogs 实际上就是上面中的上文中的这个 dogs, 就这两个文件,好吧,就是说我要把这两个文件进一步分割,对吧? 好,你只要怎么做呢?你只要哎继续把它传过来。 test speeder 可以 documents 这样 doctor page content 啊,把它的实质核心对象传过来,然后哎 就把分割就完事了。然后你把它放到这个道克里斯,然后你会看到道克里斯中有很多这样对象了。当然了,在你分割之前,你可要设置一下这个啊,你的这个 chunk size 啦,哦哦, chunk overlap 啦,等等。 那么我把全包用代码放到这里了,大家可以自己去拿来去自己跑一下,体验一下。好了,本期视频就到这里,谢谢大家。