九天玩转Langchain!第二讲 langchain基础——安装与hello world
Summary
TLDR本课程由硅谷摩根大通软件工程师小伟主讲,介绍了Longchain系列课程的学习内容。课程分为三部分:首先是Python环境搭建和Jupyter Notebook的安装使用,其次是Longchain的安装和快速上手,创建大型语言模型模块并进行简单应用,最后是阅读Longchain文档和探索原代码。课程内容丰富,旨在帮助学员通过实践掌握Longchain的应用开发。
Takeaways
- 🚀 课程介绍了Longchain系列课程的学习内容,包括Python环境搭建、Jupyter Notebook安装与使用,以及Longchain的安装和应用。
- 🌟 Python是高级编程语言,因其接近人类语言、动态类型和直译式特性而易于学习和应用广泛。
- 📚 Jupyter Notebook是一个交互式开源笔记本工具,支持多种编程语言,特别适合数据科学和机器学习领域。
- 🛠️ 安装Python推荐版本为3.8.1以上,课程中使用的是3.10.12版本。
- 🔧 Jupyter Notebook可以通过Pip安装,也可以通过VS Code的插件来使用。
- 📈 Longchain的安装非常简单,只需使用命令`pip install longchain`即可。
- 🔄 通过Longchain可以创建大型语言模型模块(LLM模块),这是Longchain应用的基础。
- 🤖 利用LLM模块,可以开发简单的应用,如生成男孩小名等,并可通过API与第三方模型提供商交互。
- 🔗 链式结构(Chain)允许将不同功能的模块串联起来,形成具有丰富功能的应用。
- 📝 代理人(Agent)模块能够解决复杂问题,如数学计算和访问互联网获取信息。
- 📋 阅读和理解Longchain的文档是学习过程中的重要部分,但同时也需要参考原代码来解决一些文档中未涉及的问题。
Q & A
课程中提到的Longchain是什么?
-Longchain是一个基于Python的开源项目,旨在通过模块化的方式构建和使用大型语言模型。它提供了一系列工具和接口,方便开发者快速搭建和部署各种基于语言模型的应用。
为什么在Longchain系列课程中,Python环境的搭建和Jupyter Notebook的安装非常重要?
-Python是Longchain的主要编程语言,其易于学习和动态特性使得开发更为便捷。Jupyter Notebook是一个交互式的编程环境,允许用户逐行运行代码并实时查看结果,非常适合进行教学和开发工作。
课程中提到的LLM模块是什么?
-LLM模块指的是大型语言模型模块,它是Longchain应用的基础或基石。几乎所有的应用都是基于这样的模块开发的,它能够根据输入的文本生成或补全新的文本。
如何安装Python?
-Python的安装非常简单,可以通过官网下载安装包进行安装,也可以通过包管理器如pip来安装特定版本的Python。课程推荐使用Python 3.8.1以上版本,其中3.10.12是较为稳定的版本。
Jupyter Notebook有哪些特点?
-Jupyter Notebook是一个交互式的开源笔记本工具,支持多种编程语言,尤其在Python上应用广泛。它可以在一个web浏览器中使用,支持交互式运行代码,即可以选择性执行代码片段,并实时查看输出结果。此外,它还支持Markdown格式的文本输入和可视化输出。
Longchain的安装方法是什么?
-Longchain的安装非常简单,只需要使用Python的包管理器pip,通过命令`pip install longchain`即可安装Longchain及其所有依赖包。
课程中提到的链式结构是什么?
-链式结构是Longchain中的一种设计模式,它允许将不同的模块按照特定需求串联起来,形成一个处理流程。这种结构可以避免重复定义功能相似的模块,并且可以通过连接不同的模块来丰富应用的功能。
代理人模块在Longchain中的作用是什么?
-代理人模块在Longchain中用于解决复杂问题,它可以通过使用各种工具和内部的语言模型来决定完成任务所需的行为及其执行顺序。代理人模块可以访问互联网获取最新信息,或者执行复杂的数学计算等任务。
如何获取并使用大型语言模型(LLM)?
-可以通过在本地运行开源的LLM模型或使用第三方模型提供商的API来获取LLM。国内提供商如百度和阿里,国外如OpenAI和Replicate等,他们都提供了可以通过API访问的语言模型。
课程中提到的Conversation Chain有什么特点?
-Conversation Chain是Longchain中的一个模块,专注于对话应用。它内部具有对话记录的缓存功能,能够根据上下文给出符合语境的回答,实现类似chatbot的对话体验。
Outlines
📚课程介绍与Python环境搭建
本段落介绍了课程的基本情况,包括讲师小伟的背景和课程内容的概览。课程分为三部分:Python环境搭建、Jupyter Notebook的安装与使用,Linechain的安装和快速上手,以及创建大型语言模型模块(LLM)。强调了Python的重要性,解释了其高级编程语言的特点,如语法易理解、动态类型、直译式执行等。同时,提到了Python在多个领域的广泛应用和活跃的社区支持。最后,介绍了Python环境的安装和版本要求,推荐使用3.8.1以上版本,并推荐了3.10.12版本。
🛠️Jupyter Notebook与Longchain的安装
本段落详细讲解了Jupyter Notebook的安装和使用方法,以及Longchain的安装过程。首先介绍了Jupyter Notebook的功能和优势,如交互式代码执行、支持Markdown和可视化输出等,并提供了安装和启动JupyterLab的命令。接着,通过截图和实际操作演示了Jupyter Notebook的界面和功能。然后,介绍了Longchain的安装命令,强调了安装Longchain后可以进行的开发和使用。最后,通过VS Code演示了Jupyter Notebook的交互使用,展示了如何在VS Code中创建和运行Jupyter Notebook文件。
🤖建立大型语言模型模块与使用
本段落主要讲解了如何建立和使用大型语言模型模块(LLM)。首先介绍了获取LLM的两种途径:本地运行开源模型和使用第三方模型提供商的API。由于高性能模型需要大量GPU资源,推荐使用API。介绍了国内外的API提供商,如百度、阿里、Replicate和OpenAI,并讲解了如何使用这些API。然后,通过示例展示了如何创建一个简单的LLM模块,并使用predict方法生成文本。此外,还讨论了模型的温度设置对结果的影响,并举例说明了如何通过设置temperature得到一致的结果。
💬聊天模块与链式结构的应用
本段落深入探讨了Longchain中的聊天模块和链式结构。首先解释了聊天模块的功能,即以对话形式续写对话,并介绍了与LM模块的相似性和差异性。然后,通过示例展示了如何使用聊天模块生成对话消息,并解释了AI message、Human message和System message的概念。接着,介绍了链式结构的概念,即将不同功能的模块串联起来形成一个应用。通过示例代码,展示了如何使用提示模板和链式结构来创建一个可以根据不同对象生成名字的应用。最后,讨论了链式结构的优势,如方便连接多个模块和避免重复定义功能相似的模块。
🧠代理人模块与对话记录的应用
本段落详细介绍了Longchain中的代理人模块和对话记录应用。首先解释了代理人模块的作用,即解决复杂问题和访问互联网获取信息。通过示例展示了如何使用代理人模块进行数学计算,并比较了代理人和基本语言模型在处理数学问题上的差异。然后,介绍了对话记录应用Conversation Chain,通过示例展示了如何实现与人工智能的对话。此外,还讨论了Conversation Chain如何利用内部缓存来处理具有上下文的对话。最后,强调了阅读Longchain文档和原代码的重要性,以及如何通过VS Code的代码跳转功能来查看原代码。
📖Longchain文档与原代码阅读指南
本段落主要提供了关于Longchain文档和原代码阅读的指南。首先强调了Longchain文档的重要性,尤其是教程部分,并建议选择性阅读模块部分的讲解作为预习。然后,指出了文档的局限性,如更新速度跟不上开发速度、结构逻辑关系不清晰、重复内容影响阅读效率等。建议在开发过程中结合原代码进行学习,并提供了两种查看原代码的方法:直接在GitHub上查找和在VS Code中使用代码跳转功能。最后,鼓励大家在课程结束后阅读文档,以更好地理解和使用Longchain。
Mindmap
Keywords
💡Longchain
💡Python
💡Jupyter Notebook
💡LLM模块
💡链式结构
💡代理人
💡Conversation Chain
💡文档阅读
💡原代码
💡API文档
Highlights
讲师小伟在硅谷摩根大通担任软件工程师,与小安讲师共同探讨Longchain的学习成果。
本课程分为三部分:简单安装、快速上手和阅读文档,以及窥探Longchain的原代码。
Python环境搭建和版本选择是Longchain学习的基础,推荐使用Python 3.10.12版本。
Jupyter Notebook是Longchain系列课程中必不可少的工具,支持多种编程语言。
Longchain的安装非常简单,只需使用pip install longchain命令即可。
创建大型语言模型模块(LLM模块)是Longchain应用的基础。
通过Longchain的文档可以了解其提供的参考资料和基础功能的实现逻辑。
Python因其易于学习和动态特性,被广泛应用于Web应用、软件开发、数据科学和机器学习等领域。
Jupyter Notebook是一个交互式的开源笔记本工具,可以编写、运行和共享代码文本和图形内容。
VS Code与Jupyter Notebook结合使用,可以方便地编写和运行代码。
Longchain提供了丰富的模块和工具,如LLM模块、聊天模块和链式结构等。
代理人模块可以帮助解决复杂问题,如数学计算和访问互联网获取最新信息。
Longchain的文档是学习的重要参考资料,但需要结合原代码进行深入理解。
Longchain支持多种大型语言模型的集成,如OpenAI、阿里巴巴达摩院的同意签问等。
Longchain的API文档和分类文档有助于开发者了解各个模块的使用方法和功能。
Longchain的JavaScript版本也在并行开发中,提供了不同于Python的另一种使用方式。
通过VS Code的代码跳转功能可以方便地查看Longchain的原代码,有助于解决开发中的问题。
Transcripts
Hello 大家好
欢迎大家继续我们Longchain系列课程的学习
我是本堂课的讲师
大家可以叫我小伟
先做一个简单的自我介绍
我在硅谷这边摩根大通担任软件工程师
我与大家在上节课中已经认识过的小安讲师
平常喜欢在一起捣鼓一些有的没的东西
所以我们在这一整个系列课程中
会和大家分享我们捣鼓Longchain的一些学习成果
也希望所有的学员能够通过这系列课程的学习有所收获
好 话不多说
让我们一起进入今天的学习内容
接下来让我们一起来看一下这堂课的大纲
这堂课分为三个部分
第一部分叫简单安装
就是我们会和大家一块来过一下
Python环境的搭建
版本选择以及一个很重要的工具
也就是Jupyter Notebook的安装与使用
在我们整个系列课程中
Jupyter Notebook是必不可少的一个工具
在这之后我们会迎来今天的主角
也就是Linechain的安装
在安装过程结束之后
我们会进入我们的第二部分
也就是快速上手
在这一部分中
我们会首先创建一个大型语言模型模块
也就是LLM模块
这个LLM模块就是我们所有的Longchain的应用的基础
或者叫基石
基本上所有的应用都是基于这样一个模块来开发的
好 有了这样一个模块之后
我们会做一些基于这个模块的简单的应用
注意是一些不是一个
所以咱们这堂课的内容其实还是挺多的
在做完这些应用之后
我们会和大家一起来阅读一下
Longchain的文档
看一下它的文档提供了哪些
我们可以使用的参考资料
在这之后我们会窥探一下
Longchain的原代码
去看一下它到底是如何实现一些基础的功能
它背后的逻辑是什么样的
好这是我们这堂课的一个基本安排去看一下它到底是如何实现一些基础的功能它背后的逻辑是什么样的
好
这是我们这堂课的一个基本安排
首先简单介绍一下我们的需要使用的编程语言也就是Python
Python它是一个高级的编程语言
为什么说它是高级的编程语言
因为它是比较接近于人类的语言
所以它非常容易学习
它的语法特别容易理解
然后它是一个动态的语言
什么叫动态语言
就是它的变量类型是可变的
所以写起来会比较灵活自由
然后同时它也是一个直译式语言
也就是说它不需要编译成机器码
它可以直接的由解释器来运行
这就是为什么我们可以使用Jupyter Notebook这样的软件
来逐行的运行Python代码
并且可以实时的看到我们运行代码的结果
Python被广泛的应用于Web应用实时地看到我们运行代码的结果
Python被广泛地应用于web应用软件开发 数据科学和机器学习等领域
也就是因为它的这些一系列特性
另外Python还有非常活跃的社区
Python开发者可以说是软件开发者中的很大一部分人群
然后在Python的社区中也活跃着
数量巨大的内容丰富的库
也就是可以理解为第三方软件包吧
他们让Python拥有了无穷的力量
以及丰富的功能
所以在咱们学习Longchain的过程中
Python是必不可少的一个编程语言
Python的环境其实安装非常简单这里就不再赘述了
主要强调一点就是它的版本要求
3.8.1是Longchain的一个推荐配置
它说你要使用我们Longchain的话
最好Python的版本是要高于3.8.1
这里我们直接就推到3.10.12
因为3.10是现在Python的
Python3的一个小版本里面比较稳定的一个版本
然后12是它最新的一个build
是我们在录这个视频的时候最新的一个build
可能当你看到这个视频的时候
最新的build可能不是12可能13或者14
这个就取决于你自己的个人选择了
我们这一系列课程
我所使用的会是3.10.12这个版本
接下来会和大家介绍一下Jupyter Notebook
Jupyter Notebook是一个交互式的开源笔记本工具
可以用于编写运行和共享代码文本和图形的内容
它支持多种编程语言
我们这里主要使用的就是Python
它可以在一个web浏览器当中进行使用
它的一个重要的特点是它可以交互式的运行代码
什么叫交互式的运行代码呢
就是你可以选择性的执行某个代码
不像我们平常写代码的时候
可能会就是一整个代码程序就全部运行一遍
而GPU notebook可以让你选择执行其中的某一段代码
并且把这个代码的输出可以给你显示出来
然后你可以修改代码
并且再重复执行这一段
然后看也看到不同的输出
具体的内容我们会在后面的学习中给大家演示
这里只需要知道它是一个交互式的
可以运行代码的程序就可以了
下面会给大家看一个截图的例子
这是Jupyter Notebook的一个界面
然后它里面可以支持用markdown格式输入文档
就是文本
然后可以支持代码块
像这就是一个代码块
然后可以支持显示
我们看到它不光可以显示文本
它可以显示可视化的输出
这是它一个丰富的功能
所以说它被广泛地应用于数据科学
机器学习等等领域因为他们会经常用到一些
可适化输入的这样一个需求
好 它怎么安装呢
很简单
大家可以去它的官网
Jupyter Notebook的这样一个官网
然后到它的安装界面去看它的安装的教程
其实最简单的就是用Pip install JupyterLab
这是Pip是Python的一个包管理器
然后用它来安装Jupyter Notebook是最简单一个方式
然后启动的时候只需要敲这行命令
JupyterLab就可以启动了
还有另外一个方法就是用VS Code
这是一个文本编辑器
不知道有没有学员使文本编辑器不知道有没有学员使用编辑器
但它里面的Jupyter插件是支持Jupyter Notebook的
所以有多种使用方式
一会儿我们会和大家来演示两种使用方式
其实都可以
然后最后就是我们的Longchain的安装
Longchain安装就更简单了
你只需要一号命令
pip install longchain
这个指令会把Longchain需要的所有的dependent
所有的依赖包都给你安装好
那么安装好了这些
安装好这个Longchain之后
你就可以来进行Longchain的开发和使用
好
这里给大家演示一下
一些就是咱们整个安装过程大概是什么样的大家心里有一个基本的认识
好 大家现在看到的界面是我的VSCode
然后VSCode里面它是内置一个terminal一个终端的
这个终端就是大家可以输入一些安装命令
那么现在我的Python其实是已经装好了
大家可以看到我的Python的版本号是3.12.12
然后现在我要来安装JupyterLab
所以我输入命令JupyterLab
大家看到现在安装过程正在进行
好了我的JupyterLab已经安装好了那么接下来让我启动一下JupyterLab好了
我的JupyterLab已经安装好了
那么接下来让我启动一下JupyterLab
试一下看是什么效果
OK
它说我的Lab已经启动好了
那么我可以通过这个链接来进入
Jupyter Notebook这样一个交互界面
好
那么现在我在
Notebook这样一个交互界面
下面我开始一个新的Python3的Notebook
OK
这样就是一个Notebook
这样缩小一点方便大家看到
在这里我们可以输入Pattern代码
比如说print
hello world
输入好Patter上代码之后
我们可以选择运行它
重复点播放按钮
你看
Hello world出来了
好
我们也可以选择输入一些文本
比方说在这里选择markdown
那我们这个块就变成了从代码变成了markdown
我们可以选输一些基本的
这是一个title
这是一个第二个title
然后有一些list1
list2
那么我们点击播放
这个markdown就被执行成了这样一个文本输出
基本上就是这两个功能了然后我们接下来会使用主要使用VSCode
来和Jupyter Notebook进行交互
而不是使用它的Web界面
因为方便我们写代码
好 我就把它先暂时关掉
OK
好 接下来我们来看一下如何用VS Code
来和Jupyter Notebook进行一个交互
注意用VS Notebook的时候
其实是不需要在后台启动一个Jupyter的Server的
我们只需要确保我们的VS Code是安装了Jupyter的插件
那么我们首先来创建一个Jupyter notebook的一个文件
叫它Hello world
它的后缀是ipynb
创好之后我们用listcode把它打开
OK 我们现在打开了这样一个插件
这样一个notebook
我们可以看到这里已经在提示我们这里可以写代码了
我们写一行代码
Hello world
然后点这个小箭头
尝试运行一下
好的
Hello world运行好了
在初次使用插件的时候
它可能会让你选择Python的解释器
在这里
如果你是Mac用户的话
是可以使用Command-JShift-JP来调出控制台
然后在里面选择Python的解释器
选择你自己刚刚安装好的3.4.12就可以了
好
这就是安装和使用Jupyter Notebook的一个最简单的示例
我们再加一个markdown和刚才的演示是一样的
我们来试一下title1
title2
然后我们再加几个list
列表我们叫item1
叫item2
好
我们可以看一下
这个如果我们点
这好像暂时没有办法执行
那么我们在下面加一行code
等一下这个怎么变成
点这个箭头
点箭头好了之后
它就会渲染出来
它是一个已经用markdown来编辑好的一个文本了
好
接下来我们来安装longchain
安装longchain之前我们先看一下我们的
Python的版本是否正确
这里Python版本3.10.12
好的
那么接下来用pypinstall longchain
好
安装过程会需要一段时间
我们这里就暂时先跳过好安装过程会需要一段时间我们这里就暂时先跳过
好安装好了
安装好了LangChain之后呢
好这就好了
安装好LangChain之后呢
我们就可以进行下一步的学习了
好下面我们来带领大家
建立我们的第一个大型语言模型的模块
也就是一个LM模块
要运行这个模块呢首先我们需要的资源就是一个LLM也就是一个大型语言模型的模块也就是一个LM模块要运行这个模块
首先我们需要的资源就是一个LLM
也就是一个大型语言模型
得到这个模型的途径
我们目前有两种方法
第一个就是你在你的本地
运行一个开源的LM模型
当然如果你有一个
你自己的必然的LM模型的话
那也可以
但是我们一般是使用开源的LM模型
但是这样有一个问题
就是一般的性能比较好的LM模型
它需要耗费大量的GPU资源
像我们家里面一般的打游戏用的显卡
在大多数情况下是不具备这样的算力
去运行这样一个模型的
当然如果你家里如果有一块A100的话就当我没说
所以我们推荐大家使用第二种方法
就是去找我们的第三方的这样的模型提供商
他们一般都会有自己的API发布出来
这样的话像我们普通用户就可以使用他们的API
从而去访问到他们模型
利用到他们模型的一些功能
像国内这样的API的提供商有百度
他们的模型是文心Earning
以及阿里他们的模型通一千问
像国外有一些像比如Replicate和OpenAI
也就是大家所熟知的GPT的公司
他们也提供了自己的API
在这里各位学员可以选择自己喜欢使用的提供商
然后拿到他们的API
然后和我们的Luncheon进行一个交互
好 我们这里第一个简单的应用
就是创造一个功能非常简单的LM模块
一个LM模块在Longchain里面
它的最基本的功能就是根据你所说的文本
来补全生成一个新的文本
需要用的方法名称叫predict
中文的意思是预测
我们来举一个例子
比方说我们想让他给我们一个很土
但是听起来好养活的男孩的小名
那么我们把这个你可以把它列为指令
或者就一个简单的字符串
把它发送给这个LM模块
然后让他来给我们预测一下
或者是为我们补全一下
然后他会得到一个结果
我这里只是举一个例子
不是所有的模型以及就算是同一个模型或者是为我们补全一下然后它会得到一个结果我这里只是举一个例子
不是所有的模型以及就算是同一个模型你在调用它不同的
就是每次调用它
它给你的结果可能都不会是一样的
就是因为一般LM模块它都会有一个temperature
也就是你可以把它理解为
它的结果是否每次都会一样
就是可以有结果的发散度
如果它发散度是0的话
那么它的结果就是永远给你都是一样的
如果它发散度不是0的话
那么它可能会随机给你一些它认为比较好的结果
现在我们来举一个例子
好
在这里我演示的是使用OpenAPI这样一个
他们的一个API的提供商
然后对于他们来说
我需要提供的就是一个API的一个密钥
这里可以从他们的官网拿到
拿到了之后
我把它放到我的环境面量文件里
然后加载一下环境面量
加载好了环境面量之后
我们通过这两句代码
可以生成一个非常简单的
LMM模型
LMM模块的一个对象
生成这个对象之后
我们先运行一下
好 运行好了
这个对象生成好之后
我们可以来
让他告诉我们一个
一个男孩小名的一个结果
看一下他会给我们一个什么结果好
他给我们了一个完整的回答
比如小福田小田家
这看起来像是日本人的名字
我们再让他试一次
毛毛
好的
这个有点像我们中国人的名字
然后我们可以看到
你每次运行它
它给你的结果都不太一样
对吧
这是因为默认它的temperature是0.7
这个0.7值大家可以在它的源码中看到
所以说如果你只要不告诉它你想要什么样的temperature
那么它给你的temperature的话就是0.7
那么它每次给你的答案就会不一样
那么如果我们想让它每次给答案一样
我们需要去告诉它说我们temperature想要0
我想每次答案都一样的
不要给我发散思维了
那么不要给我发散思维
每次给我答案都是一样的
那么看看他给我们啥
小农
这个名字有一点不知道是哪个国家的感觉
但他最后给了汉语拼音
那应该是我们中国人的名字吧
然后我再让他跑一次
还是小农
我再跑一次
他还是小农大家可以跑一次它还是小农
大家可以看到我们只要把temperature设成0
那么我们每次得到的结果都是一样的
好的
这就是我们
Lunchein里面的一个非常基础的模块
叫做L1M模块
大家随着继续的学习可以发现
Lunchein里面很多其他的模块
都是以这样一个基础模块作为核心
在它上面搭建起来的其他的一些应用
这里比较典型的一个就是我们接下来将要讲到的一个
叫聊天模块
这聊天模块有什么用呢
简单的说就是它可以以聊天对话的形式来续写一段对话
它和我们的之前讲到的LM模块是类似的
那是因为它的底层是以LM模块作为基础
然后在这里我们会引用三个它的消息类第一个消息类叫AI message
AI message就是说我们模拟出来
这个人工智能它的一些回复
它的一些回复的消息
这么叫做AI message
然后是Human message
Human message就是我们作为用户
跟AI对话的过程中提供的一些消息和文本
第三个是System message
System message大家可以把它理解为
在一段对话开始之前的一个预设
比如说我们在system message里面可以提供
我们想要AI来模拟一家烧烤店的店员
那么我们就把这样一个环境的设定
可以在system message里面告诉AI
那么接下来AI的一些回答
就会尽量的像这样一个烧烤店店员的这样一个设定去靠拢
就非常有意思
然后聊天模块它的方法调用
其实大部分和我们之前讲的模块是类似的
我们一会会在例子中给大家演示
好我们来直接进入我们的例子
好大家看到在这里
我引入了一个Chat OpenAI的这样一个模块
然后它的生成方式
和刚才的OpenAI的生成方式是类似的
直接生成了之后
初始化之后
我们的调用给我一个横图
等一下好像会有小男孩小明
这个调用方式和我们上面的调用方式是
几乎是一样的
好
我看它给我们什么结果
小名小杂草
很有意思
然后它还有一种调用方式
就是通过一段对话的形式来调用
比方说我们在这里生成了一个messages
就是一系列对话
它是一个列表
列表里面的元素是一个human message
就是我们刚才讲过的一个
作为人类语言的
这种用户语言的一个消息的组件
我们还是用同样的问题
我们来给它传过去
注意这我们叫做是predictive messages
好
它返回的是一个AI message类
然后AI message类里面的content就是内容
是彩虹独角兽魔法工坊
就是说它实际上是一个包裹在一段字符串外面的
叫做AI message
就是说这个消息是由AI回复的
是这个意思
但是同样的我们也可以用之前的LM模块
来做这样一个predict message
你看它得到的也是一个AI message
它也可以通过对话的形式来为我们预测下一条
来自AI人工智能它给出的回复是什么样子的
看到这里大家可能会问
这两个功能感觉是一样的
就是chat model这个聊天模块和LM模块
就是大型媒体模型模块
它们俩功能好像是一模一样的
调用的方法是一模一样的
返回结果也是一模一样的
目前我们来看好像是这样的
但是随着我们继续的学习
大家后面用到的一些特殊的需求的时候
就会发现有的时候我们用LM某块是不足以
来实现我们的一些需求
只有Chat model或者说
不能说只有Chat model吧
只能说Chat model会更方便的来满足我们的需求
尤其是在我们设计代理人
后面会讲到代理人
然后涉及到那个对话的缓存
然后涉及到调用聊天历史记录之类的
这些功能的时候
会发现ChatterModel是一个更好的选择
相对于大型语言模型基础模块来说
接下来我们来讲第二个应用叫链式结构
咱们这个LineChain里面的chain
实际上就是一个链式结构
什么叫链式结构
我们可以把它理解为
我们把一些功能不同的模块
按照某种需求把它们串联起来
变成一条锁链的形式
那么这一条锁链
它本身就已经变成了一个应用这条锁链的形式那么这一条锁链它本身就已经变成了一个应用
这条锁链可能会有一个输出是一个字符串
然后一个输入也是一个字符串
Longchain它整体来讲的话其实就是这个概念
那么为什么需要链式结构呢
首先我们刚才说的是需要方便的连接多个LM模块
但它不一定是LM模块
它可以是各种不同的模块
LM模块只是我们刚才讲到的一个最基础的模块
链式结构可以连接的东西有很多
LM模块是一个
当然它可以连接其他的链式结构
也就是我们把各种不同的链式结构连接起来
然后让它们功能更加丰富
这个会在我们后面的学习中给大家做演示
第二个我们需要强调的就是如何避免去重复定义功能相似的LM模块
什么叫功能相似的LM模块呢
就是说比如说我们有一个模块是给小男孩起名的
那么我们可能还会有另外一个模块是给小女孩起名的
那么它们的功能就比较类似都是起名
唯一不同的就是我们要起名这个对象
它可以是小女孩
可以是小男孩
可以是小狗
小猫
小狮子等等
我们又不想去定义
我们又不想为每一个对象去定义一个这样的模块
那么我们可以需要用到提示模板
也就是prompt template这样一个模块来帮助我们就是说会提到提示模板也就是prompt template这样一个某块来帮助我们
就是说会提供一个模板
比如说我们会有一个起名的模板
那么起名的模板就是说帮我起一个
给谁的小名
那么这个谁就是我们后面可以把它替换成男孩
女孩小狗小猫等等
所以它是一个模板
好
接下来我们来看一下它具体是怎么样一个流程
看到这一段代码就是从Langstone中去引入我们的
这个prompt template
就是我们的提示模板
然后我们新建了一个prompt
也就是提示
这个提示里面的模板的形式是这样的一个形式
给我一个横图
大家听见横上我的花口号对象小名
这里面对象就是我们日后会替换成其他的
比如说小狗小猫小男孩小女孩等等等等的不同的对象
那么这个模板就这样创建好了
然后这个模板创建好之后
我们怎么样把对象给输入进去呢
我们可以看到这里
对象等于小狗
就是说这个时候这个模板就变成了
给我一个横土但是听见横响呼的小狗的小名它就是说这个时候这个模板就变成了给我一个很土
但是听起来欢呼的小狗的小名
它就不再是一个模板
而是一个完整的提示语
对吧
我们可以用其他的对象
比如小狗小猫
然后我们可以在代码里给大家演示
好
这就是我们的
这部分代码是我们跟刚才的演示代码是类似的
都是要首先创建好一个新的某块
我们来运行一下
好 运行好之后
这是我们刚才PPT里面那段代码
我们也来运行一下
它输出的是给我一个横图
但是听起来好像活的小狗的小名
有看到它的format实际上就是说
给你一个提供你对象的机会
然后你把完整的提示语打印出来
那么打印出来这是这样一个提示语
好 我们可以试试把它改成别的
比如说小女孩
出来就是小女孩小明
好 然后这里这部分代码就是我们接下来要使用的
这个chain就是我们刚才所说的链式结构
这个链式结构它的构造模块有两个
一个是一开始的LM模块
这个我们说的是LangChain里面最基础的功能的模块
第二个模块就是刚才的提示模板
这个提示模板把它放进来之后
我们就可以直接使用LMchain
我们先回到PPT给大家做一个概念上的讲解
这是我们刚才的例子
我们看到我们现在是要构造一个
LMchain的这样一个对象
这个对象有两个组成要件
一个是prompt
一个是LM就是�这样一个对象这个对象有两个组成要件一个是Prompt一个是LM
就是语言模型
它的Chain我们创建好之后
怎么样去运行Chain
通过调用它的Run的方法
然后我们看到Run的方法里面
我们输入了一个小狗
我们为什么可以直接输入小狗
因为它的Chain
它里面有一个Prompt
就是我们提示模板
这个模板是接收一个对象对吧
接收一个对象
那么这个chain在运行的时候
我们只提供了这一个参数
那么这个参数就会作为
我们将要给提示模板的对象
好 比如我们把小狗输入进去
提示模板会把它变成一个完整的提示
就给我一个很土
但听起来很好养活的小狗的小名
然后再把这个完整的提示传给它里面的语言模型
然后语言模型会给你一个结果
这里我们就指了一个以大黄为一个例子
它不一定是说大黄
我们一会可以看一下
好 我们来首先创造这个chain
然后我们让它跑一下
然后我们现在输入的是小猫
也就是说我们希望它给我一个很土
但是听起来好养活的小猫的小名
好它给我们的是小拉拉
我不知道这个名字是否是一个很土
但是好养活的小猫的小名
但是人工智能似乎是这样认为的
我们可以让它再给另外一个小咪
这个是比较普遍的小猫的名字
我们可以让他再给另外一个小咪这个是比较普遍的小猫的名字
我们可以把它换成比如说狮子
来试一下
换成狮子
它会给什么
小豆豉
好
就看到我们基本上确定我们换的这个东西是已经起作用了
我们再看一下另外一个
农夫山泉
这段掐掉了
好
让我们继续下一个简单应用
代理人
为什么我们需要代理人
它和我们之前讲过的
链式的模块其实是不太一样的
它的存在的意义在于去解决一些链式模块
它难以独立处理的复杂问题
比如说解决一些复杂的数学计算
或者是去访问互联网得到一些最新的信息
我们知道大型语言模型它本身是不联网的
或者说大部分是不联网的
也就是说它里面的信息
它数据是有限的
我们要怎么样让我们的Lunchain的应用
可以去得到最新的结果
比如说最近发生的一些事件
然后有一些它现有数据里面不存在的信息或者数据
那么这时候需要通过访问互联网
而Luncheon解决这个问题的办法就是
提供了代理人这样一个模块
这个代理人这样的模块
它可以运用众多的工具
这个我们说的
来做来达到它想要达到的目标
代理人的本质
它实际上是对于我们给定他的一个任务
他运用他内部的语言模型,也就是我们的LLM模块
来决定完成这个任务所需要的行为以及实施这些行为的顺序
也就是说,它实际上是有一个类似于人类的思考的一个过程
他思考的方式呢,就是和我们一样
就是说我要实现这样一个目标我需要有哪些步骤
以及我应该以什么样的顺序去完成这个步骤
在完成步骤的过程中
我能否用我现有的工具来实现我的目标
比方说如果我需要访问互联网
那我有没有访问互联网的工具
比如说我要做数学计算
那么我有没有可以做数学计算的工具
如果有的话他们就会选择使用工具
然后来使用工具之后
他会处理使用工具得到的结果
然后开始进行下一个步骤的处理
就以此类推
然后最后实现最终的目标
然后把你给他的任务给完成了
这就是代理人的整个的一个工作流程
好 我们先做一个简单的例子
第二步就是让代理人来使用一些工具
在这里我们让代理人使用LM Math这样一个
可以帮助他进行数学计算的这样一个工具
使用的方式就是这样的
一会我们会在代码示例中给大家详细讲解
第三步就是初始化代理人
我们可以看到在初始化代理人的过程中
我们提供了一些设置参数
首先是他的工具集有哪些工具
就是我们上一步已经给他定义好的工具
然后是我们提前定义好的一个语言模型
对上一个传进去了对吧
然后他的agent就是他代理人的类型
我们这里选用的是ZeroShot React Description
这个具体的代理人模型
我们会在后面的模块拆解的过程中
给大家详细讲解
在这里我们就先暂时不去关心它是什么意思
然后这个repose等于true
就是说你可以去看到代理人他是怎么样
一步一步的去把他的问题给处理好的
好下一步
我们可以看到这里只要通过简单的run
就可以让代理人来解决我们给他提供一个问题
好现在我们看一下代码是什么样的
我们就会遇到同一个问题
好 现在我们看一下代码是什么样的
好 一样的 我们要先加载一下我们的环境面量然后在初始化我们的原模型对象
好 初始化之后我们需要加载我们的数据
加载我们的工具
这个工具是LMS
它是一个专门用来做数学计算的
这样一个代理人工具是LM Math它是一个专门用来做数学计算的这样一个代理人工具
我们这里看到工具加载好之后
我们来用它来初始化代理人
好 初始化代理人好之后
我们这里稍微停一下
为什么呢
因为有人可能会问了
LM应该也可以处理这样的一个数学计算的问题
对吧
就3.5次方是多少
理论上是的
但是我们知道LLM它对于像这种数学计算来说
简单的数学计算它应该是它是没问题的
但是当你涉及到这种3.5次方是多少
这样的数学计算的时候
它给出的答案就往往是比较匪夷所思的
我们可以先试一下
它给出的25的3.5次方是等于这么大一个数字
我觉得这个数字应该是不太准确的
大家可以用计算机验证一下
下面我们用代理人来看一下
他对于这个问题的答案是什么样子的
好 下面已经出来了结果我们看到这些有这样的输出
实际上就是因为我们在上面出示代理人的时候
给他的verbose设置了true
也就是说他会打印出来他的每一步的思考过程
我可以看到这里他说
I need to use the calculator to solve this
我需要用计算器来解决这个问题
他用计算器解决这个问题的话
他选择的action是calculator
就是计算器
我们已经给他提供了LM Math这样一个tool
就是计算器的工具
他就可以使用
使用好之后他得到的答案是这么一个答案
然后他的想法是
我已经有了这个答案
然后最后答案是这个
他把答案告诉你是这个
我们可以拿计算器算一下这个答案然后最后答案是这个他把答案告诉那里是这个
我们可以拿计算器算一下
这个答案是准确的
好
这就是代理人和基本的语言模型
在处理数学问题上它的差距
我们可以看到代理人给出了非常准确的答案
而我们的最基础的语言模型
他就是基本上是胡乱说的一通
基本上是胡乱说的一通
好 我们来看下一个简单应用这个应用是真的比较简单
它就叫聊天记录
英文是Conversation Chain
它实际上也是一个Chain
但是它着重关注的是对话
它的运行方式也比较简单
它只需要提供一个语言模型模块就可以了
然后我们通过RUN来调用它
在这里我们先说了一句你好呀
然后系统会回复你好今天过得如何
然后你再说挺好的你呢
系统会说我过得也棒极了
我们可以看到它实际上是通过不停地调用Rrun这个命令来实现一个你和人工智能对话的
这样一种形式
就类似于chat GPT的感觉
下面我们来看一下代码里面的具体例子
这段代码一样的
我们先加载环境变量
然后我们来初始化一个语言模型对象
然后我们再运行一下
conversation chain的这样一个初始化
以及调用run并且对他说你好呀
我们看到这里面有很多的输出
这个输出是因为我们web browser也是true
然后我们看到他说human就是人类就是咱们
我们说的是你好呀
然后AI回复的是你好
很高兴认识你
我是一个人工智能可以回答你的问题
你有什么问题可以问我
目前来看好像和我们之前的LM语言模型
用法类似
但是现在我们说告诉他
我今天领养一只小猫
然后他会说那真是太棒了
你能告诉我小猫的名字吗
然后我们来说
我暂时还没有有什么好的建议吗
注意看这句里面我们并没有提到
任何小猫或者名字相关的内容
我们只是说有什么好的建议
我们来告诉他
看AI会如何回复我们
他说我想取这名字很大的创意
考虑和你个性相符的名字
他给出的回答是
关于如何给小猫取名字这样一件事情
而注意我们在这里是并没有提到
任何关于小猫和取名字的有关内容
这是因为Conversation Chain
它内部有关于整个对话记录的这样一个
聊天记录这样一个工具
它其实在内部有一个cache一个缓存
把我们的对话AI回答了什么
人类问了什么
所有的内容全部都记下来
所以说当它在处理这个问题的时候
它实际上是有上下文的
它有上下文的话
就可以给出一个符合上下文的回答
你看这里它其实把上下文都已经打出来了
所以这就是对话模型的一个简单的应用
好的 接下来我们和大家一起来阅读一下Lunchain的文档
首先我们想看的是Lunchain的入门教程
点开这个链接之后
我们会进入到Lunchain的入门教程
也就是Quick Start这个界面
在Quick Start中我们看到它实际上是给大家介绍
如何去搭建这个环境
然后如何去搭建一个简单的应用
然后讲解了什么是大型语言模型
它里面的一个基础的模块
然后我们看到它的整个流程
和我们之前的课程讲解的内容是差不多的
然后这部分需要大家有一定的英文阅读的能力
当然也可以通过翻译软件来阅读文档
我觉得阅读这些文档其实还是挺有用的
对于大家掌握 Longchain开发来讲的话
文档其实是大家最需要关注的一个东西
然后它的集成组件
我们可以看到这个链接
这个链接点进去之后
我们会到它的集成组件这里
这里我主要想说的是它的大型语言模型的集成组件
我们在左边的菜单中可以看到
它其实会支持很多的大型语言模型
这里面有一些开源的
比如说GBT for all
然后一些HuggingFace上能储存到的一些模型
大家这里也可以直接用
然后包括Llama
包括OpenAI包括OpenAI
包括OpenLIM这些模型
大家都可以使用
这里有replicate
也就是说你只要在这里看到了integration里面有的东西
然后你又有模型的
比如说API的密钥或者是其他的东西
或者说你有自己的模型
甚至也可以在这里找到的话
那么Luncheon会为你提供一个非常方便的
和这些模型交互的这样一个工具
比较有意思的一点就是我们在这里看到
它还有来自阿里巴巴达摩院的
同意签问这样一个集成组件
同样的你需要同意签问的API Key
然后有了这个之后
你就可以和咱们阿里的同意签问
进行一个简单的交流
再一个就是我们的API文档
API文档我们点去看一下
你看到它实际上是一个非常有利于
我们在写代码的时候
对于一个新的类
不知道该怎么用
对于新的工具不知道它有哪些功能的时候
我们又不想去看原代码
那么看API文档是一个非常有用的工具
比方说我们刚才在例子中用到的
Conversation Chain
我们不知道它具体有哪些功能
那么可以在这边搜索Conversation Chain
然后就看到它给我们索conversation chain
然后就看到它给我们找到conversation chain相关的一些文档
我们点进去
OK
所以它这里就是一个关于这个类别叫
conversation chain
它具体的一些包括事例
包括它在初始化的时候需要提供哪些东西
然后它的一些具体的功能
包括它的一些方法名以及这些返回参数
返回之类型什么的都非常的清晰
所以这是个非常有助于我们在写
LongChain相关代码时候用到的工具
另外一个我想要提的比较有意思的点是
它还支持百度文心
这个链接点开之后
我们会到它的一个百度文心的一个界面
就这儿
但这里和我们之前看的文档其实是两个不一样的文档
大家注意到这个文档这边写Python docs
也就是说这个文档实际上它不是Python docs
也就是说这个文档是Longchain的JavaScript版本的文档
大家看到这边全部都是JavaScript的语法
也就是说Longchain实际上它有两个项目在并行开发
一个是Python项目 一个是JavaScript项目
我们的系列课程会以Python项目为主
不会涉及到JavaScript项目的一些指导
有兴趣的同学可以去看看JavaScript
它的那个Python是如何使用的
好 我们接着看
Langshan文档它最重要的部分就是它的这部分分类文档
所谓分类文档就是它把Langshan的核心模块分成了好几个部分
然后每个部分它都有详细的示例来给你讲解
当然我们这堂课也会在第三章
跟大家进行模块的拆解
然后把里面的具体内容
重要的内容跟大家手把手的学习一下
当然Longchain的文档它也是有一定的局限性的
首先Longchain的开发速度非常的快
文档的内容经常是跟不上
也就是说Luncheon一些新功能
可能你需要去看它的release log
就是它的发那个更新的日志
然后它的文档的内容不一定在更新日志里有
所以它文档经常是之后
再一个就是文档结构的逻辑关系不是特别清晰
需要跳着看
我觉得这个问题其实比较严重
因为LangQian里面的各个模块之间的关系
其实是千丝万缕的
它很难有一个层层递进的这样逻辑关系让你去学习
所以说大家在看这个LangQian的文档的时候
可能需要做笔记然后联系上下文
才能知道它具体讲的是什么东西
第三点就是文档里面有些重复出现的失利
影响阅读效率
这和第四点一样
文档里面经常会有失利的新闻消失很不方便
就这两点让我非常的头疼
首先我们准备视频的时候
有很多之前我们学习Longain在教程里看到过的实例
我现在在文档里找不到
这个就非常让人头痛
所以建议大家如果有能力的话
还是可以去看它的原代码
毕竟原代码比文档还是要清晰清楚的多
大家把文档作为一个学习的参考资料
正是因为Luncheon的文档具有这些局限性
在很多时候我们在开发过程中
需要去阅读Luncheon的原代码
才能解决我们想要的解决的问题
那么阅读Luncheon的原代码
我们有两种方式
第一种就是直接去GitHub
也就是它的官方的代码库去看
打开Github
OK
好像我的链接需要更新一下我们可以看在这里面
大家可以去找自己想要找的任何的代码
Python原码
光线当前原码全部在这
这种方式是我不太建议的
因为你可能会漫无目的去寻找
倒不如用我们之前提到的API文档
可能还来得快一些
然后第二种方式就是在VS Code中
利用代码跳转功能来查看它的原代码
这里我们给大家举一个例子
以我们之前用到的代理人的这段代码为例
在这段代码中我们使用了loadtools这个函数
然后告诉他我们要用llm math这样一个工具来初始化它
那么我在写这段代码时候就有一个问题
我怎么知道llm math是一个合适的名字
或者说它是一个可以用的名字呢
除此之外有没有什么其他的名字呢
关于这个问题我在Luncheon的文档中是没有找到答案的
所以我就通过VSCode的代码跳转功能
如果你是用MacBook的话
那么当你按住Command键在点击这个时候
你可以跳转到这个函数的定义
非常方便
那么我先加点到loadtools
看他到底在干什么
好
我们看到loadtools他接收的是一个字符串的list
那么它叫tool names
那么看这个tool names
它在里面是怎么用的
好
在这里是做一个循环
然后对于它里面的每个name
它先做一个判断
是不是等于request
是不是等于request all
然后再看是不是name是不是在某一个
这点里面
OK
所以我们点开看看这些分别都是什么东西
Basic tools
好的
我们看到它是有很多的字符串到某一个callable的
这样一个对象的一个映射
那么这里我们没有看到有LLM math
所以我们就先往回走
那么再看接下来看LLM tools
我们在LLM tools里面找到了LLM math所以我们就先往回走那么再看接下来看lm tools
我们在lm tools里面找到了lm math
加了一个字符串
那么对应的我们会有open material API
我现在不太知道这个东西干什么的
但是我知道这个是我可以使用的另外一个LangTang内置的这样一个工具
我通过就使用它的名字把LM Math换成OpenMaterial API
我就可以让代理人使用另外一个LangTan自带的工具
这个就非常方便
像这种知识我在文档里是没有找到的
当然如果你能在文档里找到的话那就非常好
但是我是通过元码去阅读元码
来了解到这样一个知识的
所以阅读圆码的重要性也是不容忽视的
好 回到我们的PPT
这堂课内容已经接近尾声了
在课程结束之前
我希望大家可以在这堂课之后
去阅读一下Luncheon的文档
主要是它的教程部分
看看作为我们这堂视频课程的一个补充
另外我希望大家可以选择性的去阅读文档的
关于模块部分的讲解
这样会对我们在下一章的课程开始之前
有一个心理上的认识
然后也做好一个预习
好
然后
今天的课就到这里
谢谢大家
也希望大家能够享受
Lunchain这门课程的学习
好
我们下次再见
Browse More Related Video
5.0 / 5 (0 votes)