依赖安装完成后,可开始编写脚本。在与 .env 文件相同目录下创建 mistral_example.py 文件。第一步是导入模块并将 API 密钥加载到变量中。
# Create a mistral_example.py file in the same folder as the .env fileimport osfrom mistralai import Mistralfrom dotenv import load_dotenvload_dotenv()api_key = os.getenv("API_KEY")技术支持
接下来初始化客户端。
初始化客户端
Mistral 文档页面列出了所有可用模型。我们关注的是最新的 Pixtral 模型,其 API 端点为 pixtral-12b-2409。
# Add this code in mistral_example.py after initializing the API keymodel = "pixtral-12b-2409"client = Mistral(api_key=api_key)技术支持
发起 API 请求
现在我们可以向 Mistral API 发送请求,以编程方式与 Pixtral 交互。以下是提交文本提示的示例:
# Add this code in mistral_example.py after initializing the clientchat_response = client.chat.complete( model=model, messages = [ { "role": "user", "content": [ { "type": "text", "text": "What is 1 + 1?" } ] }, ])print(chat_response.choices[0].message.content)技术支持
我们可以在终端运行该脚本,查看 Pixtral 对提示的回复:
$ python mistral_example.py The sum of 1 + 1 is 2. So,1 + 1 = 2技术支持
chat_response = client.chat.complete( model=model, messages =[{"role":"user","content":[{"type":"text","text":"According to the chart, how does Pixtral 12B performs compared to other models?"},{"type":"image_url","image_url":"https://mistral.ai/images/news/pixtral-12b/pixtral-benchmarks.png"}]},])print(chat_response.choices[0].message.content)技术支持
list_image = encode_image_base64("./todo-list.jpeg")new_item_image = encode_image_base64("./new-item-form.jpeg")chat_response = client.chat.complete( model=model, messages =[{"role":"user","content":[{"type":"text","text":"Create a HTML website with two pages like in the images"},{"type":"image_url","image_url":f"data:image/jpeg;base64,{list_image}"},{"type":"image_url","image_url":f"data:image/jpeg;base64,{new_item_image}"},]},])print(chat_response.choices[0].message.content)技术支持
Mistral 发布了 Pixtral 12B,这是一款拥有 120 亿参数的开源大语言模型(LLM)。这是 Mistral 的首个多模态模型,意味着它可以同时处理文本和图像。
以下是 Pixtral 成为 LLM 领域有益补充的原因:
在本教程中,我将通过 Web 聊天界面 Le Chat 与 API 编程两种方式,提供大量示例与分步讲解,帮助您使用 Pixtral。开始之前,我们先了解一些 Pixtral 的关键理论要点。
什么是 Pixtral 12B?
Mistral AI 推出 Pixtral 12B,这是一款可同时处理图像与文本的模型。凭借 120 亿参数,它能够胜任涉及视觉与语言混合的任务,例如解读图表、文档或曲线图。
它非常适用于需要深入理解两种格式的场景。
Pixtral 12B 的一项关键特性是能在单次输入中处理多张图像,并以其原生分辨率进行处理。该模型拥有 128,000 令牌的上下文窗口,可同时分析冗长复杂的文档、图像或多种数据源。这使其在财务报告或企业文档扫描等领域尤为有用。
Pixtral 的基准测试
Pixtral 在多模态知识与推理相关任务上表现不俗,尤其在 MathVista 测试中名列前茅。在多模态问答任务中,它同样位居前列,特别是在 ChartQA 上表现亮眼。
来源:Mistral AI
不过,在指令遵循与纯文本任务上,诸如 Claude-3 Haiku 和 Gemini Flash-8B 等模型表现具有竞争力,甚至更优。这表明 Pixtral 12B 在多模态与视觉推理方面更为擅长,但在纯文本任务中未必占优。
Pixtral 的架构
Pixtral 12B 的架构旨在同时处理文本与图像。它包含两个主要组件:视觉编码器与多模态 Transformer 解码器。
视觉编码器拥有 4 亿参数,专门训练以适配不同尺寸与分辨率的图像。
来源:Mistral AI
第二个组件是多模态 Transformer 解码器,这是一个更大的模型,拥有 120 亿参数。它基于现有的 Mistral Nemo 架构,旨在对交织文本与图像数据的序列进行下一 token 的预测。
该解码器可处理超长上下文(最多 128k token),能够应对大量图像 token 与长篇文本信息。
来源:Mistral AI
这种组合式架构使 Pixtral 能够处理各种尺寸与格式的图像,将高分辨率图像转化为连贯的 token,同时不丢失上下文。
如何在 Le Chat 上使用 Pixtral
免费访问 Pixtral 的最简便方式是通过Le Chat,即其聊天界面。此界面与其他 LLM 聊天界面类似,例如ChatGPT。
要使用 Pixtral,请前往底部靠近提示输入框的模型选择器,从可用模型列表中选择 Pixtral。
Pixtral 是一款支持文本与图像的多模态模型。通过底部的回形针图标,我们可以上传一张或多张图像,并与文本提示组合使用。例如,该功能可帮助我们识别图像中展示的水果。
我们再看一个示例,请求 Pixtral 将包含饼图的图像转换为 Markdown 表格:
如何通过 La Plateforme 连接 Pixtral 的 API
虽然通过 Web 界面使用 Pixtral 简单易上手,但不便于集成进我们的项目。本节将介绍如何通过La Plateforme,使用 Python 调用其 API 与 Pixtral 交互。
账户设置
首先需要创建账户。可一键使用 Google 账号注册,或使用用户名与密码创建传统账户。
创建账户后,系统会提示设置工作区。您可以为工作区选择任意名称,并选择“我是独立创作者”选项。
创建账户后,前往计费方案页面。此处可选择创建实验性计费方案(可免费试用 API),或设置付费方案。需注意,免费的实验方案要求我们为账户绑定有效手机号。
至此,个人资料已准备就绪,可以创建 API 密钥。该密钥用于向 Mistral API 发送请求,并用 Python 以编程方式与 Pixtral 交互。
生成 API 密钥
要生成 API 密钥,请前往API 密钥页面。在页面顶部,我们可以点击按钮创建新密钥:
创建密钥时,系统会提示我们为其命名并设置过期日期。但这两个字段均为可选项,可留空。
通常建议为密钥设置过期日期。很多情况下,我们为试验 API 而创建密钥,随后却被遗忘并长期有效。设置过期日期可确保即便密钥意外泄露,也不会被永久使用,从而降低风险。
密钥创建后会显示一次。这是唯一的查看机会,因此务必复制保存。如丢失,只能在列表中删除并重新创建。
建议在与 Python 脚本相同的目录下创建一个
.env文件,用以下格式存储密钥(将<key_value>替换为实际密钥):不建议跳过此步骤,直接在脚本中硬编码 API 密钥。那样会导致我们无法在不泄露密钥的情况下分享代码。您可在本教程中进一步了解该做法:Python 环境变量。
安装依赖
首先安装必要的依赖,包括:
mistralai:Mistral 提供的 API 客户端库。python-dotenv:用于从.env文件加载环境变量的模块。依赖安装完成后,可开始编写脚本。在与
.env文件相同目录下创建mistral_example.py文件。第一步是导入模块并将 API 密钥加载到变量中。接下来初始化客户端。
初始化客户端
Mistral 文档页面列出了所有可用模型。我们关注的是最新的 Pixtral 模型,其 API 端点为
pixtral-12b-2409。发起 API 请求
现在我们可以向 Mistral API 发送请求,以编程方式与 Pixtral 交互。以下是提交文本提示的示例:
我们可以在终端运行该脚本,查看 Pixtral 对提示的回复:
在 API 中使用多模态
在上述示例中,文本提示通过
content字段提交,其中type设置为"text"。content字段是一个数组,允许我们发送多段数据。作为多模态模型,Pixtral 也接受图像数据。若要在提示中使用来自 URL 的图像,可在content字段中将类型指定为"image_url":将
<image_url>替换为实际图像 URL。例如,我们可以让 Pixtral 分析下方的性能图表:来源:Mistral AI
提交该请求后,Pixtral 会同时接收文本提示与包含图表的图像进行分析,并返回详细的分析结果。鉴于篇幅较长,这里不展示具体回复。
加载本地图像
在上一个示例中,我们展示了如何使用 URL 图像。或者,也可以加载硬盘中的图像,将其编码为 base-64。要以 base-64 加载并编码图像,可使用内置的
base64包:使用 base-64 编码图像时,仍然使用
image_url类型来提供编码后的图像,但需要在前面添加前缀data:image/jpeg;base64,:base_64_image是调用encode_image_base64()函数加载图像的返回结果。我们据此请 Pixtral 基于我绘制的两张草图,构建一个包含两个页面的待办清单网站:我们分别提供两张图像,并配以提示,要求基于图像创建一个 HTML 网站:
Pixtral 将输出两个代码块,分别为两个页面的内容。我们将代码保存为
index.html与add.html并在浏览器中打开,效果如下:尽管尚未完全可用作生产应用,但其已可运行,是进一步开发的绝佳起点。
结语
Pixtral 12B 是 Mistral 的首款多模态模型。它可在无需预处理的情况下处理任意尺寸图像,具备 128K 上下文窗口以应对复杂提示,并在纯文本与多模态任务上都有良好表现。
在 Apache 2.0 许可证下开源,且可用于非盈利项目的免费使用,使 Pixtral 对研究者与爱好者都极具价值。
本教程通过示例与分步讲解,提供了使用 Pixtral 的实用要点与能力展示。