批量任务

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;否则 platformauto 下 provider 提交失败时可能降级到 platform。
provider必须走上游原生 Batch Infer,不静默降级。
platform一律走平台 fan-out(completion QoS Chat)。

响应扩展字段:

execution_preference请求偏好:auto / provider / platform
execution实际路径:providerplatform(auto 降级后可能变化)。
fallback_from_providerauto 从 provider 降级到 platform 时为 true

控制台详情与 API 均可看到 execution

流程

text
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 JSONL

Webhook / 回调: 创建时传 callback_url,或在控制台 批量任务 → Webhook 配账户默认。单次 URL 优先。都未设置则只能轮询。投递、签名与载荷(含 execution / usage_billing)见 Webhook

输入 JSONL 格式

每个非空行为一条请求对象:

custom_id用于与输出行对应(输出顺序可能与输入不一致);同一文件内须唯一。
method必须为 POST
url必须为 /v1/chat/completions
bodyChat Completions 请求体(OpenAI 格式),须含 modelmessages

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

jsonl
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;扩展名 .jsonlpurpose=batch
完成窗口仅支持 completion_window=24h
路由创建时锁定路由。provider 路径将行改写为上游模型 ID;platform 路径经 Chat 执行。

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

查询可提交 Batch 的模型

Shell
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

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    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_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

计费

  • 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 是成功行合计。

相关 API 参考

此页面对您有帮助吗?