wylon

批量推理

批量推理(Batch)让你以 JSONL 文件的形式一次性提交大量请求,由 wylon 在后台异步执行,结果在期限内回传。相较于实时 对话补全,批量推理的并发限制更宽松、价格更优,适合离线评估、数据生成、文档批处理等非实时场景。

何时使用

如果你的请求需要立即返回(在线对话、Agent、RAG 实时响应),请使用 对话补全

实时 vs. 批量

对话补全(实时)批量推理
调用方式同步 HTTP/SSE异步任务(轮询或回调)
响应时延毫秒级分钟到小时级,需在窗口期内完成
定价按 Token,标准价按 Token,享批量折扣
速率限制受 RPM/TPM 限制,详见 速率限制独立配额,并发更宽松
支持的接口chat completions / completionschat completions / completions

使用流程

  1. 准备 JSONL 文件

    每行一个请求对象,结构与单次 /v1/chat/completions 请求一致,外层包一个 custom_id 用于结果回查。

  2. 上传文件

    调用 POST /v1/files,将 JSONL 上传为输入文件,得到 file_id

  3. 创建批量任务

    file_id 调用 POST /v1/batches,指定目标接口与完成期限。

  4. 轮询状态并下载结果

    通过 GET /v1/batches/{id} 查看进度。完成后下载 output_file_id,每行对应一个请求的响应。

输入文件格式

每行是一个完整请求对象,methodurl 指明目标接口,body 与对话补全请求体一致。

{"custom_id": "req-001", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "moonshotai/Kimi-K2", "messages": [{"role": "user", "content": "用一句话解释 KV 缓存。"}]}}
{"custom_id": "req-002", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "moonshotai/Kimi-K2", "messages": [{"role": "user", "content": "用一句话解释推测解码。"}]}}

API 调用

整个流程包含三个端点:上传文件、创建任务、查询状态。所有调用均使用账户级 API 密钥

# 1. 上传输入文件
curl https://api.wylon.cn/v1/files \
  -H "Authorization: Bearer $WYLON_API_KEY" \
  -F purpose=batch \
  -F file=@requests.jsonl

# 响应:{ "id": "file-abc...", ... }

# 2. 创建批量任务
curl https://api.wylon.cn/v1/batches \
  -H "Authorization: Bearer $WYLON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input_file_id": "file-abc...",
    "endpoint": "/v1/chat/completions",
    "completion_window": "24h"
  }'

# 3. 轮询状态
curl https://api.wylon.cn/v1/batches/batch_xxx \
  -H "Authorization: Bearer $WYLON_API_KEY"

# 4. 状态变为 completed 后下载结果
curl https://api.wylon.cn/v1/files/file-out.../content \
  -H "Authorization: Bearer $WYLON_API_KEY" -o results.jsonl
from openai import OpenAI
import os, time

client = OpenAI(
    api_key=os.environ["WYLON_API_KEY"],
    base_url="https://api.wylon.cn/v1",
)

# 1. 上传输入文件
file = client.files.create(file=open("requests.jsonl", "rb"), purpose="batch")

# 2. 创建批量任务
batch = client.batches.create(
    input_file_id=file.id,
    endpoint="/v1/chat/completions",
    completion_window="24h",
)

# 3. 轮询完成
while batch.status in {"validating", "in_progress", "finalizing"}:
    time.sleep(30)
    batch = client.batches.retrieve(batch.id)

# 4. 下载结果
result = client.files.content(batch.output_file_id)
open("results.jsonl", "wb").write(result.read())

任务状态

状态含义
validating正在校验输入文件格式与配额。
in_progress调度中或正在执行。
finalizing处理完成,正在写出结果文件。
completed全部完成;可通过 output_file_id 下载结果。
failed整体失败。errors 字段给出原因。
expired未在 completion_window 内完成;已完成的部分仍可获取。
cancelling / cancelled用户主动取消。

输出文件

每行一条响应,与输入的 custom_id 一一对应;失败的请求另存于 error_file_id,便于单独重试。

{"custom_id": "req-001", "response": {"status_code": 200, "body": {"id": "cmpl-...", "choices": [{"message": {"role": "assistant", "content": "…"}, "finish_reason": "stop"}], "usage": {"total_tokens": 128}}}
{"custom_id": "req-002", "response": {"status_code": 200, "body": {"id": "cmpl-...", "choices": [{"message": {"role": "assistant", "content": "…"}}], "usage": {"total_tokens": 96}}}

配额与限制

沪ICP备2026010432号-1 沪公网安备31010402336632号