Кэширование промптов

POST /v1/chat/completions prompt_tokens_details.cached_tokens

Некоторые модели автоматически кэшируют повторяющиеся префиксы промпта. Если начало вашего запроса совпадает с предыдущим (системный промпт, длинный контекст, база знаний), провайдер отдаёт эту часть из кэша по сниженной цене — обычно 10–50% от обычной стоимости входных токенов.

Кэш срабатывает автоматически — никаких дополнительных параметров в запросе не нужно. Минимальный размер кэшируемого префикса зависит от провайдера (обычно от 1 024 токенов).

Как узнать, сработал ли кэш

В ответе API поле usage.prompt_tokens_details.cached_tokens показывает, сколько входных токенов было взято из кэша:

{
  "usage": {
    "prompt_tokens": 5000,
    "completion_tokens": 200,
    "total_tokens": 5200,
    "prompt_tokens_details": {
      "cached_tokens": 4800
    }
  }
}

В этом примере 4 800 из 5 000 входных токенов были взяты из кэша — вы заплатили за них по сниженной ставке.

Пример

from openai import OpenAI

client = OpenAI(
    api_key="rp_ваш_api_ключ",
    base_url="https://api.modelgate.ru/v1"
)

long_system = "Ты эксперт по Python. " * 500  # длинный системный промпт

# Первый запрос — кэш ещё не заполнен
r1 = client.chat.completions.create(
    model="deepseek-v3.2",
    messages=[
        {"role": "system", "content": long_system},
        {"role": "user", "content": "Что такое декораторы?"}
    ]
)

# Второй запрос с тем же системным промптом — попадание в кэш
r2 = client.chat.completions.create(
    model="deepseek-v3.2",
    messages=[
        {"role": "system", "content": long_system},
        {"role": "user", "content": "Что такое генераторы?"}
    ]
)

details = r2.usage.prompt_tokens_details
print(f"Из кэша: {details.cached_tokens} токенов")  # например: 4800
import OpenAI from 'openai';

const client = new OpenAI({
    apiKey: 'rp_ваш_api_ключ',
    baseURL: 'https://api.modelgate.ru/v1',
});

const longSystem = 'Ты эксперт по Python. '.repeat(500);

// Первый запрос — кэш ещё не заполнен
await client.chat.completions.create({
    model: 'deepseek-v3.2',
    messages: [
        { role: 'system', content: longSystem },
        { role: 'user', content: 'Что такое декораторы?' },
    ],
});

// Второй запрос с тем же системным промптом — попадание в кэш
const r2 = await client.chat.completions.create({
    model: 'deepseek-v3.2',
    messages: [
        { role: 'system', content: longSystem },
        { role: 'user', content: 'Что такое генераторы?' },
    ],
});

console.log(`Из кэша: ${r2.usage.prompt_tokens_details.cached_tokens} токенов`);
curl -X POST https://api.modelgate.ru/v1/chat/completions \
  -H "Authorization: Bearer rp_ваш_api_ключ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v3.2",
    "messages": [
      {"role": "system", "content": "Длинный системный промпт..."},
      {"role": "user", "content": "Вопрос"}
    ]
  }' | jq '.usage.prompt_tokens_details'

Где видно статистику

Данные о кэшировании отображаются в личном кабинете:

  • Каталог моделей — на странице модели в таблице «Цены у провайдеров» отображается колонка «Кэш» с ценой за кэшированные токены (там, где провайдер её поддерживает).
  • Статистика — карточка «Сэкономлено на кэше» и колонка «Кэш» в таблице по моделям.
  • Логи — колонка «Кэш» в каждом запросе и фильтр «Только с кэшем».
  • Встроенный чат — бейдж под каждым ответом показывает количество кэшированных токенов.

Совместимость

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