【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)
相关推荐
threerocks5 小时前
什么?我连 A2A、MCP 都没学会,现在又来了 AG-UI、A2UI.
前端·aigc·ai编程
Coffeeee6 小时前
两个例子,帮你快速理解什么是Token
人工智能·程序员·ai编程
饼干哥哥6 小时前
用AI全自动剪辑,日更 100条爆款视频——HyperFrames、Remotion、Git使用入门
人工智能·机器学习·ai编程
牛奶6 小时前
连微软都用不起 AI 了
aigc·openai·ai编程
MomentYY7 小时前
AI 到底是“懂”,还是在“猜”?
前端·人工智能·ai编程
沉默王二7 小时前
震惊!Claude Code这五个核心概念我居然才知道!
agent·ai编程·claude
用户805533698038 小时前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
身披彩云济沧海8 小时前
Trae 中配置 codegraph MCP
ai编程
用户034095297918 小时前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux