小米 MiMo 模型的快慢思考 API 调用,最近被原作者拆成了 mimo-v2-fast 和 mimo-v2-fast-think 两个模型名来对比。他一开始集成 MiMo API 时,发现快思考模式的返回里混着疑似思考内容,末尾还带一个 think 结束符。为了不在官方 Key、额度切换和多模型名对照上反复卡住,我把复现路径换成了 TaoToken:先打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=mimo-intro 创建一把 Key,再把工具的 Base URL 填成 https://taotoken.net/api,模型名分别填 mimo-v2-fast 与 mimo-v2-fast-think,依次发请求看返回差异。
这篇不绕弯,主线就是验证「快思考为什么多出 think 结束符、慢思考是不是单独走另一个模型名」。你不需要先去申请 MiMo 官方 Key,也不用准备两套账号,只用一把 TaoToken Key 就能把两次调用并排跑出来。TaoToken 在这里做的是兼容通道和统一计量:请求按同一个 Base URL 进入,由模型名决定落到哪个 MiMo 模式,返回内容原样回到你的工具里,控制台再按模型名把用量分开记。
1. 快思考返回里的 think 结束符:先把原文现象定位清楚
1.1 原作者看到的不是报错,而是「输出了不该输出的东西」
原作者把 MiMo 接进自己的应用后,遇到的第一个怪现象不是 401、不是超时,而是快思考模式返回的content里多了一段像推理草稿的文本,末尾还挂着 think 结束符。前端如果直接渲染这个字段,用户就会在答案后面看到一段本不该出现的思考内容。这种问题比报错更麻烦,因为请求链路是通的,HTTP 状态码正常,JSON 也能解析,只是模型把「中间过程」和「最终回答」混在了一个字段里。
原作者接着做的事很关键:他没有停在「快思考是不是有问题」这一步,而是加上了慢思考模式,并把模型名拆成mimo-v2-fast和mimo-v2-fast-think两个入口。这样一对比,就能判断带 think 结束符是快思考模型自身的输出习惯,还是调用方把某个参数传错了。要复现这个过程,最省事的方式不是重新注册一套官方账号,而是让 TaoToken 把 MiMo 调用统一转发出来,变量只剩模型名。
1.2 换成 TaoToken 兼容通道复现,变量只剩模型名
为什么强调「变量只剩模型名」?因为多 Key 切换很容易干扰判断。你手上有 A 账号、B 账号,快思考用一把 Key,慢思考换另一把 Key,最后看到返回差异时,你很难说清是模型模式不同,还是 Key 对应的通道、限流、版本不同。用 TaoToken 的好处是:Base URL 固定为https://taotoken.net/api,鉴权固定为同一把YOUR_API_KEY,请求里只改model字段。这样 fast 和 fast-think 的差异才干净。
这里要区分清楚两件事:官网落地页https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=mimo-intro是给你注册、创建 Key、看模型广场和看用量的;真正填进 curl、Claude Code、Codex、CC Switch 的 Base URL 是https://taotoken.net/api,末尾不要加/v1。很多「模型名不识别」或「路径重复」的怪问题,都是把这两个地址混用了。
2. 在模型广场确认 mimo-v2-fast 与 mimo-v2-fast-think 的真实模型名
2.1 打开落地页创建 API Key,别去猜模型 ID
原文能顺利对比两个模式,前提是模型名写对。你复现时第一步不是写代码,而是去模型广场把名字抄准。打开 TaoToken,注册登录后进入控制台,创建一个 API Key,复制成YOUR_API_KEY放在手边。然后到模型广场搜 MiMo,确认当前列表里到底写的是mimo-v2-fast、mimo-v2-fast-think,还是带其他前缀后缀的版本。
模型 ID 不要靠猜,也不要拿旧截图硬套。模型广场今天列出的名字,才是你请求里该填的名字。如果列表里同时存在快思考与慢思考入口,就按原文思路分别选一次;如果某个名字暂时不在列表里,先换列表里的同系列模型,别自己拼一个带日期后缀的 ID 去试,否则你看到的报错会变成「模型不存在」,把原本要观察的 think 结束符问题盖掉。
2.2 Base URL 写 https://taotoken.net/api,末尾不要加 /v1
创建完 Key 之后,把工具里的 Base URL 填成https://taotoken.net/api。这个地址末尾没有/v1,也不需要带任何查询参数。如果你用 curl 或 OpenAI SDK 直接发请求,完整路径通常写成https://taotoken.net/api/v1/chat/completions;但如果你是在 Claude Code、Codex、CC Switch 里填「供应商 Base URL」,就只填https://taotoken.net/api,让工具自己拼后面的路径。
这一点看起来只是斜杠问题,实际会直接影响你后面看到的结果。Base URL 多一层/v1,有的工具会拼成/v1/v1/chat/completions,请求可能直接 404;Base URL 写成官网落地页,鉴权和路由都不对。把地址固定成https://taotoken.net/api,再只改模型名,才是这次 MiMo 快慢思考复现最稳的姿势。
3. 用 curl 和 Python SDK 各跑一次快慢思考请求
3.1 快思考:mimo-v2-fast 的返回里重点看 think 结束符
先发一条最小请求,别一上来就接业务代码。快思考模型用mimo-v2-fast,请求体只保留一条 user 消息,方便你肉眼检查返回。下面这段可以直接改 Key 后执行:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "mimo-v2-fast", "messages": [ {"role": "user", "content": "用三句话说明快思考模式适合什么任务"} ] }'拿到返回后,重点看choices[0].message.content。如果里面除了正式答案,还出现一段疑似推理过程,并且末尾带think结束符,那就说明你复现到了原作者描述的现象。此时不要急着在前端做字符串截断,先确认这条响应是不是mimo-v2-fast这个模型名本身带出来的。把完整响应保存成fast.json,后面和慢思考结果并排看。
3.2 慢思考:mimo-v2-fast-think 把思考过程放在哪
慢思考请求只改model字段,其余鉴权、Base URL、消息结构全部不动:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "mimo-v2-fast-think", "messages": [ {"role": "user", "content": "用三句话说明慢思考模式适合什么任务"} ] }'这一次你要观察的点有两层。第一层,mimo-v2-fast-think是否也需要通过同一个https://taotoken.net/api进入;第二层,慢思考的思考过程是更完整地出现在content里,还是以另一种结构返回。不同客户端对content的渲染方式不同,但只要你拿到的是原始 JSON,就能判断 TaoToken 是否把 MiMo 的响应原样转发过来。把这条结果存成fast-think.json,不要覆盖上一条。
3.3 把两次返回并排对比,判断 TaoToken 是否原样转发
如果你更习惯用 Python,用 OpenAI SDK 把两次调用写成一个循环更省事:
from openai import OpenAI client = OpenAI( api_key="YOUR_API_KEY", base_url="https://taotoken.net/api" ) for model in ["mimo-v2-fast", "mimo-v2-fast-think"]: resp = client.chat.completions.create( model=model, messages=[{"role": "user", "content": "解释快慢思考的区别"}] ) print("====", model) print(resp.choices[0].message.content)这段代码的价值在于,除了模型名,其他变量完全一致。你可以在输出里直接搜索think结束符:如果只有mimo-v2-fast出现,说明快思考模型确实会把这段内容带出来;如果两个都有,只是长度不同,那就要把观察重点放到思考过程的完整度上。TaoToken 在这里负责的是统一转发与计量,不会替你把think结束符过滤掉;这样做的好处是你能看到真实响应,坏处是前端渲染前得自己决定要不要清洗。
4. 把两个模型名接进 Claude Code、Codex 和 CC Switch
4.1 Claude Code:settings.json 里切换 ANTHROPIC_MODEL
如果你想把 MiMo 快慢思考放进 Claude Code 里对比,最直接的方式是改~/.claude/settings.json的env。Claude Code 认的是ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL这几个环境变量,Base URL 仍然写https://taotoken.net/api,不要带/v1:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "mimo-v2-fast" } }保存后重启 Claude Code,先让它跑一个简单问题,确认能通。然后只把ANTHROPIC_MODEL改成mimo-v2-fast-think,再跑一次同类问题。两次对话不要换项目、不要换 Key、不要改 Base URL,这样你才能在 Claude Code 的输出里对照 think 结束符和思考过程差异。如果你更习惯用环境变量临时切换,也可以在启动前 export 同样的三个变量,效果一样。
4.2 Codex:config.toml 里写 model_provider 和 base_url
Codex 的配置文件和 Claude Code 不通用,别把ANTHROPIC_*套过来。打开~/.codex/config.toml,把 provider 指向 TaoToken,Base URL 写https://taotoken.net/api,模型名先填mimo-v2-fast:
model = "mimo-v2-fast" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY" wire_api = "chat"然后在你的 shell 里设置TAOTOKEN_API_KEY=YOUR_API_KEY,重启 Codex。要对比慢思考时,把model改成mimo-v2-fast-think即可。注意,这里改的是 Codex 自己的配置文件,不是 Claude Code 的settings.json。两种工具混用时,最容易犯的错就是把ANTHROPIC_AUTH_TOKEN写进 Codex,或者把model_provider写进 Claude Code,结果两边都连不上。
4.3 CC Switch:自定义供应商只填 Base URL、Key、模型 ID
用 CC Switch 的话更直观:新增一个自定义供应商,名称随意,Base URL 填https://taotoken.net/api,API Key 填YOUR_API_KEY,模型 ID 填mimo-v2-fast。保存后先发一条测试消息,再复制一份配置,把模型 ID 改成mimo-v2-fast-think,两份配置来回切。CC Switch 的好处是切模型不用改文件,适合你反复对照快慢思考返回。
不管用哪个工具,判断标准都一样:请求有没有真正落到你选的 MiMo 模型名上。如果 Claude Code 里看到的是 A 模型的风格,Codex 里看到的是 B 模型的风格,先别怀疑模型,先回配置文件检查model或ANTHROPIC_MODEL有没有生效。很多编辑器要重启后才读新配置,尤其是 Claude Code 和 Codex 这种带常驻进程的工具。
5. 回控制台对用量:快慢思考各扣了多少请求
5.1 在请求日志里按模型名筛选
复现完 fast 和 fast-think 之后,打开 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=mimo-usage 登录控制台,看请求日志和用量。你应该能按模型名筛出mimo-v2-fast与mimo-v2-fast-think两条记录。重点不是看一个笼统的总额度,而是看两者是不是分别记账、请求次数是不是和你实际发送的次数对得上。
这一步也能帮你判断「think 结束符」有没有影响计量。正常来说,一次请求就是一次请求,不会因为返回内容里多了一段疑似思考文本就变成两次。如果你发现 fast 的请求数比自己记忆中的多,先检查是不是客户端自动重试了;如果你发现 fast-think 没记录,先检查模型名是不是写成了列表里不存在的版本。控制台的日志比终端输出更适合做这种对账。
5.2 遇到 401 和模型名不识别时怎么对照
排障先看两类。第一类是 401:YOUR_API_KEY是不是从 TaoToken 控制台 创建的那把,请求头有没有写成Authorization: Bearer YOUR_API_KEY,环境变量有没有真的被工具读到。第二类是模型名不识别:把mimo-v2-fast和mimo-v2-fast-think回模型广场逐个核对,不要凭记忆写。模型广场里没有的名字,换名字比改代码更快。
还有一个隐蔽问题:Claude Code 改了settings.json但没重启,Codex 改了config.toml但终端还是旧环境变量。遇到「明明改了模型名,返回却像上一个模型」时,先把工具完全退出再打开,再发一条只包含一个短问题的请求。确认新模型名生效后,再回去看 think 结束符和慢思考的差异,否则你对比的是缓存和旧配置。
5.3 要不要开 Coding Plan,看你的调用密度
如果你只是按这篇的步骤复现一次快慢思考,用按量计费就够了。但如果你打算把mimo-v2-fast和mimo-v2-fast-think接进日常编码流程,让 Claude Code 或 Codex 反复跑,那就该看一下调用密度。打开 Coding Plan 对比套餐,再回模型对话里用同一把 Key 做小流量测试。
这里没有统一答案,因为每个人的请求频率不同。你可以先用一周,把 fast 和 fast-think 的日志拉出来看:哪种模式请求多,哪种模式只是偶尔用来对比。如果慢思考只是调试期用几次,按量走更灵活;如果快思考已经变成默认模型,再考虑套餐。无论选哪种,Key 都在 控制台 API Keys 里创建和管理。
6. 复现完之后,下一步可以做什么
到这里,你应该已经亲手看到mimo-v2-fast和mimo-v2-fast-think在同一把 Key、同一个https://taotoken.net/api下的返回差异。快思考返回里那个 think 结束符,不再只是原文作者截图里的现象,而是你控制台日志里能对得上的一条真实请求。下一步别急着写复杂的字符串清洗逻辑,先用 TaoToken 模型对话 发两条最小消息,分别选两个模型名,确认返回风格和你在 curl 里看到的一致。
如果你要把这套对比固化到 Claude Code 里,环境变量对照可以直接看 Claude Code 接入文档,里面把ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_MODEL的关系写得很清楚。模型对话负责快速验证,Coding Plan 负责长期用量,创建 Key 负责换新项目。把这三件事按顺序走一遍,快慢思考的 MiMo 实测就从一个临时脚本变成了你手里可复用的调用路径。