AI 工具

Mistral API:查询账号可用模型并选择默认项

GET /v1/models 列出当前账号可见模型,再按偏好顺序挑选默认值(例如 mistral-small-latest)。部署前把「默认模型」写进配置,而不是写死过期 ID。

BINBHO · 图文教程

GET /v1/models 列出当前账号可见模型,再按偏好顺序挑选默认值(例如 mistral-small-latest)。部署前把「默认模型」写进配置,而不是写死过期 ID。

先看清成品

  • mock 返回列表并 pick 到 mistral-small-latest。
  • 2 项 pytest 通过。

合规提醒:面向用户的助手原名 Le Chat,官方称已更名为 Vibe(入口与账号保留,以官网公告为准);开发调用走 Mistral API(Studio 管理密钥)。密钥勿入库;生成内容需人工审,避免违法与侵权输出。免费额度与价格以 Studio/官网为准,本文不编造。

运行说明:无正式 MISTRAL_API_KEY。A/B 用本地 mock;对官方 api.mistral.ai 无效密钥实测 HTTP 401。C 为文档粘贴体积守卫。2026-10-23(Asia/Shanghai)pytest 通过。

做完之后你会得到什么?

成果 说明
pick_model.py 模型选择
mock_mistral.py 假服务
test_104b.py 测试

需要准备哪些环境?

项目 说明
Python 3.10+
环境变量 MISTRAL_API_KEY

关键事实

事实 来源
模型 ID 与别名(*-latest)以 Models 文档为准 官方
账号可见集合随套餐变化 实践
挑选逻辑在客户端,不保证该模型适合所有任务 重要

文件结构

104-mistral-le-chat-B-src/
├── pick_model.py
├── mock_mistral.py
└── test_104b.py

第 1 步:选择脚本

#!/usr/bin/env python3
"""List Mistral models and pick a default by preference order."""
from __future__ import annotations
import argparse, json, os, sys, urllib.error, urllib.request

PREFER = ["mistral-small-latest", "open-mistral-nemo", "mistral-large-latest"]

def list_models(base, key):
    req = urllib.request.Request(
        f"{base.rstrip('/')}/v1/models",
        headers={"Authorization": f"Bearer {key}"},
        method="GET",
    )
    try:
        with urllib.request.urlopen(req, timeout=30) as resp:
            return json.loads(resp.read().decode())
    except urllib.error.HTTPError as e:
        raise SystemExit(f"HTTP {e.code}: {e.read().decode(errors='replace')}") from e

def pick(ids: list[str], prefer: list[str]) -> str | None:
    for p in prefer:
        if p in ids:
            return p
    return ids[0] if ids else None

def main(argv=None) -> int:
    ap = argparse.ArgumentParser(description=__doc__)
    ap.add_argument("--base", default=os.environ.get("MISTRAL_BASE_URL", "https://api.mistral.ai"))
    ap.add_argument("--key", default=os.environ.get("MISTRAL_API_KEY", ""))
    ap.add_argument("--prefer", nargs="*", default=PREFER)
    args = ap.parse_args(argv)
    if not args.key:
        print("设置 MISTRAL_API_KEY", file=sys.stderr); return 2
    data = list_models(args.base, args.key)
    ids = [m.get("id") for m in (data.get("data") or []) if m.get("id")]
    choice = pick(ids, args.prefer)
    print(json.dumps({"models": ids, "picked": choice}, ensure_ascii=False, indent=2))
    return 0 if choice else 1

if __name__ == "__main__":
    raise SystemExit(main())

第 2 步:测试

import subprocess, sys, time
from pathlib import Path
from pick_model import pick
HERE = Path(__file__).resolve().parent

def test_pick():
    assert pick(["x", "mistral-small-latest"], ["mistral-small-latest"]) == "mistral-small-latest"

def test_cli():
    port = 19105
    proc = subprocess.Popen([sys.executable, str(HERE/"mock_mistral.py"), "--port", str(port)], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
    try:
        time.sleep(0.3)
        r = subprocess.run([sys.executable, str(HERE/"pick_model.py"), "--base", f"http://127.0.0.1:{port}", "--key", "mistral-test-key"], capture_output=True, text=True, check=True)
        assert "mistral-small-latest" in r.stdout
    finally:
        proc.terminate(); proc.wait(timeout=5)

第 3 步:运行

$ pytest pick_model
..                                                                       [100%]
2 passed in 0.41s

怎么检查结果?

  • JSON 含 models 与 picked。
  • picked 落在 prefer 列表中。

调试示例

prefer 全是下架 ID。 pick 会退回列表第一项或失败。定期对照 Models Overview 更新 prefer。

常见问题

现象 原因 处理
只要 large 改 --prefer 注意成本
列表为空 401/权限 检查密钥
开源权重本地跑 另见自托管文档 本篇走托管 API

模板规则

  • 默认模型可配置。
  • 贵模型勿用于琐碎任务。
  • 变更写进变更日志。

项目资源

用途 地址
Models Overview(官方) https://docs.mistral.ai/getting-started/models/models_overview
API 参考(官方) https://docs.mistral.ai/api/
Docs 首页(官方) https://docs.mistral.ai/

选得到的模型,才是默认模型。