Batch jobs met de OpenAI API

Batch jobs met de OpenAI API: schaalbare en kostenbewuste AI

Batch jobs zijn ideaal wanneer je grote aantallen AI-verzoeken wilt verwerken zonder dat snelheid per request cruciaal is. Denk aan het analyseren van complete datasets, het samenvatten van veel documenten of het genereren van metadata op schaal.

Wat zijn batch jobs bij OpenAI?

Met batch jobs stuur je meerdere AI-verzoeken tegelijk naar OpenAI als één verzameling. OpenAI verwerkt deze asynchroon en efficiënter dan losse API-calls.

Voordelen:

  • lagere kosten
  • minder API-overhead
  • geschikt voor grote volumes

Verschil met async jobs:

  • async jobs starten meteen parallel
  • batch jobs worden verzameld en op een later moment uitgevoerd

Let op: een batch job wordt niet altijd direct opgepakt. De verwerking kan tot 24 uur duren.


Wat behandelen we in dit blog?

  1. Voorbeeld zonder batch jobs
  2. Gebruik van batch jobs
    • aanmaken van batch file
    • uploaden via de API
    • uitvoeren van de batch
    • wachten en ophalen van resultaat
    • verwijderen van het resultaat

OpenAI client instellen

We beginnen met het opzetten van de OpenAI client en het inladen van de API-sleutel. Dit deel is identiek voor batch en niet-batch gebruik.

import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv("api_key.env")

OPENAI_API_KEY = os.getenv("OPEN_AI_API_KEY")

print(f"Length API key: {len(OPENAI_API_KEY)}")
print(f"Last characters: ...{OPENAI_API_KEY[-30:]}")

client = OpenAI(api_key=OPENAI_API_KEY, base_url="https://api.openai.com/v1/")

print(client)

Output:

Length API key: 164
Last characters: ...xtvqYjTUfLU8_RN4xfoZMy0nQDfCkA
<openai.OpenAI object at 0x75711cce57f0>

1. Voorbeeld zonder batch jobs

We starten met de klassieke aanpak: een lijst met prompts die je één voor één verwerkt via een for-loop.

Kenmerken:

  • elke prompt = aparte API-call
  • eenvoudig
  • minder efficiënt bij grotere aantallen
prompts = [
    "What are the most used machine learning models? Return only the names.",
    "Explain the meaning of AI in a short sentence.",
    "Which default Python module would you use for working with asynchronous jobs? Return only the name.",
]

def ask(prompt: str) -> str:
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {
                "role": "user",
                "content": prompt,
            },
        ],
        temperature=0,
    )
    answer = response.choices[0].message.content
    return answer

for prompt in prompts:
    print(prompt)
    print(ask(prompt))
    print()

Output:

What are the most used machine learning models? Return only the names.
1. Linear Regression
2. Logistic Regression
3. Decision Trees
4. Random Forest
5. Support Vector Machines (SVM)
6. K-Nearest Neighbors (KNN)
7. Naive Bayes
8. Neural Networks
9. Gradient Boosting Machines (GBM)
10. XGBoost

Explain the meaning of AI in a short sentence.
AI, or artificial intelligence, refers to the simulation of human intelligence in machines that are programmed to think, learn, and make decisions.

Which default Python module would you use for working with asynchronous jobs? Return only the name.
asyncio

Prima voor een paar prompts, maar onhandig voor honderden of duizenden.

2. Gebruik van batch jobs binnen OpenAI

Nu schakelen we over naar batch jobs. Deze aanpak bestaat uit vijf vaste stappen.


2.1 Aanmaken van een batch file

We gebruiken dezelfde prompts, maar gaan ze nu serialiseren naar JSONL.

prompts = [
    "What are the most used machine learning models? Return only the names.",
    "Explain the meaning of AI in a short sentence.",
    "Which default Python module would you use for working with asynchronous jobs? Return only the name.",
]

Een JSONL-bestand:

  • bestaat uit één JSON-object per regel
  • is verplicht voor batch jobs
  • maakt het mogelijk om resultaten later te koppelen via custom_id
import json

with open("data/batch.jsonl", "w", encoding="utf-8") as file:
    for index, prompt in enumerate(prompts, start=1):
        batch_job = {
            "custom_id": f"req-{index}",
            "method": "POST",
            "url": "/v1/chat/completions",
            "body": {
                "model": "gpt-4o-mini",
                "messages": [{"role": "user", "content": prompt}]
            }
        }
        print(batch_job)
        file.write(json.dumps(batch_job) + "\n")

Output (per regel):

{'custom_id': 'req-1', 'method': 'POST', 'url': '/v1/chat/completions', 'body': {...}}
{'custom_id': 'req-2', 'method': 'POST', 'url': '/v1/chat/completions', 'body': {...}}
{'custom_id': 'req-3', 'method': 'POST', 'url': '/v1/chat/completions', 'body': {...}}

2.2 Batch file uploaden via de API

Nu uploaden we het JSONL-bestand naar OpenAI.

batch_file = client.files.create(
    file=open("data/batch.jsonl", "rb"),
    purpose="batch",
)

print("File ID:", batch_file.id)

Output:

File ID: file-YJNAY26c9XBSLaK3BdCz4o

Dit ID heb je nodig voor de volgende stap.


2.3 Batch uitvoeren

We starten nu de batch job zelf.

batch = client.batches.create(
    input_file_id=batch_file.id,
    endpoint="/v1/chat/completions",
    completion_window="24h",
)
print("Batch ID:", batch.id)

Output:

Batch ID: batch_696f6036aeb481909b586028283aa175

Belangrijk:

  • completion_window="24h" betekent: OpenAI heeft tot 24 uur om de batch af te ronden
  • vaak gaat het sneller, maar reken niet op realtime

2.4 Wachten en resultaat ophalen

We checken periodiek de status van de batch.

import time

while batch.status not in ("completed", "failed", "expired", "cancelled"):
    time.sleep(5)
    batch = client.batches.retrieve(batch.id)

print("Status:", batch.status)

if batch.status == "completed":
    content = client.files.content(batch.output_file_id).content
    with open("batch_results.jsonl", "wb") as output:
        output.write(content)
    print("Saved to batch_results.jsonl")

Output:

Status: completed
Saved to batch_results.jsonl

Resultaat bekijken

Elke regel in de output correspondeert met één custom_id.

lines = [json.loads(line) for line in content.splitlines()]

lines

(ingekorte weergave)

[
  {
    "custom_id": "req-1",
    "response": {
      "body": {
        "choices": [...]
      }
    }
  },
  ...
]

De antwoorden zelf printen we zo:

for line in lines:
    print(line["response"]["body"]["choices"][0]["message"]["content"])
    print()

Output:

1. Linear Regression  
2. Logistic Regression  
3. Decision Trees  
4. Random Forest  
5. Support Vector Machines (SVM)  
6. K-Nearest Neighbors (KNN)  
7. Neural Networks  
8. Gradient Boosting Machines (GBM)  
9. XGBoost  
10. AdaBoost  
11. Naive Bayes  
12. Principal Component Analysis (PCA)  
13. Recurrent Neural Networks (RNN)  
14. Convolutional Neural Networks (CNN)  
15. Transformer Models  

AI (Artificial Intelligence) refers to the simulation of human intelligence in machines designed to perform tasks that typically require human cognitive functions, such as learning, reasoning, and problem-solving.

asyncio

2.5 Resultaat verwijderen

Om kosten en opslag te beperken kun je het output-bestand weer verwijderen.

batch = client.batches.retrieve(batch.id)
output_file_id = batch.output_file_id

if output_file_id:
    result = client.files.delete(output_file_id)
    print(result)

Output:

FileDeleted(id='file-3ZG37QFdJpn24ywTm8Ft9v', deleted=True, object='file')

Om te onthouden

  • Zonder batch jobs

    • requests lopen één voor één
    • simpel, maar slecht schaalbaar
  • Met batch jobs

    • prompts als verzameling verwerkt
    • efficiënter en goedkoper bij grote volumes

Vaste stappen bij batch jobs:

  1. JSONL file maken (1 regel per prompt)
  2. Uploaden met client.files.create()
  3. Starten met client.batches.create()
  4. Status checken en resultaat ophalen
  5. Output opschonen met client.files.delete()

Batch jobs zijn geen vervanging voor realtime AI, maar wel een krachtig hulpmiddel zodra je werkt met schaal, data en herhaalbare taken.

Wil je AI expert worden?

Tijdens onze 5-daagse AI Opleiding of 7-daagse AI Engineer Opleiding leer je het hele AI spectrum kennen; van klassieke machine learning modellen tot generative AI met o.a. ChatGPT. Je leert programmeren in Python zodat je op uiteenlopende vlakken aan de slag kunt met AI. Of ben je op zoek naar een introductie in AI? Bekijk dan onze AI cursus basis eens. We bieden ook AI consultancy aan op allerlei thema’s.

by: