Skip to content

Рівні моделі та кеш початку запиту

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

Два рівні

Виклик може сказати, якого класу моделі робота заслуговує, замість того щоб називати модель:

рівеньмодельдля чого
simpleANTHROPIC_MODEL_SIMPLEclaude-haiku-4-5звичайне питання та службова робота: стиснення довгої розмови, оцінка того, чого питання заслуговує
smart (за замовчуванням для виклику без рівня)ANTHROPIC_MODELclaude-opus-4-8справжня багатокрокова робота
geniusANTHROPIC_MODEL_GENIUSclaude-opus-5рідке питання, де все завдання — глибоке міркування

З AGNT2-367 ці ж три рівні бачить команда: у її налаштуваннях — найвищий рівень, до якого можуть дійти її агенти, у межах тарифу. Кожен хід людини оцінюється на simple, і вердикт опускається до цієї стелі — стеля, а не точка старту.

Явно названа модель б'є рівень: модель — це твердження про один виклик, а рівень — про вид роботи.

Рівень, який не вдалося розв'язати, відмовляє. Він не бере тихо основну модель: такий збій повертає цілком правильну відповідь, нічого не пише в лог, не валить жодного тесту й спливає лише в рахунку, місяці по тому. Тому дешевий рівень має значення за замовчуванням, і інсталяція, що його обнулила, отримує відмову на першому ж виклику замість мовчазного рахунку.

Витрата записується на ту модель, яка реально спрацювала, а не на ту, яку той, хто викликає, назвав би. Ціна — за модель, тож лише там економія взагалі видна.

Кеш початку запиту — більший із двох

Кожне повідомлення агентові раніше пересилало наново одне й те саме: опис усіх його інструментів, правила майданчика й те, що він уміє. На справжній розмові це майже дев'ять десятих усього, за що ми платимо, і від повідомлення до повідомлення воно не змінюється.

Постачальник уміє запам'ятати цей початок і віддавати його приблизно вдесятеро дешевше. Можливість була написана тут місяцями раніше й вмикалася рівно для одного викликача — індексації знань. Хід самого агента, що трапляється на кожне повідомлення й несе найбільший промпт у продукті, не користувався нею ніколи. Тепер користується.

Скільки це заощаджує

Виміряно двічі, незалежно, на одній і тій самій розмові з чотирьох ходів, справжніми викликами claude-haiku-4-5, за цінами, порахованими з власних рядків витрати продукту:

вхідзапис у кешчитання з кешувихідціна
до58 36700313$0,0599
після, кеш холодний5 94910 44741 788268$0,0245 — −59,1 %
після, кеш теплий5 923052 235240$0,0123 — −79,4 %

Обидва числа справжні, і означають вони різне. Холодний — це розмова, що починається з порожнього кешу: вона один раз платить надбавку за запис. Теплий — це кожна наступна розмова, поки збережений початок ще живий. Називати лише друге — означає забрати оптимістичну половину.

Пастка й де стоїть позначка

Запис у кеш коштує дорожче за звичайний ввід. Тому, якби початок промпта змінювався від ходу до ходу, ми платили б надбавку за запис щоразу й ніколи нічого не зчитували б назад — стало б дорожче, а не дешевше.

Тому позначка стоїть рівно на межі між тим, що повторюється, і тим, що ні:

вище позначки — зберігаєтьсянижче позначки — іде наново кожен хід
власні інструкції майданчиканотатки, які хід пригадав
як влаштована машинерія цього агента — випливає з його типу й того, що відкрив власникуривки знань, підтягнуті під це питання
що відомо про співрозмовника
місцевий час людини
особистість агента, завжди останньою

Особистість агента — НИЖЧЕ позначки, і це дивує. Усередині розмови вона не змінюється, тому здається, що їй місце вгорі, — але промпт має один порядок, і особистість лежить під шарами, які хід пригадує, а вони змінюються. Позначка не вміє перестрибнути через те, що між ними. Отже, правка особистості агента кеш не скидає. Коштує це приблизно 230 токенів із ~10 600, які тримає голова, — близько 2 %, бо набір інструментів, який постачальник тримає перед системним промптом, — це 9 700 з них.

Промпт, який бачить модель, побайтово однаковий в обох випадках: позначка його розрізає, а не переписує. На першому ході того самого заміру старе плече нарахувало 10 927 токенів входу, а нове — 480 входу плюс 10 447 запису: ті самі 10 927.

Чого це коштує, чесно

Одиничний хід, після якого нічого не відбувається, подорожчав приблизно на 22 %: він платить надбавку за запис, і результат ніхто ніколи не зчитує. Це властивість механізму, а не дефект. Нормальний випадок — розмови, і виграє саме він.

Звідки ці числа

Варто знати, перш ніж на них посилатися. Три цифри вище виміряні двічі на одній і тій самій розмові з чотирьох ходів — автором зміни і, незалежно, його рецензентом, — і обидва прогони лежать у звітах на AGNT2-376, які прилінковані з тієї картки і в репозиторії їх немає. 3,4× для ротації на кожен запит — зі звіту AGNT2-366, тим самим порядком.

Що в репозиторії є — це місце, звідки почалося дослідження: specs/AGNT2-369-openrouter-or-own-keys/research.md, де можливість знайшли написаною й неввімкненою і спрогнозували 56,4 %. Це прогноз, а не замір, і він нижчий за обидві цифри вище — читайте його заради міркування, а не заради чисел.

Що це означає для каруселі ключів

Кеш у постачальника належить тій робочій області, якій належить ключ, а кожен ключ — це робоча область. Отже, ротація на інший ключ означає холодний старт.

Це по кишені, і це виміряно, а не припущено: одна ротація — це один холодний старт, приблизно чверть цента, і він окупається на наступному ж виклику. Ротація виграш не обнуляє, а відкладає на один виклик.

Порядок, у якому ці два механізми робилися, не випадковий: спершу кеш, потім ротація.

Що обмежує виклик

Чотири числа, кожне обмежує своє. Ніщо тут не дозволяє постачальникові вирішувати, скільки ми чекаємо.

налаштуванняза замовчуваннямобмежує
ANTHROPIC_STREAM_STALL_MS60 смовчання у потоковій відповіді
ANTHROPIC_REQUEST_TIMEOUT_MS300 содну спробу блокувального виклику
ANTHROPIC_RETRY_WAIT_MAX_MS10 спаузу між двома спробами
ANTHROPIC_CALL_BUDGET_MS300 свесь блокувальний виклик, разом із паузами

Де проходить межа між «повільно, але живо» і «більше не чекаємо» — бо стеля, що ріже чесні повільні відповіді, це вже інший баг:

  • Потік судять за поступом. Кожна подія зводить бюджет мовчання наново, тому відповідь, яка продовжує говорити, не переривають, скільки б вона не говорила.
  • У блокувального виклику поступу не видно, тому його межа — час; при цьому бюджет усього виклику дорівнює одній повній спробі, тож одна чесна повільна відповідь отримує всю стелю собі. Закінчується місце на повтор після неї.
  • Пауза — це не відповідь, тому вона обмежена окремо й жорстко.

Перевірити

Усі чотири лічильники токенів записуються на кожен виклик, тому вся ця сторінка перевіряється за власними даними продукту, а не за консоллю постачальника.

  1. Проведіть з агентом розмову — з чотирьох ходів і більше. На першому ході кешу немає за визначенням, тому одиничне повідомлення виміряє лише надбавку за запис.

  2. Прочитайте рядки витрати цієї розмови:

    sql
    SELECT unit, SUM(quantity)
    FROM "BillingEvent"
    WHERE "threadId" = '<розмова>'
    GROUP BY unit;
  3. cache_write_tokens ненульовий на першому ході й падає в нуль далі; cache_read_tokens великий і приблизно сталий на кожному ході після першого.

  4. За цінами постачальника підсумок за ходи 2–4 — частка від того, у що ці ходи обійшлися б звичайним вводом: рядок input_tokens показує, як мало від нього лишилося.

Контроль — той самий крок, що ловить порожній замір: проведіть ту саму розмову зі знятою позначкою. Усі рядки cache_*нуль, input_tokens приблизно вшестеро більший, а ціна повертається до попередньої.