lenec ru

← все посты

Tailwind CSS vs CSS Modules: что выбрать для React-проекта в 2026

14K

Если ваше приложение отправляет одинаковый 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-приложений. Не требует изменения логики, только правильной структуры: статика в начале, динамика в конце. При высоком трафике экономия — тысячи долларов в месяц.

Комментарии 0

  • Будьте первым, кто оставит комментарий.

Войдите, чтобы оставить комментарий.