Büyük Dil Modelleriyle çalışan geliştiriciler için büyük veri setlerini işlerken maliyet ve gecikme genellikle temel darboğazlardır. Milyonlarca ürüne sahip bir e-ticaret sitesi için ürün açıklamaları oluşturmak, binlerce destek biletini özetlemek veya geçmiş günlüklerde duygu analizi yapmak isterken, her öğe için ayrı API çağrıları yapmak verimsiz ve pahalıdır.
İşte OpenAI Batch API. Bu özellik, acil olmayan büyük hacimli istekleri OpenAI'ye önemli bir indirimle göndermenizi sağlar. İstekleri asenkron olarak işlenen tek bir işe bağlayarak, gerçek zamanlı API çağrılarına kıyasla girdi ve çıktı jeton maliyetlerinizi %50'ye kadar azaltabilirsiniz. Bu rehberde, büyük ölçekli veri işleme için Batch API'nin nasıl etkili bir şekilde uygulanacağını inceleyeceğiz.
Neden Batch API Kullanılmalı?
Batch API'nin birincil avantajı maliyet verimliliğidir. OpenAI, toplu isteklerde kullanılan tüm jetonlar için %50 indirim sunar. Ancak bunun bazı dezavantajları vardır:
- Asenkron İşleme: Anında yanıtlar bekleyemezsiniz. İşler genellikle 24 saat içinde tamamlanır.
- Gerçek Zamanlı Etkileşim Yok: Sohbotlar veya anında kullanıcı geri bildirimi gerektiren uygulamalar için uygun değildir.
- Sabit Toplu Boyutu: Gönderimden önce tüm istekleri önceden hazırlamanız gerekir.
Kullanım senaryonuz çevrimdışı analitik, içerik üretimi veya veri etiketleme içeriyorsa, Batch API ideal bir seçenektir.
Adım 1: JSONL Dosyanızı Hazırlayın
Herhangi bir toplu işin ilk adımı, bir JSON Satırları (JSONL) dosyası oluşturmaktır. Bu dosyadaki her satır tek bir API isteğini temsil eder. Yapı, standart OpenAI API istek biçimiyle eşleşmeli ve izleme için benzersiz bir `custom_id` içermelidir.
import json
def create_batch_file(data_points, output_filename="batch_input.jsonl"):
"""
OpenAI Batch API için bir JSONL dosyası oluşturur.
Args:
data_points: İşlenecek metin listesi.
output_filename: Çıktı JSONL dosyasının adı.
"""
with open(output_filename, 'w') as f:
for i, text in enumerate(data_points):
request = {
"custom_id": f"request-{i}",
"method": "POST",
"url": "/v1/chat/completions",
"body": {
"model": "gpt-4o",
"messages": [
{
"role": "user",
"content": f"Summarize the following text in one sentence: {text}"
}
],
"max_tokens": 100
}
}
f.write(json.dumps(request) + '\n')
print(f"Batch file '{output_filename}' created successfully.")
# Example usage
sample_data = [
"The quick brown fox jumps over the lazy dog.",
"Python is a high-level programming language known for its readability.",
"Machine learning is a subset of artificial intelligence."
]
create_batch_file(sample_data)
Adım 2: Dosyayı Yükleyin ve Toplu İş Oluşturun
JSONL dosyası hazır olduğunda, Python SDK'sını kullanarak dosyayı OpenAI'ye yüklemeniz ve toplu işi başlatmanız gerekir.
from openai import OpenAI
import time
client = OpenAI() # API key read from environment variable
# 1. Upload the file
file_response = client.files.create(
file=open("batch_input.jsonl", "rb"),
purpose="batch"
)
file_id = file_response.id
print(f"File uploaded with ID: {file_id}")
# 2. Create the batch job
batch = client.batches.create(
input_file_id=file_id,
endpoint="/v1/chat/completions",
completion_window="24h"
)
batch_id = batch.id
print(f"Batch job created with ID: {batch_id}")
Adım 3: Tamamlanma Durumunu Sorgulayın
Toplu iş asenkron olduğu için, tamamlanana veya başarısız olana kadar durumu sorgulamanız gerekir. İşin boyutuna bağlı olarak bu birkaç saat sürebilir. Üretim sistemleri için, betikte blokaj oluşturmak yerine bir cron işi veya webhook tabanlı bir bildirim sistemi uygulaması önerilir.
def poll_batch_status(batch_id, client, interval=60):
"""
Toplu iş durumunu tamamlanana veya başarısız olana kadar sorgular.
"""
while True:
batch = client.batches.retrieve(batch_id=batch_id)
status = batch.status
print(f"Current status: {status}")
if status in ["completed", "failed", "expired", "cancelled"]:
return batch
time.sleep(interval)
# Wait for completion
final_batch = poll_batch_status(batch_id, client, interval=300) # Check every 5 minutes
Adım 4: Sonuçları Alın ve İşleyin
Toplu iş `completed` olarak işaretlendiğinde, çıktı dosyasını indirebilirsiniz. Bu dosya, girdi dosyasındaki her `custom_id`'ye karşılık gelen yanıtları içerir.
def download_and_process_results(batch_id, client):
"""
Toplu çıktı dosyasını indirir ve sonuçları ayrıştırır.
"""
# Retrieve the output file ID
output_file_id = client.batches.retrieve(batch_id).output_file_id
if output_file_id is None:
raise ValueError("No output file found. Job may have failed.")
# Retrieve the file content
file_content = client.files.content(output_file_id)
# Parse the JSONL content
results = []
for line in file_content.splitlines():
if line.strip():
data = json.loads(line)
# Extract the content from the response
response_content = data.get('response', {}).get('body', {}).get('choices', [{}])[0].get('message', {}).get('content', '')
results.append({
'id': data.get('custom_id'),
'summary': response_content
})
return results
# Process the results
results = download_and_process_results(batch_id, client)
for r in results:
print(f"{r['id']}: {r['summary']}")
Toplu İşleme İçin En İyi Uygulamalar
- Hataları Zarifçe Yönetin: Bazı istekler içerik politikası ihlalleri veya biçimlendirme sorunları nedeniyle başarısız olabilir. Çıktı JSONL satırlarındaki `error` alanını her zaman kontrol edin.
- Büyük Veri Setlerini Parçalara Ayırın: Kesin bir sınır olmasa da, aşırı büyük dosyaları hata ayıklamak daha zor olabilir. Daha kolay yönetim için milyonlarca satırı 10.000-50.000'lik parçalara ayırmayı düşünün.
- Komut Şablonlarınızı Sürüm Kontrolüne Alın: Toplu işlerin çalışması zaman aldığından, komut şablonunuzun kararlı olduğundan emin olun. Komutu değiştirmeniz gerekiyorsa, yeni bir dosya ve yeni bir toplu iş oluşturmanız gerekir.
- Maliyetleri İzleyin: Tasarrufları en üst düzeye çıkardığınızdan emin olmak için her toplu işin jeton kullanımını ve maliyetlerini izlemek için OpenAI Panelini kullanın.
Sonuç
OpenAI Batch API, maliyetlerini doğrusal olarak artırmadan yapay zeka uygulamalarını ölçeklendirmek isteyen geliştiriciler için güçlü bir araçtır. Asenkron işlemeden yararlanarak, gerçek zamanlı API çağrılarıyla son derece pahalı veya yavaş olacak büyük ölçekli veri zorluklarını ele alabilirsiniz. LLM uygulamaları evrilmeye devam ettikçe, toplu işleme konusundaki uzmanlık, verimli ve maliyet etkin yapay zeka sistemleri oluşturmak için kritik bir beceri olacaktır.
Küçük bir test veri setiyle başlayın, sonuçlarınızı doğrulayın ve ardından ölçeklendirin. %50 indirim, Batch API'yi ciddi bir LLM geliştirme yığını için vazgeçilmez bir parça haline getirir.