Phase 11: LLM Engineering

التخزين السريع وتخزين السياق

إن طلب نظامك يبلغ 4000 رمز. سياق RAG الخاص بك يبلغ 20,000 رمز. أنت ترسل كلتا مع كل طلب. أنت تدفع أيضاً لكلتا كل مرة. يسمح الاحتفاظ بالخزينة السريعة للمقدم بإبقاء هذا المقبل دافئًا على جانبه ويفرض عليك 10% من معدل العادة الاستخدام. إذا استخدمت بشكل صحيح، فإنه يقلل من تكلفة الاستنتاج بنسبة 5090% وتخفيف التخفيف من الترميز الأول بنسبة 4085%.

Type: Build

Languages: Python

Prerequisites: Phase 11 · 01 (Prompt Engineering), Phase 11 · 05 (Context Engineering), Phase 11 · 11 (Caching and Cost)

Time: ~60 minutes

المشكلة

وكيل التشفير يرسل نفس النظام 15000 رمز على كل جولة من المحادثة$3/M input tokens is $0.90 في تكلفة المدخل وحدها قبل أي من الرسائل الفعلية للمستخدم. مضاعفة بـ 10,000 محادثة يومية والفاتورة تصل إلى 9,000 دولار / يوم للنص الذي لا يتغير أبدا.

لا يمكنك تقليص الإشارة دون إيذاء الجودة. لا يمكنك تجنب إرسالها يحتاجها النموذج في كل مرة. الخطوة الوحيدة هي التوقف عن دفع السعر الكامل لمثبتة رأتها مقدمها بالفعل.

هذه الخطوة هي التخزين الآلي السريع. أطلقتها Anthropic في أغسطس 2024 (مع فترة 1 ساعة تمتد من تتي إل في 2025) ، وأتمتها OpenAI في وقت لاحق من ذلك العام ، وأطلقت Google التخزين السياقي الصريح جنبا إلى جنب مع Gemini 1.5, والثلاثة الآن تقدمها ك ميزة من الدرجة الأولى على نماذجها الحدودية.

المفهوم

!Prompt caching: write once, read cheap

The mechanic.عندما يطابق مقدمة طلب واحد من طلب حديث، يقوم المقدم بتقديم KV-Cache من الجولة السابقة بدلاً من إعادة تشفير الرموز. تدفع قسطًا صغيرًا من الكتابة في المرة الأولى وخصمًا كبيرًا من القراءة في كل مرة بعد ذلك.

Three provider flavors in 2026.

ProviderAPI styleHit discountWrite premiumDefault TTLMin cacheable
AnthropicExplicit cache_control markers on content blocks90% off input25% surcharge5 min (extendable to 1 hour)1,024 tokens (Sonnet/Opus), 2,048 (Haiku)
OpenAIAutomatic prefix detection50% off inputnoneUp to 1 hour (best-effort)1,024 tokens
Google (Gemini)Explicit CachedContent APIStorage-billed; read at ~25% of normalStorage fee per token·hourUser-set (default 1 hour)4,096 tokens (Flash), 32,768 (Pro)

The invariant.كل ثلاثة محاورات التخزين فقط. إذا كان أي رمز يختلف بين الطلبات، كل شيء بعد أول رمز مختلف هو غياب. ضع مستقر الأجزاء في الأعلى، المتغير الأجزاء في الأسفل.

التخطيط الصديق للتخزين

[system prompt]          <-- cache this
[tool definitions]       <-- cache this
[few-shot examples]      <-- cache this
[retrieved documents]    <-- cache if reused, else don't
[conversation history]   <-- cache up to last turn
[current user message]   <-- never cache (different every time)

انتهاك النظام وضع رسالة المستخدم فوق طلب النظام، وتوقف الاستعراضات الديناميكية بين القليل من اللقطات والخزنة الاحتياطية لا تضرب أبدا.

حساب الانسجام

تعني قسيمة كتابة 25% من Anthropic أن بلوك مخزن يجب قراءته مرتين على الأقل لتوفير الأموال الصافية. 1 كتابة + 1 قراءة يبلغ متوسط التكلفة 0.675x لكل طلب (يوفر 32%). 1 كتابة + 10 قراءة يبلغ متوسط 0.205x (يوفر 80%). قاعدة البصمة: حفظ أي شيء تتوقع إعادة استخدامه على الأقل 3 مرات داخل TTL.

بناءها

الخطوة 1: التخزين الآلي للطلبات الإنسانية مع علامات صريحة

pythonimport anthropic

client = anthropic.Anthropic()

SYSTEM = [
    {
        "type": "text",
        "text": "You are a senior Python reviewer. Follow the rubric exactly.\n\n" + RUBRIC_15K_TOKENS,
        "cache_control": {"type": "ephemeral"},
    }
]

def review(code: str):
    return client.messages.create(
        model="claude-opus-4-7",
        max_tokens=1024,
        system=SYSTEM,
        messages=[{"role": "user", "content": code}],
    )
  • نعمcache_controlعلامة تقول أنثروبيك لتخزين الكتلة لمدة 5 دقائق. إعادة استخدام داخل تلك النافذة ضربات؛ إعادة استخدام بعد انتهاء الصلاحية ويكتب مرة أخرى.

Response usage fields:

pythonresponse = review(code_a)
response.usage
# InputTokensUsage(
#     input_tokens=120,
#     cache_creation_input_tokens=15023,   # paid at 1.25x
#     cache_read_input_tokens=0,
#     output_tokens=340,
# )

response_b = review(code_b)
response_b.usage
# cache_creation_input_tokens=0
# cache_read_input_tokens=15023           # paid at 0.1x

تحقق من كلا الحقول في CI إذا cache_read_input_tokensيبقى عند الصفر عبر الطلبات، مفاتيح التخزين الخاصة بك تتحرك.

الخطوة الثانية: تمديد المدة التوقيتية لمدة ساعة واحدة

بالنسبة لموظفات اللحظات طويلة المدى، تنتهي الخمس دقائق المتخلفة بين الوظائف.ttl:

python{"type": "text", "text": RUBRIC, "cache_control": {"type": "ephemeral", "ttl": "1h"}}

تكلفة التسجيل المباشر لمدة ساعة واحدة ضعف قسط الكتابة (50% عن الخط الأساسي بدلاً من 25%) ، ولكن تسترد بسرعة على أي دفعة تستخدم المقبل أكثر من 5 مرات.

الخطوة الثالثة: OpenAI التخزين الآلي

لا يقدم لك OpenAI أي شيء لتكوين. أي مقدمة فوق 1024 رمزا تتطابق مع طلب حديث يحصل على خصم 50٪ تلقائيًا.

pythonfrom openai import OpenAI
client = OpenAI()

resp = client.chat.completions.create(
    model="gpt-5",
    messages=[
        {"role": "system", "content": SYSTEM_PROMPT},   # long and stable
        {"role": "user", "content": user_msg},
    ],
)
resp.usage.prompt_tokens_details.cached_tokens  # the discounted portion

نفس قاعدة التخطيط الصديقة للتخزين القياسية تنطبق. هناك شيئين يقتلون التخزين القياسي OpenAI الذي لا يقتلون التخزين القياسي: تغيير userالحقل (المستخدم ككون مفتاح التخزين) وأدوات إعادة ترتيب.

الخطوة الرابعة: تخزين السياق الصريح التجميلي

التوأم يعامل الجهاز كشيء من الدرجة الأولى يمكنك إنشاءه وتسميته:

pythonfrom google import genai
from google.genai import types

client = genai.Client()

cache = client.caches.create(
    model="gemini-3.8-flash",
    config=types.CreateCachedContentConfig(
        display_name="rubric-v3",
        system_instruction=RUBRIC,
        contents=[FEW_SHOT_EXAMPLES],
        ttl="3600s",
    ),
)

resp = client.models.generate_content(
    model="gemini-3.8-flash",
    contents=["Review this code:\n" + code],
    config=types.GenerateContentConfig(cached_content=cache.name),
)

تتقاضى Gemini التخزين لكل رمز·ساعة طالما أن الكاشة تعمل، وتقرأ عند ~ 25% من معدل إدخال العادي. هذا هو الشكل الصحيح عندما تستخدم نفس الإشارة العملاقة عبر العديد من الجلسات على مدى أيام.

الخطوة 5: قياس معدل الضربة في الإنتاج

انظرcode/main.pyللمحاسب المحاكي الممثل من ثلاثة مزودي يقوم بتتبع حسابات الكتابة / القراءة / الإغفال وحساب التكلفة المختلطة لكل طلبات 1K. تنشر بوابة مع معدل ضرب هدف معظم الإعدادات الإنتاجية الأنثروبية يجب أن ترى > 80% جزء القراءة بعد التدفئة.

الفخاخ التي لا تزال تشغل في عام 2026

  • Dynamic timestamps at the top. "Current time: 2026-04-22 15:30:02"في أعلى طلب النظام كل طلب يفشل، نقلها تحت نقطة كسر التخزين
  • Tool reordering.إعادة تشكيل الأدوات في ترتيب مستقيم
  • Free-text near-duplicates."أنت مفيد". مقابل "أنت مساعد مفيد".
  • Too-small blocks.إنثروبيك يفرض سطحًا من 1,024 رمزًا (2،048 في هايكو). لا يتم تخزين الكتل الصغيرة بصمت.
  • Blind cost dashboards.تقسيم "شعار المدخل" إلى مخزن مخزن مقابل غير مخزن مخزن وإلا فإن انخفاض حركة المرور يبدو وكأنه مكاسب مخزن مخزن.

استخدمها

كومة التخزين الاحتياطي لعام 2026:

SituationPick
Agent with stable 10k+ system prompt, many turnsAnthropic cache_control with 5-min TTL
Batch job reusing a prefix for 30+ minutesAnthropic with ttl: "1h"
Serverless endpoints on GPT-5, no custom infraOpenAI automatic (just make your prefix stable and long)
Multi-day reuse of a giant code/doc corpusGemini explicit CachedContent
Cross-provider fallbackKeep the cacheable prefix layout identical across providers so any hit works

الجمع مع التخزين الآلي (المرحلة 11 · 11) للطبقة الرسالة المستخدم: التخزين الآلي المفاجئ إعادة استخدام الوهم المماثلة ، التخزين الآلي المماثلة * إعادة استخدام المعنى.

أرسله

إنقاذoutputs/skill-prompt-caching-planner.md:

markdown---
name: prompt-caching-planner
description: Design a cache-friendly prompt layout and pick the right provider caching mode.
version: 1.0.0
phase: 11
lesson: 15
tags: [llm-engineering, caching, cost]
---

Given a prompt (system + tools + few-shot + retrieval + history + user) and a usage profile (requests per hour, TTL needed, provider), output:

1. Layout. Reordered sections with a single cache breakpoint marked; explain which sections are stable, which are volatile.
2. Provider mode. Anthropic cache_control, OpenAI automatic, or Gemini CachedContent. Justify from TTL and reuse pattern.
3. Break-even. Expected reads per write within TTL; net cost vs no-cache with math.
4. Verification plan. CI assertion that cache_read_input_tokens > 0 on the second identical request; dashboard split by cached vs uncached tokens.
5. Failure modes. List the three most likely reasons the cache will miss in this setup (dynamic timestamp, tool reorder, near-duplicate text) and how you will prevent each.

Refuse to ship a cache plan that places a dynamic field above the breakpoint. Refuse to enable 1h TTL without a reuse count that makes the 2x write premium pay back.

التمارين

  1. Easy.إجراء محادثة 10 جولات مع طلب نظام 5,000 رمز ضد كلود.cache_controlو بعدها مع. إبلغ فاتورة إدخال رموز لكل واحد.
  2. Medium.اكتب قناة اختبارية، التي، بالنظر إلى نموذج سريع ومسجل طلب، تحسب معدل الوصول المتوقع والوفور بالدولار لكل مزود (Anthropic 5m، Anthropic 1h، OpenAI تلقائي، Gemini صريح).
  3. Hard.قم ببناء محفز التخطيط: إعطاء عرض وعبارة عن قائمة من الحقول المعلنة stable=True/Falseإعادة كتابة الإشارة لإعادة وضع نقطة وقف واحدة في التخزين في أقصى وضع صديقة للتخزين دون فقدان المعلومات. التحقق من نقطة نهاية الأنثروبيك الحقيقية.

الشروط الرئيسية

TermWhat people sayWhat it actually means
Prompt caching"Makes long prompts cheap"Reusing a provider-side KV-cache for matching prefixes; 50-90% discount on repeated input tokens.
cache_control"The Anthropic marker"Content-block attribute that declares "everything up to here is cacheable"; {"type": "ephemeral"}.
Cache write"Paying the premium"The first request that populates the cache; billed at ~1.25x input rate on Anthropic, free on OpenAI.
Cache read"The discount"Subsequent requests matching the prefix; billed at 10% (Anthropic), 50% (OpenAI), ~25% (Gemini).
TTL"How long it lives"Seconds the cache stays warm; Anthropic 5m default (extendable 1h), OpenAI best-effort up to 1h, Gemini user-set.
Extended TTL"1-hour Anthropic cache"{"type": "ephemeral", "ttl": "1h"}; 2x write premium but worth it for batch reuse.
Prefix match"Why my cache missed"Caches only hit when every token from the start up to the breakpoint is byte-identical.
Context caching (Gemini)"The explicit one"Google's named, storage-billed cache object; best for multi-day reuse of large corpora.

المزيد من القراءة

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.