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

news2025/1/17 22:01:56

学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 mdtex2html

model = 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":
        break
    response, 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 = 5
   
   def prune_history(history, max_length):
       if len(history) > max_length:
           return history[-max_length:]
       return history

   def 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":
        break
    response, 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.coloradmin.cn/o/1881412.html

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

相关文章

len()函数——计算字符串长度或元素个数

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 len()函数的主要功能是获取一个&#xff08;字符、列表、元组等&#xff09;可迭代对象的长度或项目个数。其语法格式如下&#xff1a; l…

精密空气加热器负载组

小型便携式 &#xff1a;精密空气加热器&#xff08;负载组&#xff09;能够对数据中心热通道/冷通道冷却系统进行全面测试。EAK 是一款 19 英寸机架式设备&#xff08;10U 高&#xff09;&#xff0c;可轻松安装到各种标准服务器机架中。通过集成可调节的热量水平&#xff08;…

【Android面试八股文】性能优化相关面试题: 什么是内存抖动?什么是内存泄漏?

文章目录 一、什么是内存抖动?内存抖动的问题卡顿OOM(Out Of Memory)二、什么是内存泄漏(Memory Leak)?引用计数法可达性分析法一、什么是内存抖动? 在Java中,每创建一个对象,就会申请一块内存,存储对象信息; 每分配一块内存,程序的可用内存也就少一块; 当程序…

java设计模式(十二)享元模式(Flyweight Pattern)

1、模式介绍&#xff1a; 享元模式是一种结构型设计模式&#xff0c;旨在通过共享对象来有效支持大量细粒度的对象。它通过将对象的状态分为内部状态&#xff08;可共享&#xff09;和外部状态&#xff08;不可共享&#xff09;来减少内存消耗和提高性能。内部状态存储在享元对…

SpringMVC基础详解

文章目录 一、SpringMVC简介1、什么是MVC2、MVC架构模式与三层模型的区别3、什么是SpringMVC 二、HelloWorld程序1、pom文件2、springmvc.xml3、配置web.xml文件4、html文件5、执行Controller 三、RequestMapping注解1、value属性1.1、基础使用1.2、Ant风格&#xff08;模糊匹配…

详细分析Java中@RequiredArgsConstructor注解的基本知识(附Demo)

目录 前言1. 基本知识2. 源码解读3. Demo3.1 简易Demo3.2 staticName属性3.3 onConstructor属性3.4 access属性 4. AllArgsConstructor比较 前言 从源码中学习&#xff0c;事因是看到项目代码中有所引用 RequiredArgsConstructor 是 Lombok 提供的一个注解&#xff0c;用于自…

容器:deque

以下是对于deque容器知识的整理 1、构造 2、赋值 3、大小操作 4、插入 5、删除 6、数据存取 7、排序 #include <iostream> #include <deque> #include <algorithm> using namespace std; /* deque容器&#xff1a;双端数组&#xff0c;可以对头端进行插入删…

2024年06月CCF-GESP编程能力等级认证Scratch图形化编程四级真题解析

本文收录于《Scratch等级认证CCF-GESP图形化真题解析》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 一、单选题(共 10 题,每题 2 分,共 30 分) 第1题 小杨父母带他到某培训机构给他报名参加 CCF 组织的 GESP 认证考试的第 1 级,那他可以选择的认证语言有几…

树状数组——点修区查与区修点查

树状数组是一种代码量小&#xff0c;维护区间的数据结构 他可以实现&#xff1a; 1.区间修改&#xff0c;单点查询 2.单点修改&#xff0c;区间查询 当然&#xff0c;二者不可兼得&#xff0c;大人全都要的话&#xff0c;请选择线段树 前置知识&#xff1a; lowbit(x)操作…

zerotier-one自建根服务器方法四

一、简介 前面几篇文章已经写完了安装配置服务器&#xff0c;今天写一下客户端如何连接自建的服务器。 二、准备工作 准备一个有公网IP的云主机。 要稳定性、安全性、不差钱的可以使用阿里、腾讯等大厂的云服务器。 本人穷屌丝一枚&#xff0c;所以我用的是免费的“三丰云…

常见sql语句练习

Tips&#xff1a;之前查看网上的文章感觉太乱了&#xff0c;所以自己整理了一套sql语句来练习&#xff0c;主要也可以拿来应对面试&#xff0c;需要的可以自行下载练习 包含基本语句、聚合函数、模糊查询、范围查询、排序、聚合、分组、分页、子查询、索引和视图、左右连接、双…

商城积分系统的代码实现(下)-- 积分订单的退款与结算

一、接着上文 用户在消耗积分的时候&#xff0c;需要根据一定的逻辑&#xff0c;除了扣减账户的当前余额&#xff0c;还需要依次消费积分订单的余额。 private void updatePointsOrderByUse(Integer schoolId, Long userId, String pointsType, int usingPoints) {List<Po…

数字证书与PKI解析

目录 1. 什么是数字证书 2. 为什么需要数字证书 3. 数字证书的格式 4. 什么是PKI 5. PKI的组成要素组件 5.1 用户 5.2 认证机构&#xff08;CA&#xff09; 5.3 仓库 5.4 PKI的体系结构 5.4.1 层次结构模型 5.4.2 交叉证明模型 5.4.3 混合模型 1. 什么是数字证书 要…

Django任意URL跳转漏洞(CVE-2018-14574)

目录 Django介绍 URL跳转漏洞介绍 Django任意URL跳转漏洞介绍 环境搭建 防御方法 前段时间在面试时&#xff0c;问到了URL跳转漏洞&#xff0c;我没有回答好&#xff0c;下午把URL跳转漏洞学习了&#xff0c;发现也不难&#xff0c;看来还需要学习的东西很多呀&#xff0c…

burp靶场xss漏洞(中级篇)下

靶场地址 All labs | Web Security Academy 第九关&#xff1a;反射型&#xff08; 转义&#xff09; 1.在搜索框随机输入字符并用Burp抓包 2.测试不同字符在JavaScript字符串中的反映&#xff0c;发现查询结果被包裹在script标签中 而单引号会被转义为 \ 3.构造payload跳出j…

Qt开发报错:Q_INTERFACES Error: Undefined interface

1、背景 VS2019qt5.12.10 从svn拉下来的项目&#xff0c;结果报错&#xff1a; Q_INTERFACES Error: Undefined interface 之前在VS的扩展中在线安装了qt插件&#xff0c; 安装了一半&#xff0c;比较慢&#xff0c;直接强行退出了。。 后来安装了qt官网的插件。。。。 2、报…

OpenCV 调用自定义训练的 YOLO-V8 Onnx 模型

一、YOLO-V8 转 Onnx 在本专栏的前面几篇文章中&#xff0c;我们使用 ultralytics 公司开源发布的 YOLO-V8 模型&#xff0c;分别 Fine-Tuning 实验了 目标检测、关键点检测、分类 任务&#xff0c;实验后发现效果都非常的不错&#xff0c;但是前面的演示都是基于 ultralytics…

【SpringCloud】Zuul源码解析

Zuul是一个网关组件&#xff0c;是微服务的入口&#xff0c;网关会根据配置将请求转发给指定的服务。本章分析Zuul组件是如何实现请求过滤和转发的 参考源码&#xff1a;<spring-cloud.version>Hoxton.SR9</spring-cloud.version> 1、过滤 spring-cloud-netflix-…

重温react-13(嵌套路由和重定向等)

重定向和404 import React from react; import { Routes, Route, Link,NavLink ,Navigate} from react-router-dom; import Home from ./Home/Home import About from ./About/About import News from ./News/News import NotFound from ./NotFound/NotFound; export default …

51单片机第18步_将TIM0用作13位定时器

本章重点学习将TIM0用作13位定时器。 1、定时器0工作在模式0框图 2、定时器0工作在模式0举例 1、Keil C51中有一些关键字&#xff0c;需要牢记&#xff1a; interrupt 0&#xff1a;指定当前函数为外部中断0&#xff1b; interrupt 1&#xff1a;指定当前函数为定时器0中断…