【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)
相关推荐
七牛云行业应用2 小时前
2026 年 9 月 Coding Agent Harness 选型完整指南:30 个工具、SDK 与运行时
人工智能·agent·ai编程
ServBay2 小时前
ServBay 1.33.0 来了:AI Gateway 一键接管主流 AI CLI 与多模型
后端·aigc·ai编程
袋鼠云数栈UED团队2 小时前
AI Coding 方法论分析:同一个需求 SpecKit 、 Superpowers、 MattpocockSkills 不同设计
前端·aigc·ai编程
fengyehongWorld2 小时前
Linux squid搭建基础代理服务器
linux·运维·服务器
木白CPP2 小时前
Linux DMA驱动详解(二)-----DMA的使用者
java·linux·运维
Code_Artist3 小时前
☢︎自然语言 → 机器码:这到底是 AI 编程的终极形态,还是一个伪命题?
人工智能·llm·ai编程
赵民勇3 小时前
systemd-socket-activate命令详解
linux·运维
youcans_3 小时前
【嵌入式软件AI编程】09. 使用VS Code调试STM32程序
stm32·mcu·ai编程·嵌入式软件·claude code
Cx330❀3 小时前
【Linux网络】网络层 IP 协议:从网段划分到内核源码解析
大数据·linux·服务器·网络·tcp/ip·性能优化·langchain
企鹅的蚂蚁4 小时前
LubanCat RK3588 实时 Linux 开发(七):YT6801 PCIe 网卡驱动移植与 vermagic 排查
linux·rk3588·linux驱动·yt6801·pcie网卡·vermagic