GLM4实践-GLM4智能体的本地化实现及部署

本文介绍了如何使用FastGPT项目结合Bge-m3模型的Openai-api风格容器,提升本地知识库的Embedding性能,以解决GLM4智能体知识库限制和线上API问题,提供低成本的企业级知识库部署方案。
摘要由CSDN通过智能技术生成

本项目使用的服务有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官方部署文档地址:

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 大文件管理工具。

模型地址

bge-m3

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,要是没有账号,直接手机注册一个就可以了。

智谱AI开放平台

获取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已经完成。后面,就可以开始创建你们的本地知识库了。

  • 16
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,你需要下载 Chat-GLM-6B-Int4 模型文件和相应的配置文件。然后,你需要在你的 Linux 系统上安装 PyTorch 和 Transformers 库。你可以使用以下命令安装这两个库: ``` pip install torch pip install transformers ``` 接下来,你需要编写一个 Python 脚本来部署 Chat-GLM-6B-Int4 模型。你可以使用以下代码作为脚本的基础: ```python import torch from transformers import GPT2Tokenizer, GPT2LMHeadModel # 加载模型和分词器 tokenizer = GPT2Tokenizer.from_pretrained('chat-glm-6b-int4/config') model = GPT2LMHeadModel.from_pretrained('chat-glm-6b-int4/model') # 指定设备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) # 对话循环 while True: # 获取用户输入 user_input = input("You: ") # 把用户输入转换成模型的输入格式 input_ids = tokenizer.encode(user_input, return_tensors='pt').to(device) # 在模型上生成回复 output = model.generate(input_ids, max_length=1000, do_sample=True, temperature=0.7) response = tokenizer.decode(output[0], skip_special_tokens=True) # 输出回复 print("Chat-GLM-6B-Int4: " + response) ``` 在这个脚本中,我们首先加载 Chat-GLM-6B-Int4 模型和相应的分词器。然后,我们检查可用的设备并将模型移动到相应的设备上。最后,我们开始一个对话循环,其中用户输入被转换为模型的输入格式,并在模型上生成回复。回复被解码并输出给用户。 注意,这个脚本只是一个基础示例,你需要根据你的具需求进行修改。例如,你可能需要添加一个 Web 接口来允许用户通过浏览器与 Chat-GLM-6B-Int4 进行交互。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值