Skip to main content

基于ChatGLM-6B的NoneBot2插件

Project description

nonebot
NoneBotPluginText

nonebot-plugin-chatglm

✨ NoneBot ChatGLM-6B 支持插件 ✨

python Code Style pre-commit.ci status pdm-managed PyPI PyPI - Downloads nonebot onebot licese FOSSA Status

介绍

使用 ChatGLM-6B 为后端,NoneBot2 为平台的极其简单的本地中文(汉语) AI chat 插件。

首次加载等待时间视 Hugging Face 下载速度而定。

更新说明

如有其他功能需求或疑问,欢迎提 issues,当然如果您实现了某些功能或修复了问题,也非常欢迎您提 PR。

待办

  • 限制记忆轮数(在抄了,在抄了
  • 图片输出功能(nonebot-plugin-htmlrender)(在抄了,在抄了
  • 管理员在线配置
    • 增加写入读取本地配置文件(json)以实现配置的在线热更新
  • @[Bot] 机器人 使用功能(调试阶段,我个人不太需要,不过后续加上吧)

办结/功能

  • 完善的默认配置,开箱即用。
  • 模型自动下载并存放到指定位置(HuggingFace Hub 提供)
  • 保存对话记录以实现多轮对话
  • 冷却时间(根据测试效果,默认 30 秒)
  • 配置角色功能,基本实现

环境要求

量化等级 推理 微调 策略
CPU .float()
FP16(无量化) 13GB 显存 14GB .half().cuda()
INT8 8GB 显存 9GB .half().quantize(8).cuda()
INT4 6GB 显存 7GB .half().quantize(4).cuda()
INT4 模型 5.2GB 显存 .half().cuda()
INT4-QE 模型 4.3GB 显存 .half().cuda()

现在默认使用 CPU 推理,方便开箱即用,但速度较慢。

硬件需求上:训练>微调>推理,但本插件仅考虑推理应用场景。

none-adapter-onebot 要求 Python 3.8+

安装与更新

软件环境

指除去 Python 和 nonebot 以外的软件环境

CUDA

PyTorch

PyTorch 官方导引

插件

(一)使用 nb-cli 安装与更新

在 nonebot2 项目的根目录下打开命令行,输入以下指令即可安装

nb plugin install nonebot-plugin-chatglm --upgrade
(二)使用包管理器安装与更新 1、在 nonebot2 项目的插件目录下,打开命令行,根据你使用的包管理器,输入相应的安装命令:
pip
pip install nonebot-plugin-chatglm
pdm
pdm add nonebot-plugin-chatglm
poetry
poetry add nonebot-plugin-chatglm
conda
conda install nonebot-plugin-chatglm

2、打开 nonebot2 项目根目录下的 pyproject.toml 文件,在 [tool.nonebot] 部分追加写入

plugins = ["nonebot_plugin_chatglm"]

配置与依赖

ChatGLM 模型

模型简介:ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,基于 General Language Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。 ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。

选择模型

ChatGLM-6B 系列模型

模型名称 量化情况 权重大小
ChatGLM-6B 13.73GB
ChatGLM-6B-INT4 INT4: GLM Block 4.06GB
ChatGLM-6B-INT4-QE INT4: GLM Block, Embedding, LM Head 3.13GB
  • 如果是较小显存(< 10 G)且只用聊天对话模型(ChatGLM-6B-INT4-QE)[^1] 则没用必要修改。
  • 如果使用 6B 完整模型,则可以自行设置路径。

[^1]: 在其他位置配置量化后的 INT4 模型,发生一些编译错误,暂时懒得没有能力解决。

下载模型

默认使用HuggingFace Hub加载,即如果没有设置路径,则会自动下载到用户目录下的.cache/huggingface/modules/transformers_modules/THUDM/chatglm-6b-int4-qe,可以通过下面的代码转移模型。

自动下载:

  • 无需设置,默认下载ChatGLM-6B-INT4-QE模型
  • .env文件中增加chatglm_model = str,其中 str 为字符串格式的 Hugging Face Hub 路径(用户名/仓库)。

自动下载后转移模型到指定路径

from transformers import AutoTokenizer, AutoModel
model_name = input("HF HUB 路径,例如 THUDM/chatglm-6b-int4-qe: ")
model_path = input("本地存放路径,例如 ./path/modelname: ")
#用 AutoModel.from_pretrained() 下载模型
tokenizer = AutoTokenizer.from_pretrained(model_name,trust_remote_code=True,revision="main")
model = AutoModel.from_pretrained(model_name,trust_remote_code=True,revision="main")
#用 PreTrainedModel.save_pretrained() 保存模型到指定位置
tokenizer.save_pretrained(model_path,trust_remote_code=True,revision="main")
model.save_pretrained(model_path,trust_remote_code=True,revision="main")

手动下载:

  • 清华云盘(仅模型文件,是 6B 完整模型,显存较小需要量化使用,暂未设置,需要自行在chat.py文件中修改)
  • 🤗 Hugging Face(完整文件),约 4.2 GB。

模型更新与其他使用

模型的具体使用,还请关注 原仓库说明,提交检测 →GitHub last commit

运行所需依赖

如果使用 pip 安装,实际已经自动安装了以下依赖,在此说明是为了方便检查

1、模型所需的依赖

ChatGLM 推理

pip install -U protobuf transformers>=4.23.1 cpm_kernels sentencepiece

ChatGLM 微调

pip install -U rouge_chinese nltk jieba datasets

2、NoneBot运行所需依赖

安装这个插件,那必然是已经有了NoneBot项目,或者移步去 NoneBot2 查看。由于还不会根据项目自动切换适配器,因此需要安装nonebot-adapter-onebot,以便调用Onebotv11进行通信。

配置

在 nonebot2 项目的.env.env.prod.env.dev(根据实际选择)文件中添加下表中的配置。默认情况下,无需添加配置即可启用。

配置项 必填 类型 默认值 说明
chat_mode str cpu 运行模式,cuda 或 cpu
chatglm_model str "./data/chatglm/model" chatglm 模型及其配置文档路径
chatglm_path str "./data/chatglm/" 插件相关中间文件保存路径
chatglm_cmd list[str] ["hi"] 对话命令
chat_cd int 30 冷却时间,避免高频调用
chatglm_memo int 5 保存对话轮数

如果要较好的使用,强烈建议将chat_mode设置为cuda

正常聊天使用来说,30 秒冷却较为合适;复杂问题聊天,60 秒较为合适。建议根据实际测试进行调整。

附加文件

(在基本功能完善后放出,在此之前,可以自建尝试)

roles 格式

{
  "catgirl":"猫娘是一种拟人化的生物,其行为似猫但类人。现在你将模仿一只猫娘,与我对话每一句话后面都要加上“喵~”,如果你能明白我的意思,请回复“喵~好的我的主人!”如果你不能理解我说的话,你可以说“呜呜不太理解呢”。",
}

ChatGLM 可能发生记忆遗失,因此在进行角色扮演时,不要提问复杂内容。

simple 格式

示例如下

{
    r"你好 [吗]?|hello": "您好,很高兴与您在此相遇,但是您想问什么呢?",
    r"你是 [谁?]?": "我是 ChatGLM,一个参数 62 亿的人工智能语言模型,由清华大学和智谱 AI 训练开源,代号 ChatGLM-6B",
    r"你的(主人|master) 是 [谁?]?": f"[CQ:at,qq={superusers}]",
}

使用

指令表

指令 权限 需要@ 范围 说明
hi 所有人 私聊/群聊 与 chatglm 对话
清空记录 所有人 私聊/群聊 清空自己的对话历史记录
导出记录 所有人 群聊 导出记录文件到群中
清理全部 超级管理员 私聊 手动处理out of memory

参考与致谢

基础

功能

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nonebot-plugin-chatglm-0.1.6.tar.gz (17.7 kB view hashes)

Uploaded Source

Built Distribution

nonebot_plugin_chatglm-0.1.6-py3-none-any.whl (14.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page