Volver a herramientas
DisponibleDatos·

OpenAI Batch API

API para enviar grandes volúmenes de peticiones de forma asíncrona con un descuento del 50% sobre el precio estándar. Ideal para clasificación masiva de datos, generación de embeddings y evaluaciones offline.

Compatible con

PythonTypeScriptREST API
batchprocesamiento-masivoasyncopenaicoste

Batch API: procesamiento masivo con 50% de descuento

La Batch API permite enviar hasta 50 000 peticiones en un único lote y obtener los resultados en un plazo de 24 horas, con la mitad del coste de las llamadas síncronas.

Casos de uso ideales

  • Clasificar o etiquetar datasets grandes
  • Generar embeddings para un corpus completo
  • Evaluar modelos contra benchmarks extensos
  • Procesar documentos o emails en lote

Crear un lote

from openai import OpenAI
import json

client = OpenAI()

# Preparar peticiones en formato JSONL
peticiones = [
    {
        "custom_id": f"req-{i}",
        "method": "POST",
        "url": "/v1/chat/completions",
        "body": {
            "model": "gpt-4o-mini",
            "messages": [{"role": "user", "content": f"Clasifica este texto: {texto}"}],
            "max_tokens": 50
        }
    }
    for i, texto in enumerate(mis_textos)
]

with open("lote.jsonl", "w") as f:
    for p in peticiones:
        f.write(json.dumps(p, ensure_ascii=False) + "\n")

# Subir archivo y crear lote
archivo = client.files.create(file=open("lote.jsonl", "rb"), purpose="batch")

lote = client.batches.create(
    input_file_id=archivo.id,
    endpoint="/v1/chat/completions",
    completion_window="24h"
)

print(lote.id)  # batch_abc123

Monitorizar y recuperar resultados

# Verificar estado
lote = client.batches.retrieve("batch_abc123")
print(lote.status)  # validating | in_progress | completed | failed

# Cuando está completado, descargar resultados
if lote.status == "completed":
    contenido = client.files.content(lote.output_file_id)
    for linea in contenido.text.split("\n"):
        if linea:
            resultado = json.loads(linea)
            print(resultado["custom_id"], resultado["response"]["body"])

Límites

  • Hasta 50 000 peticiones por lote
  • Hasta 200 MB por archivo de entrada
  • Ventana de completado: 24h (garantizado)