一文教你基于LangChain和ChatGLM3搭建本地知识库问答
本文分享自华为云社区《【云驻共创】LangChain+ChatGLM3实现本地知识库,转华为云ModelArts,实现大模型AI应用开发》 ,作者:叶一一。
一、前言
本期华为云的讲师是华为云EI开发生态的工程师杰森,分享主题是:基于LangChain+ChatGLM3的本地知识库问答。
现如今,大语言模型发展到达了一个新高度,其应用场景也是适用于千行百业。而华为云EI更是具备了全栈AI能力,其提供的ModelArts是一站式AI开发平台,可帮助开发者智能、高效地创建AI模型和一键模型部署到云、边、端。
本文内容主要为对讲师的精彩分享内容梳理以及结合笔者对ModelArts的实际业务场景应用经验的概括。
阅读本文将有以下收获:
- 了解华为云ModelArts的AI能力;
- 了解LangChain的基本使用;
- 了解如何结合ChatGLM3实现本地知识库的问答。
二、基于LangChain+ChatGLM3实现本地知识库问答
2.1 大模型的发展历程
2.1.1 ChatGPT
2022年1月30日,0penAl发布了ChatGPT。这是一个基于大语言模型(LLM)的对话机器人(Chat Bot),它的定位是一个AI助手,可以回答通识性和专业领域的各种问题(包括编码相关问题),支持中英文在内的多语言,且支持多轮对话。
ChatGPT自发布以来已经十分火热,短短的2个月,月活已经破亿,远超于TikTok等一些应用。
2.1.2 什么是大模型?
大模型,简单来说就是预训练时参数规模达到一定量级的模型。
常见的大模型主要包括:大语言模型,CV大模型,多模态大模型,科学计算大模型等。
多模态大模型是指通过文字生成图片或视频的大模型。科学计算大模型,比如气象类、药物分子结构等的大模型。
最早,大模型在2019年,谷歌发明了T5大模型。当时它的参数规模就已经十分庞大了。
紧接着,2020年,推出了GPT-3,GPT-3在以文生成图片上崭露头角。
再往下,各个企业发布了各种各样的大模型。其中最重要的是2022年的ChatGPT以及2023年的ChatGPT-4。
这些大模型已经能够解决日常大量的问题,帮助我们快速的完成很多的事情。比如,通过大语言模型,可以实现语言翻译、情感分析等。
同时,大模型依赖大量的数据和对应的参数来进行调整训练出来的。随着大模型的不断发展,它所拥有的对应数据和参数,往往会更多。而且随着我们的当前科学技术的发展,它的性能提升从而使它的功能更加强大。
虽然,大模型在训练的时候,用到的是它在发布之前用到的数据,比如ChatGPT,它是在2022年发布的,它可能没有2023年的知识,但是它可以通过外挂一些常见的数据集、数据库,从而实现不断的微调学习,从而进一步的提升自己知识更新的及时性,不和世界脱轨。
2.1.3 如何开发大模型?
以大语言模型训练过程为例。
首先做一系列数据的采集,采集过程中,需要大量的数据。常见的比如网上的电子书、论坛帖子、GitHub上的代码。
然后,开始大语言模型的训练,在训练的过程中,需要选择合适的训练算法。比如Transformers、DeepSpeed、Megatron-LM等。
有了算法,我们想要把大量数据运用起来,还需要充足的算力。光GPT-3语言模型训练使用了10万个GPU,
耗费了大概100 PFLOPS的算力。
再有了这些数据的准备、合适的算法、充足的算力之后,我们就正式的对应训练。
训练用简单的语言来说,就是使大语言模型能够根据输入的指令生成对应的答案的能力。
训练出来的就是一个简单的预训练的模型。它能够实现一些基本的能力,再往下我们还会做一些指令的微调。
指令微调,是指它能够适配各种各样的复杂的任务。比如下达一条写一部小说的指令,它可能会问你需要写什么的风格的小说、主角的特点等等一系列问题。然后再基于这些问题,把小说写出来。
再往后,需要进行类人对齐,简单理解是指使模型生成更加贴近人类习惯的文本内容。
2.2 华为云全栈AI能力
2.2.1 华为云EI: 全栈全场景产品&服务,助力千行百业智能升级
华为云EI提供全栈全场景产品&服务,助力千行百业智能升级。
首先,华为云EI以Ascend系列GPU和Kunpeng系列GPU等多元算力作为底座。
往上是,提供自研的MindSpore AI开发框架,同时也支持市面上的TensorFlow、PyTorch、Ray、DeepStream、 MediaPipe等AI开发框架。
有了算力和框架,再往上华为云EI提供对应的AI开发平台——ModelArts,ModelArts就能够完成从数据的标注、处理到模型的训练,也包括大模型的训练,到最后的评估、生成以及部署和监测。
在训练过程中,如果有海量的数据,尤其像大模型有大量的数据,可以使用华为云的数据生产线 DataArts,DataArts提供了云数据仓库和数据治理中心,能够做海量数据的管理。
完成了AI通用开发之后,如果不想做底层的AI开发,华为云提供了AI通用能力。比如OCR、SIS、NLP等通用AI。也包括华为云的盘古大模型,它提供了多种大规模模型部署、开发、推理形式。另外还有天筹AI求解器,更多的是被应用于商用的AI生成。
有了通用的AI能力,就能应用到具体的行业/场景,比如政务、银行、生物制药、AIGC等领域。
在整体AI应用的开发中,我们可能还需要数据集、工具包、算法、模型等等,这些可以从华为云生态社区 AI Gallery中找到。也可以在 AI Gallery发布数据集等,让其他的开发者看到(使用),或者更进一步的商业变现。
2.2.2 ModelArts架构简介
AI开发平台ModelArts,是一个构筑全栈全生命周期的模型开发工具链。
ModelArts依赖昇腾/GPU和鲲鹏/CPU的算力,包括发调试框架、训练框架、推理框架,能够实现算力调度的管理。在此基础上,它能灵活的分配集群CPU,进行所有应用的开发,从数据的标注、数据处理、模型训练的全流程的打通。
ModelArts提供数据管理能力,支持多种类型的标注任务,提供多种多样的开发环境、模型训练和部署推理。实现了一个一站式的AI开发。
ModelArts针对大模型,提供了开发工具链,以及场景化的开发对应的工具链。
ModelArts能够帮助开发者快速实现对于端到端的开发,同时也支持把常见页面主流的算法使用昇腾GPU实现迁移。
2.2.3 端到端AI开发流程
AI应用的开发,往往是以一个流水线的方式能够持续集成和交付。
以猫狗检测为例,开发者需要准备一些猫和狗的图片,输入到分析模型中,最终分别出图片上哪些是猫、哪些是狗。
基于这种场景,首先需要把收集到的图片进行标注。标注完成之后,上传到ModelArts平台,选择对应的算法进行训练。训练的过程,就是使模型能够基于当前的数据结构总结出规律,从而降低模型识别的损失度,提升模型的精度。完成训练之后,得到对应的模型。
模型评估是为了提升模型识别的准确度,为了能够满足开发者的要求。完成评估之后,需要部署到具体的设备上。
后续,可以通过摄像头捕捉到猫或者狗的图片,传入到模型中,然后通过模型实时的判断出当前图片中的动物是猫还是狗。
最后识别出来的结果,还是会回流到最开始的数据管理中,从而不断的扩充数据库。再进一步不断的迭代,提升模型训练的精度。这就是一个流水线的方式集成和交付的概念。
2.2.4 数据管理:AI数据框架,百倍提升数据处理效率
ModelArts的数据管理,提供了常见的数据标注框架,支持多种数据标注,像常见的物体、音频、文本等。
ModelArts还支持进行团队标注,像我们日常的AI应用的开发,需要成百上千张图片,可能需要一张张进行标注。如果有多个人共同来标注一个数据集,也能提升标注的速率。
假设现在有一个1000张数据集的图片,只需要标注前面的50张即可,后续ModelArts会根据前面标注的图像的规律,采用算法,智能的把剩余的图片进行标注。之后,我们只需要做简单的检查即可。从而大大降低人工标注耗费的时间。
2.2.5 模型训练:自动学习ExML引擎,帮助初学者"零" 基础搞定五种场景
ModelArts内置了常见的算法,像图像分类、物体检测、预测分析、声音分类、文本分类等。
基于这些算法,只需要开发者把标注好的数据上传到ModelArts平台,ModelArts可以一键启动AI模型训练,并进行对应的模型验证和上传服务。
从而实现零代码、零AI的开发。
2.2.6 模型训练:训练作业提供大量的预置模型进行迁移学习,简化模型创建
当前,ModelArts平台已经有60+预置模型,主要覆盖:图像分类、图像语义分割、物体检测与定位、强化学习、文本、语音等场景。
这些模型都是基于开源或行业数据集所构造的,而且它的精度和速度都是有一定的保证的。也支持开发者自行编写的代码。
在有了模型之后,ModelArts提供了一键训练。快速的将模型进行训练,实现整体的模型打通。
2.2.7 华为云ModelArts CodeLab,让AI探索&教学更简单
开发者如果觉得ModelArts提供的算法不够优秀,华为云还提供了ModelArts CodeLab的方式。从而实现开发者在云端上直接进行AI应用的开发。
CodeLab可以理解为云上的编译器,它的好处在于直接连上云端的算力,而且每天提供免费算力资源的时间,支持即开即用。
CodeLab发布了丰富的案例,案例支持一键运行,还支持把自己写的案例分享到AI Gallery,供其他开发者学习和了解。
CodeLab还支持通过本地IDE+ModelArts插件远程开发。
2.2.8 模型部署:端、边、云全场景AI部署
完成AI应用的开发和训练之后,我们会把模型进行部署。ModelArts平台提供了端、边、云全场景AI部署能力。
首先,在部署之前,ModelArts提供了快速应用AI测试的环境,能够帮助开发者快速看到模型运行的效果。并且能够部署到端、边等各种设备,提升推理运行性能。
2.2.9 WorkFlow工作流:降低端到端AI开发门槛
ModelArts还提供了WorkFlow工作流,它可以降低端到端AI开发门槛。
整体AI应用的开发是一个流水线的形式,WorkFlow可以把这个流水线合成一个工作流的形式,作为一体。
WorkFlow工作流分为开发态和运行态。
开发过程中,通过Python SDK低代码编排,把工作流串起来。完成配置之后,基于自己的SDK进行调试。这样做最大的好处在于,通过组件复用,减少代码量,进而提升效率。
在运行态,可视化的操作界面,降低使用门槛。同时支持多种多样的评估可视化,帮助理解模型效果。
同时,它可以发布到AI Gallery社区,供其他开发者学习。
2.3 基于LangChain+ChatGLM3的本地知识库问答
2.3.1 ChatGLM3介绍
ChatGLM3是一个基于Transformer的预训练语言模型,由清华大学KEG实验室和智谱AI公司于2023年共同训练。
基本原理:将大量无标签文本数据进行预训练,然后将其用于各种下游任务,例如文本分类,命名实体识别,情感分析等。
ChatGLM3-6B是ChatGLM3系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性。
在int4精度下,只需要13GB的显存即可流畅运行ChatGLM3-6B。
2.3.2 LangChain介绍
LangChain是一个开源框架,允许从事人工智能的开发者将例如GPT-4的大语言模型与外部计算和数据来源结
合起来。该框架目前以Python或JavaScript包的形式提供。
LangChain目前由六大部分组成:Models模型、Indexs索引、Prompts提示词、Chains链、Memory记忆、Agents代理。本期着重介绍前面四个部分,Memory记忆主要用来使我们的大语言模型在多轮对话中有更好的记忆效果。Agents代理更多的做一些个人助理的应用,比如当大语言模型无法解决问题,可以通过它从百度等搜索引擎获取答案。
LangChain的优势:
- 提供了统一的LLM的接口和使用;
- 快速将本地知识导入到大语言模型使用;
- 将连续多次任务的关键词进行存储,让大模型具有"记忆"。
2.3.3 开源大模型体验官课程介绍
本次开源大模型体验官课程基于华为云一站式AI开发平台ModelArts,使用云端算力快速实现大模型的调用,并基
于大语言模型开发框架-LangChain,实现LangChain+ChatGLM3的本地知识库问答。
2.3.4 LangChain组件介绍--Models
Models主要的作用是对模型的输入和输出进行处理,从而使输入符合大语言模型的调用方式,输出更加符合想要的效果。
在LangChain中加载ChatGLM3模型,配置如下:
- 首先新建一个类,这类继承langchain.llms.base.LLM类;
- 然后定义一个__llm__type方法,通过@property装饰器将该方法转为【只读属性】;
- 重写__call方法:加载自己的模型,并限制只输出结果。
2.3.5 LangChain组件介绍--Prompts
Prompts是大语言模型的提示模版,它是生成语言模型提示的预定义配方。
大语言模型的输入不同,输入的效果也会截然不同,Prompts常用的提示词技术如下:
- 少量描述的提示词:直接输入问题让大语言模型进行回答。
- 少样本的提示词:不直接进行提问,给出样例,让大语言模型进行学习之后再进行回答。
- 思维链的提示词:给大语言模型一个思考的过程,让大语言模思考答案是否正确,大语言模型给正确的结果。
2.3.6 LangChain组件介绍--Indexs
由于大型语言模型(LLMs)存在数据实时性的问题,它们只知道通过它们的训练数据所呈现的世界。
因此我们可以将最新的一些知识文档添加到LLMs中,来补充LLMs模型的知识。
在langChain中进行外部数据检索,一般按照如下流程实现:
- 基于langChain.document_loaders下的加载类进行文件加载;
- 基于langChain.text_splitter对加载后的文件进行分割,以便传入大语言模型;
- 将分割后的文档转成嵌入向量,然后存储到向量数据库;
- 基于向量的余弦相以度来进行检索。
2.3.7 LangChain组件介绍--Chains
LangChain通过Chains组件实现前面提到的Models、Prompts、Indexs等组件的链接,进行更复杂的功能开发。
Chains又名链,链的作用就是将各个组件合到一起。LangChain中有很多已有的链,例如:LLMChain、SequentialChain(顺序链)、ConversationChain(对话链)、RetrievalQA(检索型问答)、ConversationalRetrievalChain(对话式检索问答)。
通过RetrievalQA实现基于本地知识库的问答,实现流程如下:
- 首先定义语言模型和本地知识库的加载;
- 然后通过RetrievalQA.from_llm函数构造链的实例knowledge_chain,并配置一些参数;
- 最后通过调用knowledge_chain即可。
2.3.8 基于LangChain+ChatGLM3的本地知识库问答
步骤1:在AI Gallery找到对应案例并运行
1、登录华为云账号,进入AI Gallery社区。在AI Gallery中可以找到该案例。
2、单击“Run in ModelArts”,跳转到案例详情页。
步骤2:选择运行环境
1、默认选择限时免费的规格,选择好之后,单击“切换规格”。
注:如果限时免费规格售罄了,可以稍作等待。
2、切换完成之后,页面会有如下提示,单击“确定”。
步骤3:逐步运行案例
案例的每个步骤旁边会有一个运行按钮,单击可以运行当前步骤。
1、下载ChatGLM3模型
2、配置环境
a.首选创建虚拟环境
b.选择python版本
本案例依赖Python3.10.10及以上环境,点击右上角kernel选择python-3.10.10。
3、安装依赖库
步骤4:代码开发
当前案例使用的是RetrievalQA,它可以很方便的实现基于知识库的问答。
步骤5:功能测试
1、运行当前步骤
2、运行完成之后,可以看到大语言模型的回答。
步骤6:案例停止
至此整个案例的全部操作流程已经完成,可以手动停止案例。
也可以等1小时后案例会自动停止运行,无需关注。
四、总结
本文以大模型的发展历程引出大模型的介绍,随后详细描述了大模型的开发过程。
在掌握了大模型的基础知识之后,华为云EI的介绍正式登场。华为云EI提供的AI开发平台——ModelArts,可以帮助开发者一站式完成大模型的生成、评估、训练、部署及监测。
然后是对ChatGLM3和LangChain的详细介绍,进而便进入了本篇的另一个主题:如何基于LangChain+ChatGLM3的本地知识库问答。这部分内容,主要是以实战案例方式,让开发者更容易理解和上手。
未来,期待ModelArts为大模型AI应用开发赋予更多可能。