【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)
相关推荐
JavaGuide1 小时前
万字详解 Harness Engineering:六层架构、上下文管理与一线团队实战
人工智能·ai编程
xingfujie1 小时前
前言:从零到一,系统掌握 K8s + DevOps + 微服务
linux·运维·微服务·云原生·容器·kubernetes·devops
坐吃山猪1 小时前
Python34_装饰器知识
开发语言·python·ubuntu
Fanfanaas1 小时前
Linux 系统编程 文件篇 (一)
linux·运维·服务器·c++·学习
j_xxx404_1 小时前
Linux信号机制:从键盘到内核、进阶实战硬核剖析
linux·运维·服务器·c++·人工智能·ai
Mr. zhihao1 小时前
从 `cat file.txt` 到屏幕:一次 Linux 文件读取的完整旅程
linux·运维·服务器
前端 贾公子1 小时前
如何在 Antigravity 中使用 MCP 服务器
ai编程
李日灐1 小时前
< 12 > Linux进程:进程虚拟地址空间机制 —— 内存管理的美学
linux·运维·算法
码完就睡1 小时前
Linux——进程间通信
linux·运维·服务器