MiniMax M3.1 Flash Preview 评测:15 道文本题与 3 道代码题实测,附免费试用

TOKRACE 首测 MiniMax-M3.1-Flash-Preview:15 道短文本题全通过,正文首响中位 1.127 秒;三道 JavaScript 题通过 26 项检查。附准确 API 接入、默认推理参数、逐题证据、费用边界与免费试用。

更新日期:2026-10-03

结论:短文本可用,代码边界题通过,仍是一份首测

MiniMax M3.1 Flash Preview 在 TOKRACE 本次 15 道短文本题中全部通过,正文首响中位数 1.127 秒;另有三道 JavaScript 函数题,生成代码通过了我们预先写好的 26 项检查。可以先用它验证结构化抽取、格式约束和小函数实现,但这组题不足以证明大型项目开发或通用智能优势。

本次没有同场对照模型,没有工具调用、图像输入或百万 token 压力测试。以下结论只针对指定 API 接入点、默认推理强度和一次时间窗口。TOKRACE 已提供有额度限制的免费试用,读者无需填写自己的 Key。

MiniMax M3.1 Flash Preview 是什么?

MiniMax 官方模型调用文档已列出准确 ID MiniMax-M3.1-Flash-Preview,标注 100 万 token 上下文及多模态能力,当前通过 M Plan 和 MiniMax Code 提供。本文名称中的 M3.1 对应 API ID;它与 MiniMax M3 是两个不同标识,不应混用规格或评测分数。

官方文档给出五档推理强度:low、medium、high、xhigh、max,省略参数时默认 max,且不能关闭思考。OpenAI Chat Completions 的参数名为 reasoning_effort,不要把 Responses API 的 reasoning.effort 原样搬过来。详见 Chat Completions 文档。这些是官方说明,本次只验证文本调用与三段代码。

接口可调用,为何模型目录找不到?

2026 年 10 月 3 日,我们用同一凭据测试了 https://api.minimax.io/v1/models 与 https://api.minimax.io/v1/chat/completions。两者都返回 HTTP 200,但前者没有列出该预览 ID,后者却成功返回准确 ID 和回答。因此,“目录没有列出”不能直接推导为“不可调用”;也不应该把隐藏预览描述成所有账户都能使用的公开按量模型。

自己接入时,Base URL 填 https://api.minimax.io/v1/,model 填 MiniMax-M3.1-Flash-Preview,凭据需要相应模型权限。TOKRACE 的免费入口由服务端注入凭据,沿用现有配额,客户端不会拿到本站 Key。

怎么测:保留真实路径,不混入服务器榜单

15 道文本题使用现有测试集 tasks-2026-09-26.1,JSON 抽取、指令遵循、材料问答各五题。北京时间 2026 年 10 月 3 日 00:26:47–00:27:08 依次请求,每题一次,不重试挑选最好答案。temperature 为 0,max_tokens 为 2048,系统提示词为空,未设置推理强度覆盖。

测量从本地 macOS 客户端直连 MiniMax 国际 API,使用 TOKRACE 同一个流式解析模块。计时包含这条路径上的网络与推理等待,没有确认上游机房位置,不是香港标准评测节点数据,也不是浏览器端总等待。

类别通过 / 尝试正文首响中位完成耗时中位
JSON 抽取5 / 51.764 秒1.805 秒
指令遵循5 / 50.825 秒0.887 秒
材料问答5 / 51.662 秒1.668 秒

全部 15 题合并后,正文首响中位 1.127 秒,完成耗时中位也是 1.127 秒(四舍五入到毫秒)。完成计时包含完整流结束,并非只取最后一个字。答案很短,部分正文集中抵达;不把极短输出阶段折算成“每秒几百 token”的宣传数字,也不提供小样本 P95。

三个文本案例:满分具体意味着什么

抽取没有误用历史地点。 联系人资料同时包含现居杭州和历史北京出差。回答为 {"name":"林桐","age":28,"city":"杭州","email":null},字段与类型正确,未提供邮箱没有猜测。原题与回答。

格式约束没有附加解释。 对 B2,A1,B2,C3,A1,D4 保序去重,返回 B2,A1,C3,D4,符合只允许英文逗号、不要空格与解释的要求。原题与回答。

材料问答采用新计划并保留未知项。 北区仓库收到 12 件、损坏 3 件,新的送货日为周二,旧周日计划已作废。返回 {"usable":9,"nextDelivery":"周二","manager":null},没有猜负责人。原题与回答。

这几类题难度较低,五题之间结构相似,15/15 的含义是通过这些明确约束,不是“所有业务抽取都可靠”。

补充代码测试:看能否执行,并检查边界

我们再单独测试三道 JavaScript 函数题,同样保留默认推理强度,temperature 0,输出上限提高为 4096。三题全部通过本次检查,正文首响分别为 8.133、3.089、7.305 秒。这组参数与文本题不同,耗时单列,不混合计算。

函数任务通过检查数具体检查
金额转整数分18 / 180.29、两端空白、最多两位小数、非法类型、科学计数法与安全整数边界
按 id 保序去重3 / 3原对象身份与顺序、空数组、冻结输入及特殊键
闭区间合并5 / 5乱序相接区间、嵌套、零长度、负数、空数组;冻结所有输入

金额题生成代码先用正则校验,再用 BigInt 计算分数,最后判断是否超过安全整数范围;它没有将三位小数四舍五入成合法输入。代码与完整检查。去重题检查了 __proto__、constructor 和空字符串;区间题在冻结的输入上运行,发现修改输入会失败。去重证据 · 区间证据。

检查脚本在无网络接口、未注入凭据的独立 JavaScript 上下文执行,设执行超时。输出是否通过由预先写好的检查决定。即使三题通过,也没有验证仓库级调试、跨文件修改、依赖安装、工具调用或持续代理任务;这里不能换算成 SWE-bench 等标准成绩。

免费试用与费用:用户免费不等于上游零价格

TOKRACE 试用沿用匿名基础 5 次、登录后共 15 次的额度;同一轮比较多个模型算一次试用。供应商限流或订阅额度耗尽时,实际调用可能暂不可用。

MiniMax M Plan 使用规则说明订阅用量受 5 小时和每周窗口限制。本站没有确认此预览独立的按 token 单价,所以不把它登记为零价格模型,不计算虚构的单次成本或性价比排名。文本测试返回输入 4,008、输出 506 token;这是接口 usage 字段,不是账单核验,推理明细字段未返回时不猜测。

常见问题

它比 MiniMax M3 更好吗? 本文没有同条件 M3 对照,也没有综合能力测试,无法支持这个结论。可以用自己的任务在竞速场复测。

支持图片、长上下文和工具调用吗? 官方文档介绍了相应能力,本次未实测,不能用这份短文本结果担保。

可以关闭思考以加速吗? 官方说明不能关闭,可用 reasoning_effort 降低强度;TOKRACE 共享试用保持默认强度,本次结果也对应默认档。

如何免费试用? 点击下方“免费复测第一题”,或打开 竞速场,在体验模型中选择 MiniMax M3.1 Flash Preview。你也可以从 模型资料页查看准确接入信息。

原始证据

下方保留 18 次请求的原题、回答、时间与代码检查脚本,失败不会从记录中隐藏。跨时段、长上下文、多模态及生产负载验证仍需补充。

下载完整证据(JSON)

extract-1 · 通过 · 1.764s

2026-10-02T16:26:47.043Z · 输入 / 输出 token:267 / 19 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:林桐,28 岁,目前居住在杭州。未提供电子邮件。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"林桐","age":28,"city":"杭州","email":null}
extract-2 · 通过 · 0.941s

2026-10-02T16:26:48.952Z · 输入 / 输出 token:269 / 21 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:李明,36 岁,目前居住在成都。电子邮件为 li@example.test。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"李明","age":36,"city":"成都","email":"li@example.test"}
extract-3 · 通过 · 0.883s

2026-10-02T16:26:49.958Z · 输入 / 输出 token:266 / 19 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:陈夏,22 岁,目前居住在南京。未提供电子邮件。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"陈夏","age":22,"city":"南京","email":null}
extract-4 · 通过 · 1.805s

2026-10-02T16:26:51.028Z · 输入 / 输出 token:271 / 60 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:周舟,41 岁,目前居住在苏州。电子邮件为 zhou@example.test。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"周舟","age":41,"city":"苏州","email":"zhou@example.test"}
extract-5 · 通过 · 2.238s

2026-10-02T16:26:52.835Z · 输入 / 输出 token:267 / 54 · 结束原因:stop

题目

从以下资料提取联系信息。只输出一个 JSON 对象,恰好包含 name、age、city、email 四个字段;age 为数字,未提供的 email 为 null。不要 Markdown 或解释。
资料:吴雨,30 岁,目前居住在武汉。未提供电子邮件。历史备注提到曾在北京出差,不是现居城市。

原始回答

{"name":"吴雨","age":30,"city":"武汉","email":null}
format-1 · 通过 · 1.127s

2026-10-02T16:26:55.431Z · 输入 / 输出 token:241 / 9 · 结束原因:stop

题目

把以下编号去重并保持首次出现的顺序:B2,A1,B2,C3,A1,D4。只输出用英文逗号连接的编号,不要空格、标题或解释。

原始回答

B2,A1,C3,D4
format-2 · 通过 · 0.887s

2026-10-02T16:26:56.558Z · 输入 / 输出 token:240 / 10 · 结束原因:stop

题目

仅输出 JSON 对象,且恰好包含 status 和 count 两个字段。status 的值必须为字符串 "ready",count 必须为数字 3。不要 Markdown、解释或额外字段。

原始回答

{"status":"ready","count":3}
format-3 · 通过 · 0.825s

2026-10-02T16:26:57.446Z · 输入 / 输出 token:234 / 13 · 结束原因:stop

题目

将数值 12、3、25、8 按从小到大排序。只输出 JSON 数组,元素为数字。不要解释或代码围栏。

原始回答

[3, 8, 12, 25]
format-4 · 通过 · 0.761s

2026-10-02T16:26:58.332Z · 输入 / 输出 token:238 / 9 · 结束原因:stop

题目

按原顺序将 apple、pear、plum 转为英文大写,每行一个单词。总共三行,不要编号、标点、空行或解释。

原始回答

APPLE
PEAR
PLUM
format-5 · 通过 · 0.772s

2026-10-02T16:26:59.253Z · 输入 / 输出 token:250 / 12 · 结束原因:stop

题目

提取下面三个工单号,保持顺序:工单 TX-103 已关闭;工单 TX-207 正在处理;工单 TX-309 待分配。只用英文竖线连接三个编号,不要空格或解释。

原始回答

TX-103|TX-207|TX-309
grounded-1 · 通过 · 1.668s

2026-10-02T16:27:00.052Z · 输入 / 输出 token:293 / 65 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:北区仓库今天收到 12 件货物,其中 3 件损坏,不可使用。下一次送货安排在周二。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":9,"nextDelivery":"周二","manager":null}
grounded-2 · 通过 · 1.662s

2026-10-02T16:27:01.721Z · 输入 / 输出 token:293 / 74 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:南区仓库今天收到 20 件货物,其中 4 件损坏,不可使用。下一次送货安排在周三。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":16,"nextDelivery":"周三","manager":null}
grounded-3 · 通过 · 0.828s

2026-10-02T16:27:03.386Z · 输入 / 输出 token:293 / 15 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:东区仓库今天收到 18 件货物,其中 6 件损坏,不可使用。下一次送货安排在周四。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":12,"nextDelivery":"周四","manager":null}
grounded-4 · 通过 · 1.331s

2026-10-02T16:27:04.215Z · 输入 / 输出 token:293 / 62 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:西区仓库今天收到 25 件货物,其中 5 件损坏,不可使用。下一次送货安排在周五。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":20,"nextDelivery":"周五","manager":null}
grounded-5 · 通过 · 1.964s

2026-10-02T16:27:06.048Z · 输入 / 输出 token:293 / 64 · 结束原因:stop

题目

只根据以下材料回答。输出恰好包含 usable、nextDelivery、manager 三个字段的 JSON 对象,不要额外文字。usable 是可用件数(数字),nextDelivery 是下一次送货时间(字符串),材料未说明的信息用 null,不能猜测。
材料:中区仓库今天收到 16 件货物,其中 2 件损坏,不可使用。下一次送货安排在周一。仓库负责人姓名没有记载。旧计划曾写周日,已作废。

原始回答

{"usable":14,"nextDelivery":"周一","manager":null}
金额转换:拒绝非法输入,避免浮点误差 · 通过

2026-10-02T16:28:17.475Z · 正文首响:8.133s · 检查数:18

题目

写 JavaScript 函数 parseCents(value)。value 必须是字符串:允许两端空白;只接受非负十进制金额,整数部分至少一位,小数最多两位;拒绝指数写法、符号、千分位、Infinity、空串、超过两位小数。返回整数分数,超过 Number.MAX_SAFE_INTEGER 则返回 null。非法类型或格式返回 null。不能把非法值四舍五入成合法值。只输出函数代码,不要 Markdown 或解释。

原始代码

function parseCents(value) {
  if (typeof value !== "string") return null;

  const match = value.trim().match(/^([0-9]+)(?:\.([0-9]{1,2}))?$/);
  if (!match) return null;

  const cents = BigInt(match[1]) * 100n
    + BigInt((match[2] || "").padEnd(2, "0"));

  return cents > BigInt(Number.MAX_SAFE_INTEGER) ? null : Number(cents);
}

可执行检查

const cases=[['0',0],[' 12.30 ',1230],['0.29',29],['1.2',120],['0001.02',102],['1.234',null],['-1',null],['+1',null],['1e3',null],['',null],['.5',null],['1.',null],['Infinity',null],['1,000',null],[null,null],[1,null],['90071992547409.91',9007199254740991],['90071992547409.92',null]]; for (const [input,want] of cases) if(parseCents(input)!==want) throw Error('Failed '+JSON.stringify(input));
保序去重:安全处理特殊键且不修改输入 · 通过

2026-10-02T16:28:26.113Z · 正文首响:3.089s · 检查数:3

题目

写 JavaScript 函数 uniqueById(items)。items 是对象数组,每个对象有字符串 id 字段。保留每个 id 首次出现的原对象和原顺序,不修改输入或任何对象;空数组返回空数组。id 可为 __proto__、constructor 或空字符串。只输出函数代码,不要 Markdown 或解释。

原始代码

function uniqueById(items) {
  const seen = new Set();
  const result = [];

  for (const item of items) {
    if (!seen.has(item.id)) {
      seen.add(item.id);
      result.push(item);
    }
  }

  return result;
}

可执行检查

const a={id:'__proto__',value:1},b={id:'constructor'},c={id:''},d={id:'x'};const input=Object.freeze([a,b,{id:'__proto__'},c,{id:''},d,{id:'constructor'}]);const got=uniqueById(input);if(got.length!==4||got[0]!==a||got[1]!==b||got[2]!==c||got[3]!==d)throw Error('Wrong identity or order');if(uniqueById([]).length!==0)throw Error('Empty');if(input.length!==7||a.value!==1)throw Error('Mutation');
区间合并:乱序、相邻区间与输入不可变 · 通过

2026-10-02T16:28:29.349Z · 正文首响:7.305s · 检查数:5

题目

写 JavaScript 函数 mergeIntervals(intervals)。输入为有限数字组成的闭区间 [start,end] 数组,保证 start<=end,输入可能乱序。返回按 start 排序的合并闭区间,相接区间也合并;不要修改输入或任何内层数组,空数组返回空数组。只输出函数代码,不要 Markdown 或解释。

原始代码

function mergeIntervals(intervals) {
  const sorted = intervals
    .map(([start, end]) => [start, end])
    .sort((a, b) => {
      if (a[0] < b[0]) return -1;
      if (a[0] > b[0]) return 1;
      if (a[1] < b[1]) return -1;
      if (a[1] > b[1]) return 1;
      return 0;
    });

  const merged = [];

  for (const [start, end] of sorted) {
    if (merged.length === 0 || start > merged[merged.length - 1][1]) {
      merged.push([start, end]);
    } else if (end > merged[merged.length - 1][1]) {
      const last = merged[merged.length - 1];
      merged[merged.length - 1] = [last[0], end];
    }
  }

  return merged;
}

可执行检查

const cases=[[[[5,7],[1,3],[3,5]],[[1,7]]],[[[1,4],[2,3]],[[1,4]]],[[[0,0],[2,2]],[[0,0],[2,2]]],[[[-3,-1],[-2,0],[3,4]],[[-3,0],[3,4]]],[[],[]]];for(const [input,want] of cases){input.forEach(Object.freeze);Object.freeze(input);if(JSON.stringify(mergeIntervals(input))!==JSON.stringify(want))throw Error('Wrong merge');}