Por Jerry FanActualizado el junio de 2026

Guía del formato JSONL de OpenAI

Todo lo que necesitas saber sobre el formato JSONL utilizado por OpenAI para fine-tuning de modelos y la Batch API. Incluye especificaciones de formato, ejemplos de código y errores comunes.

¿Qué es el formato JSONL de OpenAI?

OpenAI usa JSONL (JSON Lines) como formato de archivo estándar para datasets de fine-tuning y solicitudes de Batch API. Cada línea del archivo es un objeto JSON completo e independiente — sin array envolvente, sin comas entre líneas.

Este formato se elige porque permite streaming eficiente y procesamiento línea por línea. Cada ejemplo de entrenamiento o solicitud de API puede validarse independientemente, y los archivos pueden procesarse sin cargar todo el dataset en memoria.

Comprender los requisitos exactos del formato es crítico. Incluso pequeños errores de formato — como una coma final o un campo faltante — harán que todo el archivo sea rechazado.

Formato JSONL para Fine-tuning

Para fine-tuning de modelos de chat (GPT-4o, GPT-4o-mini, GPT-3.5 Turbo), cada línea debe contener un array "messages" con los turnos de conversación.

Formato requerido
'{'"messages":['{'"role":"system","content":"You are a helpful assistant."'}','{'"role":"user","content":"What is the capital of France?"'}','{'"role":"assistant","content":"The capital of France is Paris."'}']'}'
'{'"messages":['{'"role":"system","content":"You are a helpful assistant."'}','{'"role":"user","content":"What is 2+2?"'}','{'"role":"assistant","content":"2+2 equals 4."'}']'}'

Campos requeridos

  • messages — Array de objetos de mensaje (requerido)
  • role — Uno de: "system", "user" o "assistant" (requerido)
  • content — El contenido de texto del mensaje (requerido)

El mensaje del sistema es opcional pero recomendado. Cada conversación debe tener al menos un mensaje de usuario y uno de asistente. El mensaje del asistente es lo que el modelo aprende a generar.

Formato JSONL para Batch API

La Batch API usa un formato JSONL diferente donde cada línea es una solicitud de API con un ID personalizado.

Formato requerido
'{'"custom_id":"request-1","method":"POST","url":"/v1/chat/completions","body":'{'"model":"gpt-4o-mini","messages":['{'"role":"user","content":"Hello, how are you?"'}']'}''}'
'{'"custom_id":"request-2","method":"POST","url":"/v1/chat/completions","body":'{'"model":"gpt-4o-mini","messages":['{'"role":"user","content":"What is the weather today?"'}']'}''}'

Campos requeridos

  • custom_id — Un identificador único para cada solicitud (requerido)
  • method — Método HTTP, típicamente "POST" (requerido)
  • url — Ruta del endpoint de API (requerido)
  • body — El cuerpo de la solicitud, igual que una llamada de API regular (requerido)

Requisitos de formato

Sigue estas reglas para asegurar que tu archivo JSONL sea aceptado por OpenAI:

  • Cada línea debe ser JSON válido — no se permiten errores de sintaxis
  • Cada línea debe ser un objeto JSON (comienza con '{' y termina con '}')
  • Los archivos de fine-tuning deben incluir un array "messages" en cada línea
  • Cada mensaje debe tener los campos "role" y "content"
  • Los roles válidos son: "system", "user" y "assistant"
  • El archivo debe estar codificado en UTF-8 sin BOM (Byte Order Mark)
  • Sin comas finales, comentarios ni espacios en blanco extra entre líneas
  • Las líneas vacías están permitidas y serán ignoradas

Errores comunes

Estos son los errores más frecuentes al crear archivos JSONL para OpenAI:

Usar un array JSON en lugar de JSONL

Incorrecto: envolver todos los objetos en [ ]. Los archivos JSONL deben tener un objeto por línea sin array envolvente.

Wrong
['{'"messages":[...]'}', '{'"messages":[...]'}']
Correct
'{'"messages":[...]'}'
'{'"messages":[...]'}'

Campos requeridos faltantes

Cada mensaje debe tener tanto "role" como "content". Omitir cualquiera causará que la validación falle.

Wrong
'{'"messages":['{'"role":"user"'}']'}'
Correct
'{'"messages":['{'"role":"user","content":"Hello"'}']'}'

Comas finales en JSON

JSON no permite comas finales después del último elemento en un array u objeto.

Wrong
'{'"messages":['{'"role":"user","content":"Hi",'}']'}'
Correct
'{'"messages":['{'"role":"user","content":"Hi"'}']'}'

Caracteres BOM o codificación incorrecta

Guarda tu archivo como UTF-8 sin BOM. Algunos editores de texto agregan caracteres BOM invisibles que rompen el parseo JSON.

Wrong
\uFEFF'{'"messages":[...]'}'
Correct
'{'"messages":[...]'}'

Ejemplos de código

Así es como crear archivos JSONL para OpenAI programáticamente:

Python — Crear JSONL para Fine-tuning
import json
training_data = [
'{'"messages": [
'{'"role": "system", "content": "You are a helpful assistant."'}',
'{'"role": "user", "content": "What is JSONL?"'}',
'{'"role": "assistant", "content": "JSONL (JSON Lines) is a text format where each line is a valid JSON object."'}'
]'}',
'{'"messages": [
'{'"role": "system", "content": "You are a helpful assistant."'}',
'{'"role": "user", "content": "How do I fine-tune a model?"'}',
'{'"role": "assistant", "content": "Prepare a JSONL file with training examples, then use the OpenAI fine-tuning API."'}'
]'}',
]
with open("training.jsonl", "w", encoding="utf-8") as f:
for entry in training_data:
f.write(json.dumps(entry, ensure_ascii=False) + "\n")
print(f"Created training.jsonl with '{'len(training_data)'}' examples")
JavaScript — Crear JSONL para Fine-tuning
const fs = require(''fs'');
const trainingData = [
'{' messages: [
'{' role: ''system'', content: ''You are a helpful assistant.'' '}',
'{' role: ''user'', content: ''What is JSONL?'' '}',
'{' role: ''assistant'', content: ''JSONL (JSON Lines) is a text format where each line is a valid JSON object.'' '}',
]'}',
'{' messages: [
'{' role: ''system'', content: ''You are a helpful assistant.'' '}',
'{' role: ''user'', content: ''How do I fine-tune a model?'' '}',
'{' role: ''assistant'', content: ''Prepare a JSONL file with training examples, then use the OpenAI fine-tuning API.'' '}',
]'}',
];
const jsonl = trainingData.map(d => JSON.stringify(d)).join(''\n'');
fs.writeFileSync(''training.jsonl'', jsonl + ''\n'', ''utf-8'');
console.log(`Created training.jsonl with $'{'trainingData.length'}' examples`);

Valida tu archivo JSONL

Antes de subir a OpenAI, valida tu archivo JSONL para detectar errores de formato a tiempo. Nuestro validador online gratuito verifica cada línea para sintaxis JSON válida al instante.

Ver y editar archivos JSONL de OpenAI

Usa nuestro visor JSONL online gratuito para inspeccionar datasets de fine-tuning y archivos de Batch API. Vista lado a lado, resaltado de sintaxis y validación en tiempo real.

Preguntas frecuentes

Referencias