将小米 MiMo AI Studio 网页端对话转换为 OpenAI 兼容 API,支持多模态(文本 + 图片)、工具调用(Function Calling)、多账号负载均衡。
本项目基于原mimo2api 修改。 本项目所修改代码均为ai完成,不含任何一句人工代码,望周知!
- OpenAI 完全兼容 — 标准
/v1/chat/completions(流式/非流式)、/v1/models、/v1/models/{id}端点,可直接对接 ChatBox、NextChat、LobeChat 等任何 OpenAI 客户端 - 工具调用(Function Calling) — 5 种提取策略覆盖 MiMo 原生 XML (
<tool_call>)、TOOL_CALL 标签、JSON、<function_call>XML、自由文本匹配,自动清洗响应中的工具残留 - 多模态支持 — omni 模型支持图片输入(URL、base64),自动完成三步上传流程(genUploadInfo → PUT → resource/parse)
- 深度思考 — 支持 reasoning_effort 参数,自动分离
<think>块输出 - 多账号池 — 管理面板配置多个 MiMo 账号,轮询负载均衡,自动故障转移
- 动态模型发现 — 启动时从 MiMo 官方 API 实时拉取可用模型列表,无需手动维护
- 凭证管理 — 支持 Cookie 导入、cURL 导入两种配置方式
- CORS 全开 — 允许任意来源跨域访问
┌──────────────────────────────────────────────────────────┐
│ OpenAI 兼容客户端 │
│ (ChatBox / LobeChat / curl / SDK) │
└───────────────┬──────────────────────────────────────────┘
│ /v1/chat/completions
▼
┌──────────────────────────────────────────────────────────┐
│ MiMo2API (FastAPI) │
│ ┌─────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ routes │ │ tool_call │ │ mimo_client │ │
│ │ (API) │──│ (5策略提取) │──│ (HTTP/SSE 代理) │ │
│ └─────────┘ └──────────────┘ └──────────────────────┘ │
│ ┌─────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ config │ │ utils │ │ models │ │
│ │ (多账号) │ │ (图片上传等) │ │ (OpenAI 数据模型) │ │
│ └─────────┘ └──────────────┘ └──────────────────────┘ │
└───────────────┬──────────────────────────────────────────┘
│ HTTPS (SSE)
▼
┌──────────────────────────────────────────────────────────┐
│ MiMo API (aistudio.xiaomimimo.com) │
│ /open-apis/bot/chat (SSE) │
└──────────────────────────────────────────────────────────┘
tar xzf MiMo2API.tar.gz
cd MiMo2API
chmod +x deploy.sh
./deploy.sh部署完成后,服务已在 前台 启动。见下方管理命令了解后台运行等方式。
# 1. 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 2. 安装依赖
pip install -r requirements.txt
# 3. 创建配置文件
cp config.example.json config.json
# 4. 启动
python main.py启动后访问:http://localhost:8080
打开管理面板 http://localhost:8080 进行配置。
- 访问 https://aistudio.xiaomimimo.com 并登录
- 打开 开发者工具 → Application → Storage → Cookies
- 找到以下三个关键 Cookie:
serviceToken— 服务凭证(最重要)userId— 用户 ID(纯数字)xiaomichatbot_ph— 会话标识
- 填入管理面板 → 保存
提示: serviceToken 有效期很短(约 24 小时),过期后需要重新导入。
- 登录 aistudio.xiaomimimo.com
- 打开开发者工具 → Network 面板
- 发送一条消息,找到
chat请求(SSE 类型) - 右键 → Copy as cURL
- 粘贴到管理面板 → 自动解析并保存
支持添加多个账号,代理会自动轮询使用:
- 每个请求从账号池取下一个 → 降低单账号限频风险
- 支持测试连接、删除、替换已有账号
- 同一个 userId 重复导入会自动更新(不重复添加)
curl http://localhost:8080/v1/models \
-H "Authorization: Bearer sk-mimo"返回模型列表会显示所有 MiMo 官方当前可用的模型。
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer sk-mimo" \
-H "Content-Type: application/json" \
-d '{
"model": "mimo-v2-flash",
"messages": [
{"role": "user", "content": "你好,请用中文回复"}
]
}'curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer sk-mimo" \
-H "Content-Type: application/json" \
-d '{
"model": "mimo-v2-flash",
"messages": [
{"role": "user", "content": "讲个故事"}
],
"stream": true
}'返回标准 SSE 流(data: ...\n\n),以 data: [DONE]\n\n 结束。
需要选择 omni/v2.5 模型。支持两种图片格式:
URL 方式:
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer sk-mimo" \
-H "Content-Type: application/json" \
-d '{
"model": "mimo-v2-omni",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "这张图片里有什么?"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
]
}]
}'Base64 方式:
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer sk-mimo" \
-H "Content-Type: application/json" \
-d '{
"model": "mimo-v2-omni",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "描述这张图片"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,/9j/4AAQ..."}}
]
}]
}'原理: 代理会自动完成三步上传流程:
genUploadInfo获取签名 URL →PUT上传原始数据 →resource/parse注册解析,然后将multiMedias参数传入聊天 API。
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer sk-mimo" \
-H "Content-Type: application/json" \
-d '{
"model": "mimo-v2-pro",
"messages": [
{"role": "user", "content": "北京今天天气怎么样?"}
],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市的天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
}
}],
"tool_choice": "auto"
}'成功时返回 finish_reason: "tool_calls",message.tool_calls 包含结构化的函数调用:
{
"choices": [{
"finish_reason": "tool_calls",
"message": {
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_abc123...",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"北京\"}"
}
}]
}
}]
}使用 reasoning_effort 参数启用深度思考:
curl http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer sk-mimo" \
-H "Content-Type: application/json" \
-d '{
"model": "mimo-v2-pro",
"messages": [
{"role": "user", "content": "证明根号2是无理数"}
],
"reasoning_effort": "high",
"stream": true
}'流式响应中会包含 reasoning 字段(对应 MiMo 的 <think> 块),内容与文本分开输出。
模型列表启动时自动探测,从 https://aistudio.xiaomimimo.com/open-apis/bot/config 实时拉取,无需手动配置。
# 强制刷新模型列表
curl -X POST http://localhost:8080/v1/models/refresh \
-H "Authorization: Bearer sk-mimo"MiMo API 本身不支持 OpenAI function calling 格式。本代理通过提示词注入 + 多策略提取实现:
将 OpenAI tools 定义转换为极简文本,注入到 system 消息中:
# Tools
- get_weather(city) — 查询指定城市的天气
- search_web(query, page) — 搜索网页
| 策略 | 格式 | 说明 |
|---|---|---|
| 1 | TOOL_CALL: name(key=value) |
正则匹配,最可靠 |
| 2 | {"name": "x", "arguments": {...}} |
JSON 块解析 |
| 3 | name(args) |
自由文本关键词匹配 |
| 4 | <tool_call><function=NAME><parameter=K>V</parameter></function></tool_call> |
MiMo 原生 XML 格式 |
| 5 | <function_call>{"name":"x","arguments":{...}}</function_call> |
XML 包裹 JSON |
提取成功后,自动清理响应中的工具残留文本(TOOL_CALL 行、XML 标签、JSON 块),避免 TTS 误读。
# 前台运行(Ctrl+C 停止)
./venv/bin/python main.py
# 后台运行
nohup ./venv/bin/python main.py > mimo.log 2>&1 &
echo $! > mimo.pid
# 从 PID 文件停止
kill $(cat mimo.pid)
# 按进程名停止
pkill -f "python main.py"
# 查看实时日志
tail -f mimo.log
# 查看进程状态
ps aux | grep "python main.py"
# 查看端口占用
lsof -i :8080启动后:
| 地址 | 说明 |
|---|---|
http://localhost:8080 |
Web 管理后台(配置账号) |
http://localhost:8080/v1 |
OpenAI 兼容 API 根路径 |
http://localhost:8080/docs |
Swagger API 文档 |
MiMo2API/
├── main.py # 入口,FastAPI 应用创建 + uvicorn 启动
├── deploy.sh # 一键部署脚本(安装依赖、初始化配置)
├── requirements.txt # Python 依赖
├── config.example.json # 配置文件模板
├── config.json # 实际配置(.gitignore,含凭证)
└── app/
├── __init__.py
├── routes.py # API 路由(chat/models/管理面板/账号CRUD)
├── models.py # OpenAI 兼容数据模型(Pydantic)
├── mimo_client.py # MiMo API 客户端(HTTP SSE 流处理)
├── config.py # 配置管理(多账号、线程安全、轮询)
├── utils.py # 工具函数(cURL解析、图片上传、消息构建)
├── tool_call.py # 工具调用(提示词注入 + 5策略提取 + 清理)
└── admin.html # Web 管理面板(内嵌单文件)
config.json 完整配置项:
{
"api_keys": "sk-mimo,sk-another",
"mimo_accounts": [
{
"service_token": "eyJ...",
"user_id": "123456",
"xiaomichatbot_ph": "abc123...",
"is_valid": true,
"login_time": "04-26 17:00",
"last_test": "04-26 17:05"
}
],
"models": []
}| 配置项 | 说明 | 默认值 |
|---|---|---|
api_keys |
逗号分隔的 API Key 列表 | sk-mimo |
mimo_accounts |
MiMo 账号列表(可多个) | [] |
models |
自定义模型列表(空数组=自动探测) | [] |
环境变量: PORT — 监听端口(默认 8080)
- Python 3.10+
- FastAPI 0.115
- uvicorn 0.32
- httpx 0.27
- Pydantic v2
pip install -r requirements.txt| 限制 | 说明 |
|---|---|
| Token 有效期 | serviceToken 约 24 小时过期,过期后需重新登录 |
| 多模态模型 | 仅 mimo-v2-omni、mimo-v2.5 支持图片;自动切换模型会导致请求 model 与响应 model 不一致 |
| TTS 模型 | mimo-v2-tts 需要官方 API Key,逆向方式不支持 |
| 并发限制 | 取决于 MiMo 服务端限制(通常 1-2 并发/账号),多账号可缓解 |
| 不支持 Embeddings | 仅实现 Chat Completions 端点 |
| 非流式实际走 SSE | MiMo API 只提供 SSE 流,非流式请求会缓冲全部 SSE 后合并返回 |
Q: 为什么返回 401 "invalid api key"?
A: 检查 Authorization header 是否携带了正确的 API Key。默认是 sk-mimo,可在 config.json 中修改。
Q: 为什么返回 503 "no mimo account"? A: 管理面板中没有配置账号,或者所有账号都已失效。请登录 http://localhost:8080 添加有效账号。
Q: 图片上传失败怎么办? A: 可能是 Cookie 过期导致上传签名获取失败。重新导入 Cookie/login 即可。
Q: tool_call 没有被提取?
A: 查看日志确认响应内容。如果 MiMo 没有按预期输出工具调用格式,可能是提示词不够清晰,或者该模型理解力有限。推荐使用 mimo-v2-pro 进行工具调用。
Q: 可以部署到公网吗?
A: 可以,但注意修改默认 API Key(sk-mimo 太简单),建议使用 Nginx 反向代理 + HTTPS。
MIT License
致谢: 小米 MiMo AI Studio 提供的基础 API 服务。