guides

تخزين مطالبات LLM مؤقتاً: خفّض تكاليف API بنسبة 90% (الأدوات الثلاثة)

بقلم Mert Batur
Mar 25, 2026
15 قراءة
تخزين مطالبات LLM مؤقتاً: خفّض تكاليف API بنسبة 90% (الأدوات الثلاثة)

تخزين مطالبات LLM مؤقتاً: خفّض تكاليف API بنسبة 90% (الأدوات الثلاثة)

يتيح لك التخزين المؤقت لمطالبات LLM إعادة استخدام الرموز المعالجة مسبقاً عبر استدعاءات API -- مما يخفض تكاليف الإدخال بنسبة تصل إلى 90% ويقلل وقت الوصول إلى أول رمز بنسبة تصل إلى 85%. إذا كنت ترسل نفس موجه النظام أو تعريفات الأدوات أو أمثلة few-shot في كل طلب، فأنت تدفع السعر الكامل لعمل أنجزه GPU بالفعل.

يغطي هذا الدليل OpenAI وAnthropic وGemini بنفس chatbot المُنفَّذ في كل SDK الثلاثة -- وهو ما لا يفعله أي دليل آخر. سنغطي أيضاً تحديث التخزين المؤقت التلقائي من Anthropic في فبراير 2026، وسيناريوهات تكاليف الإنتاج بمبالغ دولارية حقيقية، والأنماط المضادة التي تدمر معدل إصابة ذاكرة التخزين المؤقت بصمت.

<!-- IMAGE: KV cache reuse flow diagram showing prompt prefix matching, cache hit path (fast, cheap), and cache miss path (standard processing) -->

ملخص سريع -- الأدوات الثلاثة في لمحة واحدة

قبل التعمق في تفاصيل التنفيذ، إليك المقارنة الكاملة. إذا كنت تعرف بالفعل أي موفر تستخدم، انتقل مباشرة إلى قسمه. إذا كنت تقيّم الخيارات، يخبرك هذا الجدول بكل شيء في 10 ثوانٍ.

الميزةOpenAIAnthropicGemini
نوع التخزين المؤقتتلقائيتلقائي + صريحضمني + صريح
الحد الأدنى من الرموز1,0241,024 (معظم النماذج)1,024 (Flash) / 4,096 (Pro)
TTL5-10 دقائق (حتى 24 ساعة ممتداً)5 دقائق أو ساعةقابل للتهيئة (ساعة افتراضياً)
تكلفة الكتابة إلى الذاكرة المؤقتة1x (بدون رسوم إضافية)1.25x (5 دقائق) / 2x (ساعة)1x (بدون رسوم إضافية)
خصم قراءة الذاكرة المؤقتةخصم 50% على الإدخالخصم 90% على الإدخالخصم ~90% على الإدخال
عزل الذاكرة المؤقتةالمؤسسةمساحة العملالمشروع
دعم البثنعمنعمنعم
حقل استجابة الإصابة بالذاكرة المؤقتةcached_tokenscache_read_input_tokenscachedContentTokenCount
التحكم الصريحلانعم (cache_control)نعم (كائنات ذاكرة مؤقتة مسمّاة)
آخر تحديث رئيسيأكتوبر 2024فبراير 2026 (تخزين مؤقت تلقائي)2026 (تخزين مؤقت ضمني)

الاستنتاج الرئيسي: OpenAI هو الأبسط (إعداد صفري، خصم 50%). Anthropic يوفر أعمق خصم (90%) مع أكبر قدر من التحكم. Gemini يوفر TTL قابلاً للتهيئة وتخزيناً مؤقتاً ضمنياً على نماذج 2.5+ بخصومات مماثلة لـ Anthropic.

كيف يعمل التخزين المؤقت لمطالبات LLM؟

لا تحتاج إلى فهم الآليات الداخلية للمحولات لاستخدام التخزين المؤقت للمطالبات بشكل فعال. لكنك تحتاج إلى فهم مفهوم واحد: مطابقة البادئة.

ذاكرة KV في 60 ثانية

عندما يعالج LLM مطالبتك، يحسب حالات الانتباه (أزواج مفتاح-قيمة) لكل رمز. هذه مدخلات ذاكرة KV هي الجزء المكلف -- فهي تستهلك ذاكرة GPU ووقت الحوسبة. يخزن التخزين المؤقت للمطالبات هذه الحالات المحسوبة حتى يتخطى الطلب التالي بنفس البادئة إعادة الحساب كلياً.

الكلمة الحاسمة هي البادئة. تطابق الذاكرة المؤقتة من بداية مطالبتك للأمام. إذا تطابقت أول 2,000 رمز مع مدخل مخزن مؤقتاً لكن الرمز 2,001 اختلف، تُقدَّم أول 2,000 رمز تلك من الذاكرة المؤقتة. كل شيء بعد نقطة التشعب يُحسَب من جديد.

لهذا تهم ترتيب المطالبة. هيكل مطالباتك بهذه الطريقة:

  1. تعريفات الأدوات (الأكثر ثباتاً)
  2. موجه النظام
  3. أمثلة few-shot الثابتة
  4. السياق المسترجع (شبه ديناميكي)
  5. سجل المحادثة (ينمو بكل دور)
  6. استعلام المستخدم (مختلف دائماً)

المحتوى الثابت أولاً، المحتوى الديناميكي أخيراً. كلما زادت الرموز المطابقة للبادئة المخزنة مؤقتاً، زادت الوفورات.

التخزين المؤقت للمطالبات مقابل التخزين المؤقت الدلالي مقابل تخزين الاستجابة

هذه المصطلحات الثلاثة تُخلط باستمرار. التخزين المؤقت للمطالبات (موضوع هذا الدليل) يعيد استخدام حالات KV المحسوبة على مستوى GPU لبادئات الرموز المتطابقة -- لا يوجد فقدان في الدقة، نفس المخرجات كما في الحالة غير المخزنة. التخزين المؤقت الدلالي يستخدم تشابه التضمين لإعادة استجابات مولَّدة مسبقاً للاستعلامات "المشابهة بما يكفي" -- أسرع لكن يمكن أن يعيد إجابات خاطئة. تخزين الاستجابة يحفظ أزواج إدخال-إخراج بالضبط ويعيد الاستجابة المخزنة حرفياً -- يعمل فقط للطلبات المتطابقة تماماً.

التخزين المؤقت للمطالبات هو "التحسين المجاني" الوحيد -- يقلل التكلفة والكمون دون أي مقايضة في الدقة. للرياضيات العميقة للمحولات وراء تخزين KV المؤقت، قاس المقال التقني من Hugging Face تسريعاً بمقدار ~5.21x على GPU T4.

كيف تتعامل OpenAI مع التخزين المؤقت للمطالبات؟

التخزين المؤقت للمطالبات في OpenAI تلقائي بالكامل. منذ أكتوبر 2024، كل استدعاء API بأكثر من 1,024 رمز إدخال يستفيد تلقائياً من التخزين المؤقت. لا يوجد opt-in، ولا headers، ولا تغييرات في الكود.

كيف يعمل التخزين المؤقت التلقائي في OpenAI

عندما ترسل طلباً بـ1,024 رمز على الأقل، تتحقق OpenAI مما إذا كانت البادئة تطابق طلباً حديثاً من مؤسستك. تكلف الإصابات بالذاكرة المؤقتة 50% من السعر القياسي لرمز الإدخال. بعد حد 1,024 رمز الأولي، تطابق الذاكرة المؤقتة في زيادات بمقدار 128 رمزاً.

تعيش الذاكرة المؤقتة 5-10 دقائق خلال الاستخدام الاعتيادي ويمكن أن تستمر حتى 24 ساعة في أوقات انخفاض التحميل. إنها محددة النطاق لكل مؤسسة، لذا تستفيد المشاريع المختلفة داخل نفس المؤسسة من ذاكرات تخزين مؤقت مشتركة.

النماذج المدعومة تشمل GPT-4o وGPT-4o-mini وGPT-4.1 وo1 وo3-mini وجميع النماذج الأحدث.

مثال Python SDK لـ OpenAI

python
from openai import OpenAI

client = OpenAI()

# موجه النظام هذا ~2,000 رمز -- أعلى بكثير من الحد الأدنى البالغ 1,024
SYSTEM_PROMPT = """You are a senior Python developer specializing in async programming.
You follow PEP 8, use type hints, and write comprehensive docstrings.
When reviewing code, check for: race conditions, resource leaks, error handling,
and performance bottlenecks. Always suggest specific fixes with code examples.
[... imagine 1,800 more tokens of coding guidelines, examples, and rules ...]"""

def chat(user_message: str) -> str:
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": SYSTEM_PROMPT},
            {"role": "user", "content": user_message},
        ],
    )

    # التحقق مما إذا كان التخزين المؤقت قد انطلق
    usage = response.usage
    cached = usage.prompt_tokens_details.cached_tokens
    total_input = usage.prompt_tokens
    print(f"Cached: {cached}/{total_input} tokens ({cached/total_input*100:.0f}%)")

    return response.choices[0].message.content

# الاستدعاء الأول: إخفاق الذاكرة المؤقتة (السعر الكامل)
chat("Review this async function for race conditions...")

# الاستدعاء الثاني خلال 5-10 دقائق: إصابة الذاكرة المؤقتة (خصم 50% على الرموز المخزنة)
chat("Now optimize the same function for throughput...")

الاستدعاء الأول يعالج كل شيء بالسعر الكامل ويملأ الذاكرة المؤقتة. الاستدعاء الثاني يعيد استخدام رموز موجه النظام المخزنة مؤقتاً بنصف السعر. ستشاهد شيئاً مثل Cached: 1920/2048 tokens (94%) في المخرجات.

الحكم: OpenAI هو الأسهل للبدء به -- إعداد صفري، التخزين المؤقت يحدث ببساطة. خصم 50% هو الأدنى بين الموفرين الثلاثة، لكن لا شيء يضاهي البساطة.

كيف تتعامل Anthropic/Claude مع التخزين المؤقت للمطالبات؟

تقدم Anthropic وضعَين: التخزين المؤقت التلقائي (مُفعَّل افتراضياً منذ فبراير 2026) والتخزين المؤقت الصريح مع نقاط توقف cache_control. الرقم الرئيسي يصعب تجاهله -- تكلف القراءات المخزنة مؤقتاً 10% فقط من سعر الإدخال القياسي، أي خصم 90%.

التخزين المؤقت التلقائي مقابل الصريح (تحديث 2026)

اعتباراً من 5 فبراير 2026، تُفعِّل Anthropic التخزين المؤقت التلقائي افتراضياً لجميع المطالبات المؤهلة. لم تعد بحاجة إلى header التجريبي القديم. يحدد النظام تلقائياً نقاط توقف الذاكرة المؤقتة المثلى.

لا يزال التخزين المؤقت الصريح متاحاً عندما تريد تحكماً دقيقاً. تضع cache_control: {"type": "ephemeral"} على كتل محتوى معينة لتحديد مكان حد الذاكرة المؤقتة بالضبط. هذا مفيد عندما تكون لمطالبتك بنية محددة وتريد ضمان تخزين أقسام معينة مؤقتاً.

يوجد خياران لـ TTL:

  • ذاكرة مؤقتة لمدة 5 دقائق (الافتراضي): تكاليف الكتابة 1.25x سعر الإدخال الأساسي، تكاليف القراءة 0.1x. تسدد تكلفتها بعد إصابة ذاكرة مؤقتة واحدة.
  • ذاكرة مؤقتة لمدة ساعة: تكاليف الكتابة 2x سعر الإدخال الأساسي، تكاليف القراءة 0.1x. تسدد تكلفتها بعد إصابتين. متاح على نماذج Claude 4.5+.

تغير عزل الذاكرة المؤقتة من مستوى المؤسسة إلى مستوى مساحة العمل في 5 فبراير 2026. هذا يعني أن مساحات العمل المختلفة داخل نفس المؤسسة تحتفظ بذاكرات تخزين مؤقت منفصلة.

عند العمل مع تخزين Anthropic المؤقت، يساعد هيكلة مطالبتك للتخزين المؤقت الأمثل -- وضع المحتوى الثابت قبل الديناميكي أهم هنا لأنك تدفع علاوة كتابة.

مثال Python SDK لـ Anthropic

python
import anthropic

client = anthropic.Anthropic()

SYSTEM_PROMPT = """You are a senior Python developer specializing in async programming.
You follow PEP 8, use type hints, and write comprehensive docstrings.
When reviewing code, check for: race conditions, resource leaks, error handling,
and performance bottlenecks. Always suggest specific fixes with code examples.
[... imagine 1,800 more tokens of coding guidelines, examples, and rules ...]"""

def chat(user_message: str) -> str:
    response = client.messages.create(
        model="claude-sonnet-4-5-20250514",
        max_tokens=1024,
        system=[
            {
                "type": "text",
                "text": SYSTEM_PROMPT,
                "cache_control": {"type": "ephemeral"},  # نقطة توقف صريحة
            }
        ],
        messages=[
            {"role": "user", "content": user_message},
        ],
    )

    # قراءة مقاييس الذاكرة المؤقتة من الاستجابة
    usage = response.usage
    created = usage.cache_creation_input_tokens
    read = usage.cache_read_input_tokens
    standard = usage.input_tokens
    print(f"Cache write: {created}, Cache read: {read}, Standard: {standard}")

    return response.content[0].text

# الاستدعاء الأول: cache_creation_input_tokens = ~1920 (كتابة بـ 1.25x)
chat("Review this async function for race conditions...")

# الاستدعاء الثاني: cache_read_input_tokens = ~1920 (قراءة بـ 0.1x -- خصم 90%!)
chat("Now optimize the same function for throughput...")

فهم تسعير كتابة الذاكرة المؤقتة مقابل قراءتها

هنا يصبح تسعير Anthropic مثيراً للاهتمام. باستخدام Claude Sonnet 4.5 ($3/MTok إدخال أساسي) كمثال:

  • الإدخال القياسي: $3.00 لكل مليون رمز
  • كتابة الذاكرة المؤقتة (5 دقائق): $3.75 لكل مليون رمز (1.25x) -- تدفع أكثر في المرة الأولى
  • قراءة الذاكرة المؤقتة: $0.30 لكل مليون رمز (0.1x) -- أرخص بنسبة 90% في كل إصابة تالية

ذاكرة التخزين المؤقت لمدة 5 دقائق تسدد تكلفتها بعد قراءة واحدة فقط. ذاكرة التخزين المؤقت لساعة ($6.00/MTok كتابة) تسدد تكلفتها بعد قراءتين. إذا كنت تجري أكثر من طلبَين في الدقيقة بنفس البادئة، فالحساب يصبّ بشكل ساحق في صالحك.

الحكم: Anthropic تقدم أعمق خصم (90%) وأكبر قدر من التحكم. الأفضل للأحمال ذات الحجم الكبير والحساسة للتكلفة.

كيف تتعامل Google Gemini مع التخزين المؤقت للمطالبات؟

تتبع Gemini نهجاً مختلفاً مع آليتين متميزتين للتخزين المؤقت: تخزين السياق المؤقت الصريح (كائنات ذاكرة مؤقتة مسمّاة تنشئها وتُشير إليها) والتخزين المؤقت الضمني (تلقائي، إعداد صفري، أُضيف في 2026 لنماذج Gemini 2.5+).

تخزين السياق المؤقت الصريح (ذاكرات مؤقتة مسمّاة)

على عكس OpenAI وAnthropic حيث يكون التخزين المؤقت شفافاً، يتطلب التخزين المؤقت الصريح في Gemini أن تُنشئ أولاً كائن ذاكرة مؤقتة مسمّى ثم تُشير إليه في الطلبات اللاحقة. الحد الأدنى لرموز الإدخال هو 1,024 رمزاً لنماذج Gemini Flash و4,096 رمزاً لنماذج Pro. TTL قابل للتهيئة -- الافتراضي ساعة، لكن يمكنك ضبطه حسب احتياجاتك.

الرموز المخزنة مؤقتاً على Gemini 2.5 Pro مُسعَّرة بـ**$0.125/MTok** مقابل سعر الإدخال القياسي البالغ $1.25/MTok -- أي خصم 90%. توجد أيضاً تكلفة تخزين بـ$4.50 لكل مليون رمز في الساعة لـ Pro و$1.00 لـ Flash.

التخزين المؤقت الضمني في Gemini 2.5 (2026)

ابتداءً من Gemini 2.5 Pro وFlash، أضافت Google التخزين المؤقت الضمني -- تخزين مؤقت تلقائي يعمل مثل نهج OpenAI. لا حاجة لأي إعداد. ضع محتوى كبيراً ومشتركاً في بداية مطالبتك وأرسل طلبات ببادئات متشابهة بشكل متسلسل سريع. يكتشف النظام تلقائياً المحتوى المؤهل للتخزين المؤقت ويمرر الوفورات.

مثال Python SDK لـ Gemini

python
from google import genai
from google.genai import types

client = genai.Client()

SYSTEM_PROMPT = """You are a senior Python developer specializing in async programming.
You follow PEP 8, use type hints, and write comprehensive docstrings.
When reviewing code, check for: race conditions, resource leaks, error handling,
and performance bottlenecks. Always suggest specific fixes with code examples.
[... imagine 1,800 more tokens of coding guidelines, examples, and rules ...]"""

# الخطوة 1: إنشاء كائن ذاكرة مؤقتة مسمّى
cache = client.caches.create(
    model="gemini-2.5-flash",
    config=types.CreateCachedContentConfig(
        display_name="python-review-guidelines",
        system_instruction=SYSTEM_PROMPT,
        ttl="3600s",  # ساعة واحدة
    ),
)

print(f"Cache created: {cache.name}, expires: {cache.expire_time}")

# الخطوة 2: استخدام الذاكرة المؤقتة في الطلبات
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="Review this async function for race conditions...",
    config=types.GenerateContentConfig(
        cached_content=cache.name,
    ),
)

# التحقق من استخدام الذاكرة المؤقتة في الاستجابة
metadata = response.usage_metadata
print(f"Cached tokens: {metadata.cached_content_token_count}")
print(f"Total input tokens: {metadata.prompt_token_count}")

للنهج الصريح ميزة كبيرة: تتحكم في TTL بدقة. إذا كنت تعلم أن مهمتك الدفعية تستغرق 4 ساعات، اضبط TTL لـ 4 ساعات وتجنب انتهاء صلاحية الذاكرة المؤقتة في منتصف المعالجة.

الحكم: TTL القابل للتهيئة في Gemini ووضعا التخزين المؤقت (صريح + ضمني) يجعلانه متعدد الاستخدامات. الحد الأدنى أصبح الآن مماثلاً للموفرين الآخرين، وخصم 90% على القراءات المخزنة مؤقتاً يطابق Anthropic.

مقارنة الكود جنباً إلى جنب -- نفس حالة الاستخدام، الأدوات الثلاثة

إليك نفس chatbot مع موجه نظام مخزن مؤقتاً، مُنفَّذ في كل SDK الثلاثة. قارن تجربة المطور مباشرةً.

python
# --- OpenAI: إعداد صفري، فقط استدع API ---
from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": SYSTEM_PROMPT},  # مخزن مؤقتاً تلقائياً
        {"role": "user", "content": user_message},
    ],
)
cached = response.usage.prompt_tokens_details.cached_tokens
python
# --- Anthropic: نقطة توقف cache_control صريحة ---
import anthropic
client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-sonnet-4-5-20250514",
    max_tokens=1024,
    system=[{
        "type": "text",
        "text": SYSTEM_PROMPT,
        "cache_control": {"type": "ephemeral"},  # تحديد حد الذاكرة المؤقتة
    }],
    messages=[{"role": "user", "content": user_message}],
)
cached = response.usage.cache_read_input_tokens
python
# --- Gemini: كائن ذاكرة مؤقتة مسمّى ---
from google import genai
from google.genai import types

client = genai.Client()
cache = client.caches.create(
    model="gemini-2.5-flash",
    config=types.CreateCachedContentConfig(
        system_instruction=SYSTEM_PROMPT,
        ttl="3600s",
    ),
)
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=user_message,
    config=types.GenerateContentConfig(cached_content=cache.name),
)
cached = response.usage_metadata.cached_content_token_count
الجانبOpenAIAnthropicGemini
تعقيد الإعدادلا شيءإضافة كتلة cache_controlإنشاء كائن ذاكرة مؤقتة أولاً
التحكم في الذاكرة المؤقتةتلقائي فقطتلقائي أو صريحضمني أو صريح
خصم القراءة المخزنة مؤقتاً50%90%~90%
الحد الأدنى من الرموز1,0241,0241,024 (Flash) / 4,096 (Pro)
حكم تجربة المطورالأبسطأكبر تحكمTTL الأكثر مرونة

إذا أردت وفورات بلا جهد، اختر OpenAI. إذا أردت أعمق خصم وتحكماً دقيقاً، اختر Anthropic. إذا احتجت إلى مدد ذاكرة مؤقتة قابلة للتهيئة أو كنت بالفعل على Google Cloud، اختر Gemini.

حاسبة تكاليف الإنتاج -- وفورات حقيقية على نطاق واسع

النسب المئوية المجردة لا تقود القرارات. المبالغ بالدولار تفعل ذلك. إليك ثلاثة سيناريوهات إنتاجية بتقديرات تكلفة حقيقية باستخدام Claude Sonnet 4.5 ($3/MTok إدخال) وGPT-4o ($2.50/MTok إدخال) وGemini 2.5 Pro ($1.25/MTok إدخال).

تم التحقق من الأسعار في مارس 2026. راجع Anthropic وOpenAI وGemini للأسعار الحالية.

الافتراضات: معدل إصابة 80% بالذاكرة المؤقتة (واقعي للمطالبات المهيكلة جيداً)، رموز الإخراج مستبعدة لأن التخزين المؤقت يؤثر فقط على تكاليف الإدخال.

السيناريوبدون تخزين مؤقت (شهرياً)مع تخزين OpenAI المؤقتمع تخزين Anthropic المؤقتمع تخزين Gemini المؤقت
Chatbot هواية: 100 طلب/يوم، 2K موجه نظامOpenAI: $15 / Anthropic: $18 / Gemini: $7.50$12 (وفر $3)$5.40 (وفر $12.60)$2.25 (وفر $5.25)
API نمو: 10K طلب/يوم، 8K بادئة مخزنةOpenAI: $600 / Anthropic: $720 / Gemini: $300$360 (وفر $240)$144 (وفر $576)$60 (وفر $240)
خط أنابيب Enterprise: 100K طلب/يوم، 10K بادئة مخزنةOpenAI: $7,500 / Anthropic: $9,000 / Gemini: $3,750$4,500 (وفر $3,000)$1,800 (وفر $7,200)$750 (وفر $3,000)

عند مستوى النمو، يوفر تخزين Anthropic المؤقت $576/شهر رغم سعره الأساسي الأعلى من OpenAI. على نطاق Enterprise، نحن نتحدث عن $7,200/شهر في الوفورات مع Anthropic -- أو $86,400 في السنة. هذا ما يعادل راتب مهندس أول يُوفَّر بتغيير إعداد واحد.

النمط واضح: كلما ارتفع حجم طلباتك وطالت البادئة الثابتة، زادت وفورات التخزين المؤقت. خصم 90% من Anthropic يهيمن على النطاق الواسع، لكن السعر الأساسي الأقل لـ Gemini يجعله تنافسياً عند احتساب التكلفة الإجمالية.

الأنماط المضادة للتخزين المؤقت -- متى لا تخزّن مؤقتاً

يبدو التخزين المؤقت بسيطاً حتى يجلس معدل إصابة ذاكرتك المؤقتة بشكل غامض عند 0%. إليك الأخطاء التي تدمر التخزين المؤقت للمطالبات بصمت -- وكيفية إصلاحها.

أخطاء كسر الذاكرة المؤقتة (مع الحلول)

الطوابع الزمنية في موجهات النظام -- الخطأ الأكثر شيوعاً. إذا كان موجه نظامك يتضمن datetime.now()، يتغير مفتاح الذاكرة المؤقتة كل ثانية.

python
# سيء: إخفاق الذاكرة المؤقتة في كل طلب
system_prompt = f"""You are a helpful assistant.
Current time: {datetime.now().isoformat()}
Always be helpful and accurate."""

# جيد: انقل الطابع الزمني إلى رسالة المستخدم
system_prompt = """You are a helpful assistant.
Always be helpful and accurate."""

user_message = f"[Current time: {datetime.now().isoformat()}]\n{user_query}"

محتوى خاص بالمستخدم قبل المحتوى الثابت -- إذا وضعت session_id أو تفضيلات المستخدم في البداية، يحصل كل مستخدم على بادئة فريدة.

python
# سيء: بادئة فريدة لكل مستخدم = لا إعادة استخدام للذاكرة المؤقتة
messages = [
    {"role": "system", "content": f"User ID: {user_id}\nPreferences: {prefs}\n{GUIDELINES}"},
    {"role": "user", "content": query},
]

# جيد: المحتوى الثابت أولاً، سياق المستخدم في النهاية
messages = [
    {"role": "system", "content": GUIDELINES},  # نفسه لجميع المستخدمين -> مخزن مؤقتاً
    {"role": "user", "content": f"Context: User {user_id}, prefs: {prefs}\n{query}"},
]
النمط المضادلماذا يكسر الذاكرة المؤقتةالحل
الطوابع الزمنية في موجه النظامالبادئة تتغير كل ثانيةانقل الطابع الزمني إلى رسالة المستخدم
معرّفات الجلسة/المستخدم في البادئةبادئة فريدة لكل مستخدمانقل سياق المستخدم بعد المحتوى الثابت
تدوير أمثلة few-shotأمثلة مختلفة = بادئة مختلفةاستخدم مجموعة ثابتة من الأمثلة
تعريفات أدوات ديناميكيةتغيير الأدوات = عدم تطابق البادئةاحتفظ بمخططات الأدوات ثابتة
مطالبات قصيرة (أقل من الحد الأدنى)الذاكرة المؤقتة ببساطة لن تنشطادمج السياق للتجاوز 1,024 رمزاً
تخصيص لكل طلب في موجه النظامموجه النظام يتغير في كل استدعاءاستخدم موجه نظام مشترك + رسائل مستخدم محددة

عندما لا يساعد التخزين المؤقت للمطالبات حقاً

بعض السيناريوهات لن تستفيد من التخزين المؤقت حتى لو هيكلت مطالباتك بشكل مثالي:

  • المطالبات للاستخدام مرة واحدة: إذا كان كل طلب يحتوي على سياق فريد تماماً بدون بادئة مشتركة، فلا شيء يمكن تخزينه مؤقتاً.
  • المطالبات القصيرة جداً: تحت 1,024 رمز (OpenAI/Anthropic) أو 4,096 رمز (Gemini Pro)، لا ينشط التخزين المؤقت.
  • الطلبات غير المتكررة: إذا كانت الطلبات متباعدة بساعات، تنتهي صلاحية الذاكرة المؤقتة قبل وصول طلب ثانٍ. نافذة 5-10 دقائق لـ OpenAI والـ TTL الافتراضي لـ Anthropic البالغ 5 دقائق تعني أنك بحاجة إلى حركة مرور متسقة.

هل يعمل التخزين المؤقت للمطالبات مع البث؟

نعم. التخزين المؤقت للمطالبات والبث مستقلان -- يعمل التخزين المؤقت على رموز الإدخال، ويؤثر البث على تسليم المخرجات. يحلان مشكلات مختلفة في مراحل مختلفة من دورة حياة الطلب.

تتعامل الذاكرة المؤقتة مع مرحلة الملء المسبق (معالجة مطالبة الإدخال الخاصة بك). يتعامل البث مع مرحلة فك الترميز (توليد رموز الإخراج وإرسالها بشكل تدريجي). تحصل على كلا الميزتين في آنٍ واحد: ملء مسبق أسرع من إصابة الذاكرة المؤقتة، بالإضافة إلى تسليم مخرجات تدريجي من البث.

إليك مثالاً للبث مع تمكين التخزين المؤقت:

python
import anthropic

client = anthropic.Anthropic()

with client.messages.stream(
    model="claude-sonnet-4-5-20250514",
    max_tokens=1024,
    system=[{
        "type": "text",
        "text": SYSTEM_PROMPT,
        "cache_control": {"type": "ephemeral"},
    }],
    messages=[{"role": "user", "content": "Explain Python's GIL..."}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

    # بعد اكتمال البث، تحقق من مقاييس الذاكرة المؤقتة
    usage = stream.get_final_message().usage
    print(f"\nCache read: {usage.cache_read_input_tokens} tokens")

تحسين TTFT من التخزين المؤقت هو في الواقع الأكثر لفتاً للنظر مع البث. بدون تخزين مؤقت، تنتظر الملء المسبق الكامل قبل أن يُبث الرمز الأول. مع التخزين المؤقت، يكون الملء المسبق شبه فوري، لذا تبدأ الرموز في التدفق بشكل فوري تقريباً.

كيفية مراقبة معدلات إصابة الذاكرة المؤقتة في الإنتاج

إعداد التخزين المؤقت هو نصف المعركة. معرفة ما إذا كان يعمل فعلياً هو النصف الآخر. إذا انخفض معدل إصابة ذاكرتك المؤقتة دون 50%، تغير شيء ما في بنية مطالبتك وأنت تترك المال على الطاولة.

مقاييس الذاكرة المؤقتة الخاصة بكل موفر

الموفرحقل قراءة الذاكرة المؤقتةحقل كتابة الذاكرة المؤقتةحقل إجمالي الإدخال
OpenAIusage.prompt_tokens_details.cached_tokensغير متوفر (تلقائي)usage.prompt_tokens
Anthropicusage.cache_read_input_tokensusage.cache_creation_input_tokensusage.input_tokens
GeminiusageMetadata.cachedContentTokenCountغير متوفر (كائن ذاكرة مؤقتة صريح)usageMetadata.promptTokenCount

مُسجِّل بسيط لمعدل إصابة الذاكرة المؤقتة

إليك دالة مساعدة يمكنك إضافتها لأي مشروع لتتبع معدلات إصابة الذاكرة المؤقتة عبر حقول استجابة API:

python
import logging

logger = logging.getLogger("cache_monitor")

def log_cache_metrics(provider: str, usage: dict) -> float:
    """يستخرج ويسجل مقاييس الذاكرة المؤقتة من استجابة أي موفر. يعيد معدل الإصابة."""

    if provider == "openai":
        cached = getattr(usage.prompt_tokens_details, "cached_tokens", 0)
        total = usage.prompt_tokens
    elif provider == "anthropic":
        cached = usage.cache_read_input_tokens
        created = usage.cache_creation_input_tokens
        total = cached + created + usage.input_tokens
    elif provider == "gemini":
        cached = getattr(usage, "cached_content_token_count", 0)
        total = usage.prompt_token_count
    else:
        raise ValueError(f"Unknown provider: {provider}")

    hit_rate = (cached / total * 100) if total > 0 else 0
    logger.info(f"[{provider}] Cache hit rate: {hit_rate:.1f}% ({cached}/{total} tokens)")

    if hit_rate < 50:
        logger.warning(f"[{provider}] Low cache hit rate! Check prompt structure.")

    return hit_rate

يجب على نظام إنتاج صحي الحفاظ على معدلات إصابة بالذاكرة المؤقتة تتراوح بين 70-90%. إذا كنت دون 50%، أعد مراجعة قسم الأنماط المضادة. يمكنك أيضاً دمج ذلك مع مقاييس التقييم الآلية للكشف عن الانحدار في خط أنابيب مطالباتك.

التخزين المؤقت للمطالبات في حالات الاستخدام الواقعية

أمثلة chatbot أعلاه توضح الآليات، لكن التخزين المؤقت للمطالبات يتألق حقاً في أنماط معمارية محددة.

خطوط أنابيب RAG

في إعداد RAG، يكون موجه نظامك وأمثلة few-shot الخاصة بك ثابتة لجميع الاستعلامات. المستندات المسترجعة تتغير في كل مرة. هيكل مطالبتك لزيادة البادئة المخزنة مؤقتاً إلى الحد الأقصى:

  1. موجه النظام (مخزن مؤقتاً)
  2. أمثلة few-shot (مخزنة مؤقتاً)
  3. المستندات المسترجعة (ديناميكية -- تأتي أخيراً)
  4. استعلام المستخدم (دائماً فريد)

مع موجه نظام بـ 5,000 رمز و3,000 رمز من أمثلة few-shot، هذا 8,000 رمز مخزن مؤقتاً في كل طلب. بـ 1,000 طلب/يوم على Anthropic، ستوفر تقريباً $6.50/يوم فقط على البادئة المخزنة مؤقتاً. عندما تسترجع كتل السياق وتخزنها مؤقتاً، تأكد من أن مخرجات الاسترجاع تأتي بعد البادئة الثابتة.

Chatbots متعدد الأدوار

المحادثات متعددة الأدوار هي حالة استخدام ممتازة للتخزين المؤقت للمطالبات. كل دور يضاف إلى سجل المحادثة، لكن المحادثة السابقة بأكملها مخزنة مؤقتاً بالفعل من الأدوار السابقة. تتراكم ميزة الذاكرة المؤقتة -- عند الدور العاشر، قد يكون لديك 15,000 رمز من السجل المخزن مؤقتاً مع 200 رمز جديد فقط من آخر رسالة مستخدم.

الأنظمة العاملة وتعريفات أدوات MCP

إذا كنت تبني عوامل تستخدم أدوات، فإن تعريفات أدواتك هي مخططات JSON ثابتة تتكرر في كل استدعاء API. يمكن للعامل النموذجي أن يمتلك أكثر من 20 أداة تبلغ في مجموعها 3,000-5,000 رمز من التعريفات. هذا مادة تخزين مؤقت ممتازة.

هذا ذو صلة خاصة بالمعماريات المبنية على MCP حيث تُرسَل تعريفات أدوات الخادم في كل استدعاء. مع cache_control الصريح من Anthropic، يمكنك تحديد مصفوفة tools للتخزين المؤقت وضمان إعادة استخدام تلك الرموز.

أي موفر يجب أن تختار؟

إذا احتجت...أفضل اختيارالسبب
إعداد صفري، فقط وفوراتOpenAIتخزين مؤقت تلقائي، لا تغييرات في الكود مطلوبة
أقصى خفض للتكاليف (90%)Anthropicسعر قراءة مخزنة مؤقتاً بـ 0.1x، أعمق خصم
تحكم دقيق في الذاكرة المؤقتةAnthropicنقاط توقف صريحة + TTL قابل للتهيئة (5 دقائق أو ساعة)
تحليل المستندات الطويلةGeminiTTL قابل للتهيئة مع ذاكرات مؤقتة مسمّاة صريحة
بساطة الدردشة متعددة الأدوارOpenAIمطابقة بادئة تلقائية على سجل المحادثة المتنامي
الأنظمة العاملة مع تعريفات الأدواتAnthropicتخزين تعريفات الأدوات مؤقتاً صراحةً بـ cache_control
مرونة متعددة الموفرينLiteLLMصيغة تخزين مؤقت موحدة لجميع الموفرين

إذا كنت تستخدم موفراً بالفعل، ابدأ هناك -- التخزين المؤقت للمطالبات لا يتطلب التبديل. يعمل LiteLLM كطبقة وكيل تُنظِّم معاملات التخزين المؤقت عبر الموفرين، وهو مفيد إذا كنت توجه الطلبات إلى نماذج متعددة.

الأسئلة الشائعة -- التخزين المؤقت لمطالبات LLM

ما هو التخزين المؤقت للمطالبات في نماذج LLM؟

يخزن التخزين المؤقت للمطالبات حالات الانتباه المحسوبة (ذاكرة KV) من بادئات المطالبات التي تمت معالجتها سابقاً. عندما يبدأ طلب لاحق بنفس تسلسل الرموز، يعيد الموفر استخدام تلك الحالات المخزنة بدلاً من إعادة حسابها -- مما يقلل التكلفة والكمون دون تأثير على جودة المخرجات.

كم يوفر التخزين المؤقت للمطالبات من تكاليف API؟

تتراوح الوفورات بين 50% و90% بحسب الموفر. تقدم OpenAI خصماً بنسبة 50% على رموز الإدخال المخزنة مؤقتاً. تقدم Anthropic خصماً يصل إلى 90% (القراءات المخزنة مؤقتاً بـ 0.1x السعر الأساسي). تقدم Gemini خصماً بنسبة ~90% على القراءات المخزنة مؤقتاً. تعتمد الوفورات الفعلية على معدل الإصابة بذاكرتك المؤقتة وطول المطالبة وتكرار الطلبات.

هل يحدث التخزين المؤقت لمطالبات OpenAI تلقائياً؟

نعم، منذ أكتوبر 2024. أي استدعاء API بأكثر من 1,024 رمز إدخال يستفيد تلقائياً من التخزين المؤقت. لا يوجد opt-in، ولا headers، ولا تغييرات في الكود مطلوبة. تطابق الذاكرة المؤقتة بادئات الرموز من بداية المطالبة.

ما الفرق بين التخزين المؤقت للمطالبات والتخزين المؤقت الدلالي؟

يطابق التخزين المؤقت للمطالبات بادئات الرموز الدقيقة على مستوى GPU -- لا يوجد فقدان في الدقة والمخرجات مطابقة للطلبات غير المخزنة. يستخدم التخزين المؤقت الدلالي تشابه التضمين للعثور على استعلامات سابقة "قريبة بما يكفي" وإعادة استجابات مخزنة -- أسرع لكن يمكن أن يعيد استجابات غير صحيحة أو قديمة. يحلان مشكلات مختلفة جوهرياً.

كم تدوم ذاكرة المطالبة المؤقتة؟

يتفاوت ذلك بحسب الموفر. OpenAI: 5-10 دقائق (حتى 24 ساعة مع الاحتفاظ الممتد). Anthropic: 5 دقائق (افتراضي) أو ساعة (متاح على نماذج Claude 4.5+، يكلف 2x كتابة). Gemini: قابل للتهيئة، الافتراضي ساعة للذاكرات المؤقتة الصريحة. يُدار TTL التخزين المؤقت الضمني تلقائياً من قِبل Google.

ما الحد الأدنى لطول الرمز للتخزين المؤقت للمطالبات؟

OpenAI: 1,024 رمزاً. Anthropic: 1,024 رمزاً لمعظم النماذج الحالية. Gemini: 1,024 رمزاً لنماذج Flash، 4,096 لنماذج Pro. المطالبات دون هذه الحدود لن تُنشِّط التخزين المؤقت -- هذه هي مشكلة "لا يعمل" الأكثر شيوعاً.

هل يعمل التخزين المؤقت للمطالبات مع استجابات البث؟

نعم. يعمل التخزين المؤقت والبث في مراحل مختلفة من الطلب. التخزين المؤقت يسرّع مرحلة الملء المسبق للإدخال؛ البث يسلم رموز الإخراج بشكل تدريجي. كلاهما يعملان في آنٍ واحد، وستلاحظ تحسين TTFT أكثر مع تمكين البث.

متى يجب أن لا أستخدم التخزين المؤقت للمطالبات؟

تجنب الاعتماد على التخزين المؤقت عندما تكون مطالباتك دون الحد الأدنى من الرموز، عندما تتضمن طوابع زمنية أو معرّفات جلسة في موجه النظام، عندما تُدير أمثلة few-shot بين الاستدعاءات، أو عندما تكون الطلبات نادرة جداً للوصول إلى الذاكرة المؤقتة قبل انتهاء صلاحيتها (نافذة 5-10 دقائق لـ OpenAI/Anthropic).

هل يمكنني استخدام التخزين المؤقت للمطالبات مع LangChain أو LiteLLM؟

نعم. يمرر LangChain معاملات التخزين المؤقت الخاصة بالموفر عبر غلافات API الخاصة به. يوفر LiteLLM صيغة تخزين مؤقت موحدة تُنظِّم cache_control لـ Anthropic وOpenAI وGemini وVertex AI وBedrock -- مفيد بشكل خاص لإعدادات متعددة الموفرين.

ما هي إصابة الذاكرة المؤقتة مقابل إخفاقها؟

إصابة الذاكرة المؤقتة تعني أن الموفر وجد بادئة مطابقة في الذاكرة وأعاد استخدام حالات KV المخزنة -- تدفع سعر الرمز المخزن مؤقتاً المخفَّض وتحصل على TTFT أسرع. إخفاق الذاكرة المؤقتة يعني عدم العثور على تطابق، لذا تُعالَج المطالبة الكاملة من الصفر بالسعر القياسي. تحقق من حقول cached_tokens (OpenAI) أو cache_read_input_tokens (Anthropic) أو cachedContentTokenCount (Gemini) في استجابة API لمعرفة أيهما حدث.

الحكم النهائي

الفئةالفائزالسبب الرئيسي
الأسهل إعداداًOpenAIتلقائي، إعداد صفري
أعمق خصمAnthropicخصم 90% على القراءات المخزنة مؤقتاً (0.1x أساسي)
أكبر قدر من التحكمAnthropicنقاط توقف صريحة + TTL لمدة 5 دقائق أو ساعة
الأفضل للمستندات الطويلةGeminiTTL قابل للتهيئة مع كائنات ذاكرة مؤقتة مسمّاة
الأفضل للدردشة متعددة الأدوارOpenAIمطابقة بادئة تلقائية على سجل المحادثة
الأفضل للعوامل/MCPAnthropicتخزين تعريفات الأدوات مؤقتاً صراحةً

التخزين المؤقت للمطالبات هو التحسين الأقل جهداً والأعلى عائداً في مجموعة LLM API. لا تغيّر نموذجك، ولا تضحي بالجودة، والتنفيذ يتراوح بين "لا تفعل شيئاً" (OpenAI) إلى "أضف حقلاً واحداً" (Anthropic) إلى "أنشئ كائن ذاكرة مؤقتة" (Gemini).

ابدأ بالتخزين المؤقت التلقائي لموفرك الحالي. قِس معدل إصابة ذاكرتك المؤقتة باستخدام أداة التسجيل أعلاه. إذا كنت دون 70%، أعد هيكلة مطالباتك (الثابتة أولاً، الديناميكية أخيراً) واستأصل الأنماط المضادة. تشهد معظم الفرق انخفاضاً في التكاليف بنسبة 50-80% في غضون يوم من تنفيذ هذه التغييرات.

المصادر

الوسوم

takhzin-matalib-llmprompt-cachingtakalif-api-llmopenaianthropicgeminikv-cachetatwiir-dhakaa-ishtinaa

شارك هذا المقال

مقالات ذات صلة

المزيد في guides

guides
Jul 28, 2026

الـ9 مقاييس SaaS الوحيدة المهمة في 2026 (بمقارنة مرجعية مع أكثر من 1,300 شركة)

معظم أدلة مقاييس SaaS تستشهد بحدود وُضعت في 2021 ولا تنسبها لأحد. هذا الدليل ينشر تسعة مقاييس بوسطاء CY-2025 من تقارير إصدار 2026، ومقاطع الربع الأعلى، وحجم العينة وراء كل رقم، وستة مقاييس ينبغي التوقف عن تتبعها.

13 دقيقة قراءة قراءة
اقرأ
guides
Jul 28, 2026

قالب وثيقة متطلبات المنتج (PRD) + مثال عملي كامل يمكنك نسخه

معظم قوالب PRD تعطيك نموذجًا فارغًا وتتركك وحدك. هذا القالب يأتي بصيغة ماركداون جاهزة للنسخ، ويملأ الأقسام الاثني عشر جميعها بمثال بناء كامل لبوابة فواتير، ويوضح كيف تتغير الوثيقة نفسها حين يكون القارئ وكيل ذكاء اصطناعي مبرمجًا.

13 دقيقة قراءة قراءة
اقرأ
ابدأ مشروعك

هل أنت مستعد لبناء شيء استثنائي؟

دعنا نحول رؤيتك إلى واقع. فريقنا جاهز لمساعدتك في إنشاء برمجيات تصنع الفرق.