购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 大模型快速开发:LangChain架构初探

本书将使用LangChain作为构建大模型应用的基础架构。LangChain以其高效和灵活的特点,为大模型的开发提供了极大的便利,特别是在接入和管理复杂模型方面表现出色。

首先,LangChain提供了一系列实体类,使得不同的大型语言模型能够轻松接入。这种设计减少了项目初始化阶段的编码工作,显著提升了开发效率。开发者无须深入每个模型的具体实现细节,便可以快速集成并启动项目,这对于快速迭代和原型制作尤为重要。其次,LangChain的提示词模板在处理复杂的提示词场景时,能够帮助用户高效地管理和定制提示词参数。此外,LangChain优雅地集成了多种外部工具,如搜索引擎和维基百科等,这些工具被封装成可直接调用的组件。通过LangChain,这些第三方服务的接入变得无须重复编写底层代码,极大地简化了开发过程。最后,为了增强AI代理的能力,LangChain引入了LangGraph架构。这一架构通过模拟复杂的工作流程,支持用户进行计划执行、反思和调整等操作。

下面对LangChain的架构和组成进行简要介绍,让读者对其有基本的认识,LangChain的具体功能实现会在每个章节中介绍。LangChain是比较成熟的大模型开发架构,自2024年1月发布第一个稳定版本以来,一直在持续迭代,不久会更新到0.2版本。它是一个专注于大型语言模型应用开发的框架,旨在简化大型语言模型应用生命周期的每个阶段,包括开发、生产化和部署 。在开发阶段,LangChain提供了丰富的开源构建模块和组件,使开发者可以快速启动项目,并利用第三方集成和模板来构建应用。本书项目代码都会涉及LangChain组件和工具的使用,这里将LangChain的基本组件和框架做一个简单介绍。

如图2-5所示,LangChain框架从下往上包括以下几个开源库和组件。

图2-5 LangChain框架的组成

(1)LCEL-LangChain Expression Language,是LangChain发明的声明式语言,用于简化LangChain中的链条(chains)组合工作,让代码实现起来更加方便和简洁。项目中有些代码实现使用了LCEL,但并不是必需的,它只是LangChain主推的语言编写方式。

(2)LangChain-Core,提供基础功能的抽象(基础类和接口),涵盖缓存、嵌入、消息、提示词模板、向量数据库、异常处理、回调、输出格式等方面,可以通过链接 访问详细信息。具体项目或许不会直接用到,但是其他的扩展类都会依赖这部分内容。

(3)LangChain-Community,主要负责集成第三方应用或服务,包括大模型、缓存、向量数据库、工具、代理等。例如,调用OpenAI、百度千帆、阿里灵积的大模型的实现就包含在LangChain-Community中,还有调用搜索引擎、维基百科、Chroma向量数据库也在这个里面。也就是说,它就是与第三方供应商的合作包。详细的API使用方式可以参考

(4)LangChain,位于LangChain-Community的上面,提供LangChain架构的核心服务,包括Chains、Agents和Retrieval Strategies等,这些概念会在项目章节中根据业务场景讲述,这里不展开说明。

(5)LangServe,支持将任何LangChain的能力通过REST API暴露给其他的应用,以便于部署。由于本项目将Web应用与LangChain架构集成在一个应用中,因此没有用到这部分功能。

(6)LangSmith,一个开发者平台,支持调试、测试、评估和监控大型语言模型的应用,其功能没有在本项目中出现。

LangChain需要通过pip命令安装之后才能使用,因为已经在2.2节中包含了,所以不需要再执行命令安装。

介绍完LangChain的基本架构之后,下面通过一段简单的代码进一步了解LangChain如何实现大模型的调用。在chapter02目录下创建langchain_basic.py文件,然后加入一段代码,通过整合LangChain库的功能,设置并运行百度千帆平台的大型语言模型对用户提出的问题进行回应。

代码如下:

下面介绍以上代码的功能。

1.导入相关类

上面三个类都来自于LangChain框架,LLMChain类用于处理和运行大型语言模型链的工具,允许用户通过定义的提示模板将问题传递给模型并获取回答。

PromptTemplate类用于创建提示模板,它可以定义大型语言模型的输入格式,以及如何接收问题和生成回答的结构。QianfanLLMEndpoint类是LangChain为百度千帆平台开发的接口,用于接入百度的大型语言模型服务。

2.定义大模型调用函数

它接收一个字符串类型的question参数,用于将用户的查询传递到大型语言模型。

3.创建文心一言大模型实例

在函数中创建一个QianfanLLMEndpoint的实例,指定使用的模型为Qianfan-Chinese-Llama-2-7B。

Qianfan-Chinese-Llama-2是基于Llama-2的二次开发,在原版Llama-2基础模型上扩充了中文词表,使用大规模中英语料进行增强预训练以及指令微调训练,相比原版模型在中英文能力上均有明显提升。后面的7B表示模型的参数个数,一个B(Billion,10亿)就是10亿个参数,说明该模型有70亿个参数。

用户可以通过模型广场 了解千帆大模型平台支持哪些大模型。如图2-6所示,用户可以通过百度智能云后台查看模型的详细情况。

图2-6 在百度千帆大模型广场搜索模型信息

查看模型的具体操作如下:

(1)选择模型广场,这里有千帆平台提供的所有大模型,每个模型都有对应的描述,有生成文字的、聊天的、生成图片的,就好像一个大市场有各式各样的商品。需要根据应用的需要搜索对应的模型。

(2)搜索模型,可以在搜索框中输入模型的关键字。

(3)查看模型信息,在搜索结果中可以将鼠标指针放到“部署”按钮上,当然不是真的部署,而是通过这种方式查看具体的模型版本。从图2-6中可以看到Llama-2-7B有三个版本。

4.创建PromptTemplate实例

创建PromptTemplate实例,定义提示词模板,其中包含问题和如何格式化回答的说明。这个模板用来指导模型如何接收问题和构建回答。

5.创建LLMChain实例并执行

创建LLMChain实例,LangChain中的Chain(链)是用来执行大模型获取回应的重要组件。这里将前面定义的提示模板和模型端点传递给它,然后使用这个链来运行传入的问题,并获取模型的回答。

6.测试代码

使用定义好的函数get_response_from_llm传入具体的问题“告诉我如何做鱼香肉丝”,然后打印模型返回的答案。

下面执行上述代码,此时应确保在chapter02目录下,通过命令行工具执行以下命令:

得到以下结果:

从结果中可以看出,大模型给出了多个步骤的炒菜秘诀,只通过几行简单的代码,就可以驱动大模型帮我们干活了。这里需要说明的是,要访问百度千帆平台需要对应的AK(access key,访问密钥)和SK(secret key,密钥),这两个Key需要在.env文件中提前定义,该文件就在source code的源代码目录中。在.env文件中,需要修改以下两行记录,将密钥部分替换成用户申请的就可以了。

可以通过访问链接 登录百度智能云后台,如图2-7所示,按照以下步骤获取百度千帆平台的Access Key和Secret Key。

图2-7 获取百度千帆平台的Access Key和Secret Key

(1)安全认证,用户登录之后单击用户头像,在下拉列表框中选择“安全认证”选项。

(2)在页面的列表中选择Access Key选项。

(3)在中间页面中找到Access Key栏,获取Access Key。

(4)在Secret Key处单击“显示”按钮获取,会进行手机验证,验证完成之后就能够访问Secret Key的信息了。 r+/o4I4jh2Zrce5fj8OzVjDToKkXWIu0myFrCeSv2jjAojEy+NipyA2cqizIIULb

点击中间区域
呼出菜单
上一章
目录
下一章
×