Перейти к основному содержимому

Prompt Caching

Экономия до 90% на повторяющихся промптах.

Что такое Prompt Caching

Prompt Caching позволяет переиспользовать начало промпта между запросами, экономя токены.

Запрос 1:
[Системный промпт 5000 токенов] + [Вопрос 1: 50 токенов]
→ Cache MISS: оплата 5050 токенов (полная цена)
→ Промпт закэширован

Запрос 2:
[Тот же системный промпт 5000 токенов] + [Вопрос 2: 50 токенов]
→ Cache HIT: оплата 50 токенов полная + 5000 со скидкой 90%

Поддержка

ПровайдерПоддержкаСкидка
Anthropic90%
OpenAI50%
OpenRouterЗависит от моделиVaries
GigaChat
YandexGPT

Цены кэширования (Anthropic)

Для Claude моделей:

ОперацияМножительЦена для Sonnet 4.5
Обычный input1.0x$1.50/1M
Cache write1.25x$1.875/1M
Cache read0.10x$0.15/1M

Как работает

Первый запрос (Cache MISS)

response = client.chat.completions.create(
model="anthropic/claude-sonnet-4-5-20250929",
messages=[
{
"role": "system",
"content": LARGE_SYSTEM_PROMPT # 5000 токенов
},
{"role": "user", "content": "Вопрос 1"}
]
)

Биллинг:

  • System prompt: 5000 × $1.875/1M (cache write) = $0.009375
  • User message: 50 × $1.50/1M = $0.000075
  • Input итого: $0.00945

Следующие запросы (Cache HIT)

response = client.chat.completions.create(
model="anthropic/claude-sonnet-4-5-20250929",
messages=[
{
"role": "system",
"content": LARGE_SYSTEM_PROMPT # Тот же самый!
},
{"role": "user", "content": "Вопрос 2"} # Новый вопрос
]
)

Биллинг:

  • System prompt: 5000 × $0.15/1M (cache read) = $0.00075
  • User message: 50 × $1.50/1M = $0.000075
  • Input итого: $0.000825 (экономия 91%!)

Usage в ответе

{
"usage": {
"prompt_tokens": 5050,
"completion_tokens": 200,
"cache_creation_input_tokens": 5000, // Cache write
"cache_read_input_tokens": 0 // Cache read
}
}

При следующем запросе:

{
"usage": {
"prompt_tokens": 5050,
"completion_tokens": 150,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 5000 // Из кэша!
}
}

Условия кэширования

Минимальный размер

МодельМинимум токенов
Claude 3+1024

Промпты меньше минимума не кэшируются.

Время жизни кэша

  • Anthropic: 5 минут неактивности
  • При каждом использовании TTL обновляется

Что кэшируется

Кэшируется точное совпадение начала промпта:

✅ Кэшируется (одинаковый system prompt):
[System: "Ты помощник..."] + [User: "Вопрос 1"]
[System: "Ты помощник..."] + [User: "Вопрос 2"]

❌ НЕ кэшируется (разный system prompt):
[System: "Ты помощник..."] + [User: "Вопрос 1"]
[System: "Ты эксперт..."] + [User: "Вопрос 2"]

Паттерны использования

RAG с контекстом

# Статичный контекст (кэшируется)
BASE_CONTEXT = """
Ты ассистент компании XYZ.
Вот база знаний:
[... 10000 токенов документации ...]
"""

# Динамический запрос
def ask_question(question):
return client.chat.completions.create(
model="anthropic/claude-sonnet-4-5-20250929",
messages=[
{"role": "system", "content": BASE_CONTEXT},
{"role": "user", "content": question}
]
)

# Первый запрос - cache write
ask_question("Как оформить возврат?")

# Следующие запросы - cache read (90% скидка)
ask_question("Какие способы оплаты?")
ask_question("Время доставки?")

Чат-бот с инструкциями

SYSTEM_INSTRUCTIONS = """
Ты саппорт-бот. Правила:
1. Всегда вежливо приветствуй
2. Если не знаешь ответ - переводи на оператора
3. Используй markdown для форматирования
[... еще 2000 токенов инструкций ...]
"""

def chat(history, user_message):
return client.chat.completions.create(
model="anthropic/claude-sonnet-4-5-20250929",
messages=[
{"role": "system", "content": SYSTEM_INSTRUCTIONS},
*history,
{"role": "user", "content": user_message}
]
)

Анализ документов

def analyze_with_template(document):
# Шаблон анализа (кэшируется)
ANALYSIS_TEMPLATE = """
Проанализируй документ по критериям:
1. Структура (оглавление, разделы)
2. Качество текста
3. Соответствие стандартам
[... детальные инструкции 3000 токенов ...]
"""

return client.chat.completions.create(
model="anthropic/claude-sonnet-4-5-20250929",
messages=[
{"role": "system", "content": ANALYSIS_TEMPLATE},
{"role": "user", "content": f"Документ:\n{document}"}
]
)

Экономика кэширования

Пример: 100 запросов в час

Без кэширования:

  • 100 × 5000 токенов × $1.50/1M = $0.75

С кэшированием:

  • 1 cache write: 5000 × $1.875/1M = $0.009375
  • 99 cache reads: 99 × 5000 × $0.15/1M = $0.074
  • Итого: $0.083 (экономия 89%)

Break-even point

Кэширование выгодно начиная со 2-го запроса с тем же промптом:

ЗапросовБез кэшаС кэшемЭкономия
1$0.0075$0.009375-25%
2$0.015$0.01012533%
5$0.0375$0.01237567%
10$0.075$0.01612578%
100$0.75$0.08389%

Рекомендации

✅ Когда использовать

  • Статичные system prompts
  • RAG с фиксированным контекстом
  • Многопользовательские чат-боты с общими инструкциями
  • Batch обработка с одинаковым шаблоном

❌ Когда НЕ использовать

  • Уникальные промпты каждый запрос
  • Очень короткие промпты (< 1024 токенов)
  • Редкие запросы (реже чем раз в 5 минут)

Мониторинг

Отслеживайте эффективность кэширования:

def log_cache_efficiency(response):
usage = response.usage
cache_read = getattr(usage, 'cache_read_input_tokens', 0)
cache_write = getattr(usage, 'cache_creation_input_tokens', 0)
total = usage.prompt_tokens

if cache_read > 0:
efficiency = cache_read / total * 100
print(f"Cache HIT: {efficiency:.1f}% from cache")
elif cache_write > 0:
print(f"Cache MISS: {cache_write} tokens cached")