跳到主要内容

Mistral AI

Mistral AI 开发并托管 Mistral 模型系列。AISIX 使应用能够使用网关签发的调用方密钥调用其 Chat 和兼容 API 接口。

准备工作

开始前,请准备以下内容:

  • 一套 AISIX 环境:
    • 对于 AISIX Cloud,需要一个已关联网关的环境和具有写入作用域的 Admin Token。对于 On-Premises,请按照 AISIX Cloud 快速入门操作。如需申请 Hybrid Cloud 访问权限,请联系 API7
    • 对于开源 AISIX 网关,请准备本地 AISIX 安装,或使用开源 AISIX 网关快速入门中的 Docker 环境。配置网关以加载声明式资源文件。
  • Mistral 控制台获取的 Mistral API Key。
  • curljq

使用 AISIX Cloud 配置

导出 AISIX Cloud 连接信息:

# AISIX_CP 是 Admin API 基础 URL;应包含 /api,且末尾不带斜杠
# 本地 On-Premises 快速入门使用 http://localhost:8080/api
export AISIX_CP="YOUR_AISIX_CLOUD_ADMIN_API_URL"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export ENV_ID="YOUR_ENVIRONMENT_ID"

为 Mistral 支持的 chat-completions 路由创建服务提供方密钥、模型别名和调用方 API Key。

由于 Mistral 提供兼容 OpenAI 的 API,AISIX 通过 openai 适配器连接,并将 Mistral API 根地址用作 api_base

创建服务提供方密钥

创建用于存储 Mistral 凭证和 API 根地址的服务提供方密钥:

# 请替换为实际值
export MISTRAL_API_KEY="YOUR_PROVIDER_API_KEY"

PROVIDER_KEY_ID=$(curl -sS -X POST "$AISIX_CP/provider_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "mistral-prod",
"provider": "mistral",
"api_key": "'"${MISTRAL_API_KEY}"'",
"api_base": "https://api.mistral.ai/v1",
"allowed_environments": ["'"${ENV_ID}"'"]
}' | jq -r '.provider_key.id')

echo "$PROVIDER_KEY_ID"

providermistral。AISIX Cloud Admin API 会从目录服务提供方推导适配器;适配器字段仅接受用于 BYO 服务提供方密钥。

api_key 存储 Mistral API Key。该值遵循服务提供方密钥中的凭证处理行为。

api_base 已包含 /v1 路径。AISIX 会向其追加 /chat/completions。对于此目录服务提供方,该字段是可选的,因为省略时 AISIX Cloud Admin API 会填入相同的值;但示例显式设置该字段,使上游根地址在资源中保持可见。

该命令会把返回的服务提供方密钥 ID 保存到 PROVIDER_KEY_ID

创建模型

-latest 结尾的 Mistral 模型 ID 会跟踪该模型的最新快照。如需固定特定版本,请使用 Mistral 模型列表中带日期的模型 ID。

创建调用方将在请求中发送的模型别名:

MODEL_ID=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/models" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "mistral-large-prod",
"model_name": "mistral-large-latest",
"provider_key_id": "'"${PROVIDER_KEY_ID}"'"
}' | jq -r '.model.id')

echo "$MODEL_ID"

display_name 是调用方在 model 中发送的别名。

model_name 是 Mistral 模型 ID,例如 mistral-large-latestmistral-small-latest。如果对 mistral-small-latest 使用结构化推理,请先阅读了解结构化响应,再启用该功能。

provider_key_id 将别名关联到 Mistral 服务提供方密钥。

创建调用方 API Key

创建能够访问该模型别名的调用方 API Key。明文密钥由服务器生成,并只在响应中返回一次,请安全保存:

AISIX_API_KEY=$(curl -sS -X POST "$AISIX_CP/environments/$ENV_ID/api_keys" \
-H "Authorization: Bearer $AISIX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_name": "mistral-caller",
"allowed_models": ["'"${MODEL_ID}"'"]
}' | jq -r '.plaintext')

echo "$AISIX_API_KEY"

allowed_models 值必须引用上一步保存的模型 ID。

网关会自动获取新资源,无需重启。

使用开源 AISIX 网关配置

导出上游凭证,并选择应用将发送给网关的调用方 API Key:

export MISTRAL_API_KEY="YOUR_PROVIDER_API_KEY"
export CALLER_API_KEY="YOUR_CALLER_API_KEY"

为该服务提供方创建完整的声明式资源文件:

resources.yaml
_format_version: "1"

provider_keys:
- display_name: "mistral-prod"
provider: "mistral"
adapter: "openai"
api_key: ${MISTRAL_API_KEY}
api_base: "https://api.mistral.ai/v1"

models:
- display_name: "mistral-large-prod"
provider: "mistral"
model_name: "mistral-large-latest"
provider_key: "mistral-prod"

api_keys:
- display_name: "mistral-caller"
key_env: CALLER_API_KEY
allowed_models:
- "mistral-large-prod"

如果 AISIX 安装在本地,请在加载前验证文件:

aisix validate --resources resources.yaml

验证后,在网关进程环境中提供文件引用的环境变量,再启动网关。仅当这些变量已经可供进程使用时,才重新加载现有网关;否则,请使用更新后的环境重启网关。

如果使用 Docker,请调整开源 AISIX 网关快速入门中的验证和启动命令。挂载此 resources.yaml 文件,并在两条命令中使用 -e 传入它引用的每个环境变量。资源加载后,准备下文共用的验证请求:

export AISIX_API_KEY="$CALLER_API_KEY"

验证服务提供方连接

导出 AISIX 网关 Origin:

# 本地快速入门使用 http://127.0.0.1:3000
export AISIX_PROXY="YOUR_AISIX_GATEWAY_ORIGIN"

通过 AISIX 代理发送 Chat Completions 请求:

curl -sS -X POST "$AISIX_PROXY/v1/chat/completions" \
-H "Authorization: Bearer ${AISIX_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "mistral-large-prod",
"messages": [
{
"role": "user",
"content": "Say hello from Mistral."
}
]
}'

网关返回兼容 OpenAI 的响应,其中会回显面向调用方的别名 mistral-large-prod。如果请求失败,请检查服务提供方密钥的 api_keyapi_base,以及 model_name 中的 Mistral 模型 ID。

了解结构化响应

message.content 或每个流式 delta.content 为字符串时,标准 Mistral Chat 响应可通过规范化 AISIX 端点正常工作。文本和 OpenAI 风格的图片输入块会转发给 Mistral Large 3 等兼容的多模态模型。

当前 Mistral 推理模型可能返回不同的数据结构。当设置 reasoning_effort: "high" 时,Mistral 会在 content 中返回由 ThinkChunkTextChunk 对象组成的数组。AISIX OpenAI 适配器当前要求内容为字符串,因此会对这些响应返回上游解码错误。这同样适用于 /v1/chat/completions 以及最终使用同一 Chat 适配器的 Responses 和 Messages 桥接。response.reasoning_field 覆盖设置无法转换内容数组。

对于 mistral-small-latest 等支持推理的模型,请在规范化端点上使用 reasoning_effort: "none"。如需保留结构化推理并重放完整思考历史,请通过 /passthrough/mistral/chat/completions 调用 Mistral 原生 Chat 协议,并发送上游 Mistral 模型 ID,而非 AISIX 别名。透传会保留响应体,但会进行缓冲,因此原生流式响应只会在上游数据流结束后返回。

Mistral 还支持大于 1n,但 AISIX 在规范化 Chat 路由上只返回第一个选项。当应用需要全部选项或其他服务提供方原生响应结构时,请使用透传。

端点覆盖

本指南中的模型别名对应 Chat 模型。请为嵌入、转录、语音或其他能力创建使用相应 Mistral 模型 ID 的独立别名。

路由使用 Mistral 别名时的行为
/v1/chat/completions支持内容为标量的响应,包括 stream: true、函数工具,以及所选模型支持的文本或图片输入。不支持结构化推理内容数组。
/v1/responses通过 Responses 桥接支持。该桥接会转换为 Chat Completions,而非调用原生 Mistral Responses API。没有 Chat 等价项的字段会被忽略,且仍受结构化推理限制。
/v1/messages通过转换为 Chat Completions,为采用 Anthropic 协议的调用方提供支持。该别名以 OpenAI 为后端,因此 /v1/messages/count_tokens 会返回 400 错误。
/v1/embeddings使用 mistral-embed 等独立别名时支持。AISIX 会转发 dimensions,但 Mistral 将缩减维度字段命名为 output_dimension;如需使用,请配置请求参数重命名。
/v1/audio/transcriptions使用 voxtral-mini-latest 等转录别名时支持。AISIX 会中继 Mistral 响应,包括服务提供方特定字段,但会缓冲流式响应,而非逐步中继事件。
/v1/audio/translations不支持,因为 Mistral 未发布此路由。
/v1/audio/speech路径可到达 Mistral TTS,但协议不兼容 OpenAI。请发送 voice_id 等原生字段,并预期获得 Base64 JSON 或经过缓冲的 Mistral SSE 负载,而非原始音频字节。AISIX 不会转换该协议。
/v1/files支持上传、列出、检索、删除和内容下载。Mistral 的 /v1/files/{id}/url 签名 URL 路由可通过透传访问,但需要原始 Mistral 文件 ID。透传不会解码规范化上传所返回的 AISIX 路由 ID。
/v1/batches不支持。AISIX 转发 OpenAI /v1/batches 路径,而 Mistral 使用 /v1/batch/jobs
/v1/fine_tuning/jobs不支持。AISIX 转发 OpenAI 作业接口并要求 training_file;Mistral 当前公开 API 未发布兼容的微调作业路由。
/v1/completions不支持。Mistral 代码补全使用原生 /v1/fim/completions 协议。
/v1/images/generations会返回 400 错误,因为该路由只接受 openai 服务提供方模型。Mistral 图片生成是内置工具,而非此 OpenAI 图片路由。
/v1/rerank会返回 400 错误,因为该路由不接受 mistral 服务提供方。Mistral 提供分类 API,而非此重排协议。
/passthrough/mistral/*支持原生 Mistral 路由及原始请求和响应体。服务提供方 SSE 响应会被缓冲,而非逐步中继。请参阅服务提供方透传

透传适用于 Mistral 原生 OCR、内容审核、分类、FIM、批处理、Agents、Conversations 和结构化推理。例如,/passthrough/mistral/ocr/passthrough/mistral/v1/ocr 都会解析为 https://api.mistral.ai/v1/ocr,因为 AISIX 会移除一个重复的版本路径段。

AISIX 不会重写透传请求体中的 model 值。它会借用调用方可访问的第一个 Mistral 模型别名所关联的基础 URL 和凭证。如果配置了多个 Mistral 账号或基础地址,请将调用方密钥限定到目标别名。透传用量记录的输入和输出 Token 以及计算成本均为零。

后续步骤

现在,你已将 AISIX 连接到 Mistral,并验证了模型别名。接下来可阅读以下指南: