Перейти до вмісту
Кешування запитів

Кешування запитів

АВТОМАТИЧНО

Хостингові open-weight моделі автоматично кешують повторювані префікси запитів. Якщо запит починається з того самого системного промпту, інструментів та попередніх повідомлень, що й нещодавній запит на тій самій моделі, цей спільний префікс зчитується з кешу і тарифікується як 25% від ціни входу моделі. Активувати нічого не потрібно, запис у кеш безкоштовний.

Як це працює

  • Префікс за порядком — Запит зчитується по порядку: системний промпт, визначення інструментів, потім повідомлення. Кеш збігається від початку цієї послідовності до першого токена, що відрізняється.
  • Що вважається «потраплянням» (hit) — Запит, промпт якого починається з того самого контенту, що й нещодавній запит — зазвичай це попередній хід тієї самої розмови з додаванням нових повідомлень. Префікс, що збігається, є кешованим входом; все після нього — звичайним входом.
  • Гранулярність — Кеш зберігає промпт блоками по 1,568 токенів, тож промпт коротший за приблизно 1,500 токенів не кешується. Кількість кешованих токенів у відповіді — це кількість ваших вхідних токенів, помножена на кешовану частку промпту, із округленням униз. Вона не обов'язково кратна розміру блоку.
  • Без потрапляння — Запит, початку якого немає в кеші, тарифікується за звичайним тарифом входу. Строк життя кешованих промптів не публікується, і потрапляння не гарантоване: дивіться usage, щоб побачити, що запит узяв із кешу.
  • Без перемикача — Запит не вмикає кешування, і жодне поле його не вимикає.
  • Які моделі — Усі хостингові open-weight ID. GET /v1/models повідомляє capabilities.prompt_caching: true та pricing.cached_input_per_million_usd для них. Моделі Shannon мають єдиний фіксований тариф.

Як побачити кеш-потрапляння у відповіді

Надішліть два запити, що починаються з одного довгого системного промпту, і виведіть usage кожного. Перше число — вхід запиту, друге — частина його, прочитана з кешу.

from openai import OpenAI

client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.shannon-ai.com/v1")

handbook = open("handbook.txt").read()  # a long text that stays the same


def ask(question):
    response = client.chat.completions.create(
        model="Kimi-K3-3BIT-REAP",
        messages=[
            {"role": "system", "content": handbook},
            {"role": "user", "content": question},
        ],
    )
    usage = response.usage
    print(usage.prompt_tokens, usage.prompt_tokens_details.cached_tokens)


ask("What is the refund policy?")
ask("Who approves travel?")  # same start: read the second number

Ціноутворення

Кешовані вхідні токени тарифікуються як 25% від вартості входу моделі, округлено до $0.001 за 1M. Запис у кеш не коштує нічого додатково, а вихід тарифікується як зазвичай. Кешований тариф для кожного ID вказано в таблиці Models & pricing. Моделі та ціни

Вхід виклику тарифікується як (вхід − кешований) × тариф входу + кешований × тариф кешу. Кількість кешованих токенів ніколи не перевищує кількість вхідних.

Модель Вхід / 1M Кешований вхід / 1M
DeepSeek-V4-Pro-0813-3BIT-REAP $1.95 $0.488
GLM-5.2-3BIT-REAP $0.73 $0.183
Kimi-K3-3BIT-REAP $3.83 $0.958
Nemotron3Ultra-3BIT-REAP $0.75 $0.188
MiniMax-M3-3BIT-REAP $0.50 $0.125
DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP $0.50 $0.125
Kimi-K2.6-W4A16-AUTOROUND-REAP $0.78 $0.195
Laguna-S-2.1-W4A16-AUTOROUND-REAP $0.50 $0.125
inkling-W4A16-AUTOROUND-REAP $1.42 $0.355
MiMo-V2.5-Pro-W8A16 $0.50 $0.125
MiMo-V2.5-W8A16 $0.50 $0.125
Hy3-W8A16 $0.50 $0.125

Журнал використання показує кешований вхід кожного виклику. Його тарифіковані токени та вартість уже враховують тариф кешу. Ключі та використання

Поля використання

Ендпоінт Кешований вхід Міркування (Reasoning)
/v1/chat/completions usage.prompt_tokens_details.cached_tokens — частина prompt_tokens usage.completion_tokens_details.reasoning_tokens — частина completion_tokens
/v1/responses usage.input_tokens_details.cached_tokens — частина input_tokens usage.output_tokens_details.reasoning_tokens — частина output_tokens
/v1/messages usage.cache_read_input_tokens — звітується окремо: input_tokens — некешована частина; cache_creation_input_tokens завжди 0 мислення (thinking) враховується в output_tokens
{
  "usage": {
    "prompt_tokens": 20000,
    "completion_tokens": 812,
    "total_tokens": 20812,
    "prompt_tokens_details": {
      "cached_tokens": 18000
    },
    "completion_tokens_details": {
      "reasoning_tokens": 604
    }
  }
}

Відповідь у стрімі містить ті самі поля у своєму завершальному usage. Просити про це не потрібно:

Ендпоінт Де надходить usage
/v1/chat/completions usage в останньому фрагменті перед data: [DONE]. Надсилається в кожному стрімі.
/v1/responses response.usage події response.completed.
/v1/messages usage події message_delta. usage у message_start містить нулі.

Як збільшити кількість кеш-потраплянь

  • Зберігайте системний промпт та визначення інструментів байт-в-байт стабільними між викликами. Розміщуйте значення, що змінюються для кожного виклику (наприклад, мітки часу або ID запитів), у кінці останнього повідомлення, а не в системному промпті.
  • Тільки додавайте нове до історії. Редагування, обрізання або резюмування попередніх ходів змінює префікс, і все після першої зміни тарифікується як звичайний вхід.
  • Не змінюйте порядок інструментів, повідомлень або блоків контенту між викликами та серіалізуйте JSON (схеми інструментів, аргументи та результати) однаково щоразу.
  • Лишайтеся на одному id моделі протягом розмови та надсилайте наступний виклик невдовзі після попереднього.

API зберігає початок розмови стабільним у таких випадках:

  • Повідомлення system або developer, надіслане пізніше в розмові, залишається на своєму місці. Воно не змінює початок промпту, тож ходи перед ним лишаються кешованими.
  • Аргументи викликів інструментів у попередніх ходах асистента порівнюються за значенням. Порядок ключів і пробіли в цьому JSON не мають значення.
  • Три ендпоінти читають розмову однаково. Розмова, продовжена на іншому ендпоінті, зберігає спільний префікс, якщо вміст той самий.

Поля запиту

Приймаються prompt_cache_key (для Chat Completions та Responses) та cache_control у блоках контенту Messages, тому існуючий код клієнта працює без змін. Жодне з них не є обов'язковим: кешування автоматичне і працює так само й без них.

Поле Куди надсилається Що це
prompt_cache_key /v1/chat/completions, /v1/responses Ключ маршрутизації кешу в API OpenAI.
cache_control /v1/messages Точка кешу (cache breakpoint) на блоці вмісту, блоці system або повідомленні в API Anthropic.
stream_options /v1/chat/completions include_usage просить API OpenAI надати usage у стрімі. Тут кожен стрім завершується usage.

Підрахунок токенів

Два безкоштовні ендпоінти, POST /v1/tokenize і POST /v1/messages/count_tokens, підраховують токени тексту або всього запиту для хостованих open-weight моделей до того, як ви його надішлете. Вони мають окрему сторінку: Підрахунок токенів