昇思25天学习打卡营第13天|MindNLP ChatGLM-6B StreamChat

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com)

MindNLP ChatGLM-6B StreamChat

本案例基于MindNLP和ChatGLM-6B实现一个聊天应用。

1 环境配置

%%capture captured_output
# 实验环境已经预装了mindspore==2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号
!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.2.14
!pip install mindnlp
!pip install mdtex2html

配置网络线路

!export HF_ENDPOINT=https://hf-mirror.com

2 代码开发

下载权重大约需要10分钟

from mindnlp.transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import gradio as gr
import mdtex2htmlmodel = AutoModelForSeq2SeqLM.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope").half()
model.set_train(False)
tokenizer = AutoTokenizer.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope")

   model.chat 是 ChatGLM-6B 模型自带的方法,用于生成对话。这个方法接受输入的 prompt(即用户输入的初始文本)及其相关参数,并返回生成的响应。

   tokenizer 是一个文本标记器(tokenizer),用于将文本字符串转换成模型可以处理的格式,并且将模型的输出转换回可读文本。具体来说,tokenizer 会将输入的 prompt 转换成 token ids,并在生成响应后将生成的 token ids 转换回文本。token ids 是一组数字,代表原始文本中的每个单词或符号。比如,'你好' 可能会被转换为 [12345, 67890] 这样的 token 序列。 一旦模型生成了响应的 token 序列,`tokenizer` 会将这些 token ids 转换回人类可读的文本。这就是最终的响应。

可以修改下列参数和prompt体验模型

prompt = '你好'
history = []
response, _ = model.chat(tokenizer, prompt, history=history, max_length=20)
response

   prompt 是用户提供的输入文本,它是此次对话的起点。例如,在这段代码中,prompt 是 '你好'。

   history 是一个列表,存储了之前所有的对话记录。有了这个历史记录,模型可以生成与上下文相关的响应。这在进行连续对话时特别有用。

   max_length 参数表示生成的响应的最大长度。这里的 20 指定响应最多包含 20 个 token。

response 会被赋值为模型生成的文本。这就是模型对当前 prompt 和 history 的回答。 _ 表示另一个未使用的返回值,通常是生成过程中使用的一些调试信息或其他数据。

其他测试

def chat_with_bot(prompt, history=[]):response, history = model.chat(tokenizer, prompt, history=history, max_length=50)return response, history
while True:user_input = input("你: ")if user_input.lower() == "exit":breakresponse, history = chat_with_bot(user_input, history)print(f"ChatGLM-6B: {response}")
print(f"history: {history}")
你:  1
ChatGLM-6B: Hello! How can I assist you today?
你:  2
ChatGLM-6B: I\'m sorry, could you please provide more context about what you
你:  3
ChatGLM-6B: I
你:  4
ChatGLM-6B: need
你:  5
ChatGLM-6B: Sure
你:  6
ChatGLM-6B: Could
你:  exit
history: [('1', 'Hello! How can I assist you today?'), ('2', "I\\'m sorry, could you please provide more context about what you"), ('3', 'I'), ('4', 'need'), ('5', 'Sure'), ('6', 'Could')]

   MAX_HISTORY_LENGTH = 5def prune_history(history, max_length):if len(history) > max_length:return history[-max_length:]return historydef chat_with_bot(prompt, history=[]):response, history = model.chat(tokenizer, prompt, history=history, max_length=50)history = prune_history(history, MAX_HISTORY_LENGTH)return response, history
while True:user_input = input("你: ")if user_input.lower() == "exit":breakresponse, history = chat_with_bot(user_input, history)print(f"ChatGLM-6B: {response}")
print(f"history: {history}")
你:  1
ChatGLM-6B: Hello! How can I assist you today?
你:  2
ChatGLM-6B: I'm sorry, could you please provide more context about what I
你:  3
ChatGLM-6B: need
你:  4
ChatGLM-6B: Thank
你:  5
ChatGLM-6B: You
你:  6
ChatGLM-6B: For
你:  今天天气怎么样?
ChatGLM-6B: I
你:  谢谢
ChatGLM-6B: 
你:  exit
history: [('4', 'Thank'), ('5', 'You'), ('6', 'For'), ('今天天气怎么样?', 'I'), ('谢谢', '')]

from mindnlp.transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import mindspore
import gradio as gr
import mdtex2html# 加载模型和分词器
model = AutoModelForSeq2SeqLM.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope").half()
model.set_train(False)
tokenizer = AutoTokenizer.from_pretrained('ZhipuAI/ChatGLM-6B', mirror="modelscope")# 定义提示和历史
prompt = '你好'
history = []# 分词并处理 attention mask
inputs = tokenizer(prompt, return_tensors="ms", padding=True)
attention_mask = inputs["attention_mask"].astype(mindspore.bool_)try:# 与模型进行对话response, _ = model.chat(tokenizer, prompt, history=history, max_length=20, attention_mask=attention_mask)print(response)print(history)
except Exception as e:print(f"Error: {e}")

Loading checkpoint shards: 100% 8/8 [00:49<00:00,  5.33s/it]

你好👋!我是人工智能助手 ChatGLM-6B
[]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/38438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[知识点篇]《计算机组成原理》之数据信息的表示

1、数据表示的作用 &#xff08;1&#xff09;定义&#xff1a;将数据按照某种方式组织&#xff0c;以便机器硬件能直接识别和使用。现代计算机采用二进制进行数据表示。 &#xff08;2&#xff09;数据表示考虑因素&#xff1a; 数据的类型&#xff1a; 数值/非数值、小数、…

读AI新生:破解人机共存密码笔记17不确定性和概率

1. 前向搜索 1.1. 通过前向搜索&#xff0c;通过考虑各种可能的动作序列的结果&#xff0c;来选择动作&#xff0c;是智能系统的基本能力 1.2. 如果一家卡车运输公司想要优化其100辆卡车在美国的运输&#xff0c;那么该公司可能需要考虑的状态数量将是10^700个 1.3. 几乎所有…

解决Install/Remove of the Service Denied报错

1、问题概述&#xff1f; 在Windows系统中安装MySQL5.7.43的时候&#xff0c;运行mysqld install命令提示报错&#xff1a;Install/Remove of the Service Denied 意思是&#xff1a;安装/删除服务被拒绝 问题原因所在&#xff1a;就是你当前的权限不够&#xff0c;以管理员…

Linux【环境 CenOS7】部分软件安装链接整理

优质博文&#xff1a;IT-BLOG-CN 一、开启网络 【问题】&#xff1a; 刚安装完CentOS&#xff0c;当ping www.baidu.com时&#xff0c;ping不通&#xff1b; 【解决】&#xff1a; 进入cd /etc/sysconfig/network-scripts/我这里修改的是ifcfg-ens33文件&#xff0c;将ONBOOT…

p2p、分布式,区块链笔记:试用ZeroTier组网

ZeroTier 是一种用于创建和管理虚拟局域网&#xff08;Virtual Local Area Network&#xff0c;VLAN&#xff09;的软件定义网络&#xff08;SDN&#xff09;解决方案。它可以通过互联网将多个设备安全地连接在一起&#xff0c;就像它们在同一个本地网络上一样。主要开发语言为…

【Python从入门到进阶】59、Pandas库中Series对象的操作(二)

接上篇《58、Pandas库中Series对象的操作(一)》 上一篇我们讲解了Pandas库中Series对象的基本概念、对象创建和操作&#xff0c;本篇我们来继续学习Series对象的运算、函数应用、时间序列操作&#xff0c;以及Series的案例实践。 一、Series对象的运算 1. 数值型数据的算术运…

1、音视频解封装流程---解复用

对于一个视频文件(mp4格式/flv格式)&#xff0c;audio_pkt或者video_pkt是其最基本的数据单元&#xff0c;即视频文件是由独立的视频编码包或者音频编码包组成的。 解复用就是从视频文件中把视频包/音频包单独读取出来保存成独立文件&#xff0c;那么如何得知packet是视频包还是…

【一篇搞懂】操作系统期末大题:进程同步与互斥 PV操作

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、正文&#xff1a;☀️☀️☀️题型一&#xff1a;利用信号量实现前驱关系题型二&#xff1a;利用信号量实现资源同步与互斥 一、前言&#x1f680;&#x1f680;&#x1f680; 本文简介&#xff1a;这是一篇基于b…

无人机远程控制:北斗短报文技术详解

无人机&#xff08;UAV&#xff09;技术的快速发展和应用&#xff0c;使得远程控制成为了一项关键技术。无人机远程控制涉及无线通信、数据处理等多个方面&#xff0c;其中北斗短报文技术以其独特的优势&#xff0c;在无人机远程控制领域发挥着重要作用。本文将详细解析无人机远…

2024-06-26 base SAS programming 学习笔记6(proc report)

proc report可以生成报表&#xff0c;基本格式&#xff1a; proc report data options; (options 可以是windows/WD表示将结果输出至单独的报表窗口&#xff0c;或者nowindows/nowd将结果输出至HTML结果窗口) column variables ;(筛选待输出的变量&#xff0c;变量名与变量名之…

09_计算机网络模型

目录 OSI/RM七层模型 OSI/RM七层模型 各层介绍及硬件设备 传输介质 TCP/IP协议簇 网络层协议 传输层协议 应用层协议 完整URL的组成 IP地址表示与计算 分类地址格式 子网划分和超网聚合 无分类编址 特殊含义的IP地址 IPv6协议 过渡技术 OSI/RM七层模型 OSI/RM七…

区间动态规划——最长回文子序列长度(C++)

把夜熬成粥&#xff0c;然后喝了它。 ——2024年7月1日 书接上回&#xff1a;区间动态规划——最长回文子串&#xff08;C&#xff09;-CSDN博客&#xff0c;大家有想到解决办法吗&#xff1f; 题目描述 给定一个字符串s&#xff08;s仅由数字和英文大小写字母组成&#xff0…

微积分-导数3(微分法则)

常见函数的导数 常量函数的导数 d d x ( c ) 0 \frac{d}{dx}(c) 0 dxd​(c)0 常量函数的图像是一条水平线 y c y c yc&#xff0c;它的斜率为0&#xff0c;所以我们必须有 f ′ ( x ) 0 f(x) 0 f′(x)0。从导数的定义来看&#xff0c;证明也很简单&#xff1a; f ′ …

QT拖放事件之三:自定义拖放操作-利用QDrag来拖动完成数据的传输

1、运行效果 1)Qt::MoveAction 2)Qt::CopyAction 2、源码 #include "Widget.h" #include "ui_Widget.h" #include "common.h"

二级建造师(建筑工程专业)考试题库,高效备考!!!

16.在施工合同履行期间发生的变更事项中&#xff0c;属于工程变更的是&#xff08;&#xff09;。 A.质量要求变更 B.分包单位变更 C.合同价款变更 D.相关法规变更 答案&#xff1a;A 解析&#xff1a;工程变更一般是指在工程施工过程中&#xff0c;根据合同约定对施工的…

恭贺甘露海首届道教南宗养生论坛暨天台山第十届道医大会圆满成功

6月13日&#xff0c;首届中国道教南宗养生论坛暨天台山第十届道医学术交流大会在浙江新昌重阳宫千人会场隆重开幕。 本次大会主办单位&#xff1a;天台山桐柏宫 中国民间中医医药研究开发协会道医学分会&#xff0c; 承办单位&#xff1a;新昌县重阳宫 &#xff0c;协办单位&…

网络基础:静态路由

静态路由是一种由网络管理员手动配置的路由方式&#xff0c;用于在网络设备&#xff08;如路由器或交换机&#xff09;之间传递数据包。与动态路由不同&#xff0c;静态路由不会根据网络状态的变化自动调整。 不同厂商的网络设备在静态路由的配置上有些许差异&#xff1b;下面…

网络构建关键技术_2.IPv4与IPv6融合组网技术

互联网数字分配机构&#xff08;IANA&#xff09;在2016年已向国际互联网工程任务组&#xff08;IETF&#xff09;提出建议&#xff0c;要求新制定的国际互联网标准只支持IPv6&#xff0c;不再兼容IPv4。目前&#xff0c;IPv6已经成为唯一公认的下一代互联网商用解决方案&#…

安卓开发app-基础的java项目构建补充知识

安卓开发app-基础的java项目构建补充知识&#xff01;上一次分享了基础的项目构建&#xff0c;但是还遗漏了一些基础的内容。今天补充完整。 首先&#xff0c;是关于项目的一些配置文件的信息。 第一个配置文件&#xff1a;{setting.gradle} 国内阿里云仓库地址信息&#xff1…

定制型汽车传感器在汽车中的应用

定制型汽车霍尔传感器在汽车中的应用及功能 曲轴和凸轮轴位置传感器&#xff1a; 这些传感器用于监测发动机的曲轴和凸轮轴的位置&#xff0c;帮助发动机管理系统精确控制点火时机和燃油喷射&#xff0c;提高发动机效率。 变速器控制系统&#xff1a; 在自动变速器中&#xf…