المستوى: متوسط — يُفترض إنك جربت Claude API مرة على الأقل، وعارف ازاي تبعت request وتقرأ usage tokens، لكن مش شرط تكون اشتغلت على pipelines خلفية قبل كده.
لو شركتك بتشغّل 50,000 طلب Claude شهريًا لتصنيف مراجعات، ترجمة، أو استخراج بيانات من فواتير، نص الفاتورة دي ممكن تختفي بسطر كود واحد. الشرط الوحيد إنك مش محتاج الرد في نفس الثانية.
Message Batches API: ليه نص السعر مش حيلة تسويقية
Anthropic بتدّي خصم ثابت 50% على input و output tokens لما تبعت requests كـ batch بدل ما تبعتها واحدة واحدة. الخصم مش مرتبط بحجم الشركة ولا بعقد enterprise، ومش عرض مؤقت. مكتوب رسميًا في توثيق Anthropic، وأي حد عنده API key يقدر يستخدمه دلوقتي.
تخيّل المشهد ده قبل ما ندخل في الكود
عندك مغسلة ملابس. لو زبون جالك بقميص واحد، هتشغّل الغسالة عشانه. الكهربا بتاعت دورة كاملة، الصابون، المياه — كل ده عشان قميص واحد. لكن لو 50 زبون سابوا غسيلهم الصبح وقالولك "ابعتلنا بكره"، إنت بتجمّعهم في 5 دورات بدل 50 دورة. التكلفة لكل قميص بتنزل لأقل من النص.
الـ Batches API بيشتغل بنفس المنطق. Anthropic بتقدر تجدول الـ requests على أوقات الـ GPU الفاضية وتجمّع الشغل بكفاءة، وعشان كده بتخصم نص السعر مقابل إنك تستنى لحد 24 ساعة.
التعريف الدقيق: مش async عادي
أي async API request بيرجع رد لما المعالجة تخلص — يعني ثواني لـ minutes. الـ Message Batch مختلف: إنت بتبعت لحد 100,000 request في "وعاء" واحد، الـ batch بياخد ID، وبيدخل طابور معالجة بأولوية أقل من الـ realtime API. زمن الإنجاز المضمون ≤ 24 ساعة، لكن في الممارسة معظم الـ batches بتخلص في أقل من ساعة.
الفروق التقنية المهمة:
- كل request في الـ batch له
custom_idإنت بتحدده، عشان تربط الردود بالـ inputs الأصلية لما ترجع مش بالترتيب. - النتايج بترجع كـ JSONL stream، مش JSON واحد كبير، فممكن تعالجها بدون ما تحمّلها كلها في الذاكرة.
- كل request بيتعالج بشكل مستقل — فشل واحد ميأثرش على الباقي.
- الـ batch بياخد رسوم على كل request اتنفّذ، حتى لو إنت ألغيت الـ batch قبل ما يخلص بالكامل.
الكود التنفيذي: تصنيف 10,000 مراجعة عربية
السيناريو: عندك 10,000 review من عملاء على منتج، عايز تصنّف كل واحد كـ positive/negative/neutral. الـ realtime على معدل 200 RPM هياخد منك حوالي 50 دقيقة وفاتورة كاملة. الـ batch هيكلّفك النص ووقت معالجة متوقع 30 دقيقة لساعة.
import anthropic
from anthropic.types.messages.batch_create_params import Request
client = anthropic.Anthropic()
reviews = load_reviews_from_db() # 10,000 مراجعة
batch = client.messages.batches.create(
requests=[
Request(
custom_id=f"review-{r['id']}",
params={
"model": "claude-sonnet-4-6",
"max_tokens": 50,
"messages": [{
"role": "user",
"content": (
"صنّف المراجعة كـ positive أو negative أو neutral فقط:\n"
+ r["text"]
),
}],
},
)
for r in reviews
]
)
print(f"Batch created: {batch.id}")