批量任务
Token360 支持通过 OpenAI Batch API 相同的方式,对聊天补全进行异步批量推理:上传 JSONL 输入文件 → 创建 batch 作业 → 轮询状态 → 下载输出 JSONL。
当前 MVP 范围:
- 端点:仅支持
POST /v1/chat/completions(JSONL 每行的url须为该值)。 - 模型名:JSONL 中使用 Token360 对外模型名(与同步 Chat 相同)。
GET /v1/batches/models列出当前账户可提交到POST /v1/batches的 LLM(至少可走 platform fan-out)。supports_provider_batch才表示有上游原生 Infer。 - 执行路径:有上游原生 Batch Infer 时走 provider;否则走 platform(平台按行 fan-out Chat)。创建时可传
execution(默认auto)。
控制台
在 Token360 控制台打开 批量任务(/me/batches):
| 新建批量任务 | 选模型、上传 .jsonl、可选 callback,然后创建。 |
| 任务 | 查看进行中/已完成任务、状态时间轴、取消非终态任务、下载 output/error、查看用量计费。 |
| Webhook | 配置账户默认 batch Webhook(单次任务的 callback_url 会覆盖默认值)。 |
纯 API 流程与控制台共用同一套 /v1/files + /v1/batches 接口。
双执行路径
auto(默认) | 模型有上游 Batch 能力时优先 provider;否则 platform。auto 下 provider 提交失败时可能降级到 platform。 |
provider | 必须走上游原生 Batch Infer,不静默降级。 |
platform | 一律走平台 fan-out(completion QoS Chat)。 |
响应扩展字段:
execution_preference | 请求偏好:auto / provider / platform。 |
execution | 实际路径:provider 或 platform(auto 降级后可能变化)。 |
fallback_from_provider | auto 从 provider 降级到 platform 时为 true。 |
控制台详情与 API 均可看到 execution。
流程
11. GET /v1/batches/models → 可提交 POST /v1/batches 的 LLM(见 supports_provider_batch)
22. POST /v1/files (purpose=batch) → 上传 input.jsonl
33. POST /v1/batches → 创建作业(input_file_id,可选 execution)
44. GET /v1/batches/{batch_id} → 轮询直至终态
55. GET /v1/files/{file_id}/content → 下载 output / error JSONLWebhook / 回调: 创建时传 callback_url,或在控制台 批量任务 → Webhook 配账户默认。单次 URL 优先。都未设置则只能轮询。投递、签名与载荷(含 execution / usage_billing)见 Webhook。
输入 JSONL 格式
每个非空行为一条请求对象:
custom_id | 是 | 用于与输出行对应(输出顺序可能与输入不一致);同一文件内须唯一。 |
method | 是 | 必须为 POST。 |
url | 是 | 必须为 /v1/chat/completions。 |
body | 是 | Chat Completions 请求体(OpenAI 格式),须含 model 与 messages。 |
示例(两行须使用相同的 body.model):
1{"custom_id":"daily-greeting-001","method":"POST","url":"/v1/chat/completions","body":{"model":"claude-opus-5","messages":[{"role":"user","content":"用一词打招呼"}],"max_completion_tokens":16}}
2{"custom_id":"daily-farewell-001","method":"POST","url":"/v1/chat/completions","body":{"model":"claude-opus-5","messages":[{"role":"user","content":"用一词说再见"}],"max_completion_tokens":16}}平台约束
| 单文件单模型 | 所有行的 body.model 必须完全一致,否则返回 batch_multiple_models。 |
| 禁止流式 | 不接受 stream: true。 |
| 行数上限 | 单文件最多 50,000 行请求。 |
| 文件大小 | 输入文件最大 200 MB;扩展名 .jsonl,purpose=batch。 |
| 完成窗口 | 仅支持 completion_window=24h。 |
| 路由 | 创建时锁定路由。provider 路径将行改写为上游模型 ID;platform 路径经 Chat 执行。 |
若需多个模型,请拆分为多个 batch(多个输入文件)。
查询可提交 Batch 的模型
1curl https://api.token360.ai/v1/batches/models \
2 -H "Authorization: Bearer sk-your-api-key"响应中的 data[].id 即为 JSONL 中应填写的 body.model。
supports_batch:可作为 Token360 batch 运行(provider 和/或 platform)。
supports_provider_batch:是否具备上游原生 Batch Infer 路由。
使用 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 extra_body={
15 "execution": "platform",
16 "callback_url": "https://your-app.example.com/webhooks/batch",
17 },
18)
19
20print(batch.id, batch.status)使用 client.batches.retrieve(batch.id) 轮询;完成后通过 GET /v1/files/{id}/content 下载 output_file_id / error_file_id。
状态说明
validating | 校验完成,等待提交(provider 或 platform)。 |
in_progress | 执行中。 |
finalizing | 拉取并处理结果文件(provider 路径)。 |
completed | 完成,可下载 output。 |
failed | 校验或执行失败。 |
expired | 上游原生 Batch 可能在厂商窗口到期后过期。Platform 路径不会因 24h 强行停掉未跑完的任务。 |
cancelling / cancelled | 取消中 / 已取消。 |
expires_at / completion_window=24h 是 估计时间(兼容 OpenAI 字段)。排队长时,platform 任务可以超过 24h。
非终态可用 POST /v1/batches/{batch_id}/cancel 取消。
输出 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。
计费
- Platform 执行(
execution=platform,或auto解析为 platform):成功行按与同步 Chat 相同单价计费,并套用企业 / VIP 价格因子。该路径没有额外 50% batch 折扣。失败 / 取消行不计模型费。 - Provider 执行:按输出 JSONL 用量计费;上游原生 Batch 路径在配置允许时可能有折扣。以 batch 对象上的
usage_billing(标价 vs 实付)为准。 - 单行对账:
GET /v1/billing/{batch_id}-0000(四位序号)。batch 上的usage_billing是成功行合计。