批量任务
Token360 支持通过 OpenAI Batch API 相同的方式,对聊天补全进行异步批量推理:上传 JSONL 输入文件 → 创建 batch 作业 → 轮询状态 → 下载输出 JSONL。
当前 MVP 范围:
- 端点:仅支持
POST /v1/chat/completions(JSONL 每行的url须为该值)。 - 上游:OpenAI 与 Gemini(Gemini 的 batch 控制面为 OpenAI 兼容;文件上下行在平台内部走 Google GenAI,对用户透明)。
- 模型名:JSONL 中使用 Token360 对外模型名(与同步 Chat 相同)。可调用
GET /v1/batches/models查询当前账户可用的 batch 模型。
流程
11. GET /v1/batches/models → 查询支持 batch 的模型
22. POST /v1/files (purpose=batch) → 上传 input.jsonl
33. POST /v1/batches → 创建作业(input_file_id)
44. GET /v1/batches/{batch_id} → 轮询直至终态
55. GET /v1/files/{file_id}/content → 下载 output / error JSONL可在控制台配置账户级 batch Webhook(见 Webhook),或在创建 batch 时通过 callback_url 单次覆盖。
输入 JSONL 格式
每个非空行为一条请求对象:
custom_id | 是 | 用于与输出行对应(输出顺序可能与输入不一致)。 |
method | 是 | 必须为 POST。 |
url | 是 | 必须为 /v1/chat/completions。 |
body | 是 | Chat Completions 请求体(OpenAI 格式),须含 model 与 messages。 |
示例(两行须使用相同的 body.model):
1{"custom_id":"req-1","method":"POST","url":"/v1/chat/completions","body":{"model":"gpt-4o-mini","messages":[{"role":"user","content":"用一词打招呼"}],"max_tokens":16}}
2{"custom_id":"req-2","method":"POST","url":"/v1/chat/completions","body":{"model":"gpt-4o-mini","messages":[{"role":"user","content":"用一词说再见"}],"max_tokens":16}}平台约束
| 单文件单模型 | 所有行的 body.model 必须完全一致,否则返回 batch_multiple_models。 |
| 禁止流式 | 不接受 stream: true。 |
| 行数上限 | 单文件最多 50,000 行请求。 |
| 文件大小 | 输入文件最大 200 MB;扩展名 .jsonl,purpose=batch。 |
| 完成窗口 | 仅支持 completion_window=24h。 |
| 路由 | 创建时整批锁定一个 SKU/Provider,并将各行 body.model 替换为上游模型 ID。 |
若需多个模型,请拆分为多个 batch(多个输入文件)。
查询支持的模型
1curl https://api.token360.ai/v1/batches/models \
2 -H "Authorization: Bearer sk-your-api-key"响应中的 data[].id 即为 JSONL 中应填写的 body.model。
使用 OpenAI SDK 创建 batch
1from openai import OpenAI
2
3client = OpenAI(api_key="sk-your-api-key", base_url="https://api.token360.ai/v1")
4
5batch_file = client.files.create(
6 file=open("requests.jsonl", "rb"),
7 purpose="batch",
8)
9
10batch = client.batches.create(
11 input_file_id=batch_file.id,
12 endpoint="/v1/chat/completions",
13 completion_window="24h",
14)
15
16print(batch.id, batch.status)使用 client.batches.retrieve(batch.id) 轮询;完成后通过 GET /v1/files/{id}/content 下载 output_file_id / error_file_id。
状态说明
validating | 校验中,等待提交上游。 |
in_progress | 上游执行中。 |
finalizing | 拉取并处理结果文件。 |
completed | 完成,可下载 output。 |
failed | 校验或上游失败。 |
expired | 超过 24h 窗口。 |
cancelling / cancelled | 取消中 / 已取消。 |
输出 JSONL
成功完成后,输出文件为 OpenAI batch 结果格式。每行包含 custom_id 与 response;平台会将 response.body.model 写回为对外模型名(若存在)。
请用 custom_id 关联输入与输出,不要依赖行顺序。
Webhook
终态(completed、failed、cancelled、expired)时,平台可能向以下地址 POST:
- 创建 batch 时指定的
callback_url(优先),或 - 账户默认 batch Webhook(控制台 批量任务 → Webhook 设置)。
若配置了签名密钥,请求头包含 Token360-Timestamp 与 Token360-Signature(sha256= + HMAC-SHA256({timestamp}.{body}))。载荷含 batch 对象字段及 event 字段。重试策略见 Webhook。
计费
按输出 JSONL 中每行成功的 response.body.usage 计费,使用创建 batch 时锁定的 SKU。失败行不按 completion token 计费。
相关 API 参考
上一篇
参数透传(Token360-Native-Params)
下一篇
身份验证