Skip to content

marchFantasy/mimo2api

 
 

Repository files navigation

MiMo Proxy

License: ISC Node.js TypeScript

将小米 MiMo AI 转换为 OpenAI / Anthropic 兼容 API 的代理服务。支持多账号负载均衡、会话保持、Tool Calling,可直接对接各类 AI 编程客户端。

功能特性

API 兼容

  • OpenAI v1/chat/completions(流式 & 非流式)
  • OpenAI v1/responses(流式 & 非流式,Codex 兼容)
  • Anthropic v1/messages(流式 & 非流式)
  • 多模态图片理解(自动上传至小米 OSS)

客户端兼容

  • Codex CLI / Cline / Kilo Code / Roo Code / Cursor 等 AI 编程工具
  • 任何支持 OpenAI 或 Anthropic API 的客户端

核心能力

  • 多账号负载均衡 — 自动选择最空闲账号,提升并发
  • 会话保持(Context Replay)— 减少 token 消耗,维持对话连贯
  • Tool Calling — XML 工具调用自动转换为 OpenAI/Anthropic 原生格式
  • 推理内容三种模式:passthrough / strip / separate
  • 会话隔离:auto(按 IP+UA)/ manual / per-request

管理

  • Web 管理面板(账号、API 密钥、请求日志、统计图表)
  • REST 管理 API
  • SQLite 持久化存储

快速开始

# 克隆项目
git clone https://github.com/GoblinHonest/mimo2api_mimoapi.git
cd mimo2api_mimoapi

# 安装依赖
npm install

# 启动
npm start        # 生产模式
npm run dev      # 开发模式(热重载)

服务默认运行在 http://localhost:8080

管理面板默认密码:admin,登录后可修改。首次使用需在管理面板创建 API 密钥供客户端调用。

首次运行数据

仓库不会包含运行时数据库。别人通过 git clone 获取项目后,首次启动会自动创建 dbdata/mimo-proxy.db,账号、API Key、配置和日志默认都是空的。

注意:

  • dbdata/ 是本地持久化目录,不要提交到 Git。
  • 如果页面出现旧账号,通常是复用了本机旧的 dbdata/ 或浏览器 localStorage 缓存。
  • 想重置为空系统,停止服务后删除 dbdata/,再重新启动。

macOS / Linux:

rm -rf dbdata

Windows PowerShell:

Remove-Item -Recurse -Force dbdata

平台差异与 native 依赖

本项目使用 SQLite 持久化存储,依赖 better-sqlite3 原生模块。该模块会为当前操作系统、CPU 架构和 Node.js 版本生成本地二进制文件,因此 Windows、macOS、Linux 的 node_modules 不能混用

如果在不同系统之间复制项目目录、从 Windows 同步到 macOS、从 macOS 同步到 Windows、切换 Node.js 版本,或在 macOS 上切换 arm64 / Rosetta x64 运行环境,启动时可能出现类似错误:

Error: dlopen(.../better_sqlite3.node): slice is not valid mach-o file
Error: ... is not a valid Win32 application
Error: Could not locate the bindings file

处理方式:

# 在当前系统和当前 Node.js 版本下重新编译 better-sqlite3
npm rebuild better-sqlite3

如果仍然报错,删除当前平台不匹配的依赖后重新安装:

macOS / Linux:

rm -rf node_modules
npm install

Windows PowerShell:

Remove-Item -Recurse -Force node_modules
npm install

建议:

  • 不要提交或跨平台复制 node_modules
  • 每个系统单独执行 npm install
  • 切换 Node.js 版本后执行 npm rebuild better-sqlite3
  • Docker 部署会在镜像内按 Linux 环境安装和编译依赖,不要把宿主机的 node_modules 挂载进容器。

Docker 部署

构建并启动

docker compose up -d

查看日志

docker compose logs -f

停止服务

docker compose down

数据持久化

数据目录会挂载到宿主机:

  • ./data - 应用数据目录
  • ./dbdata - SQLite 数据库目录(含 mimo-proxy.db

如果需要重置 Docker 部署的数据,先停止容器,再删除宿主机的 ./dbdata 目录后重新启动。

端口配置

默认端口是 8080,可以在 docker-compose.yml 中修改:

ports:
  - "3000:8080"  # 宿主机端口:容器端口

更新部署

# 拉取最新代码
git pull

# 重新构建并启动
docker compose up -d --build

仅使用 Docker(不用 docker-compose)

# 构建镜像
docker build -t mimo-proxy .

# 运行容器
docker run -d \
  --name mimo-proxy \
  -p 8080:8080 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/dbdata:/app/dbdata \
  mimo-proxy

添加 MiMo 账号

方式一:粘贴 cURL(推荐)

  1. 浏览器打开 MiMo AI Studio,登录后进入对话
  2. 打开 DevTools → Network,找到 chat 请求
  3. 右键 → Copy as cURL
  4. 打开管理面板 http://localhost:8080,粘贴导入

方式二:API 添加

curl -X POST http://localhost:8080/admin/accounts \
  -H "X-Admin-Key: <admin-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "service_token": "...",
    "user_id": "...",
    "ph_token": "...",
    "alias": "备注名"
  }'

使用示例

在管理面板创建 API 密钥后,将 base_url 指向本服务即可。

OpenAI 格式

curl http://localhost:8080/v1/chat/completions \
  -H "Authorization: Bearer <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mimo-v2-pro",
    "messages": [{"role": "user", "content": "你好"}],
    "stream": true
  }'

OpenAI Responses API(Codex 兼容)

curl http://localhost:8080/v1/responses \
  -H "Authorization: Bearer <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mimo-v2-pro",
    "input": [{"role": "user", "content": "你好"}],
    "stream": true
  }'

Anthropic 格式

curl http://localhost:8080/v1/messages \
  -H "x-api-key: <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mimo-v2-pro",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "你好"}]
  }'

Tool Calling

curl http://localhost:8080/v1/chat/completions \
  -H "Authorization: Bearer <api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "mimo-v2-pro",
    "messages": [{"role": "user", "content": "帮我读取 package.json 文件"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "Read",
        "description": "读取文件内容",
        "parameters": {
          "type": "object",
          "properties": {
            "file_path": {"type": "string", "description": "文件路径"}
          },
          "required": ["file_path"]
        }
      }
    }],
    "stream": true
  }'

应用配置

配置通过 Admin Web UIhttp://localhost:8080/)或 Admin API 管理,持久化存储在 SQLite 数据库中,.env 文件不会被读取。

配置项 默认值 说明
adminKey admin 管理面板密钥,务必修改
maxReplayMessages 20 会话回放消息数上限
maxQueryChars 100000 单次请求最大字符数
contextResetThreshold 150000 超过此 token 数重置会话(0=不限)
maxConcurrentPerAccount 99999 单账号最大并发数
thinkMode separate 推理内容模式
sessionTtlDays 7 会话保留天数
sessionIsolation auto 会话隔离模式

THINK_MODE

行为
passthrough 原样返回 <think>...</think> 标签
strip 移除推理内容,只返回最终答案
separate 推理内容放入独立字段(Anthropic 格式为 thinking block)

SESSION_ISOLATION

行为
auto 按 IP + User-Agent 自动隔离,不同客户端互不干扰(推荐)
manual 仅在客户端提供 x-session-id 时隔离
per-request 每次请求创建新会话(禁用记忆)

项目结构

src/
├── adapters/          # API 协议适配层
│   ├── openai.ts      #   OpenAI 兼容接口
│   └── anthropic.ts   #   Anthropic 兼容接口
├── mimo/              # MiMo 客户端交互
│   ├── client.ts      #   API 调用 & 流式响应
│   ├── serialize.ts   #   消息序列化(对话历史 → MiMo 格式)
│   ├── session.ts     #   会话管理(指纹匹配 & 上下文保持)
│   └── upload.ts      #   图片上传至小米 OSS
├── tools/             # Tool Calling 处理
│   ├── parser.ts      #   XML/JSON 工具调用解析
│   ├── format.ts      #   OpenAI/Anthropic 格式转换
│   └── prompt.ts      #   工具定义注入系统提示词
├── admin/             # 管理面板 & REST API
├── middleware/        # 认证、限流等中间件
├── web/               # 管理面板前端资源
│   ├── index.html
│   ├── style.css
│   ├── input.css
│   └── chart.js
├── config.ts          # 配置加载(数据库 → 内存)
├── db.ts              # SQLite 初始化
├── accounts.ts        # 多账号管理 & 负载均衡
├── api-keys.ts        # API 密钥管理
└── index.ts           # 入口

免责声明

本项目仅供学习和研究目的使用,与小米公司无任何关联。

使用前请阅读并遵守 MiMo AI 服务条款。使用本项目可能导致账号限制,请自行承担风险。

请勿将本项目用于商业牟利、DDoS 攻击或大规模滥用等违规活动。作者不对因使用本项目导致的任何损失承担责任。

License

ISC

About

将小米 MiMo AI 转换为 OpenAI / Anthropic 兼容 API 的代理服务。支持多账号负载均衡、会话保持、Tool Calling,可直接对接各类 AI 编程客户端。

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • TypeScript 64.9%
  • HTML 34.4%
  • Other 0.7%