
MiniMax 先放了个匿名模型「太空兔」登顶 OpenRouter 日榜一周后才揭面M3.1-Flash-Preview 的百万上下文与这套上线打法2026 年 9 月 28 日MiniMax 宣布文本模型M3.1-Flash-Preview正式上线并开启全面公测主打原生多模态与百万级上下文窗口。但这条新闻真正有意思的地方不在参数表里——在这个模型公开亮相之前它已经以匿名身份在一个聚合平台上跑了一周。一、一条不太寻常的上线路径按公开报道事情的时间线是这样的时间发生了什么9 月 23 日一个名为「Space Bunny」太空兔的匿名模型上线中秋长假期间该模型登上OpenRouter与OpenCode两个平台的日调用量榜首9 月 28 日 14:43MiniMax 官宣M3.1-Flash-Preview公测业内此前对「太空兔」身份的猜测得到验证这个顺序值得停一下先匿名上线让真实用户用一周再揭面。这不是第一次有人这么干但对国内厂商来说是相对新的做法。它的技术含义比营销含义大匿名期拿到的是一份没有品牌溢价的真实调用数据。同一时间窗口里聚合平台上并列着几十上百个模型用户选谁只看两件事——输出质量和每百万 token 的价格。没有「这是 XX 家的新旗舰」这种先验加成。能在这个环境里跑到日调用量第一说明的是性价比曲线上的位置而不是发布会上的跑分。二、这次发布的是什么先把官方口径摆清楚类型文本模型但具备原生多模态能力上下文窗口百万级定位场景代码任务的全流程闭环——问题定位 → 代码实现 → 测试验证具体能力修 Bug、从零开发完整功能状态公测Preview「原生多模态」和「支持多模态」是两个不同的工程承诺。前者意味着模型的表征空间从预训练阶段就是统一的而不是外挂一个视觉编码器再接 adapter。差别体现在需要跨模态推理的任务上——比如看着一张报错截图定位代码问题、或者从 UI 设计稿直接生成实现。官方给的场景描述里明确包含「问题定位」这类任务通常就需要读截图、读日志、读代码三件事同时进上下文。而百万上下文是这一轮国内模型竞争的公共赛道。在这条赛道上参数本身不难写难的是三件事显存、延迟、有效利用率。三、百万上下文真正的工程约束一个模型标称 1M token 上下文和它能在 1M 上下文下稳定可用中间隔着好几道坎。下面这段代码把最硬的那道算出来——KV Cache 的显存占用估算长上下文推理时的 KV Cache 显存占用。 公式标准 MHA / GQA bytes 2 * n_layers * n_kv_heads * head_dim * seq_len * batch * dtype_bytes 其中 2 是 K 和 V 两份。 ⚠️ 参数是占位值用来说明量纲实际部署请替换成你要评估的模型配置。 fromdataclassesimportdataclassdataclass(frozenTrue)classModelConfig:n_layers:int# 层数n_kv_heads:int# KV 头数GQA 下远小于 Q 头数head_dim:int# 每个头的维度dtype_bytes:int2# fp16/bf16 2propertydefbytes_per_token(self)-int:return2*self.n_layers*self.n_kv_heads*self.head_dim*self.dtype_bytesdefkv_cache_gb(cfg:ModelConfig,seq_len:int,batch:int1)-float:returncfg.bytes_per_token*seq_len*batch/(1024**3)if__name____main__:# 三档典型配置MHA 密集、GQA 中等、GQA 激进configs{MHA 64层/32KV头/128维:ModelConfig(n_layers64,n_kv_heads32,head_dim128),GQA 64层/8KV头/128维:ModelConfig(n_layers64,n_kv_heads8,head_dim128),GQA 80层/4KV头/128维:ModelConfig(n_layers80,n_kv_heads4,head_dim128),}print(f{配置:26}{每token字节:12}{128K:10}{1M:10})forname,cfginconfigs.items():print(f{name:26}{cfg.bytes_per_token:12,}f{kv_cache_gb(cfg,131_072):9.1f}G{kv_cache_gb(cfg,1_048_576):9.1f}G)把数字代进去会看到一个很直白的结论1M 上下文的瓶颈从来不是「能不能算」而是「一个请求要占多少张卡」。同样 1M 序列MHA 配置下单请求的 KV Cache 是 GQA 配置的 4~8 倍。这直接决定了并发数而并发数决定了每百万 token 的实际成本。所以「百万上下文」这个标签下面真正要对比的是三件事用什么注意力结构——GQA / MLA / 稀疏注意力决定了显存曲线是线性还是次线性缓存策略——上下文缓存prompt caching的命中价格是多少。长上下文场景下同一个大文档被反复引用是常态缓存命中价往往比全价低一个数量级有效利用率——标称 1M 不代表 1M 处的检索准确率还够用。这块目前只能靠自己的任务实测跑分表意义有限。有一小段探针代码可以测第三项逻辑很简单把关键信息放在超长上下文的不同深度位置看模型还能不能稳定取到。长上下文有效利用率探针把针放在不同深度测召回是否稳定。 用法把 call_model 换成你自己的接口调用。 这里只给出探针的构造与结果汇总逻辑不含任何真实 API 调用。 fromdataclassesimportdataclassdataclassclassProbeResult:depth_pct:float# 针所在的相对深度 0.0 ~ 1.0hit:bool# 是否答对answer:str# 模型回答截断defbuild_prompt(filler_tokens:int,needle:str,depth_pct:float)-str:把 needle 埋进指定深度的填充文本里。headint(filler_tokens*depth_pct)tailfiller_tokens-head filler这是一段用于填充上下文的无关文本。return(filler*max(1,head//10)f\n【关键信息】{needle}\nfiller*max(1,tail//10)\n问题上文【关键信息】里写的编号是多少只回答编号。)defsummarize(results:list[ProbeResult])-dict:ifnotresults:return{n:0}by_depth:dict[float,list[bool]]{}forrinresults:by_depth.setdefault(r.depth_pct,[]).append(r.hit)curve{f{d:.0%}:f{sum(v)/len(v):.0%}ford,vinsorted(by_depth.items())}return{n:len(results),recall_by_depth:curve,overall:f{sum(r.hitforrinresults)/len(results):.0%},}if__name____main__:demo[ProbeResult(0.05,True),ProbeResult(0.05,True),ProbeResult(0.50,True),ProbeResult(0.50,False),ProbeResult(0.95,False),ProbeResult(0.95,False),]print(summarize(demo))「中间迷失」lost in the middle是长上下文模型的老问题首尾的召回率明显高于中段。上面这段探针跑出来的曲线如果中段塌下去那这个 1M 就不能按 1M 用——实际能可靠使用的可能只有前后各 100K~200K。这件事只有自己测才知道任何厂商的公布数字都替代不了。四、匿名期的数据为什么有用回到「太空兔」那条线。一个模型以匿名身份在聚合平台上跑一周厂商能拿到的东西和发布后完全不同真实任务分布。发布会上的评测集是挑过的聚合平台上的请求不是。能看到用户实际拿它干什么——是写代码、改 Bug还是当通用助手。性价比敏感度。在匿名环境里同一个任务旁边排着十几个价格不同的模型。调用量的迁移速度直接反映了「贵一档但好一点」值不值。失败模式的早期暴露。Preview 阶段最怕的是特定类型的请求上崩溃。匿名期等于一次免费的、有真实流量的大规模灰度。对开发者来说这件事有一个实际的操作含义聚合平台的调用榜可以当成一个前置信号源。一个匿名模型突然冲上某个榜的日调用量第一通常意味着它的性价比在真实任务上过了线。等它揭面再评估你已经晚了一周。想把这件事做成自动化的逻辑大致是这样监控聚合平台上的匿名/新模型捕捉突然冲榜的信号。 这里只演示**数据结构与判定逻辑**不包含任何真实抓取代码 —— 各平台的公开接口与使用条款请自行确认后再接入。 fromdataclassesimportdataclass,fieldfromdatetimeimportdatedataclassclassDailyStat:day:date model_id:strcalls:intdataclassclassModelWatch:给每个模型维护一条调用量序列判定是否出现异常跃升。model_id:strhistory:list[DailyStat]field(default_factorylist)# 跃升阈值今日调用量 / 前 N 日均值surge_ratio:float5.0defadd(self,day:date,calls:int)-None:self.history.append(DailyStat(day,self.model_id,calls))defbaseline(self,window:int3)-float:iflen(self.history)window:return0.0recent[h.callsforhinself.history[-window-1:-1]]returnsum(recent)/len(recent)ifrecentelse0.0defis_surging(self)-bool:baseself.baseline()ifbase0:returnbool(self.historyandself.history[-1].calls0)returnself.history[-1].calls/baseself.surge_ratioif__name____main__:wModelWatch(model_idspace-bunny-匿名)fori,callsinenumerate([120,180,150,240,3100]):w.add(date(2026,9,19i),calls)print(fbaseline{w.baseline():.0f}latest{w.history[-1].calls}fsurging{w.is_surging()})五、商业面的两条数字看模型本身之余MiniMax 的公司数据也值得记一下因为它解释了「为什么要打性价比」2026 年上半年收入1.17 亿美元同比增长283%收入结构反转B 端开放平台及企业服务收入占比从 30% 跳到 63%首次大幅压过 C 端8 月ARR 突破 8 亿美元其中 B 端占 80%后续半年内计划发布M3.1、M3 Pro、H3.1三款模型。B 端占比 63%→80% 这个走向意味着它的主要客户是把模型嵌进自己产品里的团队。这类客户对两件事最敏感单位成本和上下文长度——正好是 M3.1-Flash-Preview 主打的两点。匿名上擂台跑调用量榜也是冲着同一批人去的。六、要不要现在接给几条判断依据不分优劣按自己的场景对值得现在试的情况你在做代码 agent需要在一次上下文里塞进整个仓库的关键文件 报错日志 测试输出。百万上下文能省掉大量检索工程的活。你的成本模型里 token 单价是主要项且愿意为了价格接受 Preview 状态的不稳定。你需要跨模态定位问题读截图 → 改代码。建议等一等的生产链路上不能承受模型行为变更。Preview 阶段的模型会被改今天调好的 prompt 下周可能就不最优了。依赖超长上下文的稳定召回。先在第四节那个探针上跑出你自己的深度-召回曲线中段塌陷的话长上下文的实际可用区间要打折。需要长周期可复现的评测基线——匿名期的行为不代表正式版。接入时的第一个动作不管选哪条路先测 KV Cache 成本与深度召回曲线再谈 benchmark。前者决定你的账单后者决定你的架构。参考来源MiniMax 全新文本模型 M3.1-Flash-Preview 正式公测 — 站长之家/AIbase2026-09-28 14:43MiniMax新模型M3.1-Flash-Preview上线 — 界面新闻2026-09-28MiniMax最新模型M3.1-Flash-Preview上线 — 中国证券网百万上下文、原生多模态MiniMax新模型公测疑似太空兔本尊 — 上观新闻MiniMax最值钱的东西不在财报里 — 站长之家2026 上半年财报与 ARR 数据