今天来聊一点关于写代码的:如何通过LangChain架构来调用 Google 新出的 Gemini Pro的文字和图片的 API。用到的语言是 Python。先给不知道什么是 LangChain 的同学解释一下,为什么要用 LangChain。
各种 AI 的模型每周都会出来新的,每一个新的模型都有一套自己的 API,那势必会对使用的人造成很多麻烦。切换新的模型就得重新写代码,重新开发。而 LangChain 的出现就是为了解决这个问题,他提供了一个开源的框架,让应用开发者只要开发一次应用程序就能对接多种大语言模型。你今天想用 ChatGPT,明天想用 Gymna,后天想用 Mistro,没问题不用改代码,只需要改改配置就可以无缝的切换。它的功能不仅限于 AI 模型上,更是实现了超多工序的集成,比如说搜索引擎、个人知识库、关系型和非关系型的数据库、网页数据爬取、PDF 文件的读写,多到说都说不完。这也就是开源的好处。就如它的名字所表示的,Lang 表示语言,chain 代表链条,它把大语言模型列入了科技领域的方方面面。
谷歌云设置
进入正题,首先你得有一个 GCP 账号,并且进入这个网址 console.cloud.google.com。如果你是第一次进入,会让你同意一些条款,并且输入付款信息。不过不用担心,使用 Gemini 是免费的,并且新用户会有 300 刀,你也可以使用 Google 的其他产品。
进入 Google cloud 以后,如果你没有创建 project,它这里会提示你创建一个 project。创建好 project 之后,它这里会有显示你的 project 名字,代表你就可以进行工作了。然后你会得到一个欢迎界面。
首先我们看一下网页版是如何使用的,在搜索栏里边搜索 Vertex AI,然后进入 Vertex AI 界面。打开左边的快捷栏,可以看见它。这里出现一个 multimodal,在这里 multimodal 里边我们可以看见它,这里有很多例子,比如说根据这张图片写一个故事,我们可以点击 open。这里是 Gemini 的版本,是 Pro vision,然后左边是一张图片,提示词是 write a creative story inspired by this image,也就是说,它需要根据这张图片来写一个故事。点击 submit 就可以用了。如果你是第一次使用呢,它会要求你开一些 API,这个我会待会儿详细的给你介绍。
那怎么开 API 呢?我们首先进入这个 Search,然后打开 API。在这里会显示 enabled API and service,点击这个 enabled API and service,点 continue。
我这里一共开启了三个 API,一个是 Vertex AI 的 API,一个是 Generative language API,另外一个是 Notebook 的 API。我建议你们,把 Vertex AI 和 Generative language 都开开来。如果你是想要玩 AI 的话,基本上这两个都是要开的。具体怎么开呢?我们点击这里 enable API and service 点击,在这里输入 generative language API,然后点击。时候它就会显示 Generative language API。
如果你没有开的话,它这里会显示一个 enable disable的按钮,我这里是已经开了,所以它显示 API enabled,你把这里点击一下,它就会进行一个打开的操作。回去之后呢,我们再换一个 Vertex AI,同样点开这里,然后点击 manage 或者点击 enable,就可以把 API 给打开。打开大概需要 5 分钟左右的时间,所以我们先做一下,待会儿再去写代码。
回到 Google cloud 主页面,我们接下去呢,需要创建一个 Google cloud 的 API key,这个也是很容易的。在这里刚刚我们输入了 API,我们在这里输入 API key,然后在这里选择 credentials。我已经有了其他的 key,这个不用管,我们需要创建一个新的 key,点击这里 create credentials,然后选择 API key。这个时候它就非常快了,帮你生成了一个 API key,非常容易。有了 Api Key 之后,我们把这个字符串给复制下来,待会儿我们会用到。
到现在为止,我们 Google cloud 这边的操作已经全部完成了。接下去我们开始正式进入代码环节。本次代码的笔记我会放在视频描述栏,你们可以点开观看。左边打开我们的命令行,Windows 和 Mac 都是一样的,因为我们是写代码,没有任何区别。我这里就用 Mac 演示了,因为我 Mac 的电脑性能稍微好一点。首先我们创建一个目录 mkdir,然后 change Gemini 创建好以后 CD 进入这个目录,进入好之后 Python 创建一个虚拟环境 PYTHON3- M V N V V E N V 创建好之后激活 source VNV/bin/activate 好。
文字 API 调用
激活完成能写代码的小朋友对这些已经是非常熟悉了,我也不多解释了。接下去我们需要安装一个依赖包,这个依赖包大概只出来了 18 个小时,非常新啊,这个依赖包的命令是是关于一个图像处理的一个包,把这个给安装进去,安装不会很慢。
安装成功,然后清掉命令行,接下去我们会用到 VSS,也就是我们的代码编辑器,打开 VSS 然后选择 open,选择刚刚我们创建的目录 land chain Gemini,点击 open。这个时候可以看见出现了一个空的项目,点击这个小按钮,我们新建一个文件,比如说叫 demo 一.py 是一个 Python 的文件,我们把这段代码给复制进来。
这里会有第三行出现一个 Google APIK,在这里是 TBA,我们回到我们刚刚的 Google 的界面,把这个 API key 给复制一下,粘贴到这里。这样我们第一个代码就完成了,然后我们切回 terminal,Python Demo 一.py 进行运行,就可以看见它进行实时的调用了。这次我给的提示词呢是写一段关于 LangChain 的介绍,于是他就开始写了,所以他的输出是正确的。如果我们试一下把 Apik 给弄错,然后再次运行这个 Python Demo 一就会出现一些错误。如果你也出现一些错误的话,第一个检查你的 API key 是不是对的,另外检查你在 Google cloud 里边那几个 API 有没有 enable,一般来说错误就是这两个。
做完这个东西之后呢,我们来试一下 LangChain 里边它自带的另外两个功能,一个是 streaming,一个是 batch。
什么是 streaming 呢?我们把这一行 print 改成 stream,然后把这个 result 给注释掉。这样的话,它 llm 直接调用一个 stream 函数,然后再进行同样的提示词,并且要求 1,000 个 word。切到命令行清掉,然后再进行 Python demo 一.py 进行运行。这个时候你就看见它的结果不是一下出来的,而是一段一段一小段出来的。为什么呢?它就是一个 streaming 的一个过程,就像 chattergpt 一样,它的字是一个一个蹦出来的。如果它生成的非常慢,这个 streaming 会给用户提供一个非常好的体验。
然后是这个 batch。如果你有多个提示词,多个结果,想一口气一下去生成,那你就可以用到这个 batch 的功能。我们可以通过这一段代码进行 batch 的操作。他一次提了两个问题,2+2, 3+5,然后最后把所有的 content 全部都打出来。我们来跑一下 Python Demo,这个时候我们就看见它出来是一行 4,一行 8。尤其是你需要处理大量的文档,大量的问题,这个会是非常有用的。
图片API调用
好,讲完了这些,我们来讲一下如何进行图片的多模态的演示。我们在这里创建一个新的文件叫 demo 图片 API 调用二.py,同样我们需要 API key,我们从刚才的 Demo 一把这个 apikey 给复制进来,然后粘贴到这里。第一个我要演示呢是一个远程的图片,它这个图片是在网上的,它可以支持网上的图片输入。我把这个图片打开,它这里好像是一个雪山的图片啊。这个网上的图片可以通过一个 image url 的形式,直接输入到 message 里边,然后把这个 message 打包给 LLM 给大语言模型,然后它就可以直接 invoke,然后输出人。
我们看一下结果,这个是 m2.PY,在等结果的时候我们可以看一下,这个 model 是 Gemini Pro vision 的 model,和刚刚的模型是不一样的。刚刚的模型是 Gemini Pro,我们每次创建 LLM(大语言模型)模型的时候得定义它具体是一个哪个模型。当然,介于 Langchain 的优势,如果你想用 ChatGPT 的话,你直接可以生成成一个 LLM(大语言模型)等于 open AI 的一个模型,然后 model 等于 GPT4-Turbo,你就可以实施无缝的切换,把它切成 Google 的或者切成 open AI 的或者切成其他的。
它的结果是 the image contains a snow-capped mountain peak at sunset,这个是对的啊,因为它那个它的图片就是一个雪山覆盖了山顶并且有一个日落的效果。如果你想调用一张本地的图片呢?那也很简单,我们把这个 image URL 给换一换。这张架构图呢是说 GPT-4 是一个 8 个专家级模型组成的,而不是由单一个模型组成的,并且详细解释了如何通过一个 routing 的机制把用户的请求输送给不同的专家及用户,并且进行多核的处理。
看一下 Google 是怎么解释的,Google 说 the image shows how the palm two works; it's a language model that to use to generate text. 它完全避开了 GPT-4 这么大一个字,也非常有意思。因为 palm two 它其实也是 Google 它自己的一个模型,而不是 openAI 的一个模型。那么它的 GPT-4 它看不见吗?还是它故意的?那这我也不知道了。
好了,这就是我今天要演示的东西:一个是文字处理,一个是图片的处理,多模态的。你通过 LangChain 可以把它把它整合在一起。你可以把这张图片导入到你的 C 库,数据库可以上传到你的云端或者连接各种各样的云,亚马逊云、谷歌云、阿里云,什么云都可以。还可以开发你自己的自动应答机器人等各种各样有意思的应用。这个只是一个抛砖引玉吧。
评论留言