跳至主要内容

Pixtral 12B:实用示例指南

了解如何通过 Le Chat 交互式使用 Mistral 的 Pixtral 12B,或通过 La Plateforme 提供的 API 以编程方式调用。
· 8分钟 阅读

使用 AI 探索

Mistral 发布了 Pixtral 12B,这是一款拥有 120 亿参数的开源大语言模型(LLM)。这是 Mistral 的首个多模态模型,意味着它可以同时处理文本和图像。

以下是 Pixtral 成为 LLM 领域有益补充的原因:

  • 可高效处理任意尺寸的图像,无需预处理。
  • 128K 上下文窗口,能够处理复杂提示和大量图像。
  • 在纯文本和多模态任务中均有出色表现。
  • 非盈利项目可免费使用,适合研究人员和爱好者。
  • 在 Apache 2.0 许可证下开源,推动 AI 普及。

在本教程中,我将通过 Web 聊天界面 Le Chat 与 API 编程两种方式,提供大量示例与分步讲解,帮助您使用 Pixtral。开始之前,我们先了解一些 Pixtral 的关键理论要点。

什么是 Pixtral 12B?

Mistral AI 推出 Pixtral 12B,这是一款可同时处理图像与文本的模型。凭借 120 亿参数,它能够胜任涉及视觉与语言混合的任务,例如解读图表、文档或曲线图。

它非常适用于需要深入理解两种格式的场景。

Pixtral 12B 的一项关键特性是能在单次输入中处理多张图像,并以其原生分辨率进行处理。该模型拥有 128,000 令牌的上下文窗口,可同时分析冗长复杂的文档、图像或多种数据源。这使其在财务报告或企业文档扫描等领域尤为有用。

Pixtral 的基准测试

Pixtral 在多模态知识与推理相关任务上表现不俗,尤其在 MathVista 测试中名列前茅。在多模态问答任务中,它同样位居前列,特别是在 ChartQA 上表现亮眼。

Pixtral benchmarks

来源:Mistral AI

不过,在指令遵循与纯文本任务上,诸如 Claude-3 Haiku 和 Gemini Flash-8B 等模型表现具有竞争力,甚至更优。这表明 Pixtral 12B 在多模态与视觉推理方面更为擅长,但在纯文本任务中未必占优。

Pixtral 的架构

Pixtral 12B 的架构旨在同时处理文本与图像。它包含两个主要组件:视觉编码器与多模态 Transformer 解码器。

视觉编码器拥有 4 亿参数,专门训练以适配不同尺寸与分辨率的图像。

Pixtral's vision encoder.

来源:Mistral AI

第二个组件是多模态 Transformer 解码器,这是一个更大的模型,拥有 120 亿参数。它基于现有的 Mistral Nemo 架构,旨在对交织文本与图像数据的序列进行下一 token 的预测。

该解码器可处理超长上下文(最多 128k token),能够应对大量图像 token 与长篇文本信息。

Pixtral's multimodal transformer decoder.

来源:Mistral AI

这种组合式架构使 Pixtral 能够处理各种尺寸与格式的图像,将高分辨率图像转化为连贯的 token,同时不丢失上下文。

如何在 Le Chat 上使用 Pixtral

免费访问 Pixtral 的最简便方式是通过Le Chat,即其聊天界面。此界面与其他 LLM 聊天界面类似,例如ChatGPT。

The Le Chat web interface.

要使用 Pixtral,请前往底部靠近提示输入框的模型选择器,从可用模型列表中选择 Pixtral。

Selecting the Pixtral model in Le Chat.

Pixtral 是一款支持文本与图像的多模态模型。通过底部的回形针图标,我们可以上传一张或多张图像,并与文本提示组合使用。例如,该功能可帮助我们识别图像中展示的水果。

A multimodal prompt example of using Pixtral in Le Chat.

我们再看一个示例,请求 Pixtral 将包含饼图的图像转换为 Markdown 表格:

Using Le Chat to transform a chart into a text table.

如何通过 La Plateforme 连接 Pixtral 的 API

虽然通过 Web 界面使用 Pixtral 简单易上手,但不便于集成进我们的项目。本节将介绍如何通过La Plateforme,使用 Python 调用其 API 与 Pixtral 交互。

账户设置

首先需要创建账户。可一键使用 Google 账号注册,或使用用户名与密码创建传统账户。

创建账户后,系统会提示设置工作区。您可以为工作区选择任意名称,并选择“我是独立创作者”选项。

Creating a workspace in La Platforme.

创建账户后,前往计费方案页面。此处可选择创建实验性计费方案(可免费试用 API),或设置付费方案。需注意,免费的实验方案要求我们为账户绑定有效手机号。

Selecting a billing plan in La Platforme.

至此,个人资料已准备就绪,可以创建 API 密钥。该密钥用于向 Mistral API 发送请求,并用 Python 以编程方式与 Pixtral 交互。

生成 API 密钥

要生成 API 密钥,请前往API 密钥页面。在页面顶部,我们可以点击按钮创建新密钥:

Creating API Keys in La Platforme.

创建密钥时,系统会提示我们为其命名并设置过期日期。但这两个字段均为可选项,可留空。

API key creation form for Mistral's La Plateforme

通常建议为密钥设置过期日期。很多情况下,我们为试验 API 而创建密钥,随后却被遗忘并长期有效。设置过期日期可确保即便密钥意外泄露,也不会被永久使用,从而降低风险。

Safekeeping the API key after creation.

密钥创建后会显示一次。这是唯一的查看机会,因此务必复制保存。如丢失,只能在列表中删除并重新创建。

建议在与 Python 脚本相同的目录下创建一个 .env 文件,用以下格式存储密钥(将 <key_value> 替换为实际密钥):

# contents of the .env fileAPI_KEY=<key_value>

不建议跳过此步骤,直接在脚本中硬编码 API 密钥。那样会导致我们无法在不泄露密钥的情况下分享代码。您可在本教程中进一步了解该做法:Python 环境变量。

安装依赖

首先安装必要的依赖,包括:

  • mistralai:Mistral 提供的 API 客户端库。
  • python-dotenv:用于从 .env 文件加载环境变量的模块。
pip install python-dotenv mistralai

依赖安装完成后,可开始编写脚本。在与 .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

在 API 中使用多模态

在上述示例中,文本提示通过 content 字段提交,其中 type 设置为 "text"。

{  "type": "text",  "text": "What is 1 + 1?"}

content 字段是一个数组,允许我们发送多段数据。作为多模态模型,Pixtral 也接受图像数据。若要在提示中使用来自 URL 的图像,可在 content 字段中将类型指定为 "image_url":

{  "type": "image_url",  "Image_url": "<image_url>” }

将 <image_url> 替换为实际图像 URL。例如,我们可以让 Pixtral 分析下方的性能图表:

来源:Mistral AI

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)

提交该请求后,Pixtral 会同时接收文本提示与包含图表的图像进行分析,并返回详细的分析结果。鉴于篇幅较长,这里不展示具体回复。

加载本地图像

在上一个示例中,我们展示了如何使用 URL 图像。或者,也可以加载硬盘中的图像,将其编码为 base-64。要以 base-64 加载并编码图像,可使用内置的 base64 包:

def encode_image_base64(image_path): with open(image_path, "rb") as image_file:   return base64.b64encode(image_file.read()).decode("utf-8")

使用 base-64 编码图像时,仍然使用 image_url 类型来提供编码后的图像,但需要在前面添加前缀 data:image/jpeg;base64,:

{  "type": "image_url",  "image_url": f"data:image/jpeg;base64,{base_64_image}"}

base_64_image 是调用 encode_image_base64() 函数加载图像的返回结果。我们据此请 Pixtral 基于我绘制的两张草图,构建一个包含两个页面的待办清单网站:

Sketch for the TODO list app interface.

我们分别提供两张图像,并配以提示,要求基于图像创建一个 HTML 网站:

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)

Pixtral 将输出两个代码块,分别为两个页面的内容。我们将代码保存为 index.html 与 add.html 并在浏览器中打开,效果如下:

Rendered TODO list app by Pixtral.

尽管尚未完全可用作生产应用,但其已可运行,是进一步开发的绝佳起点。

结语

Pixtral 12B 是 Mistral 的首款多模态模型。它可在无需预处理的情况下处理任意尺寸图像,具备 128K 上下文窗口以应对复杂提示,并在纯文本与多模态任务上都有良好表现。

在 Apache 2.0 许可证下开源,且可用于非盈利项目的免费使用,使 Pixtral 对研究者与爱好者都极具价值。

本教程通过示例与分步讲解,提供了使用 Pixtral 的实用要点与能力展示。

FAQs

Pixtral 是否免费?在什么条件下可用?

Pixtral 可在 Le Chat 上免费使用,或在未商业化的项目中通过 API 免费使用。

Pixtral 是否开源?

是的。它在 Apache 2.0 许可证下开源。

Pixtral 支持哪些输入数据?

Pixtral 是 Mistral AI 的首个多模态 LLM。它同时支持文本与图像。

Pixtral 支持哪类图像?

Pixtral 支持任意尺寸的图像,无需任何预处理。

Pixtral 的重要性体现在哪里?

作为仅有 120 亿参数的模型,Pixtral 具有出色性能。此外,它可免费使用且为开源。

François Aubry

作者

François Aubry

全栈工程师,CheapGPT 创始人。我一直热爱教学。从学生时代起,我就积极寻找机会为同学提供辅导与帮助。这份热情促使我攻读博士学位,并在此期间担任助教,以支持我的学术追求。那些年里,我在传统课堂环境中收获了极大的成就感,既建立联系也促进学习。随着在线学习平台的兴起,我也看到了数字教育的变革潜力。事实上,我曾参与我们大学一款此类平台的建设。我致力于将传统教学理念与创新的数字方法相融合。我的热情在于打造既有吸引力、信息量充足,又能让当代学习者轻松获取的课程。

主题