التخزين المؤقت للسياق
حين يتشارك طلبان نفس البداية (رسالة نظام، مستند مرجعي، تاريخ محادثة)، لا يُعاد حساب الجزء المشترك. يُفوتَر لكم بـسعر مخفّض، تلقائيًا، دون تغيير أي سطر شيفرة.
لا شيء لتفعيله#
التخزين المؤقت يعمل افتراضيًا. أرسلوا طلباتكم بشكل عادي : إن كانت بادئة مطابقة قد عولجت مؤخرًا، تُعاد استخدامها.
قراءة ما خُزِّن مؤقتًا#
تذكر كل استجابة ذلك في usage :
"usage": {
"prompt_tokens": 2014,
"completion_tokens": 12,
"total_tokens": 2026,
"prompt_cache_hit_tokens": 1920, // servis depuis le cache → tarif réduit
"prompt_cache_miss_tokens": 94, // recalculés → tarif normal
"prompt_tokens_details": { "cached_tokens": 1920 }
}
الاصطلاحان السائدان في السوق موجودان كلاهما (prompt_cache_hit_tokens
وprompt_tokens_details.cached_tokens) : تقرأ أدواتكم الحالية
أحدهما دون أي تعديل.
ما يغيّره ذلك في الفاتورة#
تُفوتَر الرموز المخدومة من الذاكرة المؤقتة بسعر الذاكرة المؤقتة للنموذج، الأقل بكثير من سعر الإدخال :
| النموذج | إدخال / مليون | إدخال من الذاكرة المؤقتة / مليون |
|---|---|---|
mina-flash | 250 DA | 8 DA |
mina-low | 350 DA | 10 DA |
mina-full | 1300 DA | 45 DA |
حساب توضيحي#
طلب mina-low بـ2014 رمز إدخال ورمز واحد إخراج :
sans cache : 2 014 × 350 = 704 900 µDA
avec cache : 94 × 350 + 1 920 × 10 = 52 100 µDA
─────────────
−92,6 % sur l'entrée
الأسعار السارية هي دائمًا تلك المعروضة على plateforme.cloudzir.com/pricing.
الاستفادة القصوى منه#
تنطبق الذاكرة المؤقتة على البادئة، أي بداية الطلب. يجب إذًا وضع ما لا يتغير في البداية، وما يتغير في النهاية.
messages = [
# 1. stable : identique d'une requête à l'autre → mis en cache
{"role": "system", "content": INSTRUCTIONS + CATALOGUE_PRODUITS},
# 2. variable : à la fin
{"role": "user", "content": question_du_client},
]messages = [
# l'horodatage change à CHAQUE requête : il invalide tout ce qui suit,
# le cache ne sert jamais
{"role": "system", "content": f"Nous sommes le {datetime.now()}. " + INSTRUCTIONS},
{"role": "user", "content": question_du_client},
]- لا قيمة متقلبة في المقدمة : تاريخ، ساعة، معرّف جلسة، عدّاد. ضعوها في رسالة المستخدم، في النهاية.
- ترتيب ثابت : إن كنتم تبنون الإدخال انطلاقًا من قاموس، رتّبوا المفاتيح؛ ترتيب متغيّر يكسر البادئة المشتركة.
- المحادثات : بإضافة الجولات في النهاية، يبقى كل التاريخ السابق بادئة مشتركة. هذا حيث يكون الكسب الأكبر.
مدة البقاء#
تنتهي بادئة غير مُستخدَمة بالإخلاء (من بضع دقائق إلى بضع ساعات حسب الحمل). لا ضمان يُقدَّم : الذاكرة المؤقتة تحسين سعر، وليست تخزينًا. غياب التخزين المؤقت ليس خطأً أبدًا، بل مجرد تكلفة عادية.
لا تخزّن الذاكرة المؤقتة سوى حسابات وسيطة للمحرك، أبدًا إجاباتكم : لا تغيّر لا المحتوى ولا جودة ما يُعاد إليكم، فقط السعر. يديرها محرك الاستدلال، لا CloudZIR : لذا لا يمكننا ضمان أن بادئة مطابقة أرسلها عميلان مختلفان تُحتسَب بشكل منفصل. إن كان محتوى ما يجب ألا يجاور أبدًا محتوى طرف ثالث، لا تعتمدوا على الذاكرة المؤقتة لعزله.
الإكمال بذاكرة مؤقتة تطبيقية#
للأسئلة المتكررة بشكل صارم (أسئلة شائعة، تصنيف نفس العبارة)، يبقى الأرخص هو تخزين الإجابة عندكم : تكلفة صفرية، زمن استجابة صفري.
import hashlib, json
cache: dict[str, str] = {}
def repondre(client, messages, model="mina-flash"):
cle = hashlib.sha256(
json.dumps([model, messages], ensure_ascii=False, sort_keys=True).encode()
).hexdigest()
if cle in cache:
return cache[cle] # aucun appel, aucun jeton facturé
r = client.chat.completions.create(model=model, messages=messages)
cache[cle] = r.choices[0].message.content
return cache[cle]
التتبع#
تعرض صفحة Usage، لكل طلب، الجزء المخدوم من الذاكرة المؤقتة؛ ما يتيح التحقق من أن إدخالكم مبني جيدًا.
cache_control (صيغة Anthropic) مقبول ودون أثر : التخزين
المؤقت تلقائي، لا شيء يُوسَم يدويًا.