المستوى: متوسط
لو chatbot عندك بيبعت نفس الـ system prompt الطويل مع كل سؤال، إنت بتدفع تكلفة معالجة نفس الـ 8000 token من أول وجديد كل مرة. سطر واحد اسمه cache_control بينزّل تكلفة الجزء المتكرر دا بنسبة 90%، ويقطع زمن أول token بنسبة تتراوح بين 60% و 85% حسب حجم السياق.
Prompt Caching في Claude API: ليه ودلوقتي بالظبط
المشكلة باختصار
تخيّل تطبيق بيرد على أسئلة الموظفين عن سياسة الشركة. السياسة 30 صفحة (حوالي 12K token). كل سؤال بيتبعت لـ Claude مع نفس الـ 12K token دول كـ system prompt. لو في 5000 سؤال يومي، إنت بتدفع تكلفة معالجة 60 مليون token مكرر يومياً بدون فايدة. الـ Prompt Caching بيخلّي Claude يحفظ الـ prefix دا في ذاكرة جانبية لمدة 5 دقايق (افتراضياً) أو ساعة، وبيرجّعه في الطلبات اللي بعد كده بـ 10% من السعر فقط.
المثال البسيط: طلبة الكلية وملخص المنهج
تخيّل دكتور بيشرح لطلبة كلية مادة كاملة. بدل ما الدكتور يقرأ كل المقدمة من البداية لكل طالب يدخل المحاضرة، هو بيكتبها على السبورة مرة واحدة. الطلبة الجداد لما يدخلوا، بيقروا اللي على السبورة في ثانيتين بدل ما الدكتور يعيد الشرح في 20 دقيقة. السبورة دي هي الـ Cache. أول طالب دفع للدكتور تكلفة الكتابة، الباقي بياخدوا نفس المعلومة بتكلفة قراءة بسيطة.
التعريف العلمي الدقيق
الـ Prompt Caching في Claude API بيعتمد على آلية اسمها ephemeral cache. لما تحط cache_control: {"type": "ephemeral"} على block معين في الرسالة، Claude بيخزّن نتيجة معالجة الـ tokens اللي قبل الـ breakpoint دا في key-value store داخلي. أي طلب لاحق بنفس الـ prefix الحرفي (نفس الـ tokens بنفس الترتيب) بيعمل "cache hit" خلال نافذة الـ TTL. الحد الأدنى لتفعيل الـ cache هو 1024 token للـ Sonnet/Haiku و 2048 token لـ Opus. أقل من كده، الطلب بيشتغل لكن الـ cache مش بيتفعّل.
الكود الشغّال (Anthropic SDK 0.45+)
import anthropic
client = anthropic.Anthropic()
POLICY_DOC = open("company_policy.txt").read() # 30 صفحة، ~12K token
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=512,
system=[
{
"type": "text",
"text": "أنت مساعد سياسات HR. جاوب من الوثيقة فقط.",
},
{
"type": "text",
"text": POLICY_DOC,
"cache_control": {"type": "ephemeral"},
},
],
messages=[
{"role": "user", "content": "كم يوم إجازة سنوية للموظف الجديد؟"}
],
)
print(response.usage)
# cache_creation_input_tokens=12048
# cache_read_input_tokens=0
# input_tokens=22 (السؤال فقط)
أول طلب بيعمل بتكلفة 1.25× من سعر الـ input العادي. أي طلب بنفس الوثيقة خلال 5 دقايق بيرجّع بتكلفة 0.1× فقط.