写点什么

一文教你基于 LangChain 和 ChatGLM3 搭建本地知识库问答

  • 2024-05-23
    广东
  • 本文字数:6067 字

    阅读完需:约 20 分钟

一文教你基于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 中进行外部数据检索,一般按照如下流程实现:


  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 应用开发赋予更多可能。


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

发布于: 5 小时前阅读数: 11
用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
一文教你基于LangChain和ChatGLM3搭建本地知识库问答_人工智能_华为云开发者联盟_InfoQ写作社区