Sozdai LogoDocs
Начало/Advanced

Кэш промпта и привязка сессии

Для моделей с поддержкой кэша длинный статичный контекст — системный промпт, база знаний, история переписки — можно закэшировать: ответ приходит быстрее, а входные токены обходятся до 90% дешевле. Маршрутизация с привязкой сессии удерживает высокий процент попаданий в кэш.

#1. Как это работает

Обычный шлюз тарифицирует весь ввод при каждом запросе. Модели с кэшированием промпта работают иначе: если начало запроса совпадает с предыдущим, данные читаются из кэша провайдера и стоят в разы дешевле.
- Запись в кэш (Cache Write): при первом запросе (или после истечения кэша) контекст целиком уходит в модель и кэш создаётся. Этот этап тарифицируется по цене записи — обычно она равна обычному вводу или чуть выше.
- Чтение из кэша (Cache Read): последующие запросы с тем же началом читают кэш, и цена падает — вплоть до 1/10 обычного ввода.

#2. Маршрутизация с привязкой сессии

Шлюз распределяет запросы между несколькими каналами и ключами ради балансировки нагрузки. Если каждый следующий запрос уходит в случайный канал, кэш не сработает никогда.
Поэтому в Sozdai есть **маршрутизация с привязкой сессии**:
хэш вашего первого сообщения становится ключом привязки. Пока модель и первое сообщение те же, шлюз **направляет все последующие запросы в тот же канал и на тот же ключ** — кэш на стороне провайдера остаётся «тёплым», а процент попаданий резко растёт.

#3. Как включить

Включить кэширующую маршрутизацию можно двумя способами:

  1. Заголовок: добавьте к запросу `x-corry-cache: true`.
  2. Синтаксис Anthropic: как и при обычном вызове Anthropic, поставьте в блоке содержимого метку { "type": "ephemeral" }.

json
{
  "model": "claude-3-5-sonnet",
  "messages": [
    {
      "role": "system",
      "content": [
        {
          "type": "text",
          "text": "...(very long developer guidelines or database schemas)...",
          "cache_control": { "type": "ephemeral" }
        }
      ]
    },
    { "role": "user", "content": "Query statistics for May." }
  ]
}

#4. Статистика попаданий

При попадании в кэш в ответе внутри объекта `usage` появляется поле `cached_tokens`:

json
{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "model": "claude-3-5-sonnet",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Here is the summary of the database schema..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 5120,
    "completion_tokens": 150,
    "total_tokens": 5270,
    "prompt_tokens_details": {
      "cached_tokens": 4096
    }
  }
}