文章目录
ChatGLM与Langchain简介
ChatGLM-6B简介
ChatGLM-6B是什么
ChatGLM-6B地址:https://github.com/THUDM/ChatGLM-6B
ChatGLM-6B 是⼀个开源的、⽀持中英双语的对话语⾔模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。
ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。
更新 v1.1 版本 checkpoint, 训练数据增加英⽂
指令微调数据以平衡中英⽂数据⽐例,解决英
⽂回答中夹杂中⽂词语的现象。
ChatGLM-6B具备的能力
- 自我认知(可以对自己进行介绍,优点缺点等)
- 提纲写作(比如:帮我写一个介绍ChatGLM的博客提纲)
- 文案写作(根据一段话来生成一段文案)
- 信息抽取(抽取一段文本的人物,时间,地点等实体信息)
- 角色扮演(指定ChatGLM为一个角色,进行对话)
ChatGLM-6B具备的应用
大语言模型通常基于通识知识进行训练的,而在
⾯向某些领域的具体场景时,常常需要借助模型微调或提示词⼯程提升语言模型应用效果:
常见的场景如下:
- 垂直领域知识的特定任务(金融领域,法律领域)
- 基于垂直领域知识库的问答
模型微调与提示词工程的区别:
模型微调:针对预训练好的语言模型,在特定任务的数据集上进行进一步的微调训练,需要有标记好的特定任务的数据。
提示工程:核心是设计自然语言提示或指定,引导模型完成特定任务,适合需要明确输出的任务。
Langchain简介
Langchain是什么
LangChain 是一个用于开发由语言模型驱动的应用程序的框架。他主要拥有 3个能力:
- 可以调用LLM模型
- 可以将 LLM 模型与外部数据源进行连接
- 允许与 LLM 模型进行交互
Langchain的核心模块
Langchain的核心模块如下:
- Modules:支持的模型类型和集成,如:openai,huggingface等;
- Prompt:提示词管理、优化和序列化,支持各种自定义模板;
- Memory:内存管理(在链/代理调用之间持续存在的状态);
- Indexes:索引管理,方便加载、查询和更新外部数据;
- Agents:代理,是一个链,可以决定和执行操作,并观察结果,直到指令完成;
- Callbacks:回调,允许记录和流式传输任何链的中间步骤,方便观察、调试和评估。
Agents代理执行过程如下:
Langchain的应用场景
- 文档问答
- 个人助理
- 查询表格
- 与API交互
- 信息提取
- 文档总结
ChatGLM与Langchain项目介绍
知识库问答实现步骤
基于Langchain思想实现基于本地知识库的问答应用。实现过程如下:
1、加载文件
2、读取文本
3、文本分割
4、文本向量化
5、问句向量化
6、在文本向量中匹配出与问句向量最相似的top k个
7、匹配出的文本作为上下文和问题一起添加到prompt中
8、提交给LLM生成回答。
还有另一个版本(本质是一样的)
ChatGLM与Langchain项目特点
- 依托 ChatGLM 等开源模型实现, 可离线部署
- 基于 langchain 实现,可快速实现接入多种数据源
- 在分句、文档读取等方面,针对中文使用场景优化
- 支持pdf、 txt、 md、 docx等⽂件类型接⼊,具备命令行demo、 webui 和 vue 前端。
项目主体结构
- models: llm的接⼝类与实现类,针对开源模型提供流式输出⽀持。
- loader: 文档加载器的实现类。
- textsplitter: 文本切分的实现类。
- chains: 工作链路实现,如 chains/local_doc_qa 实现了基于本地⽂档的问答实现。
- content:用于存储上传的原始⽂件。
- vector_store:用于存储向量库⽂件,即本地知识库本体。
- configs:配置文件存储。
项目效果优化方向
- 模型微调:一个是对embedding模型的基于垂直领域的数据进行微调;一个是对LLM模型的基于垂直领域的数据进行微调;
- 文档加工:一种是使用更好的文档拆分的方式(如项目中已经集成的达摩院的语义识别的模型及进行拆分);一种是改进填充的方式,判断中心句上下文的句子是否和中心句相关,仅添加相关度高的句子;另一种是文本分段后,对每段分别及进行总结,基于总结内容语义及进行匹配;
- 借助不同模型的能力:在 text2sql、text2cpyher 场景下
需要产生代码时,可借助不同模型能力。
项目后续开发计划
- 扩充数据源:增加库表、图谱、网页等数据接入;
- 知识库管理:完善知识库中增删改查功能,并支持更多向量库类型;
- 扩充文本划分方式:针对中文场景,提供更多文本划分与上下文扩充方式;
- 探索Agent应用:利用开源LLM探索Agent的实现与应用。
ChatGLM与Langchain项目实战过程
实战(一)
https://github.com/imClumsyPanda/langchain-ChatGLM
如果想自己新建一个conda环境进行环境的配置,可以通过下面方式进行操作:
# 激活环境
source activate
# 创建一个python3.8版本的环境
conda create -n langchain python==3.8.13
拉取项目
git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git
进入目录
cd langchain-ChatGLM
安装requirements.txt
conda activate langchain
pip install -r requirements.txt
当前环境支持装langchain的最高版本是0.0.166,无法安装0.0.174,就先装下0.0.166试下。
修改配置文件路径:
vi configs/model_config.py
将chatglm-6b的路径设置成自己的。
“chatglm-6b”: {
“name”: “chatglm-6b”,
“pretrained_model_name”: “/data/sim_chatgpt/chatglm-6b”,
“local_model_path”: None,
“provides”: “ChatGLM”
修改要运行的代码文件:webui.py,
vi webui.py
将最后launch函数中的share设置为True,inbrowser设置为True。
执行webui.py文件
python webui.py
可以通过 ip + 端口号的方式在浏览器打开,界面如下:
对应输出:
占用显存情况:大约15个G
实战(二)
项目地址:https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui
HUggingFace社区在线体验:https://huggingface.co/spaces/thomas-yanxin/LangChain-ChatLLM
另外也支持ModelScope魔搭社区、飞桨AIStudio社区等在线体验。
下载项目
git clone https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui.git
进入目录
cd LangChain-ChatGLM-Webui
安装所需的包
pip install -r requirements.txt
pip install gradio==3.10
修改config.py
init_llm = "ChatGLM-6B"
llm_model_dict = {
"chatglm": {
"ChatGLM-6B": "/data/sim_chatgpt/chatglm-6b",
修改app.py文件,将launch函数中的share设置为True,inbrowser设置为True。
执行webui.py文件
python webui.py
显存占用约13G。
Langchain-0.2.7版本实战
Langchain-chatchat项目有两个大的版本,即V1和V2,版本2相比版本1的界面进行了优化。但由于Langchain-chatchat版本的更新迭代速度比较快,这里以0.2.7版本进行实操。
项目地址:https://github.com/chatchat-space/Langchain-Chatchat/tree/v0.2.7
环境配置
拉取仓库
# 拉取指定版本的仓库
git clone https://github.com/chatchat-space/Langchain-Chatchat/tree/v0.2.7.git
# 进入目录
cd Langchain-Chatchat
环境配置与使用
目前七月GPU上已经配置好对应的conda环境,可通过下面命令来激活使用
# 激活环境
source activate
# 进入已配置好的conda环境
conda activate Langchain-Chatchat
如果想自己新建conda环境,并进行环境配置,可以按照下面命令进行操作
# 激活环境
source activate
# 创建一个python3.9版本的环境
conda create -n langchain python==3.9
# 进入目录
cd Langchain-Chatchat
# 安装全部依赖(如果使用已配置好的conda环境,则不需要进行安装)
pip install -r requirements.txt
pip install -r requirements_api.txt
pip install -r requirements_webui.txt
模型下载
下载方式:
git clone https://huggingface.co/THUDM/chatglm2-6b
git clone https://huggingface.co/moka-ai/m3e-base
目前上面两个模型都已经下载好了,其中chatglm2-6b、chatglm3-6b在/data/sim_chatgpt下。m3e-base在/data/datasets下。
设置配置项
复制模型相关参数配置模板文件 configs/model_config.py.example 存储至项目路径下 ./configs 路径下,并重命名为 model_config.py。
复制服务相关参数配置模板文件 configs/server_config.py.example 存储至项目路径下 ./configs 路径下,并重命名为 server_config.py。
可以直接用下面命令:
python copy_config_example.py
在开始执行 Web UI 或命令行交互前,请先检查 configs/model_config.py 中的各项模型参数设计是否符合需求:
请确认已下载至本地的 llm_model 以及 embed_model 模型本地存储路径写在 MODEL_PATH 对应模型位置,如:
MODEL_PATH = {
"embed_model": {
"bge-large-zh": "/data/datasets/bge-large-zh",
"m3e-base": "/data/datasets/m3e-base"},
"llm_model": {
"chatglm2-6b": "/data/sim_chatgpt/chatglm2-6b",
"chatglm3-6b": "/data/sim_chatgpt/chatglm3-6b",
}}
知识库初始化与迁移
当前项目的知识库信息存储在数据库中,在正式运行项目之前需要先初始化数据库。
python init_database.py --recreate-vs
一键启动
一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务,示例代码:
python startup.py -a
如果想结束,可以使用 Ctrl + C 直接关闭所有运行服务。如果一次结束不了,可以多按几次。
通过ip+端口的方式即可打开:
参考
https://github.com/imClumsyPanda/langchain-ChatGLM
https://liaokong.gitbook.io/llm-kai-fa-jiao-cheng/
https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui