Cómo se ejecutan los lotes
Un lote procesa sus líneas una a la vez, así que la latencia de cada solicitud determina su rendimiento: 1,000 líneas que tardan 3 segundos cada una terminan en unos 50 minutos. Los lotes distintos se ejecutan en paralelo, así que divide un trabajo grande en varios lotes para terminarlo antes. Las líneas de un lote no cuentan para los límites de tasa de tu clave de API. Si tu organización usa enrutamiento automático basado en un juez, una línea conmodel: "auto" sigue contando para los límites de tasa propios del modelo seleccionado, y una línea que los supere falla con rate_limit_exceeded.
Las solicitudes por lotes se facturan con las mismas tarifas que las solicitudes síncronas.
Planifica cada lote para que termine dentro de su ventana de finalización de 24 horas.
Un lote que se excede se detiene y no devuelve resultados, ni siquiera de las líneas que se completaron.
Su estado permanece en in_progress, así que dale a tu bucle de polling su propio plazo límite.
Endpoints compatibles
Todas las solicitudes en un solo lote deben dirigirse al mismo endpoint.
Ciclo de vida
Un lote pasa por estos estados:
El campo
status del objeto batch también define finalizing y expired, pero los lotes no entran en ninguno de los dos.
Un lote pasa de in_progress directamente a completed, y un lote que excede su ventana no se marca como expired.
Paso 1 — Prepara el archivo de entrada
Crea un archivo JSONL donde cada línea sea una solicitud. Cada línea tiene cuatro campos:body acepta los mismos parámetros que una solicitud síncrona de Responses, con estas reglas:
- Omite
streamybackground, o establécelos enfalse. Una línea que establezca cualquiera de los dos entruefalla. - Para establecer el esfuerzo de razonamiento, envía ambas claves del objeto
reasoning, por ejemplo"reasoning": {"effort": "low", "summary": null}.
store: false porque el archivo de salida ya contiene cada resultado. Omítelo si también quieres recuperar cada respuesta por ID más adelante.
Un solo lote puede contener hasta 10,000 solicitudes.
El archivo de entrada puede ocupar hasta 25 MB; una carga más grande se rechaza con HTTP 413.
Paso 2 — Sube el archivo de entrada
Sube el archivo JSONL usando la API de Archivos conpurpose: "batch".
Paso 3 — Crea el lote
Pasa el ID del archivo subido, el endpoint de destino y la ventana de finalización.Paso 4 — Consulta el estado del lote
Consulta el lote hasta que alcance un estado terminal.Paso 5 — Descarga los resultados
Una vez que el lote estécompleted, descarga el archivo de salida. Es un archivo JSONL donde cada línea contiene el custom_id que proporcionaste, la respuesta y cualquier error.
response es null y error contiene los detalles:
error_file_id que contiene solo las entradas fallidas.
Cancelar un lote
Cancela un lote que aún está en progreso. Las solicitudes que ya se hayan completado permanecen en la salida.cancelling mientras terminan las solicitudes en curso, y luego a cancelled.
Listar lotes
Recupera todos los lotes de la cuenta actual, del más reciente al más antiguo. Soporta paginación.after con un ID de lote para paginar los resultados.
Ejemplo: completaciones de chat por lote
El mismo flujo funciona para completaciones de chat. Cambia elurl en cada línea del JSONL y el endpoint al crear el lote.
Ejemplo: embeddings por lote
El mismo flujo funciona para embeddings. Cambia elurl en cada línea del JSONL y el endpoint al crear el lote.
Errores de validación
Si el archivo de entrada tiene problemas de formato, el lote pasa afailed inmediatamente.
Causas comunes:
- JSON inválido — una línea no es un JSON válido.
- Campos faltantes — falta
custom_id,method,urlobodyen una línea. - Método incorrecto —
methoddebe ser"POST". - URL no coincide — el
urlde una línea no coincide con elendpointdeclarado al crear el lote. custom_idduplicado — cadacustom_iddebe ser único dentro del archivo.
batch.errors.data para ver los mensajes de error específicos y los números de línea.
Ver también
- Generar una respuesta para la solicitud síncrona que replica cada línea de Responses.
- Archivos y almacenes vectoriales para la API de Archivos utilizada para subir entradas por lote.