昇思大模型平台打卡体验活动:项目8基于MindSpore实现ChatGLM4聊天机器人

embedded/2024/11/13 14:59:16/

进入大模型平台,只需要运行即可,可以改输入。

ChatGLM4:使用MindSpore进行聊天机器人开发

本文档提供了使用MindSpore和MindNLP部署和推理ChatGLM4聊天机器人模型的详细步骤,帮助用户搭建一个可以与ChatGLM4互动的对话系统。

前置条件

确保您具备以下环境和工具:

  1. Python 环境:建议使用Python 3.9或更高版本。
  2. MindSpore:本文代码基于MindSpore框架。
  3. MindNLP:MindSpore的自然语言处理工具包。

安装依赖

首先,安装所需的依赖包,如tiktoken,用于高效的分词。运行以下命令:

!pip install tiktoken

安装完成后,终端将输出如下信息:

Looking in indexes: https://repo.huaweicloud.com/repository/pypi/simple/
Collecting tiktoken
Downloading https://repo.huaweicloud.com/repository/pypi/packages/f7/01/...
...
Successfully installed tiktoken-0.8.0

加载模型和分词器

为了使用ChatGLM4,我们需要加载分词器和模型。分词器用于处理输入文本,模型则根据输入生成相应的回答。

第一步:导入库

首先,导入必要的库和模块。

import mindspore
from mindnlp.core import no_grad
from mindnlp.transformers import AutoModelForCausalLM, AutoTokenizer
from mindspore._c_expression import _framework_profiler_step_start
from mindspore._c_expression import _framework_profiler_step_end

第二步:加载分词器

使用AutoTokenizer加载ZhipuAI/glm-4-9b-chat的分词器,以便将输入文本转化为模型可处理的格式。

# 加载分词器
tokenizer = AutoTokenizer.from_pretrained("ZhipuAI/glm-4-9b-chat", mirror='modelscope')

第三步:准备用户输入

定义想与ChatGLM4互动的文本查询。在此示例中,我们使用简单的问候语。

# 输入希望与ChatGLM4对话的内容
query = "你好"# 准备模型输入
inputs = tokenizer.apply_chat_template([{"role": "user", "content": query}],add_generation_prompt=True,tokenize=True,return_tensors="ms",return_dict=True
)
print(inputs)  # 输出查看输入内容和格式是否正确

第四步:加载ChatGLM4模型

接下来,加载ChatGLM4模型。我们使用AutoModelForCausalLM类加载模型并将其设为评估模式(.eval()),以便进行推理。

# 加载模型
model = AutoModelForCausalLM.from_pretrained("ZhipuAI/glm-4-9b-chat",mirror='modelscope',ms_dtype=mindspore.float16,
).eval()

生成回答

分词器和模型加载完成后,就可以生成模型对用户问题的回答。

第五步:设置生成参数并进行推理

定义生成参数以控制模型输出,包括max_lengthtop_k等参数,影响生成回答的长度和多样性。

# 设置采样、最大生成长度等参数
gen_kwargs = {"max_length": 100, "do_sample": True, "top_k": 1}# 开始性能分析(可选)
# _framework_profiler_step_start()# 推理生成回答
with no_grad():outputs = model.generate(**inputs, **gen_kwargs)outputs = outputs[:, inputs['input_ids'].shape[1]:]print(tokenizer.decode(outputs[0], skip_special_tokens=True))# 结束性能分析(可选)
# _framework_profiler_step_end()

输出示例

运行以上代码后,模型会基于用户输入生成回答。以下为示例输出:

对于query = "你好"的输入,可能会得到如下输出:

你好!有什么我可以帮助您的吗?

注意事项

  • 警告信息:如果遇到关于numpy子正常值的警告信息,这些一般是无害的,与系统配置相关。
  • 性能分析_framework_profiler_step_start()_framework_profiler_step_end()用于性能分析,使用时请去掉注释。

总结

本文档详细介绍了如何使用MindSpore和MindNLP搭建ChatGLM4聊天机器人系统。通过本文的步骤,您可以实现与模型的互动,非常适用于聊天机器人系统、客服自动化以及虚拟助理等应用场景。

欢迎尝试不同的输入内容,并调整生成参数,以使模型的回答更符合您的需求。

image.png

我们得到的结果如下
image.png


http://www.ppmy.cn/embedded/136915.html

相关文章

Qt 项目架构设计

在开发一个 Qt 项目时,合理的文件夹结构和清晰的构建流程是非常重要的。Qt 项目通常需要管理源代码、UI 文件、资源文件、构建脚本等。下面我会给出一个详细的文件夹结构示例,并解释每个部分的作用及如何设计 Makefile 或使用 Qt 的 qmake 来自动化构建过…

【HarmonyOS NEXT】一次开发多端部署(以轮播图、Tab栏、列表为例,配合栅格布局与媒体查询,进行 UI 的一多开发)

关键词:一多、响应式、媒体查询、栅格布局、断点、UI 随着设备形态的逐渐增多,应用界面适配也面临着很大问题,在以往的安卓应用开发过程中,往往需要重新开发一套适用于大屏展示的应用,耗时又耗力,而鸿蒙提供…

int socket(int domain,int type,int protocol);

本文内容产生自智谱清言 头文件&#xff1a; #include <sys/socket.h> int socket(int domain,int type,int protocol); 它是在C语言中使用的一个系统调用函数&#xff0c;用于创建一个新的套接字。套接字是支持TCP/IP协议的网络通信的端点&#xff0c;可以看作是不同…

ubuntu ros 解决建完图后 保存的地图非常小的问题

解决建完图后 保存的地图非常小的问题 在ROS中使用Gmapping等SLAM算法建图后&#xff0c;如果保存的地图非常小&#xff0c;通常是由于建图过程中的分辨率设置不当或地图边界没有覆盖到整个环境导致的。以下是详细的解决方案和具体步骤&#xff1a; 解决方案概述 调整地图分…

阿里云aliyun gradle安装包下载地址

阿里云 查找你要下载的安装包 macports-distfiles-gradle安装包下载_开源镜像站-阿里云 https://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.9-bin.zip 腾讯 https://mirrors.cloud.tencent.com/gradle/ https://mirrors.cloud.tencent.com/gradle/ https…

win32com库基于wps对Word文档的基础操作

win32com库基于wps对Word文档的基础操作 文章目录 win32com库基于wps对Word文档的基础操作新建/打开文档段落操作(Paragraph)字体设置(Font)图表操作(Shape) 参考链接: WAS API手册 新建/打开文档 import win32com import win32com.client as win32 # 启动WPS进程 word_obj …

LangChain Ollama实战文献检索助手(二)少样本提示FewShotPromptTemplate示例选择器

本期是用样例来提示大模型生成我们想要的答案。即在输入中给定提示的样例&#xff0c;以及提示模板&#xff0c;然后匹配较相关的样例进行文献综述。 创建示例样本FewShotPromptTemplate 这里我用GTP-o1生成了几个回答&#xff0c;作为样本 samples [{"theme": &…

力扣 LeetCode 59. 螺旋矩阵II

解题思路&#xff1a; 使用左开右闭进行四个边的循环赋值 每次进入新的内圈&#xff0c;需要注意起始位置startx和starty的变化&#xff0c;以及边界n - offset的变化 分奇偶圈&#xff0c;判断为奇数圈后需要为中心点赋一次值 class Solution {public int[][] generateMat…