Package: nonebot-plugin-chatglm
nonebot-plugin-chatglm✨ NoneBotChatGLM-6B支持插件 ✨介绍使用ChatGLM-6B为后端，NoneBot2为平台的极其简单的本地中文（汉语） AI chat 插件。首次加载等待时间视 Hugging Face 下载速度而定。更新说明如有其他功能需求或疑问，欢迎提 issues，当然如果您实现了某些功能或修复了问题，也非常欢迎您提 PR。待办限制记忆轮数（在抄了，在抄了）图片输出功能（nonebot-plugin-htmlrender）（在抄了，在抄了）管理员在线配置增加写入读取本地配置文件（json）以实现配置的在线热更新@[Bot] 机器人 使用功能（调试阶段，我个人不太需要，不过后续加上吧）办结/功能完善的默认配置，开箱即用。模型自动下载并存放到指定位置（HuggingFace Hub 提供）保存对话记录以实现多轮对话冷却时间（根据测试效果，默认 30 秒）配置角色功能，基本实现环境要求量化等级推理微调策略无CPU.float()FP16（无量化）13GB 显存14GB.half().cuda()INT88GB 显存9GB.half().quantize(8).cuda()INT46GB 显存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 以外的软件环境CUDAWindows：见CUDA 官方文档 | 英文Linux：见CUDA 官方文档 | 英文PyTorch见PyTorch 官方导引插件（一）使用 nb-cli 安装与更新在 nonebot2 项目的根目录下打开命令行，输入以下指令即可安装nbplugininstallnonebot-plugin-chatglm--upgrade（二）使用包管理器安装与更新1、在 nonebot2 项目的插件目录下，打开命令行，根据你使用的包管理器，输入相应的安装命令：pippipinstallnonebot-plugin-chatglmpdmpdmaddnonebot-plugin-chatglmpoetrypoetryaddnonebot-plugin-chatglmcondacondainstallnonebot-plugin-chatglm2、打开 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.73GBChatGLM-6B-INT4INT4: GLM Block4.06GBChatGLM-6B-INT4-QEINT4: GLM Block, Embedding, LM Head3.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 路径（用户名/仓库）。自动下载后转移模型到指定路径fromtransformersimportAutoTokenizer,AutoModelmodel_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。模型更新与其他使用模型的具体使用，还请关注原仓库说明，提交检测 →运行所需依赖如果使用 pip 安装，实际已经自动安装了以下依赖，在此说明是为了方便检查1、模型所需的依赖ChatGLM 推理pipinstall-Uprotobuftransformers>=4.23.1cpm_kernelssentencepieceChatGLM 微调pipinstall-Urouge_chinesenltkjiebadatasets2、NoneBot运行所需依赖安装这个插件，那必然是已经有了NoneBot项目，或者移步去NoneBot2查看。由于还不会根据项目自动切换适配器，因此需要安装nonebot-adapter-onebot，以便调用Onebotv11进行通信。配置在 nonebot2 项目的.env或.env.prod或.env.dev（根据实际选择）文件中添加下表中的配置。默认情况下，无需添加配置即可启用。配置项必填类型默认值说明chat_mode否strcpu运行模式，cuda 或 cpuchatglm_model否str"./data/chatglm/model"chatglm 模型及其配置文档路径chatglm_path否str"./data/chatglm/"插件相关中间文件保存路径chatglm_cmd否list[str]["hi"]对话命令chat_cd否int30冷却时间，避免高频调用chatglm_memo否int5保存对话轮数如果要较好的使用，强烈建议将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参考与致谢基础@A-kirami，项目使用了 README模板，有修改ChatGLM-6B，模型和使用方法来源，一切的核心nonebot2，一切的基础功能nonebot-plugin-novelai，学习的对象，cd 使用来自于此nonebot-plugin-ChatGLM6B，与本项目相似，但本项目从中学习转图片、对话记忆。ChatGLM-6B API、ChatGLM-webui