【AI编程】小米mimo模型400错误处理,以及roocode修复指南

RooCode 修复 Mimo OpenAI 兼容指南

问题背景

通过 OpenAI Compatible 提供商使用模型名包含 "mimo" 的模型时,API 返回 400 错误。原因是 Mimo API 有以下特殊要求:

  1. reasoning_content 字段 :当 assistant 消息包含 tool_calls 时,必须同时携带 reasoning_content 字段,否则报 400
  2. thinking 参数 :需要发送 thinking: { type: "enabled" } 以启用推理模式
  3. 消息格式 :Mimo 的消息格式与标准 OpenAI 格式有差异,需要使用专门的 convertToMimoFormat 转换器

修改文件清单

1. webview-ui/src/components/ui/hooks/useSelectedModel.ts

问题satisfies 联合类型缺少 "mimo" provider,导致 TypeScript 编译错误。

修改

typescript 复制代码
// 修改前
provider satisfies "anthropic" | "gemini-cli" | "fake-ai"

// 修改后
provider satisfies "anthropic" | "gemini-cli" | "fake-ai" | "mimo"

2. src/api/providers/openai.ts

问题 :OpenAI 提供商使用 convertToOpenAiMessages 转换消息,不保留 reasoning_content,也不发送 thinking 参数。

修改

  • 新增 convertToMimoFormat 导入:
typescript 复制代码
import { convertToMimoFormat } from "../transform/mimo-format"
  • 新增 Mimo 模型检测:
typescript 复制代码
const isMimoModel = modelId.toLowerCase().includes("mimo")
  • 流式路径消息转换(在 deepseekReasoner 判断之后):
typescript 复制代码
} else if (isMimoModel) {
    convertedMessages = [
        { role: "system" as const, content: systemPrompt },
        ...convertToMimoFormat(messages, {
            mergeToolResultText: true,
            forceReasoningContent: true,
        }),
    ]
}
  • 流式请求参数添加 thinking
typescript 复制代码
...(isMimoModel && { thinking: { type: "enabled" } }),
  • 非流式路径同样处理:
typescript 复制代码
if (deepseekReasoner) {
    nonStreamingMessages = convertToR1Format([...])
} else if (isMimoModel) {
    nonStreamingMessages = [
        { role: "system" as const, content: systemPrompt },
        ...convertToMimoFormat(messages, {
            mergeToolResultText: true,
            forceReasoningContent: true,
        }),
    ]
} else {
    nonStreamingMessages = [systemMessage, ...convertToOpenAiMessages(messages)]
}

3. src/api/providers/base-openai-compatible-provider.ts

问题BaseOpenAiCompatibleProvider 是 OpenRouter、LM Studio 等兼容提供商的基类,同样需要支持 mimo 模型。

修改

  • 新增导入:
typescript 复制代码
import { convertToMimoFormat } from "../transform/mimo-format"
  • createStream 方法中新增检测和转换:
typescript 复制代码
const isMimoModel = model.toLowerCase().includes("mimo")

const convertedMessages = isMimoModel
    ? convertToMimoFormat(messages, { mergeToolResultText: true, forceReasoningContent: true })
    : convertToOpenAiMessages(messages)
  • 请求参数添加 thinking
typescript 复制代码
...(isMimoModel && { thinking: { type: "enabled" } }),

4. src/package.json

版本号从 3.53.0 更新为 3.53.0-fix-mimo

关键参数说明

参数 作用
forceReasoningContent: true 强制为包含 tool_calls 的 assistant 消息添加空的 reasoning_content 字段,避免 Mimo API 报 400
mergeToolResultText: true 将 tool_result 后的文本块合并到 tool 消息中(Mimo 不支持 tool 消息后跟独立文本块)
thinking: { type: "enabled" } 启用 Mimo 的推理模式,使其返回 reasoning_content 字段

影响范围

  • OpenAI Compatible 提供商 :通过 src/api/providers/openai.ts
  • 所有 OpenAI 兼容基类的子提供商 :通过 src/api/providers/base-openai-compatible-provider.ts,包括 OpenRouter、LM Studio、ZAi、MiniMax 等

只要模型 ID 中包含 "mimo"(不区分大小写),就会自动应用 Mimo 格式转换和 thinking 参数。

打包产物

复制代码
bin/roo-cline-3.53.0-fix-mimo.vsix (31.71 MB)
相关推荐
额额额对了10 分钟前
Linux C 多线程编程基础:从内存模型到生命周期管理
linux·开发语言·算法
jump_jump11 分钟前
我让本地 Qwen3.8 27B 搭了一个内网穿透服务
人工智能·llm·ai编程
mengge.cloud16 分钟前
Linux小白入门教程(基础命令篇)
linux·运维·服务器
嵌入式小宁24 分钟前
C11 原子操作 `atomic_int` 通俗指南
linux·c语言·嵌入式硬件
crossoverJie25 分钟前
我做了一个 比 openclaw/workbuddy 更适合自己的用 Agent
github·ai编程
JasonHuan112329 分钟前
Hyper-V-三台虚拟机安装启动使用完全指南
linux·ubuntu·hyper-v·虚拟机
angered43 分钟前
「AI 应用 / AI Agent」行业日报 · 2026-08-24
人工智能·ai编程
susplus1 小时前
【专题】frmaebuffer打印bmp图片
linux·bmp·framebuffer
必须会一定会1 小时前
AI 前端项目验收:Playwright 截图、响应式视口、控制台错误与交互回归
前端·人工智能·gpt·交互·ai编程