上周 MiniMax 把 M3 放出来,我第一时间接了 API 试了试。说实话,模型能力确实强------SWE-Bench Pro 59%,coding 能力跟 Opus 4.7 一个梯队,百万 token 上下文也不是吹的。但跑了三天,我在报错和 token 账单上花的时间比写业务代码还多。
这篇把我遇到的问题和省钱办法记下来,给打算接 M3 的人参考。
先说能力:确实能打
M3 有三个卖点说得没错:
- coding 能力接近 Opus 4.7 水准,写代码不用像之前 M2 那样反复纠正
- 原生多模态,图片和视频直接丢进去就能理解
- 百万 token 上下文,处理长文档不用自己做分段
我拿它跑了一个代码重构任务,大概两分钟给出了完整方案,分析了哪些 IO 操作可以并行化。这种活让 M2.7 来做至少要改三轮。
常见报错和怎么解决
跑了几天,我碰到的报错基本集中在这几个:
错误码 2013:参数格式不对
这个是出现频率最高的。三种常见触发场景:
- 用了
developer角色。M3 的 OpenAI 兼容接口不支持这个 role,得换成system。很多人从 OpenAI 迁过来直接复制代码,就卡在这里 - tool call 的消息顺序有严格要求。tool result 必须紧跟在对应的 tool call 后面,中间不能插别的消息。这个跟 OpenAI 的处理不一样,OpenAI 对顺序没这么严格
- tool arguments 里的中文字符有时需要额外转义。我碰到过 JSON 序列化后中文引号导致解析失败的情况
python
# 错误写法:developer 角色
messages = [{"role": "developer", "content": "你是一个助手"}]
# 正确写法:改用 system
messages = [{"role": "system", "content": "你是一个助手"}]
错误码 1039:token 超限
请求的 token 数超了。M3 虽然支持百万上下文,但 API 调用有 tier 限制。免费额度和低 tier 用户的单次请求上限比你想象的低。检查一下你的 token plan 等级。
reasoning 显示异常
用第三方客户端(比如 Cherry Studio)调 M3 的时候,可能会遇到 "reasoning part reasoning-0 not found" 的报错。这是客户端对 M3 推理格式的解析问题,不是模型本身的错。等客户端更新适配就好,或者先关掉推理过程展示。
404 找不到模型
国内用户注意 base_url。M3 的国内 API 地址和国际版不一样:
python
# 国内
base_url = "https://api.minimax.chat/v1"
# 国际版
base_url = "https://api.minimax.io/v1"
省 token 的几个实际操作
M3 的定价不便宜------512K 以内上下文,输入 4.2 元/百万 token,输出 16.8 元/百万 token。超过 512K 直接翻倍。跑了几天我的账单增长速度让我开始认真研究怎么省。
1. 利用自动 prompt cache
M3 有一个比较良心的设计:prompt cache 是自动开启的,不用你手动配置。系统会自动识别重复的上下文内容做缓存。cache 写入免费,读取费用是正常输入的 1/5。
实际效果:如果你的 system prompt 比较长(几千 token 以上),多轮对话的成本能降 60% 左右。什么都不用改,直接享受。
2. 控制上下文长度
超过 512K 的请求价格翻倍。实际跑下来,大部分任务根本用不到这么长的上下文。我的做法是在代码里加一个检查,超过 400K token 就做一次摘要压缩:
python
import tiktoken
def check_and_trim(messages, max_tokens=400000):
enc = tiktoken.encoding_for_model("gpt-4") # 近似估算
total = sum(len(enc.encode(m["content"])) for m in messages)
if total > max_tokens:
# 保留 system prompt + 最近 N 轮对话
return [messages[0]] + messages[-10:]
return messages
3. 输出长度要限制
M3 的输出单价是输入的 4 倍。如果你只需要一个分类结果或简短回答,一定要设 max_tokens。我见过不设限制的情况下,M3 一口气输出 3000 token 来回答一个 yes/no 问题。
python
response = client.chat.completions.create(
model="minimax-m3",
messages=messages,
max_tokens=500, # 根据实际需要设
temperature=0.3 # 不需要创意的任务调低
)
4. Token Plan 套餐对比
如果用量稳定,Token Plan 比按量付费划算得多。官方说法是"便宜 10 倍以上",我实际算了一下,Max 套餐(119 元/月)给 18 亿+ token,换算下来每百万 token 不到 7 分钱。按量付费最低 4.2 元/百万,差距确实大。
不过有个坑:Token Plan 的额度是所有模态共享的。如果你又调文本又调图片又调语音,额度消耗比预期快。
多模型切换的省心方案
我现在的项目要同时用 M3 做长文档分析、Claude 做 coding、DeepSeek 做日常对话。三个模型三套 API key、三个 base_url、三种计费逻辑,管理起来很烦。
后来我换成了 ofox.io 做统一接入。一个 key 调所有模型,接口是标准 OpenAI 格式,切模型只改 model 参数:
python
from openai import OpenAI
client = OpenAI(
api_key="your-ofox-key",
base_url="https://api.ofox.io/v1"
)
# M3 长文档分析
resp = client.chat.completions.create(
model="minimax-m3",
messages=[{"role": "user", "content": long_doc}]
)
# 切 Claude 写代码,只改 model
resp = client.chat.completions.create(
model="claude-sonnet-4-20250514",
messages=[{"role": "user", "content": "重构这段代码"}]
)
不用维护多套 key,也不用记不同厂商的 base_url 和参数差异。做模型对比测试的时候特别方便------同一段代码换个 model name 就跑。
最后说两句
M3 的模型能力没问题,在 coding 和 agent 场景确实是第一梯队。但 API 的文档质量还需要追赶,特别是 streaming、cache、tool use 这些高级功能的说明太简略了,基本得自己摸索。
建议先用免费额度把你的主要场景跑通,确认报错都处理干净了再上 Token Plan。别一上来就买 Ultra 套餐,用不完也不退。