批量任务

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 模型。

流程

text
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
bodyChat Completions 请求体(OpenAI 格式),须含 modelmessages

示例(两行须使用相同body.model):

jsonl
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;扩展名 .jsonlpurpose=batch
完成窗口仅支持 completion_window=24h
路由创建时整批锁定一个 SKU/Provider,并将各行 body.model 替换为上游模型 ID。

若需多个模型,请拆分为多个 batch(多个输入文件)。

查询支持的模型

Shell
1curl https://api.token360.ai/v1/batches/models \
2  -H "Authorization: Bearer sk-your-api-key"

响应中的 data[].id 即为 JSONL 中应填写的 body.model

使用 OpenAI SDK 创建 batch

Python
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_idresponse;平台会将 response.body.model 写回为对外模型名(若存在)。

请用 custom_id 关联输入与输出,不要依赖行顺序

Webhook

终态(completedfailedcancelledexpired)时,平台可能向以下地址 POST:

  1. 创建 batch 时指定的 callback_url(优先),或
  2. 账户默认 batch Webhook(控制台 批量任务 → Webhook 设置)。

若配置了签名密钥,请求头包含 Token360-TimestampToken360-Signaturesha256= + HMAC-SHA256({timestamp}.{body}))。载荷含 batch 对象字段及 event 字段。重试策略见 Webhook

计费

按输出 JSONL 中每行成功的 response.body.usage 计费,使用创建 batch 时锁定的 SKU。失败行不按 completion token 计费。

相关 API 参考

此页面对您有帮助吗?