昇思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.pswp.cn/diannao/38438.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/38438.shtml
英文地址,請注明出處:http://en.pswp.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. 幾乎所有…

Linux之masscan工具安裝和使用

一、masscan簡介 Masscan是一款快速、高效且開源的端口掃描工具,被廣泛用于網絡安全領域。它的設計目標是實現極高的掃描速度,使其能夠在極短的時間內掃描整個互聯網的IPv4地址空間。以下是masscan的主要特性和功能: 極高的掃描速度:Masscan的設計目標是快速和靈活,它能夠…

網絡爬蟲的特點

網絡爬蟲的特點 網絡爬蟲的特點在于其高度的自動化、靈活性和可擴展性。這些特點使得網絡爬蟲在互聯網信息的獲取、處理和分析中發揮著舉足輕重的作用。 首先&#xff0c;網絡爬蟲的高度自動化是其最為顯著的特點之一。一旦設置好爬取的目標和規則&#xff0c;爬蟲便可以自動…

vue3記個坑關于router的特點

我的問題有一下幾點 1. router-view 在使用name進行命名 這個命名&#xff0c;我再三確定沒有命名錯誤的情況下。我的組件死活出不來。仔細排查了之后&#xff0c;也反復看了官方文檔。終于發現 <router-view name"login"></router-view>這個是路由上的…

數據賦能(134)——開發:數據轉換——技術方法、主要工具

數據類型轉換&#xff1a; 數據類型轉換包括自動類型轉換、強制類型轉換和包裝類轉換。自動類型轉換發生在兩種類型兼容且目標類型大于源類型時&#xff0c;如將整數轉換為浮點數。強制類型轉換則需要將范圍大的數據類型轉換為范圍小的數據類型&#xff0c;如將浮點數轉換為整數…

el-form表單中的el-upload的文件表單驗證

el-form表單中的el-upload的文件表單驗證 常規el-form中的表單驗證&#xff1a; el-form的el-form-item中&#xff1a; <el-form :model"ruleForm" :rules"rules" ref"ruleForm" label-width"100px" class"demo-ruleForm"…

uni-app的來龍去脈,技術要點及技術難點,語法結構及應用場景,其實前端也很難,頂級的前端比后端都重要,感覺第一,理性第二

Uni-App 的來龍去脈 Uni-App 是由 DCloud 推出的一款跨平臺前端框架&#xff0c;用于開發一次性代碼并可以同時在 iOS、Android、H5、微信小程序、支付寶小程序、百度小程序、字節跳動小程序和 QQ 小程序等多個平臺上運行的應用。Uni-App 的出現應對了移動互聯網時代多平臺應用…

解決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;就像它們在同一個本地網絡上一樣。主要開發語言為…

hadoop 3.X 分布式HA集成Kerbos(保姆級教程)

前提&#xff1a;先安裝Kerbos 1、創建keytab目錄 在每臺機器上上提前創建好對應的kertab目錄 [hadooptv3-hadoop-01 ~]$ sudo mkdir -p /BigData/run/hadoop/keytab/ [hadooptv3-hadoop-01 ~]$ sudo mkdir -p /opt/security/ [hadooptv3-hadoop-01 ~]$ sudo chown hadoop:had…

【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是視頻包還是…

指針賦值與引用傳遞:C語言的基礎知識與實踐技巧

指針賦值與引用傳遞&#xff1a;C語言的基礎知識與實踐技巧 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; **1. **引言 在C語言中&#xff0c;指針是一種強…

Vue CLI VS Vite

Vue CLI與Vite區別&#xff1a; Vue CLI與Vite之間存在明顯的區別&#xff0c;這些區別主要體現在實現原理、優化策略、開發環境速度、構建速度、依賴關系分析和插件系統等方面。以下是關于Vue CLI和Vite區別的詳細分析&#xff1a; 實現原理&#xff1a; Vue CLI&#xff1a…

【Spring Boot】Spring Boot簡介

1、概述 Spring Boot是一個用于創建獨立、生產級別的基于Spring的應用程序的開發框架。旨在簡化Spring應用的初始搭建和開發過程。它通過自動配置和大量默認配置&#xff0c;使得開發者能夠快速搭建一個獨立的Spring應用&#xff0c;無需進行大量的手動配置。 2、主要特點 快…

【一篇搞懂】操作系統期末大題:進程同步與互斥 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;變量名與變量名之…