Doramagic 项目包 · 项目说明书

mistral-common 项目

生成时间:2026-05-17 00:44:16 UTC

项目介绍与安装

mistral-common 是 Mistral AI 开源的工具库集合,旨在帮助开发者更好地使用 Mistral AI 模型。该项目包含了令牌化器(tokenizers)、验证(validation)、规范化(normalization)等核心功能,可与 Mistral AI 的各种模型配合使用。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 1.1 核心功能

继续阅读本节完整说明和来源证据。

章节 1.2 技术栈

继续阅读本节完整说明和来源证据。

章节 2.1 整体架构图

继续阅读本节完整说明和来源证据。

1. 项目概述

mistral-common 是 Mistral AI 开源的工具库集合,旨在帮助开发者更好地使用 Mistral AI 模型。该项目包含了令牌化器(tokenizers)、验证(validation)、规范化(normalization)等核心功能,可与 Mistral AI 的各种模型配合使用。

资料来源:README.md:1

1.1 核心功能

功能模块描述
令牌化(Tokenization)提供 Tekken 令牌化器,用于对请求进行编码
协议处理(Protocol)支持 Instruct、FIM(Fill-In-The-Middle)和 Transcription 协议
验证与规范化对聊天补全请求进行验证和规范化处理
多模态支持支持图像和音频处理(可选依赖)
Grammar 引导使用 llguidance 创建工具调用、JSON schema 和推理的 Lark 语法

资料来源:AGENTS.md:2

1.2 技术栈

技术项要求
编程语言Python 3.10 至 3.14
包管理器uv
测试框架pytest
代码格式化Ruff
类型检查mypy
持续集成GitHub Actions

资料来源:AGENTS.md:1

2. 项目架构

2.1 整体架构图

graph TD
    subgraph "用户请求层"
        A[ChatCompletionRequest] --> B[验证器 Validator]
        B --> C[规范化器 Normalizer]
        C --> D[InstructRequest]
    end
    
    subgraph "令牌化层"
        D --> E[MistralTokenizer]
        E --> F[Tekken Tokenizer]
    end
    
    subgraph "输出层"
        F --> G[Tokenized 对象]
    end
    
    subgraph "可选模块"
        H[Image Encoder] -.-> E
        I[Audio Encoder] -.-> E
    end

2.2 目录结构

mistral-common/
├── src/
│   └── mistral_common/
│       ├── protocol/              # 协议处理
│       │   ├── instruct/          # Instruct 协议
│       │   │   ├── request.py      # ChatCompletionRequest 定义
│       │   │   ├── normalize.py   # 请求规范化器
│       │   │   ├── validator.py   # 请求验证器
│       │   │   ├── messages.py     # 消息定义
│       │   │   └── tool_calls.py   # 工具调用
│       │   ├── fim/               # FIM 协议
│       │   └── transcription/     # 转录协议
│       ├── tokens/                # 令牌化
│       │   └── tokenizers/        # 令牌化器实现
│       │       ├── tekken.py      # Tekken 令牌化器
│       │       ├── mistral.py     # Mistral 令牌化器
│       │       ├── instruct.py    # Instruct 令牌化器
│       │       ├── image.py       # 图像处理
│       │       └── audio.py       # 音频处理
│       ├── guidance/              # Grammar 引导
│       └── experimental/          # 实验性功能
├── tests/                         # 测试套件
├── docs/                          # 文档
└── pyproject.toml                 # 项目配置

资料来源:AGENTS.md:1-2

3. 安装指南

3.1 基础安装

使用 pip 进行基础安装:

pip install mistral-common

资料来源:README.md:2

3.2 可选依赖安装

mistral-common 包含多个可选依赖模块,可以根据需要选择性安装:

依赖项功能安装命令
image图像处理支持pip install "mistral-common[image]"
audio音频处理支持pip install "mistral-common[audio]"
hf-hub从 Hugging Face Hub 下载令牌化器pip install "mistral-common[hf-hub]"
sentencepieceSentencePiece 令牌化器支持(已弃用)pip install "mistral-common[sentencepiece]"
server服务器模式运行令牌化器pip install "mistral-common[server]"

资料来源:README.md:2-5

3.3 安装所有依赖

一次性安装所有可选依赖:

pip install "mistral-common[image,audio,hf-hub,sentencepiece,server]"

资料来源:README.md:7

4. 快速入门

4.1 基本使用示例

from mistral_common.protocol.instruct.messages import UserMessage, AssistantMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
from mistral_common.protocol.instruct.normalize import InstructRequestNormalizer

# 创建聊天补全请求
request = ChatCompletionRequest(
    messages=[
        UserMessage(content="你好!"),
        AssistantMessage(content="你好!有什么可以帮助你的吗?"),
    ],
)

# 使用规范化器处理请求
normalizer = InstructRequestNormalizer.normalizer()
instruct_request = normalizer.from_chat_completion_request(request)

资料来源:src/mistral_common/protocol/instruct/request.py:20-30

4.2 带工具调用的请求

from mistral_common.protocol.instruct.tool_calls import Tool, ToolTypes, Function

# 定义工具
tool = Tool(
    function=Function(
        name="get_weather",
        description="获取指定位置的天气信息",
        parameters={
            "type": "object",
            "properties": {
                "location": {
                    "type": "string",
                    "description": "城市和州,例如 San Francisco, CA",
                },
            },
            "required": ["location"],
        },
    ),
)

# 创建带工具的请求
request = ChatCompletionRequest(
    messages=[UserMessage(content="北京今天天气怎么样?")],
    tools=[tool],
    tool_choice="auto",
)

资料来源:src/mistral_common/protocol/instruct/request.py:30-45

4.3 请求验证

from mistral_common.protocol.instruct.validator import MistralRequestValidator, ValidationMode
from mistral_common.protocol.instruct.messages import UserMessage

# 创建验证器(测试模式)
validator = MistralRequestValidator(mode=ValidationMode.test)

# 创建请求
request = ChatCompletionRequest(
    model="mistral-large-latest",
    messages=[UserMessage(content="Hello!")],
)

# 验证请求
validated_request = validator.validate_request(request)

资料来源:src/mistral_common/protocol/instruct/validator.py:20-40

5. 开发环境配置

5.1 环境设置

使用 uv 进行开发环境配置:

# 克隆仓库
git clone https://github.com/mistralai/mistral-common.git
cd mistral-common

# 创建虚拟环境
uv venv
source .venv/bin/activate

# 同步所有依赖和开发依赖
uv sync --frozen --all-extras --group dev

# 安装预提交钩子
uv run pre-commit install

资料来源:README.md:40-50

5.2 代码质量检查

项目使用以下工具进行代码质量控制:

工具用途命令
Ruff代码格式化和检查uv run ruff check .
mypy类型检查uv run mypy src/
pytest测试运行uv run pytest tests/
pre-commit自动化检查uv run pre-commit run --all-files

5.3 开发工作流

graph LR
    A[修改代码] --> B[编写测试]
    B --> C[运行预提交检查]
    C --> D{Ruff 格式化}
    D --> E{类型检查}
    E --> F{运行测试}
    F --> G[提交代码]

资料来源:AGENTS.md:25-35

6. 核心组件详解

6.1 ChatCompletionRequest

ChatCompletionRequest 是用户查询的入口点,定义在 src/mistral_common/protocol/instruct/request.py 中。

属性类型描述
model`str \None`模型名称
messageslist[ChatMessageType]消息列表
response_formatResponseFormat响应格式
tools`list[Tool] \None`可用工具列表
tool_choiceToolChoice工具选择策略
truncate_for_context_lengthbool是否截断以适应上下文长度
continue_final_messagebool是否继续最终消息
reasoning_effort`ReasoningEffort \None`推理努力程度

资料来源:src/mistral_common/protocol/instruct/request.py:20-35

6.2 令牌化器版本

mistral-common 支持多个令牌化器版本:

版本图像支持音频支持说明
v1基础版本
v2改进版本
v3支持图像处理
v7支持图像和音频
v11进一步改进
v13最新版本

资料来源:src/mistral_common/tokens/tokenizers/mistral.py:1-50

6.3 特殊令牌

Tekken 令牌化器定义了一系列特殊令牌:

令牌名称用途
bos句子开始
eos句子结束
unk未知词元
eop段落结束
eod文档结束
begin_tool_results工具结果开始
end_tool_results工具结果结束
begin_tool_content工具内容开始
img图像标记
pad填充令牌

资料来源:src/mistral_common/tokens/tokenizers/tekken.py:1-30

7. 高级功能

7.1 多模态处理

#### 7.1.1 图像处理

使用图像令牌化器需要安装 image 依赖:

pip install "mistral-common[image]"

图像处理流程:

graph TD
    A[图像文件] --> B[ImageEncoder]
    B --> C[编码的图像数据]
    C --> D[Tokenized 对象]

#### 7.1.2 音频处理

使用音频令牌化器需要安装 audio 依赖:

pip install "mistral-common[audio]"

7.2 服务器模式

提供 FastAPI 服务器模式运行令牌化器:

pip install "mistral-common[server]"

启动服务器:

python -m mistral_common.experimental.app.main serve \
    --tokenizer-path /path/to/tokenizer \
    --validation-mode test \
    --host 127.0.0.1 \
    --port 8000

资料来源:src/mistral_common/experimental/app/main.py:1-50

7.3 Grammar 引导

使用 llguidance 创建语法引导的输出:

from mistral_common.guidance.grammar_factory import GrammarFactory

# 创建语法工厂
grammar_factory = GrammarFactory()

# 生成工具调用的语法
grammar = grammar_factory.create_tool_call_grammar(tools=[tool])

资料来源:AGENTS.md:12-15

8. 贡献指南

8.1 代码风格规范

规范要求
命名规范函数/变量使用 snake_case,类使用 PascalCase
类型提示必须使用 Python 类型提示
文档字符串必须使用 Google 风格文档字符串
导入规范使用绝对导入,禁止通配符导入

资料来源:AGENTS.md:18-30

8.2 提交规范

  • 使用祈使语气
  • 以动词开头
  • 保持简洁明了

8.3 向后兼容性

新增功能时必须确保不破坏现有功能。

资料来源:AGENTS.md:35-40

9. 许可协议

mistral-common 库采用 Apache 2.0 许可证。

重要提示:您不得以侵犯、侵犯或以其他方式违反任何第三方权利(包括知识产权)的方式使用本库或我们的模型。

资料来源:README.md:55-60

10. 相关资源

资源链接
官方文档https://mistralai.github.io/mistral-common/
PyPI 主页https://pypi.org/project/mistral-common/
GitHub Issueshttps://github.com/mistralai/mistral-common/issues
模型下载Hugging Face Hub

资料来源:[README.md:1]()

项目架构总览

mistral-common 是 Mistral AI 官方开源的预处理库,专为 Mistral 大语言模型(LLM)设计。该库提供了一套完整的工具集,用于将用户请求编码为模型可处理的 token 序列,同时支持图像、音频等多模态数据的处理 资料来源:[README.md:1]()。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 技术栈

继续阅读本节完整说明和来源证据。

概述

mistral-common 是 Mistral AI 官方开源的预处理库,专为 Mistral 大语言模型(LLM)设计。该库提供了一套完整的工具集,用于将用户请求编码为模型可处理的 token 序列,同时支持图像、音频等多模态数据的处理 资料来源:README.md:1

技术栈

类别技术选型
语言版本Python 3.10 - 3.14
包管理器uv
测试框架pytest
代码格式Ruff
类型检查mypy
持续集成GitHub Actions
协议许可Apache 2.0

资料来源:AGENTS.md:1-10

资料来源:[AGENTS.md:1-10]()

分词器系统详解

mistral-common 的分词器系统是连接文本请求与大语言模型的核心组件,负责将用户输入的文本转换为模型可处理的 token 序列,以及将模型的输出 token 序列还原为可读文本。该系统支持多种 tokenizer 版本,从早期的 SentencePiece 实现到最新的 Tekken 分词器,为 Mistral 各代模型提供统一的文本处理能力。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 分词器类型层次

继续阅读本节完整说明和来源证据。

章节 核心组件关系

继续阅读本节完整说明和来源证据。

章节 特殊标记定义

继续阅读本节完整说明和来源证据。

概述

mistral-common 的分词器系统是连接文本请求与大语言模型的核心组件,负责将用户输入的文本转换为模型可处理的 token 序列,以及将模型的输出 token 序列还原为可读文本。该系统支持多种 tokenizer 版本,从早期的 SentencePiece 实现到最新的 Tekken 分词器,为 Mistral 各代模型提供统一的文本处理能力。

分词器系统的主要职责包括:

  • 编码(Encode):将原始文本转换为 token ID 序列
  • 解码(Decode):将 token ID 序列转换回可读文本
  • 特殊标记处理:管理模型使用的特殊标记(如 <s><eos>[INST] 等)
  • 多模态支持:处理图像和音频内容(部分版本)
  • 请求验证:在编码前验证请求格式的正确性

资料来源:src/mistral_common/tokens/tokenizers/base.py

架构设计

分词器类型层次

分词器系统采用分层架构设计,从底层的字符级别编码到高层的请求处理,形成清晰的职责划分:

graph TD
    A[MistralTokenizer<br/>高层入口] --> B[InstructTokenizer<br/>指令编码器]
    B --> C[TekkenTokenizer<br/>核心分词器]
    C --> D[Base Model<br/>底层编码模型]
    
    E[SentencePieceTokenizer<br/>已废弃] -.-> D

资料来源:src/mistral_common/tokens/tokenizers/mistral.py

核心组件关系

组件文件位置职责状态
MistralTokenizermistral.py高层工厂类,负责版本选择和组件组装活跃
InstructTokenizerinstruct.py将请求编码为 token 序列活跃
TekkenTokenizertekken.py核心分词实现,支持 v11+活跃
SentencePieceTokenizersentencepiece.py旧版分词实现已废弃

Tekken 分词器

Tekken 是 Mistral 最新模型使用的分词器实现,相比 SentencePiece 具有更好的性能和更丰富的功能支持。

特殊标记定义

Tekken 分词器定义了一套完整的特殊标记系统,用于标识文本结构、工具调用、图像等不同内容类型:

标记名称标记字符串用途优先级
unk<unk>未知词元1
bos<s>序列起始2
eos</s>序列结束3
begin_inst[INST]指令开始4
end_inst[/INST]指令结束5
begin_tools[AVAILABLE_TOOLS]工具列表开始6
end_tools[/AVAILABLE_TOOLS]工具列表结束7
begin_tool_results[TOOL_RESULTS]工具结果开始8
end_tool_results[/TOOL_RESULTS]工具结果结束9
tool_calls[TOOL_CALLS]工具调用标记10
img[IMG]图像标记11
pad<pad>填充标记12
img_break[IMG_BREAK]图像截断标记13
img_end[IMG_END]图像结束标记14
prefix[PREFIX]FIM 前缀标记15
middle[MIDDLE]FIM 中间标记16
suffix[SUFFIX]FIM 后缀标记17
begin_system[SYSTEM_PROMPT]系统提示开始18
end_system[/SYSTEM_PROMPT]系统提示结束19
begin_tool_content[TOOL_CONTENT]工具内容开始20
begin_think[THINK]思考开始21
end_think[/THINK]思考结束22

资料来源:src/mistral_common/tokens/tokenizers/tekken.py

特殊标记策略

SpecialTokenPolicy 枚举控制分词器在解码时如何处理特殊标记:

class SpecialTokenPolicy(str, Enum):
    """What to do with special tokens when encoding/decoding."""
    
    IGNORE = "ignore"  # 解码时跳过特殊标记
    KEEP = "keep"      # 解码时保留特殊标记
    RAISE = "raise"    # 遇到特殊标记时抛出异常

使用示例:

from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.tokens.tokenizers.tekken import SpecialTokenPolicy

tokenizer = MistralTokenizer.v3(is_tekken=True)
tekken = tokenizer.instruct_tokenizer.tokenizer
tekken.special_token_policy = SpecialTokenPolicy.IGNORE

资料来源:src/mistral_common/tokens/tokenizers/tekken.py

核心 API

TekkenTokenizer 提供以下核心接口:

方法/属性返回类型说明
n_wordsint词表大小
special_idsset[int]特殊标记的 ID 集合
num_special_tokensint特殊标记数量
vocab()list[str]返回所有词表 token
id_to_piece(token_id)str将 token ID 转换为字符串
encode(text)Tokenized编码文本
decode(tokens)str解码 token 序列
is_byte(token_id)bool检查是否为字节 token
is_special(token)bool检查是否为特殊标记
get_special_token(s)int获取特殊标记的 ID

资料来源:src/mistral_common/tokens/tokenizers/base.py

Tokenized 数据结构

Tokenized 是分词结果的核心数据结构,用于在系统各组件间传递编码后的数据:

class Tokenized:
    """Represents a tokenized request or response."""
    
    model_config = ConfigDict(arbitrary_types_allowed=True)
    tokens: list[int]                    # Token ID 列表
    text: str | None = None              # 原始文本(解码时使用)
    prefix_ids: list[int] | None = None  # FIM 前缀 ID
    images: list[np.ndarray] = Field(default_factory=list)   # 关联图像
    audios: list[Audio] = Field(default_factory=list)        # 关联音频

资料来源:src/mistral_common/tokens/tokenizers/base.py

分词器版本演进

mistral-common 支持多个 tokenizer 版本,以适配不同代际的 Mistral 模型:

版本图像支持音频支持推荐用途
v1早期模型兼容
v2早期模型兼容
v3图像支持模型
v7高级推理模型
v11最新模型(推荐)
v13最新模型(最新)

版本创建逻辑:

if tokenizer.version == TokenizerVersion.v1:
    return MistralTokenizer(InstructTokenizerV1(tokenizer), ...)
elif tokenizer.version == TokenizerVersion.v11:
    return MistralTokenizer(
        InstructTokenizerV11(tokenizer, image_encoder=image_encoder, audio_encoder=audio_encoder),
        ...
    )

资料来源:src/mistral_common/tokens/tokenizers/mistral.py

MistralTokenizer 工厂类

MistralTokenizer 是系统的高层入口,提供版本感知的分词器创建能力:

创建方法

静态方法说明适用版本
v1()创建 v1 分词器v1
v2()创建 v2 分词器v2
v3()创建 v3 分词器v3
v7()创建 v7 分词器v7
v11()创建 v11 分词器v11
v13()创建 v13 分词器v13
from_path(path)从路径加载分词器所有版本

核心属性

属性类型说明
instruct_tokenizerInstructTokenizer指令编码器实例
validatorMistralRequestValidator请求验证器
request_normalizerInstructRequestNormalizer请求标准化器

资料来源:src/mistral_common/tokens/tokenizers/mistral.py

解码流程

解码过程处理 token 序列到文本的转换,需要正确处理特殊标记:

graph LR
    A[Token ID 序列] --> B{特殊标记策略?}
    B -->|KEEP| C[保留特殊标记字符串]
    B -->|IGNORE| D[跳过特殊标记]
    B -->|RAISE| E[抛出异常]
    C --> F[普通 token 解码]
    D --> F
    F --> G[拼接结果]
    C --> G

解码实现核心逻辑:

def decode(self, tokens: list[int], ...) -> str:
    decoded = []
    for t in tokens:
        if t in self._all_special_tokens:
            if special_token_policy == SpecialTokenPolicy.RAISE:
                raise ValueError("...")
            elif special_token_policy == SpecialTokenPolicy.KEEP:
                decoded.append(self._all_special_tokens[t]["token_str"])
            elif special_token_policy == SpecialTokenPolicy.IGNORE:
                continue
        else:
            decoded.append(self._model.decode([t - self.num_special_tokens]))
    return "".join(decoded)

资料来源:src/mistral_common/tokens/tokenizers/tekken.py

与 Guidance 系统集成

GrammarFactory 使用分词器生成语法约束,用于控制模型输出的格式。该集成需要 Tekken tokenizer 版本 >= v11:

class GrammarFactory:
    def __init__(self, tokenizer):
        assert_llguidance_installed()
        assert_jinja2_installed()
        self._tokenizer = tokenizer.instruct_tokenizer.tokenizer
        
        if not self.is_supported(tokenizer):
            raise ValueError(
                f"Guidance requires a Tekken tokenizer with version >= v11, "
                f"got {type(self._tokenizer).__name__} {self._tokenizer.version.value}"
            )
        self._llg_tokenizer = from_mistral_tokenizer(tokenizer)
        self._special_token_map = self._build_special_token_map()

资料来源:src/mistral_common/guidance/grammar_factory.py

使用示例

基础编码解码

from mistral_common.tokens.tokenizers.mistral import MistralTokenizer

# 加载分词器
tokenizer = MistralTokenizer.v3()

# 编码文本
tokenized = tokenizer.instruct_tokenizer.encode("Hello, how are you?")
print(f"Token IDs: {tokenized.tokens}")
print(f"Token count: {len(tokenized.tokens)}")

# 解码文本
decoded = tokenizer.instruct_tokenizer.decode(tokenized.tokens)
print(f"Decoded: {decoded}")

处理多模态内容(v11+)

from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.image import Image

tokenizer = MistralTokenizer.v11()

# 处理包含图像的请求
image = Image.from_url("https://example.com/image.jpg")
tokenized = tokenizer.instruct_tokenizer.encode(
    "Describe this image",
    images=[image]
)

资料来源:src/mistral_common/tokens/tokenizers/mistral.py

弃用说明

SentencePieceTokenizer

SentencePieceTokenizer 已弃用,仅保留用于向后兼容。推荐使用 Tekken 分词器:

特性SentencePieceTekken
性能较低
特殊标记支持有限完整
多模态支持
Guidance 集成
状态已废弃活跃

资料来源:src/mistral_common/tokens/tokenizers/sentencepiece.py

总结

mistral-common 的分词器系统提供了从底层编码到高层请求处理的完整能力栈。核心要点:

  1. Tekken 是推荐的实现:相比废弃的 SentencePiece,提供更好的性能和更完整的功能
  2. 版本分层设计:通过 MistralTokenizer 工厂类统一管理不同版本的分词器
  3. 特殊标记策略:通过 SpecialTokenPolicy 灵活控制特殊标记的解码行为
  4. 多模态扩展:v3+ 版本支持图像处理,v11+ 版本支持音频处理
  5. 与 Guidance 集成:v11+ 版本可与 GrammarFactory 配合进行结构化输出控制

资料来源:[src/mistral_common/tokens/tokenizers/base.py](https://github.com/mistralai/mistral-common/blob/main/src/mistral_common/tokens/tokenizers/base.py)

多模态处理(图像与音频)

mistral-common 库提供了完整的多模态处理能力,支持在文本对话中嵌入图像和音频内容。该模块是预处理管道的核心组成部分,负责将用户提供的多模态数据(图像、音频)转换为模型可处理的 token 序列。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 多模态处理流程

继续阅读本节完整说明和来源证据。

章节 核心组件关系

继续阅读本节完整说明和来源证据。

章节 安装依赖

继续阅读本节完整说明和来源证据。

概述

mistral-common 库提供了完整的多模态处理能力,支持在文本对话中嵌入图像和音频内容。该模块是预处理管道的核心组成部分,负责将用户提供的多模态数据(图像、音频)转换为模型可处理的 token 序列。

多模态处理的核心设计目标是:

  • 图像支持:从 v3 版本 tokenizer 开始引入,支持图像下载、预处理和 token 化
  • 音频支持:从 v7 版本 tokenizer 开始引入,支持音频编码和解码
  • 无缝集成:与现有的 ChatCompletionRequest 协议完全兼容

资料来源:src/mistral_common/tokens/tokenizers/mistral.py:1-50

架构设计

多模态处理流程

graph TD
    A[ChatCompletionRequest] --> B[请求验证 Validator]
    B --> C[请求标准化 Normalizer]
    C --> D{多模态类型判断}
    
    D -->|仅文本| E[InstructTokenizer - 纯文本编码]
    D -->|含图像| F[ImageEncoder + InstructTokenizerV3/V7/V11/V13/V15]
    D -->|含音频| G[AudioEncoder + InstructTokenizerV7/V11/V13/V15]
    D -->|图像+音频| H[ImageEncoder + AudioEncoder + 组合Tokenizer]
    
    E --> I[Tokenized 对象]
    F --> I
    G --> I
    H --> I
    
    I --> J[模型输入]

核心组件关系

组件文件位置职责
Tokenizedtokens/tokenizers/base.py多模态 token 化结果的数据结构
ImageEncodertokens/tokenizers/image.py图像编码器接口
AudioEncodertokens/tokenizers/audio.py音频编码器接口
MistralTokenizertokens/tokenizers/mistral.py综合 tokenizer,支持图像和音频
Image 工具类image.py图像下载和序列化工具
Audio 工具类audio.py音频处理和 mel-scale 转换

Tokenized 数据结构

多模态处理的结果通过 Tokenized 类表示,该类继承自 Pydantic BaseModel,支持灵活的多模态数据存储:

class Tokenized(MistralBase):
    """Represents the tokenized output of a tokenizer.
    
    Attributes:
        tokens: The token ids.
        text: The text representation of the tokens.
        prefix_ids: The prefix ids for FIM.
        images: The loaded images associated with the tokens.
        audios: The audio objects associated with the tokens.
    """
    model_config = ConfigDict(arbitrary_types_allowed=True)
    tokens: list[int]
    text: str | None = None
    prefix_ids: list[int] | None = None
    images: list[np.ndarray] = Field(default_factory=list)
    audios: list[Audio] = Field(default_factory=list)

字段说明

字段类型说明
tokenslist[int]token ID 序列,模型的核心输入
text`str \None`token 对应的文本表示
prefix_ids`list[int] \None`FIM(Fill-In-The-Middle)任务的 prefix token
imageslist[np.ndarray]预处理后的图像 NumPy 数组列表
audioslist[Audio]处理后的音频对象列表

资料来源:src/mistral_common/tokens/tokenizers/base.py:50-65

图像处理

安装依赖

图像处理需要安装 image 额外依赖:

pip install "mistral-common[image]"

ImageEncoder 接口

ImageEncoder 是一个抽象基类,定义了图像编码的标准接口:

class ImageEncoder(ABC):
    @abstractmethod
    def encode_images(self, images: list[np.ndarray]) -> list[ImageOutput]:
        """Encode a list of images into model input format."""
    
    @property
    @abstractmethod
    def image_token_id(self) -> int:
        """The token id for image tokens."""

图像处理工具类

mistral_common.image 模块提供了图像处理的核心工具函数:

class Image(MistralBase):
    """Image representation with download and serialization support."""
    url: str | None = None
    base64: str | None = None
    content: bytes | None = None

主要功能:

  • 图像下载:支持从 URL 下载图像内容
  • Base64 编码/解码:支持 base64 格式的图像数据
  • 预处理:将图像转换为 NumPy 数组格式
  • 序列化:支持图像数据的序列化和反序列化

资料来源:src/mistral_common/image.py:1-100

特殊 Token

图像相关的特殊 Token 定义在 SpecialTokens 类中:

Token标识用途
img[IMG]图像开始标记
img_break[IMG_BREAK]多图像分隔标记
img_end[IMG_END]图像结束标记

资料来源:src/mistral_common/tokens/tokenizers/base.py:100-110

音频处理

安装依赖

音频处理需要安装 audio 额外依赖:

pip install "mistral-common[audio]"

AudioEncoder 接口

AudioEncoder 是音频编码器的抽象基类:

class AudioEncoder(ABC):
    @abstractmethod
    def encode_audio(self, audio: Audio) -> AudioOutput:
        """Encode a single audio object into model input format."""

Audio 数据类

Audio 类是音频数据的核心表示:

class Audio(MistralBase):
    """Audio representation with mel-scale conversion support."""
    # 音频采样数据
    samples: np.ndarray
    # 采样率
    sample_rate: int
    # 编码格式
    format: str | None = None

主要功能:

  • 音频采样表示:以 NumPy 数组形式存储音频采样数据
  • 采样率管理:记录和验证音频采样率
  • Mel-scale 转换:支持梅尔频谱转换用于模型处理
  • 格式支持:支持多种音频编码格式

资料来源:src/mistral_common/audio.py:1-100

音频相关特殊 Token

Token标识用途
audio[AUDIO]音频 token 标记
begin_audio[BEGIN_AUDIO]音频内容开始
transcribe[TRANSCRIBE]转录指令
text_to_audio[NEXT_AUDIO_TEXT]文本转语音输出标记
audio_to_text[REPEAT_AUDIO_TEXT]语音转文本标记

资料来源:src/mistral_common/tokens/tokenizers/base.py:110-120

Tokenizer 版本与多模态支持

不同版本的 tokenizer 支持不同的多模态功能:

Tokenizer 版本图像支持音频支持特点
v1纯文本 tokenizer
v2纯文本 tokenizer
v3引入图像支持
v7引入音频支持
v11增强的多模态支持
v13最新稳定版本
v15最新版本

版本断言检查

def create_tokenizer(tokenizer_filename, image_encoder=None, audio_encoder=None):
    if tokenizer.version == TokenizerVersion.v3:
        assert image_encoder is not None, "Tokenizer version v3 requires image_encoder"
        assert audio_encoder is None, "Tokenizer version v3 does not support audio"
    elif tokenizer.version == TokenizerVersion.v7:
        # v7+ 支持音频编码器
        ...

资料来源:src/mistral_common/tokens/tokenizers/mistral.py:30-80

ChatCompletionRequest 中的多模态支持

ChatCompletionRequest 是多模态请求的入口点,通过 messages 字段携带多模态内容:

class ChatCompletionRequest(MistralBase):
    """Chat completion request with multimodal support."""
    
    model: str | None = None
    messages: list[ChatMessageType]  # 可包含图像/音频消息
    response_format: ResponseFormat = Field(default_factory=ResponseFormat)
    tools: list[Tool] | None = None
    tool_choice: ToolChoice = ToolChoiceEnum.auto
    truncate_for_context_length: bool = False
    continue_final_message: bool = False
    reasoning_effort: ReasoningEffort | None = None  # 推理控制参数

消息类型层次结构

  • UserMessage:用户消息,可包含文本、图像、音频
  • AssistantMessage:助手回复消息
  • SystemMessage:系统提示消息
  • ToolMessage:工具调用结果消息

完整编码流程

sequenceDiagram
    participant Client as 客户端
    participant Validator as MistralRequestValidator
    participant Normalizer as InstructRequestNormalizer
    participant Tokenizer as MistralTokenizer
    participant Encoder as Image/Audio Encoder
    participant Model as 底座模型

    Client->>Validator: ChatCompletionRequest (含多模态)
    Validator->>Validator: 验证消息结构
    Validator->>Validator: 验证工具定义
    Validator->>Normalizer: 验证通过的请求
    Normalizer->>Normalizer: 标准化消息格式
    Normalizer->>Tokenizer: InstructRequest
    alt 包含图像
        Tokenizer->>Encoder: 调用 ImageEncoder
        Encoder-->>Tokenizer: ImageOutput
    end
    alt 包含音频
        Tokenizer->>Encoder: 调用 AudioEncoder
        Encoder-->>Tokenizer: AudioOutput
    end
    Tokenizer->>Tokenizer: 生成 token 序列
    Tokenizer-->>Client: Tokenized 对象
    Client->>Model: tokens + images + audios

使用示例

基本图像编码

from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.image import Image
import numpy as np

# 初始化 tokenizer
tokenizer = MistralTokenizer.from_filename("path/to/tokenizer")

# 准备图像数据
image_array = np.random.randint(0, 255, (224, 224, 3), dtype=np.uint8)

# 创建 Tokenized 结果
tokenized = tokenizer.encode_images([image_array])

音频编码

from mistral_common.audio import Audio
from mistral_common.tokens.tokenizers.audio import AudioEncoder
import numpy as np

# 创建音频对象
audio = Audio(
    samples=np.random.randn(16000),  # 1秒音频,16kHz采样率
    sample_rate=16000
)

# 通过 tokenizer 编码
tokenized = tokenizer.encode(audio)

完整对话请求

from mistral_common.protocol.instruct.request import ChatCompletionRequest
from mistral_common.protocol.instruct.messages import UserMessage
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer

# 创建带图像的用户消息
request = ChatCompletionRequest(
    messages=[
        UserMessage(
            content="这张图片中有什么?",
            images=[image_data]  # 图像数据
        )
    ],
    model="mistral-large-latest"
)

# 编码请求
tokenizer = MistralTokenizer.from_filename("path/to/tokenizer")
tokenized = tokenizer.encode_chat_completion(request)

最佳实践

  1. 版本选择:生产环境建议使用 v13 或 v15 版本,以获得完整的多模态支持
  2. 图像预处理:在传入 tokenizer 前,确保图像尺寸符合模型要求
  3. 音频采样率:验证音频采样率与模型预期一致(通常为 16kHz 或 24kHz)
  4. 上下文截断:设置 truncate_for_context_length=True 以处理超长输入
  5. 错误处理:使用 InvalidRequestException 捕获验证错误

相关文档

资料来源:[src/mistral_common/tokens/tokenizers/mistral.py:1-50]()

指令与填充中间(FIM)协议

mistral-common 库支持两种主要的协议类型,用于处理不同场景下的请求:

章节 相关页面

继续阅读本节完整说明和来源证据。

概述

mistral-common 库支持两种主要的协议类型,用于处理不同场景下的请求:

协议类型用途请求类主要特性
Instruct 协议对话式指令任务ChatCompletionRequest支持多轮对话、工具调用、响应格式控制
FIM 协议填充中间代码补全FIMRequest支持 prompt/suffix 模式进行代码补全

Instruct 协议是用户查询 Instruct 请求的入口点,而 FIM(Fill-in-the-Middle)协议专门用于代码补全场景,模型需要在给定的前缀(prompt)和后缀(suffix)之间生成内容。资料来源:src/mistral_common/protocol/fim/request.py:1-15

来源:https://github.com/mistralai/mistral-common / 项目说明书

请求验证与标准化

请求验证与标准化是 mistral-common 库中处理用户输入请求的核心模块。该模块负责在将用户请求传递给模型之前,对其进行结构验证、内容校验和格式转换。mistral-common 通过 MistralRequestValidator 和 InstructRequestNormalizer 两个核心类来实现这一功能,确保请求符合 Mistral 模型的输入规范,同时为...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 MistralRequestValidator

继续阅读本节完整说明和来源证据。

章节 InstructRequestNormalizer

继续阅读本节完整说明和来源证据。

章节 验证架构

继续阅读本节完整说明和来源证据。

概述

请求验证与标准化是 mistral-common 库中处理用户输入请求的核心模块。该模块负责在将用户请求传递给模型之前,对其进行结构验证、内容校验和格式转换。mistral-common 通过 MistralRequestValidatorInstructRequestNormalizer 两个核心类来实现这一功能,确保请求符合 Mistral 模型的输入规范,同时为不同的 tokenizer 版本提供统一的支持。

该模块在整个处理流程中处于关键位置,属于预处理阶段的前置验证环节。验证失败时抛出自定义异常(如 InvalidRequestExceptionInvalidToolSchemaException 等),确保错误信息能够被上游调用方正确捕获和处理。资料来源:src/mistral_common/protocol/instruct/validator.py:1-50

核心组件

MistralRequestValidator

MistralRequestValidator 是一个泛型类,负责验证 ChatCompletionRequest 的结构和内容。它支持三种验证模式,通过 ValidationMode 枚举进行配置。资料来源:src/mistral_common/protocol/instruct/validator.py:19-22

验证模式用途特定行为
serving服务部署模式要求必须提供 model 参数
finetuning微调模式允许特定的微调参数组合
test测试/默认模式标准验证规则

InstructRequestNormalizer

InstructRequestNormalizer 负责将标准化的 ChatCompletionRequest 转换为 InstructRequest 格式。该类处理系统提示的聚合、消息的重组以及模型设置的提取。资料来源:src/mistral_common/protocol/instruct/normalize.py:1-100

请求验证流程

验证架构

graph TD
    A[ChatCompletionRequest] --> B[MistralRequestValidator]
    B --> C{验证模式}
    C -->|serving| D[检查 model 参数]
    C -->|其他| E[跳过 model 检查]
    D --> F[validate_messages]
    E --> F
    F --> G[validate_message_list_structure]
    F --> H[validate_message_list_content]
    G --> I[_validate_tools]
    H --> I
    I --> J[validate_model_settings]
    J --> K[返回 validated_request]
    I -.->|工具Schema无效| L[InvalidToolSchemaException]
    G -.->|结构错误| M[InvalidRequestException]

验证步骤详解

#### 1. 模型参数验证

serving 模式下,系统会检查请求是否包含 model 参数。如果缺失,将抛出 InvalidRequestException,提示"Model name parameter is required for serving mode"。资料来源:src/mistral_common/protocol/instruct/validator.py:67-69

if self._mode == ValidationMode.serving:
    if request.model is None:
        raise InvalidRequestException("Model name parameter is required for serving mode")

#### 2. 消息列表结构验证

_validate_message_list_structure 方法检查消息序列的逻辑完整性:

  • 确保消息以 UserMessage 开头
  • 验证 continue_final_message 标志与最后一条消息类型的兼容性
  • 检查角色交替的合法性(User → Assistant → User → ...)

资料来源:src/mistral_common/protocol/instruct/validator.py:35-42

#### 3. 消息内容验证

_validate_message_list_content 方法验证消息内容的有效性:

  • 检查消息内容非空
  • 验证工具调用的格式正确性
  • 确保角色与内容的逻辑一致性

资料来源:src/mistral_common/protocol/instruct/validator.py:43-44

#### 4. 工具定义验证

工具验证是该模块的重要组成部分,包含以下检查:资料来源:src/mistral_common/protocol/instruct/validator.py:55-57

验证项验证方法异常类型
函数 Schema 有效性Draft7Validator.check_schemaInvalidToolSchemaException
函数名称格式正则表达式 ^[a-zA-Z0-9_-]{1,64}$InvalidToolException
参数定义完整性检查 required 字段与参数存在性InvalidToolSchemaException
def _validate_function(self, function: Function) -> None:
    Draft7Validator.check_schema(function.parameters)
    if not re.match(r"^[a-zA-Z0-9_-]{1,64}$", function.name):
        raise InvalidToolException(...)

资料来源:src/mistral_common/protocol/instruct/validator.py:85-96

请求标准化流程

标准化架构

graph LR
    A[ChatCompletionRequest] --> B[InstructRequestNormalizer]
    B --> C[_aggregate_system_prompts]
    B --> D[_aggregate_messages]
    B --> E[build_settings]
    C --> F[system_prompt]
    D --> G[messages]
    E --> H[settings]
    F --> I[InstructRequest]
    G --> I
    H --> I

标准化器版本

mistral-common 支持多个标准化器版本,每个版本针对特定的 tokenizer 版本进行了优化:资料来源:src/mistral_common/protocol/instruct/normalize.py:80-100

标准化器系统提示位置工具调用+内容支持
InstructRequestNormalizer系统消息独立不支持
InstructRequestNormalizerV7消息开始处支持
class InstructRequestNormalizerV7(InstructRequestNormalizer):
    _system_prompt_in_begin: bool = True
    _allow_tool_call_and_content: bool = True

资料来源:src/mistral_common/protocol/instruct/normalize.py:84-87

消息聚合

#### 系统提示聚合

系统提示通过 _aggregate_system_prompts 方法从消息列表中提取并合并。当存在多个系统消息时,它们会被按顺序拼接为一个统一的系统提示。资料来源:src/mistral_common/protocol/instruct/normalize.py:40-60

#### 消息重组

_aggregate_messages 方法移除系统消息,返回仅包含用户消息和助手消息的列表。标准化过程会验证模型设置是否与当前标准化器兼容,不支持的设置将抛出 InvalidRequestException。资料来源:src/mistral_common/protocol/instruct/normalize.py:62-76

工具调用系统

ToolChoice 枚举

工具选择策略通过 ToolChoice 类型别名定义,支持多种模式:资料来源:src/mistral_common/protocol/instruct/tool_calls.py:20-30

枚举值描述备注
auto模型自动决定是否调用工具默认值
none禁用工具调用不使用任何工具
any至少调用一个工具已废弃,使用 required
required模型必须调用至少一个工具替代 any

NamedToolChoice

除了枚举选择外,还支持强制指定特定函数调用:资料来源:src/mistral_common/protocol/instruct/tool_calls.py:32-46

class NamedToolChoice(MistralBase):
    type: ToolTypes = ToolTypes.function
    function: FunctionName

工具定义

Tool 类定义了可用的工具,包含函数名称、描述和参数模式:资料来源:src/mistral_common/protocol/instruct/tool_calls.py:48-70

属性类型描述
typeToolTypes工具类型(当前仅支持 function)
functionFunction函数定义对象

请求转换器

OpenAI 格式转换

ChatCompletionRequest 提供了 to_openai() 方法用于转换为 OpenAI 兼容格式。该方法处理消息格式转换、工具定义重映射以及额外参数的追加。资料来源:src/mistral_common/protocol/instruct/request.py:60-90

def to_openai(self, **kwargs: Any) -> dict[str, Any]:
    r"""Convert the request messages and tools into the OpenAI format."""

转换示例

request = ChatCompletionRequest(
    messages=[UserMessage(content="Hello, how are you?")],
    temperature=0.15
)
request.to_openai(stream=True)
# 返回: {'temperature': 0.15, 'top_p': 1.0, 'response_format': {...}, ...}

资料来源:src/mistral_common/protocol/instruct/request.py:70-75

请求数据结构

ChatCompletionRequest

ChatCompletionRequest 是用户请求的入口数据结构:资料来源:src/mistral_common/protocol/instruct/request.py:20-40

字段类型默认值描述
modelstr \NoneNone模型名称(serving 模式必需)
messageslist[ChatMessageType]-消息列表
response_formatResponseFormatField(default_factory=ResponseFormat)响应格式
toolslist[Tool] \NoneNone可用工具列表
tool_choiceToolChoiceToolChoiceEnum.auto工具选择策略
truncate_for_context_lengthboolFalse是否截断以适应上下文长度
continue_final_messageboolFalse继续生成最后一条消息
reasoning_effortReasoningEffort \NoneNone推理努力程度

InstructRequest

标准化后的 InstructRequest 包含处理后的消息和系统提示:资料来源:src/mistral_common/protocol/instruct/normalize.py:15-25

属性类型描述
messageslist[UATS]处理后的消息列表
system_promptstr \None聚合后的系统提示
available_toolslist[Tool] \None可用工具
continue_final_messagebool是否继续最后消息
settingsModelSettings模型设置

与 Tokenizer 的集成

验证流程集成

MistralTokenizer 在编码请求时首先调用验证器:资料来源:src/mistral_common/tokens/tokenizers/mistral.py:1-50

sequenceDiagram
    participant User as 用户请求
    participant Validator as MistralRequestValidator
    participant Normalizer as InstructRequestNormalizer
    participant Encoder as InstructTokenizer
    
    User->>Validator: ChatCompletionRequest
    Validator->>Validator: validate_request()
    Validator-->>Normalizer: validated_request
    Normalizer->>Normalizer: from_chat_completion_request()
    Normalizer-->>Encoder: InstructRequest
    Encoder->>Encoder: encode()

版本适配

不同的 tokenizer 版本使用不同的标准化器和验证器组合:资料来源:src/mistral_common/tokens/tokenizers/mistral.py:20-60

Tokenizer 版本InstructTokenizer验证器标准化器
v1InstructTokenizerV1v1 验证器InstructRequestNormalizer
v2InstructTokenizerV2v2 验证器InstructRequestNormalizer
v3InstructTokenizerV3v3 验证器InstructRequestNormalizer
v7InstructTokenizerV7v7 验证器InstructRequestNormalizerV7
v11+InstructTokenizerV11+v11 验证器InstructRequestNormalizerV7

异常处理

异常类型层次

异常类基类触发场景
InvalidRequestExceptionException请求结构或内容验证失败
InvalidToolSchemaExceptionException工具 Schema 格式错误
InvalidToolExceptionException工具名称或定义无效

所有自定义异常定义在 mistral_common.exceptions 模块中,确保错误处理的一致性。资料来源:src/mistral_common/protocol/instruct/validator.py:80-95

使用示例

基本验证流程

from mistral_common.protocol.instruct.messages import UserMessage, AssistantMessage
from mistral_common.protocol.instruct.request import ChatCompletionRequest
from mistral_common.protocol.instruct.validator import MistralRequestValidator, ValidationMode

# 创建验证器
validator = MistralRequestValidator(mode=ValidationMode.test)

# 创建请求
request = ChatCompletionRequest(
    messages=[
        UserMessage(content="Hello how are you?"),
        AssistantMessage(content="I'm doing great!")
    ]
)

# 验证请求
validated_request = validator.validate_request(request)

带工具调用的请求

from mistral_common.protocol.instruct.tool_calls import ToolTypes, Function, Tool

tool = Tool(
    function=Function(
        name="get_current_weather",
        description="Get the current weather in a given location",
        parameters={
            "type": "object",
            "properties": {
                "location": {"type": "string", "description": "City name"}
            },
            "required": ["location"]
        }
    )
)

request = ChatCompletionRequest(
    messages=[UserMessage(content="What's the weather in Paris?")],
    tools=[tool],
    tool_choice=ToolChoiceEnum.auto
)

validated_request = validator.validate_request(request)

最佳实践

1. 验证模式选择

2. 工具定义规范

  • 函数名称仅包含字母、数字、下划线和连字符,长度不超过 64 字符
  • 使用 Draft7 JSON Schema 定义参数
  • 明确标记必需参数(required 字段)

3. 错误处理

try:
    validated_request = validator.validate_request(request)
except InvalidRequestException as e:
    logger.error(f"Invalid request: {e}")
except InvalidToolSchemaException as e:
    logger.error(f"Invalid tool schema: {e}")

4. 消息序列设计

  • 确保以 UserMessage 开始对话
  • 交替的角色顺序:User → Assistant → User → Assistant
  • 使用 continue_final_message=True 时,最后一条应为 AssistantMessage

相关模块索引

模块文件路径职责
验证器src/mistral_common/protocol/instruct/validator.py请求结构与内容验证
标准化器src/mistral_common/protocol/instruct/normalize.py请求格式转换
转换器src/mistral_common/protocol/instruct/converters.py格式转换辅助
工具调用src/mistral_common/protocol/instruct/tool_calls.py工具定义与选择
请求定义src/mistral_common/protocol/instruct/request.py请求数据结构
Tokenizersrc/mistral_common/tokens/tokenizers/mistral.py验证与编码集成

资料来源:[src/mistral_common/protocol/instruct/validator.py:35-42]()

语音与转录协议

语音与转录协议是 mistral-common 库中处理音频相关请求的核心组件。该协议定义了音频处理的标准化接口,支持语音转文本(Transcription)和文本转语音(Text-to-Speech)等多模态交互场景。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 模块组织结构

继续阅读本节完整说明和来源证据。

章节 协议层次关系

继续阅读本节完整说明和来源证据。

章节 TranscriptionRequest 数据模型

继续阅读本节完整说明和来源证据。

概述

语音与转录协议是 mistral-common 库中处理音频相关请求的核心组件。该协议定义了音频处理的标准化接口,支持语音转文本(Transcription)和文本转语音(Text-to-Speech)等多模态交互场景。

mistral-common 通过协议层与分词器层的协作,将音频数据与文本数据统一处理为模型可接受的 token 序列。音频处理功能主要在 TokenizerVersion.v7 及以上版本中可用,集成于 InstructTokenizerV7InstructTokenizerV11 等分词器实现中。 资料来源:src/mistral_common/tokens/tokenizers/mistral.py:1-100

协议架构

模块组织结构

语音与转录协议相关代码分布在以下核心模块中:

模块路径功能描述
src/mistral_common/protocol/transcription/request.py转录请求定义
src/mistral_common/tokens/tokenizers/audio.py音频分词器实现
src/mistral_common/audio.py音频处理工具类
src/mistral_common/tokens/tokenizers/base.py基础分词器抽象与特殊token定义

协议层次关系

graph TD
    A[用户请求] --> B[Protocol Layer 协议层]
    B --> C[TranscriptionRequest 转录请求]
    B --> D[SpeechRequest 语音请求]
    C --> E[Tokenizer Layer 分词器层]
    D --> E
    E --> F[InstructTokenizerV7/V11]
    E --> G[Audio Encoder 音频编码器]
    F --> H[Tokenized Output]
    G --> H

转录请求协议

TranscriptionRequest 数据模型

TranscriptionRequest 是转录任务的入口请求类型,继承自 BaseCompletionRequest。该请求模型封装了音频文件路径或音频数据以及转录相关的配置参数。 资料来源:src/mistral_common/protocol/transcription/request.py:1-30

class TranscriptionRequest(BaseCompletionRequest):
    r"""A valid transcription request to be tokenized."""
    
    audio: Audio  # 音频数据
    language: str | None = None  # 可选的语言参数

请求字段说明

字段名类型必填说明
audioAudio待转录的音频数据
language`str \None`音频语言提示,用于提高转录准确性
继承字段--继承自 BaseCompletionRequest 的基础字段

音频处理机制

Audio 类

Audio 类是音频数据的核心抽象,提供音频的下载、加载和序列化功能。 资料来源:src/mistral_common/audio.py:1-50

class Audio:
    r"""音频处理工具类
    
    Attributes:
        url: 音频资源的远程URL
        audio_bytes: 音频二进制数据
    """

音频分词器

AudioTokenizer 负责将音频数据转换为模型可处理的 token 序列。该分词器集成在 InstructTokenizerV7 及更高版本中。 资料来源:src/mistral_common/tokens/tokenizers/audio.py:1-50

#### 核心功能

功能描述
音频编码将音频数据编码为 token 序列
梅尔频谱转换支持 mel-scale 音频特征提取
多格式支持处理多种音频编码格式

特殊 Token 定义

在音频处理流程中,系统定义了一系列专用特殊 token,用于标识音频内容的边界和类型。这些 token 在 SpecialTokens 枚举中统一管理。 资料来源:src/mistral_common/tokens/tokenizers/base.py:1-80

Token 名称用途
audio[AUDIO]音频内容标识
begin_audio[BEGIN_AUDIO]音频内容开始标记
transcribe[TRANSCRIBE]转录指令标识
audio_to_text[REPEAT_AUDIO_TEXT]音频转文本标识
text_to_audio[NEXT_AUDIO_TEXT]文本转音频标识

Token 序列化格式

[AUDIO] + [BEGIN_AUDIO] + <音频编码数据> + [TRANSCRIBE] + [REPEAT_AUDIO_TEXT] + <转录文本>

分词器版本与音频支持

音频处理能力与分词器版本紧密关联,不同版本支持不同程度的音频功能。

分词器版本音频支持图像支持说明
v1基础文本分词器
v2基础文本分词器
v3仅支持图像
v7首次引入音频支持
v11增强的音视频支持

资料来源:src/mistral_common/tokens/tokenizers/mistral.py:1-100

版本检测与初始化

# 音频编码器在 v7 及以上版本可用
if tokenizer.version >= TokenizerVersion.v7:
    audio_encoder = AudioEncoder(...)
    
# 创建支持音频的分词器
return MistralTokenizer(
    InstructTokenizerV7(tokenizer, image_encoder=image_encoder, audio_encoder=audio_encoder),
    validator=validator,
    request_normalizer=request_normalizer,
)

请求处理流程

转录请求完整流程

sequenceDiagram
    participant U as 用户
    participant P as Protocol Layer
    participant T as Tokenizer
    participant A as Audio Encoder
    
    U->>P: TranscriptionRequest(audio_url)
    P->>P: 下载并加载音频数据
    P->>T: 调用 encode 方法
    T->>A: 音频特征提取
    A-->>T: 音频 token 序列
    T->>T: 合并特殊 token
    T-->>U: Tokenized 对象

验证与规范化

转录请求同样需要经过验证和规范化处理:

  1. 消息结构验证:确保请求格式符合协议规范
  2. 音频数据验证:检查音频数据的完整性和有效性
  3. 语言参数验证:验证语言代码的有效性

资料来源:src/mistral_common/protocol/instruct/validator.py:1-100

配置与部署

依赖安装

音频功能需要安装相应的可选依赖:

# 安装音频支持
pip install "mistral-common[audio]"

# 安装完整依赖(包括音频)
pip install "mistral-common[image,audio,hf-hub,sentencepiece,server]"

API 服务配置

在 FastAPI 应用中启用音频处理功能:

from mistral_common.experimental.app import create_app
from mistral_common.protocol.instruct.validator import ValidationMode

app = create_app(
    tokenizer="path/to/tokenizer",
    validation_mode=ValidationMode.serving,
    engine_url="http://127.0.0.1:8080",
    engine_backend="llama_cpp",
    timeout=60,
)

资料来源:src/mistral_common/experimental/app/main.py:1-80

最佳实践

音频数据准备

  1. 格式选择:推荐使用 MP3、WAV 或 OGG 格式
  2. 采样率:保持原始采样率,避免不必要的重采样
  3. 语言提示:提供准确的 language 参数可提高转录准确度

错误处理

错误类型处理建议
音频加载失败检查 URL 可访问性和格式支持
分词器版本不匹配确保使用 v7+ 分词器
音频过长根据模型上下文窗口进行分段处理

相关文档

资料来源:[src/mistral_common/tokens/tokenizers/mistral.py:1-100]()

Grammar Factory 与 LLM Guidance

Grammar Factory 是 mistral-common 库中用于生成结构化输出语法的核心组件。它通过结合 LLGuidance 库和 Jinja2 模板引擎,将 LLM 的输出约束为符合特定语法规则的结构化格式,支持工具调用、JSON Schema 验证以及思考模式(Thinking Mode)。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 组件关系

继续阅读本节完整说明和来源证据。

章节 核心依赖

继续阅读本节完整说明和来源证据。

章节 初始化与验证

继续阅读本节完整说明和来源证据。

概述

Grammar Factory 是 mistral-common 库中用于生成结构化输出语法的核心组件。它通过结合 LLGuidance 库和 Jinja2 模板引擎,将 LLM 的输出约束为符合特定语法规则的结构化格式,支持工具调用、JSON Schema 验证以及思考模式(Thinking Mode)。

该模块的主要功能包括:

  • 语法生成:基于 Jinja2 模板动态生成 Lark 语法规则
  • 特殊 token 处理:将 Tekken 分词器的特殊 token 映射为语法语法
  • 多模式支持:支持基础模式、思考模式(特殊 token)和纯文本思考模式
  • 工具调用约束:支持 function calling 的语法约束和并行调用

资料来源:src/mistral_common/guidance/grammar_factory.py:1-50

架构设计

组件关系

graph TD
    A[用户请求] --> B[ChatCompletionRequest]
    B --> C[GrammarFactory]
    C --> D{推理模式判断}
    D -->|非思考模式| E[base_grammar.lark.jinja]
    D -->|v13+ 思考模式| F[think_grammar.lark.jinja]
    D -->|v13 之前思考模式| G[plain_text_think_grammar.lark.jinja]
    E --> H[Jinja2 渲染]
    F --> H
    G --> H
    H --> I[Lark 语法字符串]
    I --> J[llguidance 引擎]
    J --> K[结构化输出]
    
    C --> L[TekkenTokenizer]
    L --> M[特殊Token映射]
    M --> H

核心依赖

依赖库用途
llguidance语法引导的 LLM 推理引擎
jinja2Lark 语法模板渲染
lark语法解析

GrammarFactory 类

初始化与验证

class GrammarFactory:
    def __init__(self, tokenizer: MistralTokenizer) -> None:
        """初始化语法工厂"""
        assert_llguidance_installed()
        assert_jinja2_installed()
        self._tokenizer = tokenizer.instruct_tokenizer.tokenizer
        
        if not self.is_supported(tokenizer):
            raise ValueError(
                f"Guidance requires a Tekken tokenizer with version >= v11, "
                f"got {type(self._tokenizer).__name__} {self._tokenizer.version.value}"
            )

关键约束

  • 仅支持 Tekken 分词器
  • 分词器版本必须 ≥ v11
  • 支持的版本包括 v11 和 v13

资料来源:src/mistral_common/guidance/grammar_factory.py:35-55

特殊 Token 映射

GrammarFactory 构建从特殊 token 名称到 Lark 语法语法的映射:

def _build_special_token_map(self) -> dict[str, str]:
    """构建特殊 token 名称到语法语法的映射"""
    return {
        self._tokenizer.id_to_piece(i): f"<[{i}]>" 
        for i in range(self._tokenizer.num_special_tokens)
    }

def _special_token_lark(self, token_name: str) -> str:
    """将特殊 token 名称转换为 lark 语法语法"""
    assert token_name in self._special_token_map
    return self._special_token_map[token_name]

def _get_optional_special_token_lark(self, token_name: str) -> str | None:
    """返回特殊 token 的 lark 语法语法,若不存在则返回 None"""
    return self._special_token_map.get(token_name)

资料来源:src/mistral_common/guidance/grammar_factory.py:57-70

版本支持检查

@staticmethod
def is_supported(tokenizer: MistralTokenizer) -> bool:
    """检查分词器是否支持 grammar guidance"""
    return (
        isinstance(tokenizer.instruct_tokenizer.tokenizer, TekkenTokenizer)
        and tokenizer.instruct_tokenizer.tokenizer.version >= TokenizerVersion.v11
    )

语法变体

系统支持三种语法变体,通过 _GrammarVariant 枚举定义:

class _GrammarVariant(str, Enum):
    base = "base"           # 基础模式
    plain_think = "plain_think"  # 纯文本思考模式
    think = "think"         # 思考模式(特殊 token)

变体选择逻辑

graph TD
    A[开始] --> B{是否启用推理?}
    B -->|否| C[base 变体]
    B -->|是| D{分词器版本 >= v13?}
    D -->|是| E[think 变体]
    D -->|否| F[plain_think 变体]
推理模式分词器版本选用变体
关闭任意base
开启≥ v13think
开启< v13plain_think

资料来源:src/mistral_common/guidance/grammar_factory.py:120-135

Lark 语法模板系统

模板文件

模板文件用途
base_grammar.lark.jinja基础模式的标准语法
think_grammar.lark.jinja支持特殊 token 思考标签的语法
plain_text_think_grammar.lark.jinja纯文本格式的思考语法

模板渲染参数

_cached_get_lark_from_jinja 函数接收以下参数生成 Lark 语法:

参数类型说明
templatestrJinja2 模板字符串
modestr输出模式(text/JSON)
fcallstr函数调用格式
json_schema_strstr \NoneJSON Schema 字符串
parallel_tool_callsbool是否支持并行工具调用
json_onlybool是否仅输出 JSON
think_with_jsonbool思考部分是否使用 JSON 格式
begin_think_tokenstr \None思考开始 token
end_think_tokenstr \None思考结束 token

资料来源:src/mistral_common/guidance/grammar_factory.py:140-165

缓存机制

系统使用 @lru_cache 装饰器缓存模板和语法结果,避免重复渲染:

@lru_cache()
def _cached_get_jinja_template(
    tokenizer_version: TokenizerVersion, 
    reasoning: bool
) -> str:
    """缓存获取 Jinja 模板"""
    if not reasoning:
        jinja_key = _GrammarVariant.base
    elif tokenizer_version < TokenizerVersion.v13:
        jinja_key = _GrammarVariant.plain_think
    else:
        jinja_key = _GrammarVariant.think
    
    return JINJA_PATHS[jinja_key].read_text(encoding="utf-8")

LLM Guidance Tokenizer 适配器

TekkenTokenizerAdapter

位于 src/mistral_common/guidance/tokenizer.py 的适配器将 Tekken 分词器转换为 llguidance 所需格式:

from mistral_common.guidance.tokenizer import from_mistral_tokenizer

# 将 Mistral 分词器转换为 llguidance 格式
adapter = from_mistral_tokenizer(mistral_tokenizer)

资料来源:src/mistral_common/guidance/tokenizer.py

使用流程

sequenceDiagram
    participant U as 用户
    participant GF as GrammarFactory
    participant TK as TekkenTokenizer
    participant JN as Jinja2
    participant LK as Lark 语法
    participant LG as LLGuidance

    U->>GF: 创建 GrammarFactory 实例
    GF->>TK: 获取 instruct_tokenizer
    TK-->>GF: 返回 TekkenTokenizer
    GF->>GF: 构建特殊 token 映射
    
    U->>GF: 调用 get_lark_grammar()
    GF->>GF: 判断推理模式和版本
    GF->>JN: 加载并渲染 Jinja 模板
    JN-->>GF: 返回 Lark 语法字符串
    GF-->>U: 返回 Lark 语法
    
    U->>LG: 使用 Lark 语法进行推理
    LG-->>U: 返回结构化输出

API 参考

GrammarFactory 主要方法

方法说明
is_supported(tokenizer)检查分词器是否支持
get_lark_grammar(...)生成 Lark 语法字符串
_build_special_token_map()构建特殊 token 映射
_special_token_lark(token_name)转换特殊 token 为语法
_get_optional_special_token_lark(token_name)可选的 token 转换

get_lark_grammar 方法签名

def get_lark_grammar(
    self,
    mode: str,
    json_schema_str: str | None = None,
    fcall: str | None = None,
    parallel_tool_calls: bool = False,
    json_only: bool = False,
    think_with_json: bool = False,
    begin_think_token: str | None = None,
    end_think_token: str | None = None,
) -> str:
    """生成 Lark 语法字符串"""

工具调用支持

GrammarFactory 原生支持 function calling 场景:

grammar = grammar_factory.get_lark_grammar(
    mode="function_call",
    json_schema_str=tool.parameters,  # JSON Schema
    fcall="auto",  # 工具选择模式
    parallel_tool_calls=True,  # 并行调用
)

工具选择模式

模式说明
auto模型自动选择工具
none不使用工具
required强制使用至少一个工具
any任意工具(已废弃)

资料来源:src/mistral_common/protocol/instruct/tool_calls.py:40-55

最佳实践

1. 分词器版本检查

from mistral_common.tokens.tokenizers.mistral import TokenizerVersion

if tokenizer.instruct_tokenizer.tokenizer.version >= TokenizerVersion.v11:
    factory = GrammarFactory(tokenizer)
else:
    raise ValueError("不支持的分词器版本")

2. 模板缓存利用

系统自动缓存渲染结果,重复调用应使用相同参数:

# 推荐:批量使用相同配置
grammar1 = factory.get_lark_grammar(mode="json", json_schema_str=schema)
grammar2 = factory.get_lark_grammar(mode="json", json_schema_str=schema)  # 使用缓存

3. 特殊 Token 验证

使用可选方法处理可能不存在的 token:

token_lark = factory._get_optional_special_token_lark("BOS")
if token_lark is None:
    # 处理 token 不存在的情况
    pass

局限性

  1. 分词器限制:仅支持 Tekken 分词器 v11 及以上版本
  2. 依赖要求:必须安装 llguidance 和 jinja2
  3. 思考模式版本差异:不同分词器版本使用不同的思考语法模板

相关文件

文件路径说明
src/mistral_common/guidance/grammar_factory.py核心语法工厂实现
src/mistral_common/guidance/tokenizer.pyllguidance 分词器适配器
src/mistral_common/guidance/data/*.lark.jinja语法模板文件
src/mistral_common/protocol/instruct/tool_calls.py工具调用定义

资料来源:[src/mistral_common/guidance/grammar_factory.py:1-50]()

实验性功能(工具调用、思考解析、FastAPI 服务)

mistral-common 的实验性功能模块(src/mistralcommon/experimental/)提供了一套用于处理大语言模型推理请求的扩展能力,包括工具调用解析、思考解析以及基于 FastAPI 的本地推理服务。这些功能属于实验性质,旨在为开发者提供更灵活的方式来与 Mistral 模型进行交互,特别是在处理复杂的多轮对话、函数调用和模型思维链方面。

章节 相关页面

继续阅读本节完整说明和来源证据。

概述

mistral-common 的实验性功能模块(src/mistral_common/experimental/)提供了一套用于处理大语言模型推理请求的扩展能力,包括工具调用解析思考解析以及基于 FastAPI 的本地推理服务。这些功能属于实验性质,旨在为开发者提供更灵活的方式来与 Mistral 模型进行交互,特别是在处理复杂的多轮对话、函数调用和模型思维链方面。

实验性功能的主要设计目标是:

  • 提供独立于核心 tokenization 流水线的专用解析器
  • 支持通过 HTTP API 快速部署和测试 tokenizer
  • 为工具调用和思考模式提供标准化解析接口

资料来源:AGENTS.md

模块架构

实验性功能模块的整体架构由三个核心组件构成,它们各自承担不同的职责:

graph TD
    A[experimental 模块] --> B[工具调用解析]
    A --> C[思考解析]
    A --> D[FastAPI 应用]
    
    D --> D1[main.py 入口]
    D --> D2[routers.py 路由]
    D --> D3[models.py 数据模型]
    
    B --> B1[tools.py]
    C --> C1[think.py]
    
    B1 -.->|使用| E[protocol/instruct/tool_calls.py]
    C1 -.->|使用| F[tokens/tokenizers/tekken.py]

资料来源:src/mistral_common/experimental/

资料来源:[AGENTS.md](https://github.com/mistralai/mistral-common/blob/main/AGENTS.md)

数据文件与模型版本管理

mistral-common 库中的数据文件与模型版本管理系统负责管理分词器(Tokenizer)的配置数据、词汇表(Vocabulary)以及不同模型版本之间的兼容性适配。该系统通过版本化的数据文件和版本感知的构建器模式,确保库能够支持从 v1 到 v13 的多种 Tekken 分词器版本。

章节 相关页面

继续阅读本节完整说明和来源证据。

概述

mistral-common 库中的数据文件与模型版本管理系统负责管理分词器(Tokenizer)的配置数据、词汇表(Vocabulary)以及不同模型版本之间的兼容性适配。该系统通过版本化的数据文件和版本感知的构建器模式,确保库能够支持从 v1 到 v13 的多种 Tekken 分词器版本。

数据文件存放在 src/mistral_common/data/ 目录下,主要包含两类资源:词汇表 JSON 文件(如 tekken_240718.jsontekken_240911.json)以及 SentencePiece 模型文件(如 mistral_instruct_tokenizer_241114.model.v7)。

资料来源:AGENTS.md

资料来源:[AGENTS.md](https://github.com/mistralai/mistral-common/blob/main/AGENTS.md)

失败模式与踩坑日记

保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

high 来源证据:[BUG: MistralCommonTokenizer from transformers is not supported by trl SFT]

可能影响授权、密钥配置或安全边界。

medium 来源证据:[BUG]: Tests in the tarball downloaded from the PYPI page fail because the samples directory doesn't exist

可能增加新用户试用和生产接入成本。

medium 来源证据:[BUG]: test_hertz_to_mel_array fails: Arrays are not equal

可能增加新用户试用和生产接入成本。

medium 来源证据:[BUG]: test_openai_chat_fields fails: AssertionError: assert {'audio', 'ex...on_call', ...} == {'audio', 'ex...on_call'…

可能增加新用户试用和生产接入成本。

Pitfall Log / 踩坑日志

项目:mistralai/mistral-common

摘要:发现 15 个潜在踩坑项,其中 1 个为 high/blocking;最高优先级:安全/权限坑 - 来源证据:[BUG: MistralCommonTokenizer from transformers is not supported by trl SFT]。

1. 安全/权限坑 · 来源证据:[BUG: MistralCommonTokenizer from transformers is not supported by trl SFT]

  • 严重度:high
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:[BUG: MistralCommonTokenizer from transformers is not supported by trl SFT]
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 建议检查:来源问题仍为 open,Pack Agent 需要复核是否仍影响当前版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_750d0089d9e14ad385e0f49195987796 | https://github.com/mistralai/mistral-common/issues/148 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

2. 安装坑 · 来源证据:[BUG]: Tests in the tarball downloaded from the PYPI page fail because the samples directory doesn't exist

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:[BUG]: Tests in the tarball downloaded from the PYPI page fail because the samples directory doesn't exist
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_b87372316a944057aa9d5cf9ae8797b3 | https://github.com/mistralai/mistral-common/issues/209 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

3. 安装坑 · 来源证据:[BUG]: test_hertz_to_mel_array fails: Arrays are not equal

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:[BUG]: test_hertz_to_mel_array fails: Arrays are not equal
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_03f994c9b8a649a0a7723f5a7ac9a9c0 | https://github.com/mistralai/mistral-common/issues/210 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

4. 安装坑 · 来源证据:[BUG]: test_openai_chat_fields fails: AssertionError: assert {'audio', 'ex...on_call', ...} == {'audio', 'ex...on_call'…

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:[BUG]: test_openai_chat_fields fails: AssertionError: assert {'audio', 'ex...on_call', ...} == {'audio', 'ex...on_call', ...}
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_598dfde98fb44c46b9d95e5ee2a66d69 | https://github.com/mistralai/mistral-common/issues/211 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

5. 能力坑 · 能力判断依赖假设

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:README/documentation is current enough for a first validation pass.
  • 对用户的影响:假设不成立时,用户拿不到承诺的能力。
  • 建议检查:将假设转成下游验证清单。
  • 防护动作:假设必须转成验证项;没有验证结果前不能写成事实。
  • 证据:capability.assumptions | github_repo:786756993 | https://github.com/mistralai/mistral-common | README/documentation is current enough for a first validation pass.

6. 维护坑 · 来源证据:v1.11.1: Patch for agentic use

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个维护/版本相关的待验证问题:v1.11.1: Patch for agentic use
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_2858129b86914e6090beed86fafe6db7 | https://github.com/mistralai/mistral-common/releases/tag/v1.11.1 | 来源类型 github_release 暴露的待验证使用条件。

7. 维护坑 · 来源证据:v1.8.7: Refactoring and bug fixes.

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个维护/版本相关的待验证问题:v1.8.7: Refactoring and bug fixes.
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_cbca40b0e8be4f20a899d193e200fdd3 | https://github.com/mistralai/mistral-common/releases/tag/v1.8.7 | 来源类型 github_release 暴露的待验证使用条件。

8. 维护坑 · 维护活跃度未知

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:未记录 last_activity_observed。
  • 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
  • 建议检查:补 GitHub 最近 commit、release、issue/PR 响应信号。
  • 防护动作:维护活跃度未知时,推荐强度不能标为高信任。
  • 证据:evidence.maintainer_signals | github_repo:786756993 | https://github.com/mistralai/mistral-common | last_activity_observed missing

9. 安全/权限坑 · 下游验证发现风险项

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:下游已经要求复核,不能在页面中弱化。
  • 建议检查:进入安全/权限治理复核队列。
  • 防护动作:下游风险存在时必须保持 review/recommendation 降级。
  • 证据:downstream_validation.risk_items | github_repo:786756993 | https://github.com/mistralai/mistral-common | no_demo; severity=medium

10. 安全/权限坑 · 存在评分风险

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:风险会影响是否适合普通用户安装。
  • 建议检查:把风险写入边界卡,并确认是否需要人工复核。
  • 防护动作:评分风险必须进入边界卡,不能只作为内部分数。
  • 证据:risks.scoring_risks | github_repo:786756993 | https://github.com/mistralai/mistral-common | no_demo; severity=medium

11. 安全/权限坑 · 来源证据:v1.10.0: Tokenizer v15, Reasoning Effort and Python 3.14

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:v1.10.0: Tokenizer v15, Reasoning Effort and Python 3.14
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_c55c5c2d9aae479b96c76416b6740fee | https://github.com/mistralai/mistral-common/releases/tag/v1.10.0 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

12. 安全/权限坑 · 来源证据:v1.8.6: rm Python 3.9, bug fixes.

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:v1.8.6: rm Python 3.9, bug fixes.
  • 对用户的影响:可能影响升级、迁移或版本选择。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_ffc1eeb338274f6095e43203b2c2e785 | https://github.com/mistralai/mistral-common/releases/tag/v1.8.6 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

13. 安全/权限坑 · 来源证据:v1.9.0 - Stream my audio 🎙️

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:v1.9.0 - Stream my audio 🎙️
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 建议检查:来源显示可能已有修复、规避或版本变化,说明书中必须标注适用版本。
  • 防护动作:不得脱离来源链接放大为确定性结论;需要标注适用版本和复核状态。
  • 证据:community_evidence:github | cevd_bad0c0ee58ac4386b5bcc2d2c9d226e8 | https://github.com/mistralai/mistral-common/releases/tag/v1.9.0 | 来源类型 github_release 暴露的待验证使用条件。

14. 维护坑 · issue/PR 响应质量未知

  • 严重度:low
  • 证据强度:source_linked
  • 发现:issue_or_pr_quality=unknown。
  • 对用户的影响:用户无法判断遇到问题后是否有人维护。
  • 建议检查:抽样最近 issue/PR,判断是否长期无人处理。
  • 防护动作:issue/PR 响应未知时,必须提示维护风险。
  • 证据:evidence.maintainer_signals | github_repo:786756993 | https://github.com/mistralai/mistral-common | issue_or_pr_quality=unknown

15. 维护坑 · 发布节奏不明确

  • 严重度:low
  • 证据强度:source_linked
  • 发现:release_recency=unknown。
  • 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
  • 建议检查:确认最近 release/tag 和 README 安装命令是否一致。
  • 防护动作:发布节奏未知或过期时,安装说明必须标注可能漂移。
  • 证据:evidence.maintainer_signals | github_repo:786756993 | https://github.com/mistralai/mistral-common | release_recency=unknown

来源:Doramagic 发现、验证与编译记录