Mistral 的家族 —— 通用 Mistral 系列、代码向的 Codestral 等 —— 原生要单独的 api.mistral.ai key。通过 DaoXE,它们和 GPT、Claude、DeepSeek 共用同一个 key:一个 key 覆盖数百个模型、约 25 家厂商。用 GET /v1/models 里的 Mistral 系 ID 调 /v1/chat/completions —— 你的账号到底载有哪些 Mistral ID,以实时列表为准,别当默认。成本分流见最便宜 API 教程。
通过 DaoXE 调用 Mistral#
Chat 路径:/v1/chat/completions,用 Authorization: Bearer。推理是请求参数,不是另选模型:发 extra_body={"reasoning_effort": "high"},回答会以类型化分块而非普通字符串的形式返回。原生侧 max_tokens 与 prompt 共享上下文窗口 —— 预算要同时覆盖思考和回答。
curl --fail-with-body --show-error --silent \
https://daoxe.com/v1/chat/completions \
-H "Authorization: Bearer ${DAOXE_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_EXACT_MODEL_ID",
"max_tokens": 64,
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}'# Mistral reasoning is a REQUEST PARAM (reasoning_effort), not a model switch.
# With effort set, message.content becomes a LIST of typed chunks
# ({"type": "thinking"}... then {"type": "text"}) instead of a plain string -
# parse both shapes, and replay the thinking chunks in multi-turn history.
from openai import OpenAI
client = OpenAI(base_url="https://daoxe.com/v1", api_key="YOUR_DAOXE_KEY")
r = client.chat.completions.create(
model="YOUR_EXACT_MODEL_ID", # a mistral-family id from GET /v1/models
messages=[{"role": "user", "content": "2+2? Think briefly, then answer."}],
max_tokens=2048, # prompt + max_tokens must fit the context window
extra_body={"reasoning_effort": "high"}, # non-standard: send via extra_body
)
msg = r.choices[0].message
content = msg.content
if isinstance(content, list): # thinking chunks + text chunks
for part in content:
if getattr(part, "type", None) == "text":
print(part.text) # final answer
else:
print(content) # plain string when effort is "none"
Mistral 如何暴露思考内容#
Mistral 现行机制是 reasoning_effort 参数(none、minimal、low、medium、high、xhigh);旧的原生 Magistral 推理 ID 已弃用。设 high 时 message.content 变成列表:先是 {"type": "thinking"} 分块,然后是 {"type": "text"} 回答;设 none 时是普通字符串。流式同理 —— delta.content 会在流中途改变形态。由此两条规则:content 按两种形态解析;多轮历史要回传思考分块 —— Mistral 明确警告剔除它们会降低下一轮回答质量。参数是否穿过某条中转路径、列表形态是否保留,正是要验证的事 —— 绑定客户端前先发一次测试调用。
Mistral 特有的注意点#
- message.content 会变形。 reasoning_effort 开高时,
content是类型化分块列表(先思考后文本);不开则是普通字符串。默认按 str 解析的客户端一开思考就会挂 —— 两种形态都要处理。 - 思考 token 计在 max_tokens 里。 Mistral 文档写明:prompt 加
max_tokens不能超过模型上下文窗口 —— 推理请求要给思考留余量,不只是给回答,否则回复会偏短。 - 非标准字段走 extra_body。
reasoning_effort、safe_prompt(在对话前注入安全提示;默认 false)、random_seed(Mistral 对 OpenAIseed的叫法)和guardrails都超出 OpenAI 规范 —— 用你 SDK 的 extra-body 通道发送,并测试中转是转发这些字段还是静默丢弃未知字段。 - 别名会动;Magistral 已弃用。 原生 ID 是
-latest别名加日期快照,Mistral 会公布 deprecation 与 retirement 日期及指定继任者 —— 专门的 Magistral 推理模型已弃用,推理并入主家族、由reasoning_effort控制。从GET /v1/models复制 ID,别照搬旧帖。
这要花多少钱#
一个余额,一个充值汇率
充值统一按 1 元人民币 = $1 额度,所有支付方式一致;模型再各按自己的美元标价计费 —— 实时单价见定价页。支付宝、微信、USDT、银行卡(Visa · Mastercard)、Apple Pay 与 Google Pay 都是同一个汇率 —— 目录里所有模型共用一个余额,不用选套餐,也没有月度低消。单价与账户绑定且会变动,所以请用一小笔充值去确认,而不是相信教程里的某个数字。
验证你拿到的是真模型#
先证明端点可用,再怀疑客户端 —— 这一步失败,改任何设置都没用:
export DAOXE_API_KEY="your_api_key"
# List the exact model IDs your account can call
curl --fail-with-body --show-error --silent \
https://daoxe.com/v1/models \
-H "Authorization: Bearer ${DAOXE_API_KEY}"先确认连通,再在 temperature 0 下把固定 prompt 与官方 Mistral API 对比,确认模型档位:
别信我们 —— 自己验证
把 开源 benchmark 对准 DaoXE 和官方 API,在 temperature 0 下对比。再学会如何鉴别掉包,让便宜端点无法悄悄把你换成更小的模型。
常见问题#
怎么开关 Mistral 的推理?
在请求体里发 reasoning_effort:none 得到普通字符串回答,high 得到思考分块加回答。它是非标准字段,必要时用你 SDK 的 extra-body 选项。
为什么 content 有时是字符串、有时是列表?
这是 Mistral 的推理形态:开了 effort 是类型化 thinking/text 分块,不开是普通字符串。两种都解析,历史里回传思考分块。
Codestral 的 FIM 端点能用吗?
Mistral 原生有 POST /v1/fim/completions(prompt/suffix,Codestral 用)—— 这是专有面,不是标准 OpenAI 路径。某条中转是否承载它,把 IDE 补全插件接上去之前先用一次调用验证。
这里 Mistral 多少钱?
按模型、按账号 —— 见实时定价。充值统一 1 元 = $1 额度,所有支付方式一致。
试用 DaoXE —— 并亲自 benchmark 它
一个 key 调 GPT、Claude、Gemini、DeepSeek 等。用开源 benchmark 对准我们做对比 —— 别只听我们说。