探索 Mistral 新发布的具有原生函数调用功能的 7B 模型【附notebook文件】

引言

Mistral 发布了新版的 7B 模型,这次更新引入了原生函数调用功能。对于开发者和 AI 爱好者来说,这一更新极具吸引力,因为它增强了模型的功能和实用性。在这篇博客中,我们将深入探讨这些新功能,展示如何使用该模型,并通过详细的代码示例来说明其实用性。

Mistral 7B 模型的新特性

与之前的版本不同,最新的 Mistral 7B 模型包含了几个显著的改进:

  1. 新基础模型:这不仅仅是一个微调版本,而是包含了一个全新的基础模型。
  2. 增强的分词器:分词器新增了 768 个额外的 tokens,支持新的功能并可能支持其他语言。
  3. 函数调用支持:现在集成了原生的函数调用支持,使应用更加动态和互动。

环境设置

要开始使用新版 Mistral 7B 模型,我们需要先设置好开发环境。以下是必要的步骤和代码示例:

!pip install git+https://github.com/huggingface/transformers # 从 GitHub 安装 transformers
!pip install datasets loralib sentencepiece
!pip install bitsandbytes accelerate xformers einops
!pip install hf_transfer

加载和测试模型

我们将展示如何加载模型并进行基本的测试。

import os
import torch
from transformers import pipeline, AutoTokenizer, AutoModelForCausalLM

os.environ['HF_HUB_ENABLE_HF_TRANSFER'] = '1'
torch.set_default_device('cuda')

# 使用 Hugging Face 的 pipeline 加载模型
pipe = pipeline(
    "text-generation",
    model="mistralai/Mistral-7B-Instruct-v0.3",
    model_kwargs={"torch_dtype": torch.bfloat16},
    device="cuda",
)

# 加载旧版本的分词器以进行对比
old_tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.2")

# 对比新旧分词器的 token 化结果
print(pipe.tokenizer("How are you? I'm fine. And you?")['input_ids'])
print(old_tokenizer("How are you? I'm fine. And you?")['input_ids'])

新功能展示

新版模型的一个重要功能是支持原生函数调用。以下是一个简单的例子,展示了如何使用这一功能:

from mistral_common.protocol.instruct.tool_calls import Function, Tool
from mistral_inference.model import Transformer
from mistral_inference.generate import generate
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest

# 配置和加载模型及分词器
tokenizer = MistralTokenizer.from_file("path/to/tokenizer.model.v3")
model = Transformer.from_folder("path/to/model_folder")

# 定义函数调用请求
completion_request = ChatCompletionRequest(
    tools=[
        Tool(
            function=Function(
                name="get_current_weather",
                description="获取当前天气",
                parameters={
                    "type": "object",
                    "properties": {
                        "location": {"type": "string", "description": "城市和州,例如:San Francisco, CA"},
                        "format": {"type": "string", "enum": ["celsius", "fahrenheit"], "description": "使用的温度单位"},
                    },
                    "required": ["location", "format"],
                },
            )
        )
    ],
    messages=[UserMessage(content="今天巴黎的天气怎么样?")],
)

# 生成并输出结果
tokens = tokenizer.encode_chat_completion(completion_request).tokens
out_tokens, _ = generate([tokens], model, max_tokens=64, temperature=0.0, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.instruct_tokenizer.tokenizer.decode(out_tokens[0])
print(result)

结论与展望

新版的 Mistral 7B 模型在功能和性能上都有显著提升,特别是其原生函数调用功能,使其在开发动态和互动应用方面具有巨大潜力。我们期待看到更多开发者在此基础上进行有趣的微调和应用开发。如果你有任何问题或建议,欢迎在评论区留言。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

击穿盲点——【网络安全】社会工程学中的网络欺骗

社会工程学起源于上世纪60年代左右,是一种通过人际交流的方式来获得情报的非技术渗透手段。这种手段无需过多技术要求,却非常有效,目前已成为危害企业网络安全的重大威胁之一。著名黑客凯文米特尼克在《反欺骗的艺术》中曾提到,人…

深入理解计算机系统 家庭作业4.52

练习题4.3 p.254 \sim\seq\seq-full.hcl文件内已经说的很清楚了哪些不能更改,哪些是题目要求更改的控制逻辑块. 依据家庭作业4.51的答案,在seq-full.hcl文件内更改对应的HCL描述即可 以下答案注释了#changed的就是更改部分 #/* $begin seq-all-hcl */ ######################…

MFC GDI 绘图模式、映射模式、画笔、笔、字体

一 GDI 绘图模式(RoP2 Mode) 在使用VC MFC进行图形程序编程时,常会用到GDI绘图指令,而要做到绘图时有橡皮筋动态效果,就需设置GDI绘图模式。GDI绘图模式有多种,如下: 常用R2_NOT模式来实…

TXT文本编辑器:一键提取,多关键字匹配,内容尽在掌控!

在浩如烟海的文档中,寻找关键信息往往是一项繁琐而耗时的任务。你是否曾经为了查找某个关键字而翻遍了整个文件夹,却仍然一无所获?现在,有了TXT文本编辑器,这一切都将变得轻松而高效 这款软件以其简洁明了的操作界面和…

VBA_MF系列技术资料1-615

MF系列VBA技术资料1-615 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-0…

17.分类问题

机器学习分类问题详解与实战 介绍 在机器学习中,分类问题是一类常见的监督学习任务,其目标是根据输入特征将数据样本划分为预先定义的类别之一。分类问题广泛应用于各个领域,如图像识别、自然语言处理、金融风险评估等。本文将详细介绍机器…

Java的线程的使用

一.两种创建线程的方式 1.继承Thread类(匿名内部类) 创建方式: 1.定义一个子类继承Thread,重写run方法 2.创建子类对象, 3.调用子类对象的start方法(启动还是执行的run方法) 优缺点&#x…

vue3 ts问题 找不到模块“@/views/home/index.vue”或其相应的类型声明。

1. 找不到模块“/views/HomeView.vue”或其相应的类型声明 今天帮同事看了一个问题,他尝试用vitevue3tspinia创建项目,结果刚上来就遇到这么一个问题 2. 解决办法 出现这个问题的原因就是:ts只支持导出导入模块,但是vue不是模块…

Java——接口后续

1.Comparable 接口 在Java中,我们对一个元素是数字的数组可以使用sort方法进行排序,如果要对一个元素是对象的数组按某种规则排序,就会用到Comparable接口 当实现Comparable接口后,sort会自动调用Comparable接口里的compareTo 方法…

HIVE3.1.3+ZK+Kerberos+Ranger2.4.0高可用集群部署

目录 一、集群规划 二、介质下载 三、基础环境准备 1、解压文件 2、配置环境变量 四、配置zookeeper 1、创建主体 2、修改zoo.cfg 3、新增jaas.conf 4、新增java.env 5、重启ZK 6、验证ZK 五、配置元数据库 六、安装HIVE 1、创建Hiver的kerberso主体 2…

马尔可夫和比奈梅-切比雪夫不等式

目录 一、说明 二、自然界的极限性 三、马尔可夫不等式 3.1 最早提出 3.2 马尔可夫不等式的证明 四、 Bienaym–Chebyshev 不等式 4.1 简要回顾Bienaym–Chebyshev 不等式的历史 4.2 Bienaym — Chebyshev 不等式的证明 五、弱大数定律(及其证明)…

kafka学习笔记05

Consumer消费者重新分配策略和offset维护机制 我们会打印很多kafka的日志。 我们现在可以去关闭kafka的日志: 创建日志配置。 这样就只有Info级别的日志可以打印出来了。 改成debug级别可以输出比较多的日志。 Kafka消费者Consumer消费消息配置实战 生产者发送消息…

ArcGIS不同图斑设置不同的透明度

对于设置一个图层的整体的透明度,我们在 ArcGIS制作带蒙版的遥感影像地图http://mp.weixin.qq.com/s?__bizMzIzNjM2NTYxMg&mid2247509080&idx1&sn38dccf0a52bb3bb3758f57114ee38b72&chksme8da161bdfad9f0d363da90959a8524dcf2b60d0e8d999f8ebeef0…

虚机配置USB CDROM设备热迁移crash

虚机配置USB CDROM设备热迁移crash 问题现象定位过程堆栈分析日志分析打开trace异常日志上下文分析SpecificationCBWCSW 命令执行发送读命令读取数据 正常日志异常堆栈 修复方案结论 基础原理设备模型数据结构设备实例化 UHCIFrame ListTDQH SCSI 问题现象 dogfood环境一台虚机…

一条命令安装Metasploit Framework

做安全渗透的人都或多或少的使用kali-Linux系统中msfconsole命令启动工具,然而也经常会有人遇到这样那样的问题无法启动 今天我们就用一条命令来重新安装这个工具 curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/met…

C语言—深入理解指针(4)

1.回调函数 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用&#xff0…

STM32-10-定时器

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG 文章目录 一、STM32 基础定时器1. 基本定时器简介2. 基本定时器框图3. 基本定时器相关寄存器4. 定时器溢出…

【Java EE】网络协议——HTTP协议

目录 1.HTTP 1.1HTTP是什么 1.2理解“应用层协议” 1.3理解HTTP协议的工作过程 2.HTTP协议格式 2.1抓包工具的使用 2.2抓包工具的原理 2.3抓包结果 3.协议格式总结 1.HTTP 1.1HTTP是什么 HTTP(全称为“超文本传输协议”)是一种应用非常广泛的应…

JAVA -- > 初识JAVA

初始JAVA 第一个JAVA程序详解 public class Main {public static void main(String[] args) {System.out.println("Hello world");} }1.public class Main: 类型,作为被public修饰的类,必须与文件名一致 2.public static 是JAVA中main函数准写法,记住该格式即可 …

买房送户口!多城加入“抢人大战”

业内人士认为,近期,多地推出的购房落户政策已区别于此前的人才落户政策,更聚焦于住房消费,降低了落户门槛,体现了各地对导入人口的重视,有利于人才流动,推动新型城镇化建设。 千万人口城市“后…