При разработке современных AI-приложений, автономных агентов и чат-ботов разработчики неизбежно сталкиваются с так называемым «налогом на контекст»:

Чтобы модель дала точный и предсказуемый ответ, вы обязаны передавать вместе с каждым пользовательским запросом:

  • Обширный системный промпт с описанием роли и формата вывода (2 000–5 000 токенов).
  • Спецификации OpenAPI / JSON Schema для вызова инструментов (Function Calling) (3 000–10 000 токенов).
  • Контекст предметной области, документацию или фрагменты репозитория (AGENTS.md, .cursorrules) (5 000–30 000 токенов).

В результате в 10-шаговом диалоге одна и та же статическая информация отправляется на сервер 10 раз подряд, превращая 20 000 токенов в 200 000 оплачиваемых единиц.

Технология Prompt Caching полностью решает эту проблему.


1. Как устроен Prompt Caching под капотом

В архитектуре Transformer обработка входящего текста (Prefill Phase) требует вычисления так называемых матриц Key и Value (KV-кэш) для каждого входного токена на тензорных ядрах видеокарт.

[Запрос 1]  [Статичный префикс (20 000 токенов)] + [Вопрос А]
            └──────────────┬──────────────────┘
                           ▼
            Вычисление KV-кэша на GPU (100% стоимости, задержка 1200мс)
                           │
                           ▼
            Сохранение состояния KV-кэша в HBM/DRAM кластера

[Запрос 2]  [Статичный префикс (20 000 токенов)] + [Вопрос Б]
            └──────────────┬──────────────────┘
                           ▼
            МГНОВЕННОЕ ЧТЕНИЕ ИЗ КЭША (Скидка 88%, задержка 180мс)

Когда следующий запрос начинается с того же самого префикса, инференс-сервер не пересчитывает математику внимания заново, а сразу загружает готовые матрицы из памяти.


2. Экономика в рублях: сравнение тарифов

В шлюзе RunGate AI Gateway (api.rungate.ru/v1) скидка за кэшированные токены транслируется напрямую клиенту:

Модель Входящие токены (без кэша, за 1M) Кэшированные токены (Кэш-хит, за 1M) Экономия
Claude 3.7 Sonnet 350 ₽ 35 ₽ 90%
Claude 3.5 Haiku 95 ₽ 9.5 ₽ 90%
GPT-4o 300 ₽ 150 ₽ 50%
DeepSeek V3 25 ₽ 6.5 ₽ 74%
Gemini 2.0 Flash 35 ₽ 8.7 ₽ 75%

При активной разработке через агенты (Cursor Composer, Claude Code CLI или собственный бэкенд) средний процент попадания в кэш (Cache Hit Rate) составляет от 72% до 88%. Это снижает суммарные расходы на API в 2.5–4 раза.


3. Золотое правило формирования промпта: Стабильный Префикс

Кэширование работает строго по принципу совпадения байтового префикса от начала текста. Если вы измените хотя бы один символ в начале промпта, весь последующий кэш будет инвалидирован.

❌ Как делать НЕЛЬЗЯ (кэш ломается при каждом запросе):

[
  { "role": "system", "content": "Текущее время: 2026-11-09 20:45:12. Ты AI-ассистент..." },
  { "role": "system", "content": "Документация проекта на 15 000 слов..." }
]

Почему это плохо: Динамический таймстемп в самом начале меняется каждую секунду, из-за чего многотысячная документация за ним никогда не попадет в кэш.

✓ Как делать ПРАВИЛЬНО (99% кэш-хитов):

[
  { "role": "system", "content": "Ты AI-ассистент компании... [Постоянные правила роли]" },
  { "role": "system", "content": "Документация API, схемы БД, правила кода [Статичный контент]" },
  { "role": "user", "content": "[Динамический контекст: время, ID сессии, вопрос пользователя]" }
]

4. Пример подключения к RunGate Gateway с кэшированием

Подключение через стандартную библиотеку OpenAI на Python не требует никаких сторонних пакетов:

import os
from openai import OpenAI

# Подключение к рублевому шлюзу RunGate
client = OpenAI(
    base_url="https://api.rungate.ru/v1",
    api_key=os.environ.get("RUNGATE_API_KEY", "sk-rg-...")
)

response = client.chat.completions.create(
    model="claude-3-7-sonnet",
    messages=[
        {
            "role": "system",
            "content": "Ты ведущий архитектор... " + ("Большая неизменяемая документация " * 200)
        },
        {
            "role": "user",
            "content": "Напиши метод авторизации пользователей через JWT."
        }
    ]
)

# Проверяем телеметрию кэша в ответе:
usage = response.usage
print(f"Всего входных токенов: {usage.prompt_tokens}")
if hasattr(usage, "prompt_tokens_details"):
    cached = usage.prompt_tokens_details.cached_tokens
    print(f"Из них считано из кэша (со скидкой 88%): {cached} токенов")

При первом запуске cached_tokens будет равен 0 (запись в кэш). При каждом последующем обращении в течение 5 минут все 20 000+ токенов системного описания будут обработаны по тарифу 35 ₽ за миллион вместо 350 ₽, а генерация начнется практически мгновенно.

Выпустить ключ sk-rg-... и пополнить баланс в рублях через СБП можно прямо сейчас в консоли RunGate Gateway.