Кэш промпта и привязка сессии
Для моделей с поддержкой кэша длинный статичный контекст — системный промпт, база знаний, история переписки — можно закэшировать: ответ приходит быстрее, а входные токены обходятся до 90% дешевле. Маршрутизация с привязкой сессии удерживает высокий процент попаданий в кэш.
#1. Как это работает
Обычный шлюз тарифицирует весь ввод при каждом запросе. Модели с кэшированием промпта работают иначе: если начало запроса совпадает с предыдущим, данные читаются из кэша провайдера и стоят в разы дешевле.
- Запись в кэш (Cache Write): при первом запросе (или после истечения кэша) контекст целиком уходит в модель и кэш создаётся. Этот этап тарифицируется по цене записи — обычно она равна обычному вводу или чуть выше.
- Чтение из кэша (Cache Read): последующие запросы с тем же началом читают кэш, и цена падает — вплоть до 1/10 обычного ввода.
#2. Маршрутизация с привязкой сессии
Шлюз распределяет запросы между несколькими каналами и ключами ради балансировки нагрузки. Если каждый следующий запрос уходит в случайный канал, кэш не сработает никогда.
Поэтому в Sozdai есть **маршрутизация с привязкой сессии**:
хэш вашего первого сообщения становится ключом привязки. Пока модель и первое сообщение те же, шлюз **направляет все последующие запросы в тот же канал и на тот же ключ** — кэш на стороне провайдера остаётся «тёплым», а процент попаданий резко растёт.
#3. Как включить
Включить кэширующую маршрутизацию можно двумя способами:
- Заголовок: добавьте к запросу `x-corry-cache: true`.
- Синтаксис Anthropic: как и при обычном вызове Anthropic, поставьте в блоке содержимого метку
{ "type": "ephemeral" }.
{
"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`:
{
"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
}
}
}