部署 ChatGLM3:从0开始实现聊天机器人

智谱AI在2023中国计算机大会(CNCC)上推出了全自研的第三代基座大模型ChatGLM3,ChatGLM3 语言模型作为人工智能助手,可以用于回答问题、提供建议和执行任务等。本文将介绍如何基于 ChatGLM3 搭建客户端,从0开始实现一个聊天机器人。

ChatGLM3 介绍

ChatGLM3 基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型 GLM2 开发而成,可以针对用户的问题和要求提供适当的答复和支持,同时在各个任务上相比 ChatGLM2 都有了很大的提升。

ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:

  1. 更强大的基座:
  • 全新设计的Prompt格式,在不影响模型通用能力的情况下,全方面增强 chatglm3-6b 能力
  • 在语义、 数学、推理、代码、知识等不同角度的数据集上表现出色
  • 44个中英文公开数据集测试国内第一
  1. 更强大的功能:
  • 全新设计的 Prompt 格式,在不影响模型通用能力的情况下,全方面增强 ChatGLM3-6B 能力
  • 原生支持工具调用(Function Call) 代码执行(Code Interpreter) 以及 Agent 任务

目前 ChatGLM3-6B 已经开源,包括:ChatGLM3-6B、ChatGLM3-6B-Base、ChatGLM3-6B-32K,相关参数及链接如下:

Model Seq Length Download 1 Download 2
ChatGLM3-6B 8k HuggingFace ModelScope
ChatGLM3-6B-Base 8k HuggingFace ModelScope
ChatGLM3-6B-32K 32k HuggingFace ModelScope

GPU 资源要求:

量化等级 生成 8k 长度的最小显存
FP16 15.9 GB
INT8 11.1 GB
INT4 8.5 GB

CPU 资源要求:

如果 GPU 不满足,可以考虑 CPU,需要 32GB 或以上内存大小,但是推理速度很慢。

ChatGLM3 部署

一、准备工作

  1. 本项目需要 Python 3.10 或更高版本:
ini 复制代码
conda create -n ChatGLM3 python=3.10
conda activate ChatGLM3
  1. 安装依赖:
  • 较好推理性能:transformers 库版本 4.30.2torch 库版本 2.0及以上

  • 注意下载与 CUDA 版本对应的 PyTorch,推荐组合:torch2.0.1+CUDA11.8

    ini 复制代码
    pip install torch==2.0.1+cu118 --index-url https://download.pytorch.org/whl/cu118
    pip install -r requirements.txt
  • 多显卡需要安装accelerate

    pip install accelerate
    
  1. Jupyter 内核: 如果使用 Code Interpreter 还需要安装 Jupyter 内核:
css 复制代码
ipython kernel install --name ChatGLM3 --user

二、下载框架与模型

框架地址:

本项目使用:ChatGLM3/composite_demo

bash 复制代码
git clone https://github.com/THUDM/ChatGLM3.git

模型地址:

bash 复制代码
git lfs clone https://huggingface.co/THUDM/chatglm3-6b

三、部署配置

(在ChatGLM3/composite_demo路径下操作) GPU:

  1. 模型权重
    指定本地下载的模型权重,避免在线下载模型
    编辑client.py文件:
ini 复制代码
MODEL_PATH = os.environ.get('MODEL_PATH', 'chatglm3-6b路径')
  1. 多显卡部署(可选)
ini 复制代码
from utils import load_model_on_gpus
model = load_model_on_gpus("chatglm3-6b路径", num_gpus=显卡数)
  1. CPU 部署(不建议)
ini 复制代码
model = AutoModel.from_pretrained("chatglm3-6b路径", trust_remote_code=True).float()
  1. 预设提示词 可以预先为大模型指定规则、场景、角色等要求 编辑main.py文件:
ini 复制代码
DEFAULT_SYSTEM_PROMPT = '''
提示词内容
'''.strip()

四、启动

默认在 8501 端口运行

方法一、基于 Gradio

  • 前台:python web_demo.py
  • 后台:python web_demo.py > /mnt/workspace/log/ChatGLM3_composite.log 2>&1 &

方法二、基于 streamlit

  • 前台:streamlit run main.py
  • 后台:streamlit run main.py > /mnt/workspace/log/ChatGLM3_composite.log 2>&1 &

ChatGLM3 客户端拥有三种模式:

  • Chat: 对话模式,在此模式下可以与模型进行对话。
  • Tool: 工具模式,模型除了对话外,还可以通过工具进行其他操作。
  • Code Interpreter: 代码解释器模式,模型可以在一个 Jupyter 环境中执行代码并获取结果,以完成复杂任务。

需要注意,在 Code Interpreter 模式中,代码解释器环境调用本地的 Jupyter,执行环境没有隔离,在多用户使用的场景下其实使用的是同一个环境,会导致混淆。

五、内网穿透

在本地部署 ChatGLM3,如果想在互联网环境可以访问,那么就可以选择通过内网穿透方法来实现。

这里介绍 ngrok 工具:

  • 官网:ngrok.com/
  • 连接用户:
    • ./ngrok authtoken [Your Authtoken]
  • 绑定端口:
    • ./ngrok http 8501

使用客户端

一、对话模型

对话模式下,用户可以直接在侧边栏修改 top_p, temperature, System Prompt 等参数来调整模型的行为。

其中:

  • top_p: 通常设置为较高的值(如 0.75),目的是限制可能被采样的低概率 token 的长度
  • temperature: 数值越大思维越发散;数值越小越收敛
  • System Prompt: 预设提示词,可以指定场景、用途、角色等

二、工具模式

可以通过在 tool_registry.py 中注册新的工具来增强模型的能力。只需要使用 @register_tool 装饰函数即可完成注册。对于工具声明,函数名称即为工具的名称,函数 docstring 即为工具的说明;对于工具的参数,使用 Annotated[typ: type, description: str, required: bool] 标注参数的类型、描述和是否必须。

三、代码解释器模式

由于拥有代码执行环境,此模式下的模型能够执行更为复杂的任务,例如绘制图表、执行符号运算等等。模型会根据对任务完成情况的理解自动地连续执行多个代码块,直到任务完成。因此,在这一模式下,只需要指明希望模型执行的任务即可。

其他操作

  • 在模型生成文本时,可以通过页面右上角的 Stop 按钮进行打断。
  • 刷新页面即可清空对话记录。

结语

通过部署客户端,可以对 ChatGLM3 有一个全面的认识和了解,同时也收获了一个可交互的聊天机器人,后面可以继续探索更深入的应用场景。

相关推荐
湫ccc1 小时前
《Opencv》基础操作详解(3)
人工智能·opencv·计算机视觉
Jack_pirate1 小时前
深度学习中的特征到底是什么?
人工智能·深度学习
微凉的衣柜1 小时前
微软在AI时代的战略布局和挑战
人工智能·深度学习·microsoft
GocNeverGiveUp1 小时前
机器学习1-简单神经网络
人工智能·机器学习
Schwertlilien2 小时前
图像处理-Ch2-空间域的图像增强
人工智能
智慧化智能化数字化方案2 小时前
深入解读数据资产化实践指南(2024年)
大数据·人工智能·数据资产管理·数据资产入表·数据资产化实践指南
哦哦~9212 小时前
深度学习驱动的油气开发技术与应用
大数据·人工智能·深度学习·学习
智慧化智能化数字化方案2 小时前
120页PPT讲解ChatGPT如何与财务数字化转型的业财融合
人工智能·chatgpt
矩阵推荐官hy147623 小时前
短视频矩阵系统种类繁多,应该如何对比选择?
人工智能·python·矩阵·流量运营
kida_yuan3 小时前
【从零开始】10. RAGChecker 提升回答准确率(番外篇)
人工智能