基于LangChain+ChatGLM2-6B+embedding构建行业知识库

news2025/1/11 19:49:44

目的:最近在探索大模型本地化部署+知识库实现行业解决方案,安装过程记录,分享给需要的同学,安装前确定好各组件的版本非常重要,避免重复安装走老路。

经过查阅大量资料,目前可以分为以下两种方案

方案一:使用开源LLM本地部署和微调

优点:数据最安全,因为不管是模型还是训练数据都在本地

缺点:要调教出一个足够出色的模型,需要耗费较多的人力物力(当然相比于预训练已经好太多了)

具体实施:(LLAMA、ChatGLM2)+(Lora、P-Tuningv2、promote-tunning等)

方案二:基于LLM+向量数据库

优点:成本相对低,更简单,无需训练甚至无需微调

缺点:如果使用选择ChatGPT等云端大模型,则需牺牲掉一些隐私性

具体实施:LangChain+pinecone+(ChatGPT、ChatGLM2) 现成开源方案:Quivr、PrivateGPT

本文使用第二种方案,具体实施:

  1. LangChain+向量数据库+ChatGLM2
  2. LLM+向量数据库方案核心
  3. 三步走实现私有知识库

          *将私有知识库内容经过 embedding 存入向量知识库

          *用户每一次提问,把问题也 embedding,并利用向量相关性算法(例如余弦算法)找到向量知识库最匹配的几个片段

          *将这些片段,与用户问题一起作为 promt 提交给 LLM 回答

知识点:

    1. Embedding,在某种程度上,就是用来降维的,降维的原理就是矩阵乘法

    一个简单的例子,可以用地图来理解Embedding,现实的地理地形的信息其实远远超过三维,但是地图通过颜色和等高线等来最大化表现现实的地理信息(二维),所以地图就是现实地理的Embedding

    2. 而向量知识库是保存Embedding向量的地方

    3. LangChain 可以轻松管理Embedding向量知识库与LLM的交互,将多个组件链接在一起,是个很火的大语言模型开发框架

核心流程图解

一、部署环境

开通有GPU的服务器 CPU2核、内存24G或32G、显存24G或32G,低一些的配置页可以试试。
安装特别注意事项:版本问题
ChatGLM2-6B版本要装PYTORCH2.0,而且要2.0.1 ,就是这么精确,大家先试试用下面的命令安装一下行不行。CUDA不能用12.0 ,也不能用10.0,只能用11.x 版本。Python必须使用3.9的版本。

CentOS7.9

PYTORCH2.0.1

CUDA11.8

Python3.9

pip3 install torch=2.0.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

CUDA:11.8版本。我上次装 Tensforflow用了10.0CUDA,只能卸载以后重新安装CUDA 11,但是幸运的是CUDA安装程序非常智能,我的电脑上CUDA 12、CUDA11.8和CUDA 10能共存得很好,PATH里放的是最新的路径,没有压力。
CUDA换了,CUDNN也换成和CUDA11.8匹配的版本就行。装完检查一下(进命令行)

nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:41:10_Pacific_Daylight_Time_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

继续走:

在anaconda里建立一个环境,比如叫chatglm2-6b, 然后用activate 激活即可。

虚拟环境
 

conda create -n chatglm2-6b python=3.9
conda activate chatglm2-6b

如果你前面没有装 CUDA11,那就没办法装 pytorch2.0,系统就会提示。请乖乖回去装 CUDA11和CUDNN。

二、安装部署

下载源码

git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git

安装依赖

cd langchain-ChatGLM
pip install -r requirements.txt

 (可能会影响现有PYTORCH和CUDA的版本,需要注意)

下载模型
# 安装 git lfs

yum install git-lfs

# 安装完成后,您可以运行以下命令来验证Git LFS是否已成功安装:

git lfs version

# 下载 LLM 模型(比较大的数据13G)

git clone https://huggingface.co/THUDM/chatglm2-6b $PWD/chatglm2-6b


# 下载 Embedding 模型(比较大的数据2.6G)

git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese $PWD/text2vec


修改配置参数
在 configs/model_config.py 文件中,对embedding_model_dict和llm_model_dict参数进行修改。
 

cd configs
cp model_config.py.example model_config.py
vim model_config.py
"text2vec": "/root/llm/langchain-ChatGLM/text2vec",
"chatglm2-6b": "/root/llm/chatglm2-6b",

知识库初始化与迁移

当前项目的知识库信息存储在数据库中,在正式运行项目之前请先初始化数据库(我们强烈建议您在执行操作前备份您的知识文件)。

    如果您是从 0.1.x 版本升级过来的用户,针对已建立的知识库,请确认知识库的向量库类型、Embedding 模型与 configs/model_config.py 中默认设置一致,如无变化只需以下命令将现有知识库信息添加到数据库即可:

    python init_database.py

    如果您是第一次运行本项目,知识库尚未建立,或者配置文件中的知识库类型、嵌入模型发生变化,或者之前的向量库没有开启 normalize_L2,需要以下命令初始化或重建知识库:

    python init_database.py --recreate-vs

三、一键启动API 服务或 Web UI

1、一键启用默认模型

一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务,示例代码:

python startup.py -a

自动跳转到web页面,若不能跳转记得在代码末尾按一下Enter键,即可一键启动web页面。

服务器设置允许访问8501端口

http://43.156.*.*:8501/


自动跳转到web页面,若不能跳转记得在代码末尾按一下Enter键,即可一键启动web页面。

(对话输出文字比较慢,因为现在使用的是CPU,后边有设置成GPU的方法,就快很多。)

 

并可使用 Ctrl + C 直接关闭所有运行服务。如果一次结束不了,可以多按几次。

可选参数包括 -a (或--all-webui), --all-api, --llm-api, -c (或--controller), --openai-api, -m (或--model-worker), --api, --webui,其中:

    --all-webui 为一键启动 WebUI 所有依赖服务;
    --all-api 为一键启动 API 所有依赖服务;
    --llm-api 为一键启动 Fastchat 所有依赖的 LLM 服务;
    --openai-api 为仅启动 FastChat 的 controller 和 openai-api-server 服务;
    其他为单独服务启动选项。

2. 启用非默认模型

若想指定非默认模型,需要用 --model-name 选项,示例:

python startup.py --all-webui --model-name Qwen-7B-Chat

更多信息可通过 python startup.py -h查看。

添加个人知识库

如果当前回答结果并不理想,如下图所示,可添加知识库,对知识进行优化

本地添加知识库

将文档添加到knowledge_base——samples——content目录下:

 通过web页面添加知识库

重新微调模型

知识库添加完成之后,按照3.5-3.6重新运行程序,即可实现本地知识库更新。如下图所示,添加完《天龙八部》电子书之后,回答结果变得精准。


提升回答速度,把CPU改为GPU:

model_config.py文件中,修改

    # Embedding 模型运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
    EMBEDDING_DEVICE = "auto"

为:

    # Embedding 模型运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
    EMBEDDING_DEVICE = "cuda"

修改

    # LLM 运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
    LLM_DEVICE = "auto"

为:

    # LLM 运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
    LLM_DEVICE = "cuda"

如果对话模型选择"知识库对话"方式:


四、安装过程中问题解决:

1、组件版本的问题,Torch版本不支持CUDA,需要组件的匹配
 

(base) [root@VM-0-9-centos langchain-ChatGLM]#  python

Python 3.11.5 (main, Sep 11 2023, 13:54:46) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch

>>> print(torch.__version__)
2.1.0+cu121

>>> torch.cuda.is_available()
/root/miniconda3/lib/python3.11/site-packages/torch/cuda/__init__.py:138: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 11000). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at ../c10/cuda/CUDAFunctions.cpp:108.)
  return torch._C._cuda_getDeviceCount() > 0
False

2、重新安装pytorch匹配版本

1)命令行输入

conda uninstall pytorch

2)命令行接着输入

conda uninstall pytorch-cuda

(这一步许多教程中没有,导致还有十多个包没删除)
3)可以看到卸载完后

查看包的命令:conda list

安装pytorch=2.0.1
conda update --force conda
conda install pytorch=2.0.1 torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
conda install cchardet

3、Linux Centos7安装cuda 11.8命令

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-rhel7-11-8-local-11.8.0_520.61.05-1.x86_64.rpm
sudo rpm -i cuda-repo-rhel7-11-8-local-11.8.0_520.61.05-1.x86_64.rpm
sudo yum clean all
sudo yum -y install nvidia-driver-latest-dkms
sudo yum -y install cuda-toolkit-11-8

4、配置CUDA环境

sudo vim ~/.bashrc
    在bashrc文件最下方,添加下入代码
    (ps:这边需要注意cuda的版本,版本不同,路径的命名需修改)

export PATH=$PATH:/usr/local/cuda-11.8/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.8/lib64


    更新环境

source ~/.bashrc


    测试CUDA是否安装成功

nvcc -V

安装完成之后

执行nvidia-smi如果出现 Failed to initialize NVML: Driver/library version mismatch
(就是和原有驱动不兼容问题)
4.1 重启即可
4.2 不重启方案 (服务端不能轻易重启情况)
4.2.1 杀死使用GPU相关进程, 看到pid之后杀死

sudo yum install -y lsof
sudo lsof -n -w  /dev/nvidia*


4.2.2 删除已有mod

sudo rmmod nvidia

    报错 rmmod: ERROR: Module nvidia is in use by: nvidia_modeset nvidia_uvm
    也就是 nvidia_modeset 和 nvidia_uvm 在使用, 将其也 rmmod
    同时执行以下命令, 遇到什么模块说 in use, 将其 rmmod

sudo rmmod nvidia_modeset
sudo rmmod nvidia_drm
sudo rmmod nvidia_uvm


再运行命令

sudo rmmod nvidia
sudo nvidia-smi


4.2.3此时发现nvidia-smi执行慢, 运行如下命令, 开启维护GPU的一个守护进程

nvidia-persistenced --persistence-mode

卸载cuda
yum remove -y cuda

5、页面将文档加入到向量库中,处理中报错:

 解决方法:

pip install -U --force-reinstall charset-normalizer

参考:
AI本地大模型之ChatGLM2-6B安装
https://zhuanlan.zhihu.com/p/643824521

linux nvidia 11.8 安装记录
https://blog.csdn.net/private_void_main/article/details/128014317

基于embedding+LangChain+ChatGLM2-6B 构建行业知识库
https://zhuanlan.zhihu.com/p/646405424

LangChain知识库+Lora微调chatglm2-6b模型+提示词Prompt的使用原则
https://blog.csdn.net/wxfighting/article/details/132087078

轻松搭建本地知识库的ChatGLM2-6B
https://blog.csdn.net/weixin_43734080/article/details/132756808

cuda、cuDNN、pytorch、torchvision、torchaudio 详细安装教程(报错解决、安装慢慢慢)
https://blog.csdn.net/qq_51392112/article/details/133588860

彻底清理CUDA安装(多版本一起清除)
https://blog.csdn.net/qq_53937391/article/details/131501801

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1203619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Radmin局域网远程软件

Radmin是一个快速且安全的远程控制和远程访问软件,通过它可以就像坐在远程计算机前一样,在远程计算机上工作,并可以从多个位置访问远程计算机。(本例使用的版本是Radmin 3.5) 下载Radmin 3.5安装包。 注意&#xff1…

Cesium深入浅出之自定义材质

引子 做为一名技术宅却没有能拿得出手的技术无疑是最可悲的事情。三年前,当我第一次接触Cesium的时候就被它强大和炫丽所折服,最关键的是它还是开源的。以前我一直是机械地敲着业务代码,好像计算机程序就只能干这点事情一样,而 C…

【Spring Boot】034-Spring Boot 整合 JUnit

【Spring Boot】034-Spring Boot 整合 JUnit 文章目录 【Spring Boot】034-Spring Boot 整合 JUnit一、单元测试1、什么是单元2、什么是单元测试3、为什么要单元测试 二、JUnit1、概述简介特点 2、JUnit4概述基本用法 3、JUnit5概述组成 4、JUnit5 与 JUnit4 的常用注解对比 三…

JVM及其垃圾回收机制(GC)

目录 一.JVM内存区域划分 二.JVM类加载机制 类加载过程 类加载的时机 双亲委派模型 三.JVM垃圾回收机制(GC) GC工作过程 1.找到垃圾/判断垃圾 (1)引用计数【python/PHP】 (2)可达性分析【Java】 2.对象释放…

Springboot细节补充

一、Bean是怎么装配的? 1、bean扫描 在之前的ssm中,spring要么用标签的形式来扫描包,要么使用注解ComponentScan来扫描 但是在Springboot中,启动类上默认有一个注解SpringBootApplication,里面就包含了ComponentScan…

五、L2TPv2 VPN

L2TPv2 VPN 1、L2TPv2概述1.1.目的1.2.特点 2、L2TP原理2.1.基本概念2.2.工作原理2.2.1.协议架构2.2.2.报文结构2.2.3.报文封装2.2.4.报文传输 3、工作过程4、应用场景4.1、远程拨号用户发起L2TP隧道连接4.2、LAC接入拨号请求发起L2TP隧道连接4.3、LAC接入PPPoE用户发起L2TP隧道…

Makefile的简单语法学习

通配符 假如一个目标文件所依赖的依赖文件很多,那样岂不是我们要写很多规则,这显然是不合乎常理的,我们可以使用通配符,来解决这些问题。 我们对上节程序进行修改,代码如下: test : a.o b.ogcc -o test $…

bclinux aarch64 ceph 14.2.10 文件存储 Ceph File System, 需要部署mds: ceph-deploy mds

创建池 [rootceph-0 ~]# ceph osd pool create cephfs_data 64 pool cephfs_data created [rootceph-0 ~]# ceph osd pool create cephfs_metadata 32 pool cephfs_metadata created cephfs_metadata 64 报错 官方说明: 元数据池通常最多可容纳几 GB 的数据。为…

“谐波”分析治理,电能质量在线监测

安科瑞 崔丽洁 摘要:在国家鼓励半导体材料国产化的政策导向下,本土半导体材料厂商不断提升半导体产品技术水平和研发能力,逐渐打破了国外半导体厂商的垄断格局,推进中国半导体材料国产化进程,促进中国半导体行业的发展…

ubuntu20.04有公网ip如何做端口映射?

一,有公网IP时如何做端口映射? 然后打开浏览器,输入192.168.2.1自己路由地址,进入路由器的控制面板(如果不知道用户名和密码,可以在自己路由设备背面可见默认帐号密码)。 点击转发规则&…

深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)

本章的内容: 什么是函数栈帧? 理解函数栈帧能解决什么问题? 函数栈帧的创建和销毁解析 本文放到 --> 该专栏内:http://t.csdnimg.cn/poMzA 目录 什么是函数栈帧❓ 理解函数栈帧能解决什么问题呢?💢 函数栈帧的…

抖音商城双11好物节,从供需两侧重新定义“好货”

【潮汐商业评论/原创】 你用的第一款护肤品是什么? 大部分人回忆起童年的时候,想起来的都是那款有着牛奶香味的、塑料包装的小袋白色乳霜——郁美净儿童霜。 但是不知何时,它逐渐淡出了很多人、特别是年轻人的视野,直到今年在互…

iManager云套件支持配置kingbase

作者 yangjunlin 前言 越来越多的涉密单位对于信创环境的要求逐渐升高,服务应用对国产数据库的依赖性也在提高,针对超图iManager for k8s产品中的开源数据库替换为kingbase等国产化数据库的客户需求和场景也就随之而来,因此本文将带着读者一步…

ChatGPT微信小程序系统源码/开源支持二开/AI聊天微信小程序源码/人工智能ChatGPT实现的微信小程序

源码简介: 关键字:人工智能 ChatGPT 二开ChatGPT微信小程序源码,作为AI聊天微信小程序源码,它是人工智能ChatGPT实现的微信小程序。它可以适配H5和WEB端 支持AI聊天次数限制。 ChatGPT-MP(基于ChatGPT实现的微信小程序&#xf…

广东食养食疗国际研讨会成功举行

经商务部批准的第20届中国国际保健博览会11月11日在广州隆重开幕。广东省养生文化协会召开的食养食疗国际研讨会首次亮相展会,备受大众关注。来自20多个国家地区的代表,通过线下线上、现场演讲、书面交流等不同形式参加本次活动。30多个商协会负责人和近…

后门程序2

System\CurrentControlSet\Services\Disk\Enum Windows 操作系统注册表中的一个路径。这个路径通常包含有关磁盘设备的信息。在这个特定的路径下,可能存储了有关磁盘枚举的配置和参数 Enum(枚举)子键通常包含了系统对磁盘的枚举信息&#xf…

Python实现WOA智能鲸鱼优化算法优化循环神经网络回归模型(LSTM回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

Spring的Redis客户端

如何在Spring中操作redis 在创建springboot项目的时候引入redis的依赖. 在配置文件里指定redis主机的地址和端口,此处我们配置了ssh隧道,所以连接的就是本机的8888端口. 创建一个controller类,注入操作redis的对象. 前面使用jedis,是通过jedis对象里的各种方法来操作redis的,此…

[原创]仅需小小的改变,B++ Builder 12的代码完成提示即可完美工作.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse、C Bui…

实验室试剂耗材安全管理:从热点事件看其重要性

随着科学技术的不断发展,实验室试剂耗材在各个学科领域的应用越来越广泛。然而,随之而来的实验室试剂耗材安全管理问题也日益凸显。近年来,一系列实验室安全事件引发了社会广泛关注,使我们深刻认识到实验室试剂耗材安全管理的重要…