智谱AI在2023中国计算机大会(CNCC)上推出了全自研的第三代基座大模型ChatGLM3,ChatGLM3 语言模型作为人工智能助手,可以用于回答问题、提供建议和执行任务等。本文将介绍如何基于 ChatGLM3 搭建客户端,从0开始实现一个聊天机器人。
ChatGLM3 介绍
ChatGLM3 基于清华大学 KEG 实验室和智谱 AI 公司于 2023 年共同训练的语言模型 GLM2 开发而成,可以针对用户的问题和要求提供适当的答复和支持,同时在各个任务上相比 ChatGLM2 都有了很大的提升。
ChatGLM3-6B 是 ChatGLM3 系列中的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:
- 更强大的基座:
- 全新设计的Prompt格式,在不影响模型通用能力的情况下,全方面增强 chatglm3-6b 能力
- 在语义、 数学、推理、代码、知识等不同角度的数据集上表现出色
- 44个中英文公开数据集测试国内第一
- 更强大的功能:
- 全新设计的 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 部署
一、准备工作
- 本项目需要 Python 3.10 或更高版本:
ini
conda create -n ChatGLM3 python=3.10
conda activate ChatGLM3
- 安装依赖:
-
较好推理性能:
transformers
库版本4.30.2
,torch
库版本2.0及以上
-
注意下载与 CUDA 版本对应的 PyTorch,推荐组合:
torch2.0.1
+CUDA11.8
inipip install torch==2.0.1+cu118 --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt
-
多显卡需要安装
accelerate
pip install accelerate
- 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:
- 模型权重
指定本地下载的模型权重,避免在线下载模型
编辑client.py
文件:
ini
MODEL_PATH = os.environ.get('MODEL_PATH', 'chatglm3-6b路径')
- 多显卡部署(可选)
ini
from utils import load_model_on_gpus
model = load_model_on_gpus("chatglm3-6b路径", num_gpus=显卡数)
- CPU 部署(不建议)
ini
model = AutoModel.from_pretrained("chatglm3-6b路径", trust_remote_code=True).float()
- 预设提示词 可以预先为大模型指定规则、场景、角色等要求 编辑
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 有一个全面的认识和了解,同时也收获了一个可交互的聊天机器人,后面可以继续探索更深入的应用场景。