批量推理(Batch API)
批量推理(Batch API)是无需实时响应需求的离线大批量数据处理方案,接口兼容 OpenAI,适合执行模型评测、数据标注、批量回归等场景,支持通过 SDK 或 控制台创建异步任务处理请求。批量推理(Batch API)的优势如下:
- ⭐ 成本相对更低:批量推理(Batch API) 价格为实时 API 的 50%
批量推理支持的模型为
mimo-v2.6-pro、mimo-v2.6-flash,使用模型调用批量推理服务时,模型名需小写
-
⭐ 闲时智能调度:任务提交后由系统自动调度到闲时执行,充分利用低峰算力
-
⭐ 使用方式灵活:提供接口、控制台2种使用方式,可通过接口、开放平台控制台完成任务全流程管理
-
⭐ OpenAI 兼容:接口协议与 OpenAI 一致,从 OpenAI Batch 迁移改造简单
适用场景
| 场景 | 说明 |
|---|---|
| 数据标注 | 大批量文本、图片打标签 |
| 模型评测 | Benchmark 测试、回归验证 |
| 内容审核 | 离线批量分类、过滤 |
| 批量生成 | 摘要、翻译、结构化提取 |
| 学术研究 | 大规模数据实验、论文数据处理 |
批量推理API价格
Xiaomi MiMo API 的按量计费使用开放平台普通 API Key,并按实际 Token 用量消耗账户余额,与 Token Plan 套餐额度不互通。
计费说明
-
批量推理(Batch API) 价格 = 实时 API 价格 × 50%
-
计费单位:国内:元 / 百万 tokens ;海外:美元 / 百万 tokens
-
缓存命中:当请求的前缀内容命中 Prompt Cache 时,按命中缓存价格计费
-
批量推理目前支持
mimo-v2.6-pro、mimo-v2.6-flash模型,下列出 2 款模型批量推理在国内、海外的定价
模型国内定价
| 推理类型 | 实时推理API | 批量推理API | ||||
|---|---|---|---|---|---|---|
| MiMo-V2.6 系列 | 输入(命中缓存) | 输入(未命中缓存) | 输出 | 输入(命中缓存) | 输入(未命中缓存) | 输出 |
mimo-v2.6-pro |
¥0.025 | ¥3.00 | ¥6.00 | ¥0.0125 | ¥1.50 | ¥3.00 |
mimo-v2.6-flash |
¥0.02 | ¥1.00 | ¥2.00 | ¥0.01 | ¥0.50 | ¥1.00 |
模型海外定价
| 推理类型 | 实时推理API | 批量推理API | ||||
|---|---|---|---|---|---|---|
| MiMo-V2.6 系列 | 输入(命中缓存) | 输入(未命中缓存) | 输出 | 输入(命中缓存) | 输入(未命中缓存) | 输出 |
mimo-v2.6-pro |
$0.0036 | $0.435 | $0.87 | $0.0018 | $0.2175 | $0.435 |
mimo-v2.6-flash |
$0.0028 | $0.14 | $0.28 | $0.0014 | $0.07 | $0.14 |
快速上手批量推理
前置准备
使用 批量推理( Batch API ) 前,需完成以下步骤:
| 步骤 | 说明 |
|---|---|
| 1. 注册账号 | 注册 Xiaomi MiMo 开放平台账号 |
| 2. 实名认证 | 完成实名认证 |
| 3. 账户充值 | 充值账户余额( Batch API 需从余额扣费) |
| 4. 获取 API Key | 创建可用的 API Key- 接口创建的 Batch 任务:使用你创建的API Key |
| 5.获取Base URL | 获取Base URL,前往批量推理页面获取 |
步骤一:准备文件
请参考文件格式要求准备文件格式为 JSONL (JSON Lines,一行一个 JSON 对象)的数据文件,其中每行包含对 API 的单个请求的详细信息。
文件示例
下面分别是包含 2 个请求的输入文件的示例(.jsonl文件),分别对应批量推理支持的 3 种url,需注意,通过页面控制台使用批量推理,目前仅支持 OpenAI | completions 文件格式上传,使用接口使用批量推理则更加灵活,支持 3 种文件格式
Base URL:前往批量推理页面获取
OpenAI | completions, 下载示例文件
{"custom_id": "request-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "mimo-v2.6-flash", "messages": [{"role": "user", "content": "Hello"}]}}
{"custom_id": "request-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "mimo-v2.6-pro", "messages": [{"role": "user", "content": "World"}]}}
OpenAI | responses, 下载示例文件
{"custom_id": "request-1", "method": "POST", "url": "/v1/responses", "body": {"model": "mimo-v2.6-pro", "input": "Hello"}}
{"custom_id": "request-2", "method": "POST", "url": "/v1/responses", "body": {"model": "mimo-v2.6-flash", "input": "please introduce yourself"}}
Anthropic | messages, 下载示例文件
{"custom_id": "request-1", "method": "POST", "url": "/anthropic/v1/messages", "body": {"model": "mimo-v2.6-pro", "messages": [{"role": "user", "content": [{"type": "text", "text": "Hello"}]}]}}
{"custom_id": "request-2", "method": "POST", "url": "/anthropic/v1/messages", "body": {"model": "mimo-v2.6-flash", "messages": [{"role": "user", "content": [{"type": "text", "text": "please introduce yourself"}]}]}}
文件规范要求
- 文件基础要求
默认最大文件大小 128 MB;单个文件只能包含一个批量推理接入点的请求。
-
字段规则
-
每个请求都必须包含 custom_id 字段,类型为字符串且在文件内唯一,用于关联请求与对应结果。
-
每条请求独立发送、独立收到结果。若多个请求提示词相同,需在请求中都加上相同的提示词。
-
每个请求 body 字段参数需与底层模型调用 API 的 request body 一致,为合法 JSON Object。
-
步骤二:创建批量推理任务
-
在批量推理页面,单击创建批量推理任务。
-
在创建任务页面,上传 JSONL 文件,填写任务描述,设置最长等待时间(1–14 天)。
通过页面控制台使用批量推理,目前仅支持 OpenAI | completions 文件格式上传,使用接口使用批量推理则更加灵活,支持 3 种文件格式。
OpenAI | completions
OpenAI | responses
Anthropic | messages
- 填写完成后,单击创建。
步骤三:管理任务
-
查看:
-
在任务列表页,查看任务的进度(已处理请求数/总请求数)和状态。或进入任务详情页,查看更多信息。
-
按任务描述或ID搜索,快速定位目标任务。
-
-
管理:
-
取消:“执行中”的任务可在操作列取消。
-
排查错误:“失败”的任务可下载错误文件查看详情。任务列表页-操作、任务详情页均可进行文件下载。
-
步骤四:下载结果
系统只保留您的数据 30 天。请及时下载和备份您的数据,过期后文件将自动删除,无法恢复。
任务完成后,在任务列表页-操作、任务详情页均可进行文件下载:
-
成功文件:记录所有成功请求及其
response结果。 -
错误文件(如有) :记录所有失败请求及其
error详情。
两个文件均包含 custom_id 字段,用于与原始输入数据匹配,关联结果或定位错误。
步骤五:查看用量统计(可选)
在账单明细页面,筛选并查看批量推理的用量统计。
查看数据概览:选择时间,将推理类型选为批量推理,选择API Key,查看批量推理的模型调用概览。
接口创建的任务:使用你创建的API Key,可选择该 Key 查看用量
页面控制台创建的任务:默认挂靠到平台默认的API Key,无需使用自己创建的API Key,可选择【其他】查看用量
API参考
步骤一:上传任务文件至文件服务
可以通过 Curl 上传任务文件至 文件服务的 bucket 中,后续网关平台会读取文件里的请求信息进行批量推理。
请求示例
curl https://batch-api-${region}.xiaomimimo.com/v1/files \
-H "Authorization: Bearer $ARK_API_KEY" \
-F 'purpose=batch' \
-F 'file=@/Users/doc/demo.jsonl' \ #文件路径
请求参数
-
purpose —— 上传文件目录分类
- batch(批量推理文件)
-
file=@ —— 需要上传文件的本地路径
目前文件存储默认文件过期时间为30天
请求返回结果示例
{
"id": "file-8a761b15a195",
"object": "file",
"purpose": "batch",
"filename": "input.jsonl",
"bytes": 327,
"status": "active",
"error": null,
"metadata": null,
"mime_type": "application/jsonl",
"created_at": 1780034477,
"expire_at": 1780038877,
"preprocess_configs": null
}
| 字段 | 描述 |
|---|---|
| id | 文件唯一标识符,格式为 file- + UUID 前缀 |
| object | 对象类型,固定值 "file",标识这是一个文件资源 |
| purpose | 文件分类。"batch" 表示用于批量处理(batch processing) |
| filename | 原始文件名 |
| bytes | 文件大小,单位为字节 |
| status | 文件状态。"active" 表示文件可用;其他可能值有 "pending"(处理中)、"error"(失败)等 |
| error | 错误信息,无错误时为 null;出错时包含具体错误描述 |
| metadata | 自定义元数据,用户可附加的键值对信息,暂未使用到 |
| mime_type | MIME 类型 |
| created_at | 创建时间,Unix 时间戳(秒) |
| expire_at | 过期时间,Unix 时间戳。到期后文件可能被自动清理 |
步骤二:创建批量推理任务
支持自定义任务超时时间,范围在 1-14 天
请求示例
curl -X POST https://batch-api-${region}.xiaomimimo.com/v1/batches \
-H "Authorization: Bearer $ARK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input_file_id": "$FILE_ID",
"endpoint": "/v1/chat/completions",
"completion_window": "24h"
}'
返回示例
{
"id": "batch_c089f12dde664f07aeadd8c7",
"object": "batch",
"endpoint": "/v1/chat/completions",
"errors": null,
"input_file_id": "file-0f4add6a5001",
"completion_window": "24h",
"status": "validating",
"output_file_id": null,
"error_file_id": null,
"created_at": 1711402400,
"in_progress_at": null,
"expires_at": 1711488800,
"finalizing_at": null,
"completed_at": null,
"failed_at": null,
"expired_at": null,
"cancelling_at": null,
"cancelled_at": null,
"request_counts": { "total": 0, "completed": 0, "failed": 0 }
}
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | Batch Job 唯一标识,格式为 batch_ + 随机 ID |
| object | string | 对象类型,固定为 "batch" |
| endpoint | string | 本次 Batch 调用的 API 端点,如 /v1/chat/completions |
| errors | object/null | 错误信息,无错误时为 null |
| input_file_id | string | 输入文件 ID,指向上传的 .jsonl 文件 |
| completion_window | string | 完成时间窗口,当前固定 "24h",超时则变为 expired |
| status | string | 当前状态,9 种取值(见上一条消息) |
| output_file_id | string/null | 输出文件 ID,完成后才有值,可下载处理结果 |
| error_file_id | string/null | 错误文件 ID,存在失败请求时才有值,记录每条失败原因 |
| created_at | int | 创建时间(Unix 时间戳,秒) |
| in_progress_at | int/null | 进入处理中的时间,尚未开始处理时为 null |
| expires_at | int | 过期时间,即 created_at + completion_window |
| finalizing_at | int/null | 进入收尾阶段的时间 |
| completed_at | int/null | 完成时间,仅 completed 状态时有值 |
| failed_at | int/null | 失败时间,仅 failed 状态时有值 |
| expired_at | int/null | 过期时间,仅 expired 状态时有值 |
| cancelling_at | int/null | 发起取消的时间 |
| cancelled_at | int/null | 取消完成的时间,仅 cancelled 状态时有值 |
| request_counts | object | 请求计数器 |
| request_counts.total | int | 总请求数 |
| request_counts.completed | int | 已完成请求数 |
| request_counts.failed | int | 失败请求数 |
步骤三:查询批量推理任务状态
请求示例
curl https://batch-api-${region}.xiaomimimo.com/v1/batches/$BATCH_ID \
-H "Authorization: Bearer $ARK_API_KEY"
批量推理任务状态与对应描述如下:
| 状态 | 状态码 | 描述 |
|---|---|---|
| 初始化中 | validating | 任务在初始化中。 |
| 运行中 | in_progress | 任务运行中。 |
| 完成 | Completed | 任务已全部完成。 |
| 失败 | Failed | 任务执行失败,原因可能是超时等原因。 |
| 取消中 | cancelling | 用户主动取消任务 |
| 已取消 | cancelled | 用户主动取消成功,任务已终止 |
步骤四:下载批量推理任务结果
成功文件(output_file)
每行一个结果对象,通过 custom_id 关联到输入:
{"id":"batch_req_xxx","custom_id":"request-1","response":{"status_code":200,"body":{"id":"chatcmpl-xxx","choices":[{"message":{"content":"Hello!"}}]}},"error":null}
{"id":"batch_req_yyy","custom_id":"request-2","response":{"status_code":200,"body":{"id":"chatcmpl-yyy","choices":[{"message":{"content":"World!"}}]}},"error":null}
错误文件(error_file)
仅在有失败请求时生成:
{"id":"batch_req_zzz","custom_id":"request-3","response":null,"error":{"code":"inference_failed","message":"400 Bad Request"}}
输入的 **custom_id** 会原样出现在输出结果里,用于对齐输入输出。
批量推理任务运行结束后,可以通过 curl 方式下载结果文件。其中结果文件包含 2 类文件:
下载输出文件
curl https://batch-api-${region}.xiaomimimo.com/v1/files/${结果文件id}/content \
-H "Authorization: Bearer YOUR_API_KEY" \
-o output.jsonl
输出文件格式(JSONL,每行一个结果):
{"id":"f7ed2","custom_id":"request-1","response":{"status_code":200,"body":{"id":"chatcmpl-xxx","choices":[{"message":{"content":"Hello!"}}]}},"error":null}
{"id":"a3b21","custom_id":"request-2","response":{"status_code":200,"body":{"id":"chatcmpl-yyy","choices":[{"message":{"content":"World!"}}]}},"error":null}
下载错误文件
如果有失败的请求,error_file_id 不为空:
curl https://batch-api-${region}.xiaomimimo.com/v1/files/${错误文件id}/content \
-H "Authorization: Bearer YOUR_API_KEY" \
-o errors.jsonl
错误文件格式:
{"id":"db7da","custom_id":"request-3","response":null,"error":{"code":"inference_failed","message":"400 Bad Request"}}
其他接口示例
取消批量推理任务
请求示例
curl -X POST https://batch-api-${region}.xiaomimimo.com/v1/batches/batch_c089f12dde664f07aeadd8c7/cancel \
-H "Authorization: Bearer YOUR_API_KEY"
返回示例
{
"id": "batch_c089f12dde664f07aeadd8c7",
"object": "batch",
"endpoint": "/v1/chat/completions",
"errors": null,
"input_file_id": "file-0f4add6a5001",
"completion_window": "24h",
"status": "cancelling",
"output_file_id": null,
"error_file_id": null,
"created_at": 1711402400,
"in_progress_at": 1711402410,
"expires_at": 1711488800,
"finalizing_at": null,
"completed_at": null,
"failed_at": null,
"expired_at": null,
"cancelling_at": 1711402600,
"cancelled_at": null,
"request_counts": { "total": 2, "completed": 1, "failed": 0 }
}
取消是异步操作,返回状态为 cancelling。再次查询时状态会变为 cancelled,此时 output_file_id 和 error_file_id 不为 null(已完成的部分会生成输出文件)。
OpenAI SDK 兼容
批量推理(Batch API) 兼容 OpenAI 协议,可直接使用 OpenAI Python SDK:
from openai import OpenAI
client = OpenAI(
api_key="your-mimo-api-key",
base_url="https://batch-api-${region}.xiaomimimo.com/v1"
)
# 上传文件
file = client.files.create(
file=open("input.jsonl", "rb"),
purpose="batch"
)
# 创建 Batch
batch = client.batches.create(
input_file_id=file.id,
endpoint="/v1/chat/completions",
completion_window="24h"
)
# 查询状态
batch = client.batches.retrieve(batch.id)
print(f"状态: {batch.status}")
print(f"已完成: {batch.request_counts.completed}/{batch.request_counts.total}")
# 下载结果
if batch.output_file_id:
result = client.files.content(batch.output_file_id)
with open("output.jsonl", "wb") as f:
f.write(result.content)
常见问题
任务提交后为什么没有立即运行?
批量推理(Batch API)采用闲时调度策略:系统会根据线上资源情况自动调度,无需您手动干预,资源紧张时,任务启动和执行可能延迟。
任务失败了如何重试?
批量推理(Batch API) 暂不支持任务内重试或续跑。如遇任务失败,您需要:
-
下载错误文件;
-
在错误文件中查看失败原因;
-
重新创建新任务提交。
任务状态为部分成功,这种情况怎么处理?
-
您的任务存在部分请求成功、部分请求失败,成功文件包含所有成功的请求结果,错误文件包含失败请求及错误原因。已成功的请求会正常计费。
-
您可以下载错误文件,在错误文件中查看失败原因,重新创建新任务提交。
余额不足会怎么样?
-
创建任务时余额为 0:您可正常浏览体验任务创建流程,任务会创建失败。
-
任务执行中余额不足:任务失败,已完成部分会生成成功文件,正常计费;未执行部分会生成失败文件,不收取费用。
未实名认证能用吗?
不能。使用 批量推理(Batch API) 前必须完成实名认证。未实名的用户进入批量推理页面时,会看到引导页并跳转到实名认证页面。
是否支持流式输出?
不支持。Batch 场景是异步处理,不适用流式协议。
是否支持 Token Plan 抵扣?
不支持。批量推理(Batch API) 仅按实际 Token 用量消耗账户现金余额,与 Token Plan 套餐额度不互通。
结果文件保留多久?
输入文件和结果文件默认保留 30 天,过期自动清理。请及时下载。
成功、失败、取消的任务分别怎么计费?
-
只计成功请求,文件解析失败、任务执行中失败的请求不产生费用
-
取消前已成功完成的请求正常计费