【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)
相关推荐
RockHopper20252 小时前
AI时代模型生命周期与软件资产重构:概要版
人工智能·系统架构·软件工程·ai编程·世界模型
ZzT2 小时前
同一个 skill 存了三份:多 agent 环境下的 skill 管理与两款开源工具
ai编程·claude
熊猫钓鱼>_>2 小时前
Kotlin Multiplatform for OpenHarmony 实战:为 kotlin-inject 实现依赖注入适配
开发语言·华为·kotlin·ai编程·inject·鸿蒙·openharmony
lisanmengmeng3 小时前
NRPE 添加命令(三)
java·linux·服务器
VIP_CQCRE3 小时前
在 Visual Studio 里接入 Ace Data Cloud:用 LMLocal 直接调用 OpenAI 兼容模型
openai·ai编程·visual studio·ace data cloud·lmlocal
人工智能培训3 小时前
数字孪生驱动大模型工业知识库:为具身机器人植入领域专业经验
大数据·linux·服务器·前端·人工智能
江屿风3 小时前
【Linux系统】【从菜鸟驿站到操作系统:一节课打通Linux重定向与缓冲区真相】流食般投喂
linux·运维·服务器·开发语言·笔记
AINative软件工程3 小时前
LLM 上下文满了别直接报错:Context Eviction 工程实践,5 种淘汰策略的生产对比
后端·llm·ai编程
今天要早睡_3 小时前
Linux 基础指令速查:从 ls 到 tar 的常用命令全解析
linux·运维·chrome
SuperHeroWu74 小时前
TraeCode 国内版接入 DevEco CLI:用官方知识开发鸿蒙应用
ai编程·harmonyos·知识库·trae·aicoding·skills·deveco cli