【云驻共创】基于LangChain+ChatGLM3的 本地知识库问答

举报
福州司马懿 发表于 2023/12/31 23:42:18 2023/12/31
【摘要】 本次开源大模型体验官活动基于华为云一站式AI开发平台ModelArts,使用云端算力快速实现大模型的调用,并基于大语言模型开发框架——LangChian,实现LangChian+ChatGLM3的本地知识库问答。

概述

本次开源大模型体验官活动基于华为云一站式AI开发平台ModelArts,使用云端算力快速实现大模型的调用,并基于大语言模型开发框架——LangChian,实现LangChian+ChatGLM3的本地知识库问答。

一、大模型的发展历程

1.1 chatGPT

2022年11月30日,OpenAI发布了ChatGPT。这是一个基于大语言模型(LLM)的对话机器人(Chat Bot),它的定位是一个AI助手,可以回答通识性专业领域的各种问题(包括编码相关问题),支持中英文在内的多语言,且支持多轮对话。

图片.png

图片.png

ChatGPT自发布以来,5天注册用户超过100万,2个月内月活破亿。

1.2 什么是大模型

大模型,简单来说就是与训练时参数规模达到一定量级的模型。

常见的大模型主要包括:大语言模型、CV大模型、多模态大模型、科学计算大模型等。

下图是大模型发展的主要历程:

图片.png

大模型具有以下3个特性

  • 应用广泛:大语言模型可以用于语言翻译、情感分析、问题解答等,多模态大模型则可用于进行图片、视频生成等功能
  • 持续改进:随着越来越多的数据和参数添加进来,性能也会随之提高,功能更强大
  • 学习很快:可以基于外部的数据参数不断微调学习。

1.3 大模型的训练过程

训练过程主要有以下4个阶段:

  1. 数据搜集:与小规模语言模型相比,LLM对用于模型预训练的高质量数据又更强的需求,其模型容量很大程度上依赖于与训练语料库及其预处理方式
  2. 基础大模型训练:基础大模型构建了长文本的建模能力,使得模型具有语言生成能力,根据输入的提示词(Prompt),模型可以生成文本补全句子
  3. 指令微调:将大量各类型任务,统一为生成式自然语言理解框架,并构造训练语料进行微调
  4. 类人对齐:进一步优化模型,使其可以生成更加贴近人类习惯的文本内容

图片.png

1.4 大语言模型的训练要求

  • 大量的数据:图书、网页、论坛、代码(ChatGPT训练需要45TB数据)
  • 合适的算法:Transformers、DeepSpeed、Megatron-LM等
  • 充足的算力:据说GPT-3语言模型训练使用了10万个GPU,高达 100 PFLOPS (floating point operations per second,每秒所执行的浮点运算次数)的算力

而在拿到大语言模型后,我们要做的就是在有限的数据和算力基础下,基于与训练好的模型微调,让模型融入你的数据知识。

二、华为云AI功能介绍

2.1 使用华为云端算力调用大模型

华为云调用AI大模型的整体架构如下

图片.png

华为云提供了AI大模型的生态社区 —— AI Gallery,它具有以下功能

  • 数据集
  • 工具包
  • 算法
  • 模型
  • 工程
  • 应用
  • 等等

训练大模型是需要大量数据的,华为云提供了DataArts(数据生产线)

  • 数据治理中心DataArts Studio:沉淀华为10+年数字化转型最佳实践经验,数据治理&开发效率10倍+
  • 云数据仓库GaussDB(DWS):中国唯一CC EAL 2+安全认证(中国金融行业商业规模No.1)
  • 云原生数据湖MRS:一湖多集市构建现代数据栈(蝉联中国大数据市场No.1)

2.2 ModelArts架构简介

AI开发平台ModelArts构建全栈全生命周期的模型开发工具链,通过全面的AI工具和服务,为业务智能快速创新赋能。

AI高效开发

  • 提供端到端模型生产线,高效开发、调试和调优大模型应用和场景化应用
  • 提供端到端监控工具,智能运营运维
  • MLOps高效迭代AI模型,持续提升精度
  • 数智融合,数据服务与AI开发全流程打通
  • 对接AI Gallery,便捷使用开源大模型等预置资产

AI高效运行

  • 提供AI加速套件,支持数据加速、训练加速和推理加速,支持分布式高效训练和推理
  • 提供高性价比昇腾算力
  • 支持大规模异构集群及调度管理

AI高效迁移

  • 提供全流程云化昇腾迁移工具链,支撑用户AI业务全栈国产化
  • 提供迁移专业服务

图片.png

三、基于LangChain+ChatGLM3的本地知识库

3.1 ChatGLM3介绍

ChatGLM3 是一个基于Transformer的预训练语言模型,由清华大学KEG实验室和智谱AI公司于2023年共同训练发布。

基本原理: 将大量无标签文本数据进行预训练,然后将其用于各种下游任务,例如文本分类、命名实体识别、情感分析等。

ChatGLM3-6B 是ChatGLM3系列中的开源模型,保留前两代模型对话流畅、部署门槛低等众多优秀特性。

在int4精度下,只需要13GB的显存即可流畅运行ChatGLM3-6B。下面是ChatGLM3的核心代码

图片.png

运行后的UI界面如下

图片.png

3.2 LangChian介绍

LangChain是一个开源框架,允许从事人工智能的开发者将例如GPT-4的大语言模型与外部计算和数据来源结合起来。该框架目前以Python或JavaScript包的形式提供。

LangChian的六大组成成分

  • Models模型
  • Indexs索引
  • Prompts提示词
  • Chains链
  • Memory记忆
  • Agents代理

LangChain的优势

  • 提供了统一的LLM的接口和使用
  • 快速将本地知识导入大语言模型使用
  • 将连续多任务的关键词进行存储,让大模型具有“记忆”

3.2.1 LangChain组件介绍 —— Models

任何语言模型应用的核心元素是:模型的输入和输出。

图片.png

在langChain中加载ChatGLM3模型,需要进行如下配置:

  1. 继承langchain.llms.base.LLM类,新建自定义的类
  2. 通过@property装饰器将 _llm_type方法转为【只读属性】,即可以被类访问,而不需要实例的方法来访问(比如 model._llm_type==ChatGLM3的结果为true)
  3. 重写_call方法:加载自己的模型,并限制只输出结果(ChatGLM3原输出部署直接str,langchain中要求模型返回必须是str的结果)

图片.png

3.2.2 LangChain组件介绍 —— Prompts

提示模板是生成语言模型提示的预定义配方。模板可能包括指令、少量示例以及适用于特定任务的特定上下文和问题。

  • 少量描述的提示词
  • 少样本的提示词
  • 思维链的提示词

图片.png

3.2.3 LangChain组件介绍 —— Indexs

由于大语言模型(LLMs)存在数据实时性的问题,它们只知道通过它们的训练数据所呈现的世界。因此我们可以将最新的一些知识文档添加到LLMs中,来补充LLMs模型的知识。

图片.png

在langChain中进行外部数据检索,一般按照如下流程实现:

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

jpg格式的文件如何加载?
要加载jpg文件,其实本质上还是需要jpg图片上的文本,因此思路是一样的。首先,使用OCR识别JPG图片,然后进行文本分割

图片.png

3.2.4 langChain组件介绍——Chains

前面已经介绍了LangChian的Models、Prompts、Indexs组件,而Chains组件就是将LangChain的各个组件之间彼此链接,进行更复杂的功能开发。

序号 类型 简介
1 LLMChain 大模型构建的最简单、最基本的链。对用户输入进行格式化,将格式化的提示传入模型。然后返回模型的响应,并解析输出
2 SequentialChain(顺序链) 在一个应用程序中,可以多次顺序调用大语言模型来实现程序的功能
3 RouterChain(路由链) 包含条件判断和一系列的目标链。通过调用大语言模型,路由链动态判断条件,确定后续调用的链
4 RetrievalQA(检索型问答链) 通过嵌入向量索引进行查询,可以用来构建文档系统

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

  1. 首先定义语言模型和本地知识库的加载
  2. 然后通过RetrievalQA.from_llm函数构建链的实例 knowledge_chain,并配置一些参数
  3. 最后通过调用knowledge_chain即可

图片.png

3.3 基于ModelArts AI实战

首先,在AI Gallery中找到这个Notebook的项目——基于LangChain+ChatGLM3的本地知识库问答

图片.png

点击“Run in ModelArts”按钮,进入到Jupyter Notebook的项目页面(页面上有很详细的每一步的操作教程,可以仔细阅读并参考)

图片.png

默认的2核4GB的配置不满足我们的要求,需要手动进行切换到 1*P00|CPU8核 的配置

图片.png

第一步是下载ChatGLM3的这个模型。点击代码左侧的三角形按钮,可以自动执行每个步骤。下载好的ChatGLM3的文件会被放置在左侧的目录中

图片.png

图片.png

然后是安装Python3.10的依赖(后面也是一样,直接点击左侧运行按钮即可)可以点击左侧这个上传按钮,修改知识库文件

图片.png

图片.png

这里有两个知识库文件,一个是txt格式的,一个是markdown格式的。

图片.png

config.py 存储的是各种配置信息,包括chatGLM模型名称,文字转向量模型名称等等

图片.png

下面这个就是chatGLM3调用知识库的主程序了

图片.png

这个文件是对知识库内容进行读取和分割

图片.png

支持两种格式的知识库文件,分别是txt和md

图片.png

这里是将提示词进行格式化,最后返回chatGLM的输出

图片.png

最后进行功能测试(这里是非流式的,所以要等结果全部出来)

图片.png

第一个答案是llm直接输出的,而第二个答案是从知识库中搜索后结合llm得出的

图片.png

四、总结

本文从ChatGPT爆发事件起头,介绍了LLMs发展的整个历程,介绍了什么是大模型,以及如何训练大模型。接着引出华为云ModelArts解决方案——在线运行大模型应用。接着介绍了国产大模型ChatGLM 和 LangChain的基本原理。最后通过案例实战教会大家,如何基于华为云ModelArts搭建基于LangChain+ChatGLM3的 本地知识库问答。

附录

本文参与华为云社区【内容共创】活动第25期

任务13:开源大模型应用开发体验官 基于LangChain+ChatGLM3的本地知识库问答

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。