本项目使用的服务有FastGPT/ One-api /Bge-m3 api
注意:
阅读本文需要由一定的Liunx操作基础以及一些容器的基础知识才能流畅阅读该教程。如果对教程中有不理解的命令,可以直接把命令复制到GLM4,让人工智能来解释,人工智能解释不清楚的地方,也可以在评论区留言。
GLM4实践-整合FastGPT项目实现GLM4本地智能体
注意:
阅读本文需要由一定的Liunx操作基础以及一些容器的基础知识才能流畅阅读该教程。如果对教程中有不理解的命令,可以直接把命令复制到GLM4,让人工智能来解释,人工智能解释不清楚的地方,也可以在评论区留言。
开始前的废话
Langchain-chatchat以及Langchat-glm这两个项目,如果应用到企业的本地知识库,那么这两个开源项目的前端页面是无法满足企业使用的。因为这两个项目的前端仅仅就是个人实验使用,那么这个问题应该如何解决呢,我找了一圈,发现了FastGPT这个项目。这目是一个本地知识库的开源项目。前端的功能交互界面做得很完善,解决了Langchain-chathcat这个项目前端羸弱的问题。但是呢FastGPT这个项目存在的问题是,他的知识库的Embedding模型不够强大,对于财大器粗的你们来说,那个Embedding模型简直没法看,不能使用GPU,Embedding过程不够强大,这会严重影响使用本地知识库的体验。所以下面我就手搓了一个Bge-m3模型的Openai-api风格的容器给大家接入FastGPT改善他的Embedding性能。到此我们对于搭建企业本地知识库平台的技术问题已经解决得差不多了。
下面就是搭建流程,跟着我一步一步来,就能搭建专属于你们企业的本地知识库,让企业也感受到人工智能带来的便利。
该方案能解决的问题是什么?
能解决GLM4智能体知识库限制的问题,能解决线上GLM4智能体无API提供,不能直接调用训练好的智能体的问题。
能低成本的落地企业本地知识库,在不需要部署本地大语言模型,不需要接入Openai 的API的情况下,就能落地,减轻使用者的负担。
方案落地需要花多少钱?配置如何
该方案唯一使用GPU的业务时Bge-m3的Embedding模型,其他的业务均是使用CPU。当然我在实现BGE-M3模型的API业务的时候已经做了自动适配是使用GPU还是CPU,如果你本地没有GPU,会自动切换到CPU模式,无需干预
Bge-m3的Embedding模型 使用3050显卡足够支撑普通规模的知识库业务的文字转向量的业务。
CPU8核,内存16GB,硬盘建议1TB,企业知识库需要的存储大量的文件,所以存储空间大些(如果是虚在共有云部署最少200GB,后续不够再增加。)
以上的硬件配置预算大概就在5000块钱左右。所以成本还是很低的,对于一个企业应用来说
前置准备工作基础环境安装
需要准备一个GLM4 的key,没有的自己去智谱官网申请。
需要在主机上安装Linux系统,我的使用的Linux系统的发行版是Debian11,当然,你用Centos也是可以的。
需要在主机上安装由Docker,以及Docker-compose工具。
主机上需要安装Nvidia驱动以及英伟达的nvidia-docker工具
方案的搭建步骤
注意,如果你的机子已经有安装了Docker 并且安装有了nvidia驱动,那么安装docker 以及驱动的步骤是可以忽略的。
安装Dokcer
一行命令搞定,很方便,如果你本机环境已经有Docker 以及docker-compose工具,直接到下一步
curl -fsSL <https://get.docker.com> -o get-docker.sh
sudo sh get-docker.sh
安装Nvidia驱动(如果已经有了就忽略该步骤)
以下操作,均是基于Debian11的,Centos可以借鉴思路,然后更换成Centos的源以及安装命令即可
一定按照顺序复制命令,没有重启前,不要运行nvidia-smi这个命令,否则会报错
# Debian 11 "Bullseye" 添加官方源
deb <http://deb.debian.org/debian/> bullseye main contrib non-free
#下载检测工具
apt install nvidia-detect -y &&**nvidia-detect
#**安装内核头文件 amd64位的系统
****apt install linux-headers-amd64 -y
#安装默认驱动
apt install nvidia-driver firmware-misc-nonfree -y
#重启计算机
reboot
#重启完成后运行命令检测安装是否成功
nvidia-smi
安装nvidia-docker 工具
先把以下整段程序进行复制
curl -s -L <https://nvidia.github.io/nvidia-docker/gpgkey> | \\
apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L <https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list> | \\
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
apt-get update
# In order to update the nvidia-docker repository key for your distribution, follow the instructions below.
curl -s -L <https://nvidia.github.io/nvidia-docker/gpgkey> | \\
apt-key add -
安装 nvidia-docker2
并且更新 Docker daemon
配置
apt-get install nvidia-docker2
nvidia-ctk runtime configure
然后重启docker服务,你直接重启系统也可以。
以上基础环境安装
GLM4智能体本地方案搭建
完成后我们就开始进行部署Fastgpt项目以及本地的Embedding模型。
首先我们部署Fastgpt项目,该项目有完善的文档,且有编排好的docker-compose文件,部署很简单。
FastGPT官方部署文档地址:
1.首先我们先下载部署容器需要用到的文件,运行以下命令,直接复制粘贴即可。
mkdir fastgpt
cd fastgpt
curl -O <https://raw.githubusercontent.com/labring/FastGPT/main/files/deploy/fastgpt/docker-compose.yml>
curl -O <https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json>
2.如果直接运行docker-compose也不是不可以,但是新版的Mongo要求服务器有新版的AVX指令集,所以保险的方法是修改mongo的版本,在docker-compose文件的位置如下,把mongo版本修改成4.4.24的这样可以保证mongo数据库可以一次启动成功
修改完成后直接运行命令启动容器
在 docker-compose.yml 同级目录下执行。请确保docker-compose
版本最好在2.17以上,否则可能无法执行自动化命令。
# 启动容器
docker-compose up -d
# 等待10s,OneAPI第一次总是要重启几次才能连上Mysql
sleep 10
# 重启一次oneapi(由于OneAPI的默认Key有点问题,不重启的话会提示找不到渠道,临时手动重启一次解决)
docker restart oneapi
执行完以上步骤后,检查容器是否正常运行。
在fastgpt这个文件夹下,运行命令
docker-compose ps
得到的结果如下,4个容器的状态全部启动成功的情况如下。
通过Fastgpt项目的整合。把GLM4 api 以及 Embedding 知识库整合进FastGPT,构建成FastGLMs
到此,FastGPT项目就部署完成了,接下来我们需要部署BGE-M3 API项目
首先我们为了方便我们自己,需要拉取nvidia的官方pytorch容器,虽然大,但是经过验证,是最稳定且能保证一次运行成功的。
docker pull nvcr.io/nvidia/pytorch:23.06-py3
在本站下载代码代码文件(下载完文件后不要自作聪明先安装依赖,严格按照教程来做。)
代码文件下载地址:
https://download.csdn.net/download/YELLOWAUG/89075748
模型下载
在魔搭或者Hutingface上下载BGE-M3模型到本地
下载前记得安装git lfs 大文件管理工具。
模型地址
git clone 魔搭社区
这两样下载完成后,需要把他们都放在同一个目录中。
在同一个目录下,然后编辑一个Dockerfile文件,文件的内容如下
# syntax=docker/dockerfile:1.4
FROM nvcr.io/nvidia/pytorch:23.06-py3
# 创建工作目录
RUN mkdir -p /home/bgem3api/bge-m3
# 复制本地文件到容器内的/home/bgem3api目录
COPY ./bge-m3 /home/bgem3api/bge-m3
COPY BGEM3.py /home/bgem3api
# 安装必要的Python包
RUN pip install sentence-transformers -i <https://pypi.tuna.tsinghua.edu.cn/simple/>
RUN pip install flask -i <https://pypi.tuna.tsinghua.edu.cn/simple/>
# 运行指定的Python脚本
CMD ["python", "/home/bgem3api/BGEM3.py"]
# 暴露端口5000
EXPOSE 5000
然后创建一个docker compose 文件
version: '3.7'
services:
bgem3:
build:
context: .
dockerfile: Dockerfile
container_name: bgem3api
ports:
- "5050:5000"
working_dir: /home/bgem3api
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0']
capabilities: [gpu]
到此为止,你的文件夹下应该有如下文件才能保证M3容器的正常运行
其中bge-m3是模型文件,BGEM3.py,是接口服务程序,docker-compose.yml,以及Dockerfile是容器部署文件。
然后在文件本地目录运行命令行等待容器部署完成。
docker compose up -d && docker compose logs -f
然后运行的结果如下图所示表示项目成功启动,信息会提示是使用GPU模式运行M3模型,如果是显卡驱动加载不成功或者本机没有显卡会显示是CPU模式。
到此位置服务的全部部署工作完成,下面我们开始对知识库服务进行设置,配置的内容是把不同的模型接入FastGPT平台。
模型接入
如何把不同的模型接入FastGPT,这里就需要借助oneapi工具,我们这里需要接入的是GLM4线上模型以及BGE-M3本地向量模型。
接入第三方模型
登录oneapi后台。http://ip:3001 这个IP就是你部署fastgpt项目的主机IP地址, 账号是root密码是123456.登录后记得修改密码
平台配置模型接入
然后我们开始接入模型。我们在one api界面,
然后点击提交即可,这样就完成了BGE-M3 Embedding模型的接入,然后我们开始接入GLM4线上模型
接入GLM4的需要填写的信息如下图所示。信息填完后点击提交即可。
创建完成渠道后点击测试,测试模型是否挂载成功,
GLM4模型挂载成功如下图所示
BGE-M3模型挂载成功如下图所示,相应404就是正确的。
如何获取智普的GLM4 api key(如果已经知道怎么操作的略过这一步)
首先登录智普官网,然后在查看API KEY处获取KEY,要是没有账号,直接手机注册一个就可以了。
获取KEY后,填入上面的密钥栏中即可。
然后我们创建one api的汇总令牌给fastgpt 调用,如下图所示。
生成完成后,我们把这个令牌复制到Fastgpt项目中。
修改 项目目录下的docker-compose.yml 文件
然后在模型的配置文件中,我们需要做如下修改,模型配置文件是config.json这个文件
大语言模型的配置信息,你在One api平台上添加了多少个模型,在这个配置文件中,就添加多少个模型信息。以下是我的模型配置文件,仅供参考。
"vectorModels": [
{
"model": "bge-m3",
"name": "M3(本地EMB模型)",
"avatar": "/imgs/model/openai.svg",
"charsPointsPrice": 0,
"defaultToken": 700,
"maxToken": 3000,
"weight": 100,
"dbConfig": {},
"queryConfig": {}
}
],
"llmModels": [
{
"model": "glm-4",
"name": "GLM4",
"maxContext": 16000,
"avatar": "/imgs/model/openai.svg",
"maxResponse": 4000,
"quoteMaxToken": 13000,
"maxTemperature": 1.2,
"charsPointsPrice": 0,
"censor": false,
"vision": false,
"datasetProcess": true,
"usedInClassify": true,
"usedInExtractFields": true,
"usedInToolCall": true,
"usedInQueryExtension": true,
"toolChoice": true,
"functionCall": true,
"customCQPrompt": "",
"customExtractPrompt": "",
"defaultSystemChatPrompt": "",
"defaultConfig": {}
},
{
"model": "gpt-4",
"name": "gpt-4",
"avatar": "/imgs/model/openai.svg",
"maxContext": 125000,
"maxResponse": 4000,
"quoteMaxToken": 100000,
"maxTemperature": 1.2,
"charsPointsPrice": 0,
"censor": false,
"vision": false,
"datasetProcess": false,
"usedInClassify": true,
"usedInExtractFields": true,
"usedInToolCall": true,
"usedInQueryExtension": true,
"toolChoice": true,
"functionCall": false,
"customCQPrompt": "",
"customExtractPrompt": "",
"defaultSystemChatPrompt": "",
"defaultConfig": {}
},
{
"model": "moonshot-v1-128k",
"name": "moonshot-v1-128k",
"avatar": "/imgs/model/openai.svg",
"maxContext": 128000,
"maxResponse": 4000,
"quoteMaxToken": 100000,
"maxTemperature": 1.2,
"charsPointsPrice": 0,
"censor": false,
"vision": true,
"datasetProcess": false,
"usedInClassify": false,
"usedInExtractFields": false,
"usedInToolCall": false,
"usedInQueryExtension": false,
"toolChoice": true,
"functionCall": false,
"customCQPrompt": "",
"customExtractPrompt": "",
"defaultSystemChatPrompt": "",
"defaultConfig": {}
}
],
修改完模型信息后,重启容器。在docker-compose.yml 这个文件所在的目录下, 运行如下命令
docker-compose down && docker-compose up -d
然后等待容器重启成功
验证平台是否能正常接入第三方模型
我们进入fastgpt 平台,然后新建应用,看下自定义的LLM是否可选,如下图所示,自定义LLM已经可以正常选用。
然后我们看下自定义的Embedding模型
到此,自定义模型接入Fastgpt已经完成。后面,就可以开始创建你们的本地知识库了。