本文分享自华为云社区《【云驻共创】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中进行外部数据检索,一般按照如下流程实现:

  1. 基于langChain.document_loaders下的加载类进行文件加载;
  2. 基于langChain.text_splitter对加载后的文件进行分割,以便传入大语言模型;
  3. 将分割后的文档转成嵌入向量,然后存储到向量数据库;
  4. 基于向量的余弦相以度来进行检索。

2.3.7 LangChain组件介绍--Chains

LangChain通过Chains组件实现前面提到的Models、Prompts、Indexs等组件的链接,进行更复杂的功能开发。

Chains又名链,链的作用就是将各个组件合到一起。LangChain中有很多已有的链,例如:LLMChain、SequentialChain(顺序链)、ConversationChain(对话链)、RetrievalQA(检索型问答)、ConversationalRetrievalChain(对话式检索问答)。

通过RetrievalQA实现基于本地知识库的问答,实现流程如下:

  1. 首先定义语言模型和本地知识库的加载;
  2. 然后通过RetrievalQA.from_llm函数构造链的实例knowledge_chain,并配置一些参数;
  3. 最后通过调用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应用开发赋予更多可能。

点击关注,第一时间了解华为云新鲜技术~

一文教你基于LangChain和ChatGLM3搭建本地知识库问答的更多相关文章

  1. 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台

    面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...

  2. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.7. 配置资源与参数

    2.7.配置资源与参数 2.7.1. 修改主机名称 [root@linuxrac1 ~]# cd /etc/sysconfig [root@linuxrac1 sysconfig]# vi netwo ...

  3. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.6. 安装Oracle所依赖的必要包

    2.6. 安装Oracle所依赖的必要包 2.6.1. 检查Oracle所依赖的必要rpm包 [root@localhost /]#rpm -q binutils compat-libstdc elf ...

  4. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.5. 配置网络

    2.5. 配置网络 2.5.1. 配置网络 Oracle Rac数据库涉及到公用网络和私有网络,因此要做网络划分和IP地址规划,下表列出了要安装的RAC数据库对应的IP地址.主机名以及网络连接类型: ...

  5. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.4. 安装JDK

    2.4.安装JDK 2.4.1.准备JDK 在百度搜索:JDK下载 2.4.2.上传JDK put E:\软件安装文件\jdk-8u11-linux-x64.rpm /home/linuxrac1/D ...

  6. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.3配置共享磁盘

    2.3.配置共享磁盘 2.3.1.创建共享磁盘 在cmd中进入WMware Workstation 10.0 安装目录: 1.创建存储Oracle Clusterware文件  (Oracle Clu ...

  7. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.2安装操作系统CentOS5.4

    2.2. 安装操作系统CentOS5.4 两个虚拟机都安装,此步骤在创建虚拟机节点时: 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境所有链接: 1.资源 ...

  8. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.1创建虚拟机

    2.1.创建虚拟机 2.1.1. 创建虚拟机节点1 2.1.2.  创建虚拟机节点2 操作如节点1. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境所有链 ...

  9. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:1.资源准备

    最近,在VmwareStation 10虚拟机上,基于CentOS5.4安装Oracle 11g RAC,并把过程记录下来.刚开始时,是基于CentOS 6.4安装Oracle 11g RAC, 没有 ...

  10. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.1.系统界面报错Gnome

    1.错误信息:登录系统后,屏幕弹出几个错误对话框,无菜单.无按钮 GConf error: Failed to contact configuration server; some possible ...

随机推荐

  1. C 语言中的 switch 语句和 while 循环详解

    C 语言中的 switch 语句 替代多重 if..else 语句,可以使用 switch 语句.switch 语句用于选择多个代码块中的一个来执行 switch(表达式) { case x: // ...

  2. skywalking入口

    skywalking通过maven配置指定org.apache.skywalking.apm.agent.SkyWalkingAgent为premain-class,该类中包含了一个premain方法 ...

  3. C#_面试题1

    C#_面试题1 1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么? 答:尽可能用约束(包括CHECK.主键.唯一键.外键.非空字段)实现,这种方式的效率最好:其次用触发器,这种方 ...

  4. selenium报错:Message: stale element reference: element is not attached to the page document

    在使用selenium时,报了一个错误 报错的原因: 所引用的元素已过时,不再依附于当前页面.通常情况下,这是因为页面进行了刷新或跳转 解决方法: 重新定位元素 代码示例: # 旧代码(报错) lis ...

  5. Pytorch-tensor的创建,索引,切片

    1.基本概念 标量:就是一个数,是0维的,只有大小,没有方向 向量:是1*n的一列数,是1维的,有大小,也有方向 张量:是n*n的一堆数,是2维的,n个向量合并而成 2.a.size(),a.shap ...

  6. chrome浏览器代理插件SwitchyOmega使用

    第一步:下载SwitchyOmega插件 Proxy_SwitchyOmega_2.5.21.crx 第二步:安装插件, 1,在chrome扩展程序开启开发者模式: 2,将插件拖过来: 第三步:设置代 ...

  7. 《c#高级编程》第2章C#2.0中的更改(一)——泛型

    一.实例 当我们需要编写一些通用的代码,但是不确定它们将处理的数据类型时,泛型就非常有用了.下面是一个简单的 C# 泛型示例: using System; public class Example { ...

  8. 力扣670(java)-最大交换(中等)

    题目: 给定一个非负整数,你至多可以交换一次数字中的任意两位.返回你能得到的最大值. 示例 1 : 输入: 2736输出: 7236解释: 交换数字2和数字7.示例 2 : 输入: 9973输出: 9 ...

  9. 【pytorch学习】之概率

    6 概率 简单地说,机器学习就是做出预测.根据病人的临床病史,我们可能想预测他们在下一年心脏病发作的概率.在飞机喷气发动机的异常检测中,我们想要评估一组发动机读数为正常运行情况的概率有多大.在强化学习 ...

  10. CDN应用进阶 | 正确使用CDN 让你更好规避安全风险

    为了帮助用户更好地了解和使用CDN产品,CDN应用实践进阶系统课程开课了.12月17日,阿里云CDN产品专家彭飞在线分享了<正确使用CDN,让你更好规避安全风险>议题,内容主要包括以下几个 ...