【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人

系列篇章💥

No.文章
1【Qwen部署实战】探索Qwen-7B-Chat:阿里云大型语言模型的对话实践
2【Qwen2部署实战】Qwen2初体验:用Transformers打造智能聊天机器人
3【Qwen2部署实战】探索Qwen2-7B:通过FastApi框架实现API的部署与调用
4【Qwen2部署实战】Ollama上的Qwen2-7B:一键部署大型语言模型指南
5【Qwen2部署实战】llama.cpp:一键部署高效运行Qwen2-7b模型
6【Qwen2部署实战】部署高效AI模型:使用vLLM进行Qwen2-7B模型推理

目录

  • 系列篇章💥
  • 概述
  • 基本用法
    • 加载预训练模型
    • 加载分词器模型
    • 定义提示message
    • 模版格式化消息
    • 根据输入ID获取生成ID
    • 解码生成ID获取内容
  • 流式输出
  • 结语


概述

在这个信息爆炸的时代,人工智能技术正逐渐渗透到我们生活的方方面面。特别是在自然语言处理领域,大型语言模型如Qwen2正以其卓越的对话能力,为用户带来前所未有的交互体验。本文将详细介绍如何利用强大的transformers库与Qwen2-7B-Instruct模型进行智能对话,无论是在流式模式还是非流式模式下,都能轻松实现。

基本用法

与Qwen2-Instruct的对话非常简单。通过transformers库,仅需数行代码,即可构建起与这位智能伙伴沟通的桥梁。我们首先通过from_pretrained方法加载预训练的tokenizer和模型,随后通过generate方法,在tokenizer所提供的聊天模板辅助下,轻松启动对话流程。以下示例将展示如何与Qwen2-7B-Instruct进行一场生动的对话:

加载预训练模型

from transformers import AutoModelForCausalLM, AutoTokenizer# 设置设备参数
device = "cuda"  # 指定使用CUDA作为计算设备# 加载预训练模型,使用自动推断数据类型和自动选择设备
model = AutoModelForCausalLM.from_pretrained("/root/autodl-tmp/qwen/Qwen2-7B-Instruct",  # 模型路径torch_dtype="auto",  # 数据类型自动选择device_map="auto"  # 设备自动选择
)

加载分词器模型

# 加载与模型配套的分词器
tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/qwen/Qwen2-7B-Instruct")

定义提示message

# 准备提示文本,这里我们直接使用model.generate()方法生成文本
# 需要使用tokenizer.apply_chat_template()来格式化输入,如下所示
prompt = "请简单介绍一下大型语言模型。"  # 提示文本
messages = [{"role": "system", "content": "你是一个智能AI助手"},  # 系统角色消息{"role": "user", "content": prompt}  # 用户角色消息
]

模版格式化消息

# 使用分词器的apply_chat_template方法来格式化消息
text = tokenizer.apply_chat_template(messages,  # 要格式化的消息tokenize=False,  # 不进行分词add_generation_prompt=True  # 添加生成提示
)

根据输入ID获取生成ID

# 将格式化后的文本转换为模型输入,并转换为PyTorch张量,然后移动到指定的设备
model_inputs = tokenizer([text], return_tensors="pt").to(device)# 使用model.generate()方法直接生成文本
# 通过设置max_new_tokens参数控制输出的最大长度
generated_ids = model.generate(model_inputs.input_ids,  # 模型输入的input_idsmax_new_tokens=512  # 最大新生成的token数量
)# 从生成的ID中提取新生成的ID部分
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]

解码生成ID获取内容

# 使用分词器的batch_decode方法将生成的ID解码回文本,并跳过特殊token
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

执行效果
在这里插入图片描述
查看响应内容

response

输出:

大型语言模型(Large Language Model)是人工智能领域的一种深度学习模型,主要用于生成与给定输入相关的自然语言文本。这类模型通过大量文本数据进行训练,能够学习到语言的复杂结构、语法、语义以及上下文关系等,从而在各种自然语言处理任务中表现出色。
基本原理
神经网络架构:大型语言模型通常基于循环神经网络(RNN)、长短期记忆网络(LSTM)或更先进的Transformer架构构建。这些模型能够处理序列数据,并在训练过程中学习到输入文本序列之间的依赖关系。
自回归性质:许多大型语言模型具有自回归性质,意味着它们生成的每个词都是基于之前生成的所有词的条件概率分布来预测的。
大规模训练:这些模型往往需要训练在海量的数据集上,例如包含数亿甚至数十亿字的文本数据。大规模的数据集有助于模型学习更广泛的语言模式和表达。
多用途性:大型语言模型因其强大的表示能力,可以应用于多种自然语言处理任务,包括但不限于文本生成、问答系统、代码生成、文本摘要、对话系统、翻译等。
应用场景

  • 文本生成:创建故事、文章、诗歌、代码等。
  • 问答系统:回答问题,提供信息检索服务。
  • 对话系统:构建聊天机器人,实现与用户的自然对话。
  • 自动文摘:从长篇文章中生成简洁的摘要。
  • 机器翻译:将文本从一种语言翻译成另一种语言。
  • 代码生成:根据指令生成特定功能的代码片段。

代表模型

  • GPT系列(由OpenAI开发):包括GPT-2、GPT-3等,以生成高质量文本而闻名。
  • 通义千问(阿里云开发):专注于中文领域的大型语言模型。
  • Mistral(由EleutherAI开发):一个开源的大型语言模型。
  • Qwen(由阿里云开发):另一个面向中文的大型语言模型。
    大型语言模型的发展极大地推动了自然语言处理技术的进步,为人类提供了更高效、更智能的交互方式和信息处理工具。

流式输出

当对话内容较长或需要实时更新时,流式传输模式就显得尤为重要。TextStreamer类允许我们将对话过程无缝切换至流式模式,从而实现更加流畅和动态的交互体验。以下示例将展示如何利用TextStreamer实现与Qwen2的流式对话:

# Reuse the code before `model.generate()` in the last code snippet
from transformers import TextStreamer
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512,streamer=streamer,
)

代码测试如下:

from transformers import AutoModelForCausalLM, AutoTokenizer# 设置设备参数
device = "cuda"  # 指定使用CUDA作为计算设备# 加载预训练模型,使用自动推断数据类型和自动选择设备
model = AutoModelForCausalLM.from_pretrained("/root/autodl-tmp/qwen/Qwen2-7B-Instruct",  # 模型路径torch_dtype="auto",  # 数据类型自动选择device_map="auto"  # 设备自动选择
)# 加载与模型配套的分词器
tokenizer = AutoTokenizer.from_pretrained("/root/autodl-tmp/qwen/Qwen2-7B-Instruct")# 准备提示文本,这里我们直接使用model.generate()方法生成文本
# 需要使用tokenizer.apply_chat_template()来格式化输入,如下所示
prompt = "请简单介绍一下Qwen-2B。"  # 提示文本
messages = [{"role": "system", "content": "你是一个智能AI助手"},  # 系统角色消息{"role": "user", "content": prompt}  # 用户角色消息
]# 使用分词器的apply_chat_template方法来格式化消息
text = tokenizer.apply_chat_template(messages,  # 要格式化的消息tokenize=False,  # 不进行分词add_generation_prompt=True  # 添加生成提示
)# 将格式化后的文本转换为模型输入,并转换为PyTorch张量,然后移动到指定的设备
model_inputs = tokenizer([text], return_tensors="pt").to(device)# 使用model.generate()方法直接生成文本
# 通过设置max_new_tokens参数控制输出的最大长度
# generated_ids = model.generate(
#     model_inputs.input_ids,  # 模型输入的input_ids
#     max_new_tokens=512  # 最大新生成的token数量
# )
from transformers import TextStreamer
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512,streamer=streamer,
)# 从生成的ID中提取新生成的ID部分
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]# 使用分词器的batch_decode方法将生成的ID解码回文本,并跳过特殊token
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]

输出:

Qwen-2B并不是一个广泛认可或已知的实体,可能是特定情境下的称呼或者某个内部项目的代号。在公开信息中,并没有关于“Qwen-2B”的详细描述或定义。如果“Qwen-2B”与人工智能、技术产品、学术研究或某一具体领域相关,那么它可能指的是某个特定的模型、项目、版本或是实验。例如,在人工智能领域,“Qwen”可能是阿里云推出的一种大语言模型系列的名称,而“-2B”可能代表的是该系列中的某个特定版本或迭代。通常情况下,对于不常见或非主流的术语,了解其准确含义需要查阅相关组织、公司或研究机构的官方资料或发布的信息。如果你是在特定上下文中遇到“Qwen-2B”,建议查看该上下文的原始来源或联系相关的开发者或团队以获取更准确的信息。

在这里插入图片描述

结语

通过本文的介绍,相信您已经对如何使用transformers库与Qwen2-7B-Instruct进行对话有了更深入的了解。无论是基础的对话功能,还是高级的流式输出模式,transformers库都提供了强大而灵活的工具来满足不同场景下的需求。随着技术的不断进步,我们有理由相信,像Qwen2这样的智能对话模型将在未来扮演更加重要的角色,为我们的生活和工作带来更多便利。让我们拭目以待,AI技术将如何进一步改变我们的世界。

在这里插入图片描述
🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

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

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

相关文章

从任意用户注册到任意密码重置

写在最前面一句话 To be or not to be ,it‘s a question . 哎呀,放错台词了,应该是 true or false , 在最近的测试中遇到了一个很有趣的点 “将 false 改为true ”就可以成功绕过验证码了。 T rue or false ??? …

Oracle PL / SQL包

在实践中,您很少创建独立的存储函数或过程。 相反,你会使用一个包。 包可以一起组织相关的功能和过程,例如创建库,但在PL / SQL中,库被称为包。 PL / SQL包有两个部分: 包规格包装体 包规范是包的公共…

使用fabric8操作k8s

文章目录 一、引入fabric包二、认证1、使用config文件认证2、使用oauthtoken认证 三、pod的查询和遍历四、命名空间的创建和删除五、deployment的创建和删除部分参数说明1、resourceRequirements2、containerPorts3、envVarList4、volumeMounts和volumeList5、nodeAffinity 六、…

「51媒体」企业举行新闻发布会,如何邀请媒体到场报道

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体宣传加速季,100万补贴享不停,一手媒体资源,全国100城线下落地执行。详情请联系胡老师。 企业举行新闻发布会时,邀请媒体到场报道是一个…

MySQL常用操作命令大全

文章目录 一、连接与断开数据库1.1 连接数据库1.2 选择数据库1.3 断开数据库 二、数据库操作2.1 创建数据库2.2 查看数据库列表2.3 删除数据库 三、表操作3.1 创建表3.2 查看表结构3.3 修改表结构3.3.1 添加列3.3.2 删除列3.3.3 修改列数据类型 3.4 删除表 四、数据操作4.1 插入…

day62--若依框架(基础应用篇)

若依搭建 若依版本 官方 若依官方针对不同开发需求提供了多个版本的框架,每个版本都有其独特的特点和适用场景: 前后端混合版本:RuoYi结合了SpringBoot和Bootstrap的前端开发框架,适合快速构建传统的Web应用程序,其…

【Arm技术日:为AI终端准备了哪些新基石?】

过去一年,移动终端设备的长足进步令人赞叹,例如人工智能 (AI) 从手机到笔记本电脑的巨大创新,并诞生了“新一代 AI 手机”和 AIPC。据IDC预测,2024年全球新一代AI手机的出货量将达到1.7亿部,占智能手机市场总量的近15%…

Qt加载SVG矢量图片,放大缩小图片质量不发生变化。

前言: 首先简单描述下SVG: SVG 意为可缩放矢量图形(Scalable Vector Graphics)。 SVG 使用 XML 格式定义图像。 给界面或者按钮上显示一个图标或背景图片,日常使用.png格式的文件完全够用,但是有些使用场景需要把图…

QChartView显示实时更新的温度曲线图(二)

文章目录 参考图说明1. 项目结构2. TempChartView.pro3. main.cpp4. TemperatureSeries.qml5. main.qml详细说明 参考图 说明 Qt Charts 提供了一系列使用图表功能的简单方法。它使用Qt Graphics View Framework 图形视图框架,因此可以很容易集成到用户界面。可以使…

基于小波分析的纹理和颜色反射对称性检测(MATLAB R2018A)

对称物体在自然图像和合成图像中普遍存在。作为对称物体最重要的全局特征之一,对称性检测长期以来都是计算机视觉领域的研究热点,并在图片的语义提取、图像语义理解以及情感识别等任务上具有广泛的应用。对称物体的检测技术,就是将图片中所蕴…

【前端】HTML+CSS复习记录【3】

文章目录 前言一、from(表单)二、style属性1、标签中直接定义(内联样式)2、定义在head中3、外部链接引用 四、 class 选择器系列文章目录 前言 长时间未使用HTML编程,前端知识感觉忘得差不多了。通过梳理知识点&#…

qq文件传输助手在哪里?详细图文教程告诉你(2024新版)

QQ作为一款功能强大的社交软件,不仅提供了聊天、语音、视频等多种通讯方式,还内置了文件传输助手这一实用工具。通过文件传输助手,用户可以在不同设备之间轻松传输文件,实现跨平台的便捷操作。 那么,qq文件传输助手在…

机器之心:自动化与机器人技术详解

目录 引言 自动化与机器人技术的定义 发展历程 深化应用 工业领域 医疗领域 农业领域 服务领域 其他领域 面临的挑战与未来展望 一、成本问题 二、技术瓶颈 三、安全性和伦理问题 四、就业问题 未来趋势 一、智能化和自主化:机器人技术的核心驱动力…

tmux 命令

这篇是另一篇内容的前置知识。因为项目部署测试需要,向公司申请了一个虚拟机做服务器用。以下是回溯的命令,多了解了解,拓宽知识面吧。PS:本人小白一个,知识浅显,勿喷。 tmux 常用快捷键 tmux 提供了一系…

【C语言】常见的数据排序算法

目录 一、概述 二、常见的排序算法 2.1 冒泡排序 2.1.1 定义 2.1.2 C语言实现 2.2 快速排序 2.2.1 定义 2.2.2 C语言实现 2.3 插入排序 2.3.1 定义 2.3.2 C语言实现 2.4 希尔排序 2.4.1 定义 2.4.2 C语言实现 2.5 归并排序 2.5.1 定义 2.5.2 C语言实现 2.6 基…

【@AutoWired和@Resource的区别】

AutoWired和Resource的区别 这两个我们在项目中,经常去使用。很少有人知道他们有什么区别。下面我们将从 来源依赖查找顺序支持的参数依赖注入的用法支持 这四个方面来说明他们俩个的区别 来源 Autowired: 这是Spring框架自带的注解,用于实现自动依…

绝区零 Mac 下载安装详细教程(MacOS IPA 砸壳包 playCover 完美运行)

绝区零 7.4 号开始公测,但刚刚就可以开始下载了,我也是第一时间就迫不及待的安装到了我的 Mac 电脑上,感兴趣的朋友可以跟我一起安装试试 我这里是通过 playCover 的形式在 Mac 上安装运行的,根据之前原神的经验所以这次还是同样…

惠海 H6912 升压恒流芯片IC 支持2.6-40V升12V24V36V48V60V100V 10A 摄影灯 太阳能灯 UV灯 杀菌灯

1.产品描述 H6912是一款外围电路简洁的宽调光比升压调光LED恒流驱动器,可适用于2.6-40V输入 电压范围的LED恒流照明领域。H6912可以实现高精度的恒流效果,输出电流恒流精度≤士3%,电压工作范围为2.6-40V.可以轻松满足锂电池及中低压的应用需…

Python中的爬虫实战:猫眼电影爬虫

随着互联网技术的快速发展,网络上的信息量越来越庞大。猫眼电影作为国内领先的电影数据平台,为用户提供了全面的电影信息服务。本文将介绍如何利用python编写简单的猫眼电影爬虫,获取电影相关数据。 爬虫概述 爬虫,即网络爬虫&a…

x264 编码器 common.h 文件中结构体详细介绍

x264_slice_header_t 定义:typedef struct {x264_sps_t *sps;x264_pps_t *pps;int i_type;int i_first_mb;int i_last_mb;int i_pps_id;int i_frame_num