
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?
- Voorbeeld zonder batch jobs
- 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.
asyncioPrima 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-YJNAY26c9XBSLaK3BdCz4oDit 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_696f6036aeb481909b586028283aa175Belangrijk:
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.jsonlResultaat 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.
asyncio2.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:
- JSONL file maken (1 regel per prompt)
- Uploaden met
client.files.create() - Starten met
client.batches.create() - Status checken en resultaat ophalen
- 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.










