المستوى: متوسط — يفترض إنك مستخدم Anthropic SDK قبل كده وعارف يعني إيه system prompt و input tokens و request lifecycle.
Prompt Caching في Claude: ليه بتدفع 10x على نفس التوكنز كل request؟
لو شات بوت دعم فني عندك بيبعت لـ Claude نفس الـ system prompt كل مرة (دليل سياسات الشركة، few-shot examples، تعليمات الصياغة) بطول 5000 توكن، ومستخدميك بيسألوه 2000 سؤال يومياً، أنت بتدفع 10 مليون توكن إدخال شهرياً على نص واحد متغيرش. Prompt Caching بينزّل ده لمليون توكن مدفوع — تقريباً 84% توفير حقيقي — بإضافة سطر JSON واحد على الـ payload.
المشكلة باختصار
كل ما بتبعت request لـ Claude، الموديل بيعالج الـ system prompt من الصفر، حتى لو هو نفسه بالحرف من الـ request اللي قبله بـ 3 ثواني. مفيش "ذاكرة" بين الـ requests افتراضياً. ده معناه حاجتين:
- بتدفع على نفس التوكنز ألف مرة في اليوم.
- زمن أول توكن (TTFT) بيزيد لأن الموديل بيـ pre-fill الـ KV vectors لكل توكن من الأول.
على system prompt 5000 توكن، الـ pre-fill لوحده بياخد 1.5 لـ 2.5 ثانية على Claude Sonnet 4.6 قبل ما الموديل يبدأ يولّد أول حرف للمستخدم.
ازاي Prompt Caching بيشتغل (مثال للمبتدئ)
تخيل مكتب بريد بيستلم 2000 طرد يومياً، وكل الطرود لنفس الحي: "مدينة نصر، الحي السابع". الموظف العادي بيكتب اسم الحي والعنوان كامل من الأول لكل طرد، فبياخد دقيقتين في كل واحد. الموظف الذكي بيستخدم ختم جاهز فيه اسم الحي مطبوع، وبس يضيف رقم الشقة. الختم ده هو الـ cache: محتوى ثابت محفوظ مرة، بيتعاد استخدامه آلاف المرات.
في Claude، أنت بتقول للـ API "البلوك ده ثابت، احفظه". Anthropic بتولّد content hash للبلوك، بتعالجه مرة، وبتخزّن النتيجة المعالجة على سيرفرها لمدة 5 دقايق افتراضياً. أي request جديد فيه نفس البلوك في نفس الترتيب بيقفز خطوة المعالجة ويبدأ من decode مباشرةً.
التعريف العلمي الدقيق
الـ Transformer model اللي Claude مبني عليه بيحوّل كل توكن إدخال إلى Key/Value vectors داخل كل layer من الـ self-attention. على موديل بـ ~80 layer، system prompt بطول 5000 توكن بيولّد مئات الآلاف من الـ vectors. الخطوة دي اسمها pre-fill وهي اللي بتاخد أغلب زمن أول توكن.
Prompt Caching بيخزّن الـ KV vectors دي على ephemeral storage معزولة لكل API key، بـ TTL 5 دقايق افتراضياً (أو ساعة كاملة لو فعّلت extended cache بسعر مختلف). المتطلبات الرسمية حسب توثيق Anthropic:
- الحد الأدنى للبلوك المخزّن: 1024 توكن لـ Sonnet و Opus، 2048 توكن لـ Haiku.
- الـ
cache_controlبيتحط على آخر بلوك في الـ prefix اللي عايز تخزنه (breakpoint). - أقصى عدد breakpoints لكل request: 4.
- الـ cache match بيشتغل من بداية الـ prompt للـ breakpoint، توكن بتوكن. أي اختلاف بايت واحد قبل الـ breakpoint بيبطل الـ cache.