Tailwind CSS vs CSS Modules: что выбрать для React-проекта в 2026
Если ваше приложение отправляет одинаковый system prompt в каждом запросе к LLM — вы платите за одни и те же токены снова и снова. Prompt caching решает проблему: провайдер кэширует обработанный префикс и при повторных запросах не пересчитывает его. Результат — до 90% экономии и двукратное ускорение.
Что такое prompt caching
Prompt caching — механизм, при котором LLM-провайдер сохраняет внутреннее представление (KV-cache) для повторяющейся начальной части промпта. При следующем запросе с тем же префиксом модель не пересчитывает attention для кэшированных токенов.
Поддержка у провайдеров:
- OpenAI — автоматический prefix caching для GPT-4o. Скидка 50% на cached tokens.
- Anthropic — явный cache control через
cache_control: {"type": "ephemeral"}. Скидка 90% на cached input. - Google — Context Caching API для Gemini. Cached content с TTL.
Как работает: KV-cache под капотом
Transformer вычисляет Key и Value матрицы для каждого токена на каждом слое — самая дорогая часть inference. Prompt caching сохраняет эти матрицы:
- Первый запрос — полный расчёт, KV-cache сохраняется (cache write)
- Последующие запросы с тем же префиксом — KV-cache загружается (cache read)
- Модель вычисляет attention только для новых токенов
Чем длиннее кэшированный префикс — тем больше экономия. System prompt 2000 токенов + few-shot 3000 = 5000 токенов, которые не пересчитываются.
Экономия: расчёт на примере
# Anthropic Claude — цены за 1M токенов
system_tokens = 4000
user_tokens = 500
# Без кэша: $3.00/1M input
cost_normal = (4000 + 500) * 3.00 / 1_000_000 # $0.0135
# С кэшем: $0.30/1M для cached, $3.00 для новых
cost_cached = (4000 * 0.30 + 500 * 3.00) / 1_000_000 # $0.0027
# При 100k запросов/день: $1350 vs $270 — экономия $1080/день
Практика: структурируем промпт для cache hit
Ключевое правило: кэшируется только непрерывный префикс. Всё, что меняется, — в конце.
import anthropic
client = anthropic.Anthropic()
# Статическая часть — кэшируется
system_message = {
"type": "text",
"text": "Ты — эксперт по анализу кода. Правила: ...(2000 слов)...",
"cache_control": {"type": "ephemeral"}
}
few_shot_examples = {
"type": "text",
"text": "Пример 1: ... Пример 2: ...(3000 слов)...",
"cache_control": {"type": "ephemeral"}
}
# Динамическая часть — всегда в конце
user_code = "def calculate_total(items): ..."
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
system=[system_message, few_shot_examples],
messages=[{"role": "user", "content": user_code}]
)
# Проверяем cache hit
print(response.usage.cache_read_input_tokens) # 5000 — кэш сработал
Для OpenAI кэширование автоматическое — достаточно отправлять запросы с одинаковым system prompt. Cached tokens видны в response.usage.prompt_tokens_details.cached_tokens.
Замеры: latency и cost
Реальные замеры на Claude Sonnet с system prompt 4000 токенов:
- Без кэша — TTFT: 1.8s, cost: $0.0135/запрос
- С кэшем — TTFT: 0.9s, cost: $0.0027/запрос
- Результат: 2x по latency, 5x по стоимости
На GPT-4o: cached tokens стоят 50% от обычной цены, latency снижается пропорционально доле кэшированных токенов, кэш живёт 5-10 минут.
Ограничения и подводные камни
- Минимальная длина — OpenAI кэширует от 1024 токенов, Anthropic от 1024 (Sonnet) или 2048 (Haiku). Короткие промпты не кэшируются.
- TTL — кэш живёт 5-10 минут (OpenAI) или до конца сессии (Anthropic). Редкие запросы не попадут в кэш.
- Точное совпадение — любое изменение в кэшированном блоке инвалидирует кэш. Даже лишний пробел.
- Cache write дороже — у Anthropic первый запрос стоит на 25% дороже обычного. Окупается со второго.
- Только префикс — нельзя кэшировать середину промпта. Статика всегда в начале.
Prompt caching — одна из самых простых оптимизаций LLM-приложений. Не требует изменения логики, только правильной структуры: статика в начале, динамика в конце. При высоком трафике экономия — тысячи долларов в месяц.