المستوى: متوسط
لو تطبيقك بيبعت لـ Claude نفس الـ system prompt الطويل في كل طلب، إنت بتدفع نفس الفاتورة 50,000 مرة في الشهر على نفس النص الثابت. Prompt Caching بيخلّي Anthropic تحفظ النص ده على جنب لمدة 5 دقايق، وبيخصم من فاتورتك 90% على أي طلب لاحق يستخدمه.
Prompt Caching: من فاتورة 1,432 دولار شهريًا لـ 142 دولار
المشكلة باختصار
أي شات بوت أو RAG أو agent شغّال على Claude بيبعت في كل طلب نفس الأشياء: تعليمات النظام، المستندات المرجعية، الأمثلة، أدوات الـ tool use، ثم في الآخر سؤال المستخدم. الجزء الثابت ده ممكن يكون 7,000 أو 10,000 توكن. لو عندك 50,000 طلب في الشهر على Sonnet 4.6 بـ 3$/مليون توكن، الحساب ببساطة: 8K × 50K × 3$ ÷ 1M = 1,200 دولار على الجزء الثابت لوحده.
الجزء المتغيّر (سؤال المستخدم) في المقابل بيكون 50 إلى 200 توكن. يعني 95% من الفاتورة بتروح على نص واحد إنت بتعيد بعته للسيرفر مرة بعد الـ تانية بدون أي تغيير.
الحل اللي طرحته Anthropic في أغسطس 2024 وتطوّر في 2026 بإضافة 1-hour cache: Prompt Caching. بتقول لـ Claude "الجزء ده ثابت، احفظه على جنب"، فأي طلب لاحق على نفس البادئة بيكلّفك 10% فقط من السعر الأصلي.
مثال للمبتدئ: محل التصوير الذكي
تخيّل إنك بتدخل محل تصوير كل يوم بنفس عقد إيجار من 40 صفحة، علشان تطلب نسخة معدّلة بصفحة واحدة جديدة في الآخر. الموظف الذكي مش هيفضل يصوّر الـ 40 صفحة من الأول كل مرة. هيقولك في أول مرة: "خد، هحطّ نسخة من الـ 40 صفحة في الدرج، ولو رجعت خلال نص ساعة هصوّر الصفحة الجديدة بس وأضيفها على نسختي المحفوظة".
دي فكرة Prompt Caching بالظبط:
- الـ 40 صفحة الثابتة = الـ system prompt الكبير (تعليمات + مستندات)
- الصفحة الجديدة كل يوم = سؤال المستخدم
- الدرج = الـ KV cache على GPUs بتاعة Anthropic
- نص الساعة = TTL الكاش (5 دقايق افتراضي، أو ساعة كاملة بسعر مختلف)
التعريف العلمي: ازاي بيشتغل تحت السطح
الـ transformer في كل طلب بيمر بمرحلتين: prefill (يقرأ كل الـ input ويولّد KV vectors لكل توكن في كل طبقة) ثم decode (يولّد التوكنات الجديدة واحد ورا الـ تاني). مرحلة prefill هي الأغلى، لأنها O(n²) في طول المدخل.
لمّا بتضيف cache_control: {"type": "ephemeral"} على جزء من الـ prompt، السيرفر بيحسب hash للنص ده، وبيخزّن الـ KV tensors الناتجة من مرحلة الـ prefill في ذاكرة GPU. الطلب اللي بعده بنفس البادئة بيلغي مرحلة prefill على الجزء المخزّن، ويبدأ من الجزء الجديد فقط.
ده مش مجرد توفير مالي. ده تسريع حقيقي في الـ time-to-first-token (TTFT)، لأن مرحلة الـ prefill على 8K توكن ممكن تاخد ثانية ونص. مع الـ cache hit، الزمن ده بينزل لـ 100 ميلي ثانية تقريبًا.
الكود الشغّال: Python + Anthropic SDK
كود فعلي يقارن بين طلبين متتاليين، الأول بيكتب الكاش والـ تاني بيقراه. شغّال على :