vyvchy
    Теми розділу

    14 · AI для QA

    Токени, контекст і вартість

    Зміст

    Кожен запит до LLM — це рахунок за токени й гонка з лімітом контексту. Модель не бачить ваш текст як букви чи слова: вона ріже його на токени, і саме за токени ви платите, саме в токенах вимірюється, скільки модель здатна «тримати в голові» за один раз. Для QA це не бухгалтерія, а щоденні рішення: чому генератор автотестів «забув» половину специфікації, чому один і той самий українською дорожчий за англійський, чому після сотні кроків починає гальмувати й помилятися.

    Зрозумієш механіку токенів і контексту — і навчишся свідомо керувати якістю, швидкістю та вартістю роботи з AI, а не покладатися на «якось воно порахується». Ця глава — місток між «Як працюють LLM» і практичним промптингом: без неї промпти пишуться наосліп.

    Токен: одиниця, якою мислить модель

    Токен (token) — це шматок тексту, яким оперує модель: частіше за все це не ціле слово й не окрема буква, а підслівний фрагмент (subword). Токенізатор (tokenizer) — алгоритм, що ріже текст на такі шматки; більшість сучасних моделей використовують різновид BPE (byte-pair encoding), який збирає найчастіші послідовності символів в окремі токени.

    Груба, але робоча оцінка для англійського тексту: приблизно 4 символи на токен, або близько ¾ слова на токен (100 токенів ≈ 75 слів). Тобто коротке речення — це кілька десятків токенів.

    Ключова пастка для нас: українська коштує дорожче. Токенізатори тренують переважно на англомовних даних, тож кирилиця ріжеться на дрібніші шматки — слово нерідко розпадається на кілька токенів. Той самий зміст українською може займати у 2–3 рази більше токенів, ніж англійською. Практичний наслідок: якщо женете великі обсяги (наприклад, генеруєте тест-кейси з україномовної специфікації), і токен-ліміт, і рахунок будуть відчутно більші, ніж підказує «на око».

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

    І останнє: різні моделі — різні токенізатори. Той самий рядок дасть різну кількість токенів у різних провайдерів і навіть у різних поколінь однієї моделі. Тому не можна оцінювати токени для однієї моделі лічильником від іншої (класична помилка — рахувати токени умовного Claude бібліотекою, написаною під GPT). Для точного числа є підрахунку токенів і офіційні токенізатори провайдера.

    Контекстне вікно: скільки модель бачить за раз

    (context window) — це максимальна кількість токенів, яку модель здатна обробити за один запит. У нього має вміститися все: , уся історія діалогу, вкладені документи чи логи, поточне питання — і ще лишитися місце під відповідь, бо згенеровані токени теж рахуються у вікно.

    Контекстне вікно — напр. 200 000 токенів

    Системний промпт

    Історія діалогу

    Документи / логи

    Поточне питання

    Місце під відповідь (output)

    Контекстне вікно — напр. 200 000 токенів

    Системний промпт

    Історія діалогу

    Документи / логи

    Поточне питання

    Місце під відповідь (output)

    Розміри дуже різні: від кількох тисяч токенів у старих чи маленьких моделей до 200 000 і навіть 1 000 000 у сучасних. Зазвичай є ще окремий ліміт на довжину відповіді (max output) — навіть із мільйонним вікном модель не видасть вам мільйон токенів тексту за раз.

    Що критично зрозуміти QA: API моделі не має памʼяті між запитами — він stateless. «Чат» лише створює ілюзію памʼяті: клієнт щоразу надсилає всю історію повідомлень заново. Тому з кожним ходом діалогу вхід росте й рано чи пізно впирається у вікно. Коли контекст переповнюється, варіанти невеселі: помилка запиту, обрізання старих повідомлень або примусове стиснення історії — і модель справді «забуває» те, що ви їй казали двадцять реплік тому.

    Чому довгий контекст ≠ кращі відповіді

    Велике вікно спокушає: «закинемо туди все — і специфікацію, і код, і логи». Але місткість вікна й здатність моделі якісно цим користуватися — різні речі.

    Добре задокументований ефект — «загублене посередині» (lost in the middle): моделі надійніше знаходять інформацію на початку та в кінці контексту, ніж усередині. Помістіть потрібний факт у середину довгого документа — і шанс, що модель його «не помітить», зростає. Є й ширше явище деградації: що більше зайвого в контексті, то дужче розпорошується увага, і на дуже довгих входах якість, стабільність і точність можуть просідати.

    Для QA висновок прямий: не вивалюйте на модель усе підряд. Довгий контекст — це і дорожче, і повільніше, і не обовʼязково точніше. Краще подати релевантний зріз: потрібний фрагмент логу, а не весь файл; конкретний розділ вимог, а не весь Confluence. Це той самий принцип, що й у ручному тестуванні, — сфокусована перевірка бʼє «протестуй усе».

    Скільки це коштує: input проти output

    Оплата — за токени, зазвичай за мільйон (позначають MTok або /1M). Два тарифи рахуються окремо:

    • вхідні () токени — усе, що ви надіслали: промпт, історія, документи;
    • вихідні (output) токени — усе, що модель згенерувала.

    Головне правило: вихідні токени коштують у кілька разів дорожче за вхідні — типово в 5–6 разів. Наприклад, для моделей рівня Opus станом на липень 2026 вхід — порядку кількох доларів за мільйон токенів, а вихід — кількох десятків (співвідношення 1:5); точні цифри залежать від моделі й регулярно змінюються, тож звіряйтеся з прайсом провайдера. Врахуйте й те, що токени «міркування» (reasoning), якщо модель їх генерує, теж ідуть у вихідні.

    Звідси неочевидний наслідок — діалог дорожчає нелінійно. Оскільки історію щоразу пересилають повністю, десятий хід оплачує всі попередні девʼять як вхід:

    // Кожен наступний виклик пересилає всю історію — вхід росте з кожним ходом
    const messages = [{ role: "system", content: SPEC }]; // великий стабільний префікс
    messages.push({ role: "user", content: "Згенеруй тест-кейси для логіну" });
    messages.push({ role: "assistant", content: reply1 }); // відповідь теж лягає в історію
    messages.push({ role: "user", content: "А тепер негативні сценарії" });
    // другий запит оплачує SPEC + перше питання + першу відповідь ЗНОВУ

    Довга агентна сесія з десятками кроків і великими логами в контексті може коштувати помітно більше, ніж здається з одного «дешевого» запиту.

    Prompt caching: платити один раз за спільний префікс

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

    Порядок цін у Anthropic станом на липень 2026: читання з кешу коштує близько 10% від звичайної ціни вхідного токена, а перший запис у кеш — трохи дорожче за звичайний вхід (1.25x за стандартного TTL). В інших провайдерів механіка й множники свої, тож звіряйтеся з документацією. Тобто вже з другого-третього повторення кеш окупається.

    Запит 2 — той самий префікс

    Запит 1

    запис у кеш ~1.25x

    читання ~0.1x замість повної ціни

    Стабільний префікс:
    системний промпт + специфікація

    Питання A

    Стабільний префікс:
    системний промпт + специфікація

    Питання B

    Кеш префікса

    Запит 2 — той самий префікс

    Запит 1

    запис у кеш ~1.25x

    читання ~0.1x замість повної ціни

    Стабільний префікс:
    системний промпт + специфікація

    Питання A

    Стабільний префікс:
    системний промпт + специфікація

    Питання B

    Кеш префікса

    Критичний нюанс — це збіг за префіксом (prefix match): кеш працює, лише поки початок запиту побайтово однаковий. Одна змінена дужка, вставлена дата чи переставлений ключ у JSON на початку — і весь кеш після цієї точки анулюється. Тому стабільне (незмінний системний промпт, документ) кладуть на початок, а мінливе (поточне питання, timestamp) — у кінець. У кеша ще є час життя (TTL; у Anthropic за замовчуванням 5 хвилин), після якого префікс треба «прогріти» заново.

    Це концептуально та сама ідея, що й HTTP-кеш (див. Кешування): зберегти вже пораховане, щоб не рахувати вдруге, з тим самим питанням валідності. Для QA це прямий важіль: якщо ви ганяєте сотню промптів проти однієї великої специфікації (генерація кейсів, ревʼю), спеки економить і час прогону, і бюджет.

    Як економити контекст і гроші

    Кілька практичних прийомів, що випливають з усього вище:

    • Подавайте зріз, а не все. Релевантний фрагмент логу чи вимог замість цілого файлу — дешевше і точніше.
    • Тримайте стабільне на початку, мінливе — в кінці, щоб працювало кешування.
    • Стискайте історію. У довгих діалогах підсумовуйте попереднє замість того, щоб тягнути кожну репліку дослівно; починайте нову сесію, коли тема змінилася.
    • Використовуйте вибірку замість «запхати весь корпус». Підхід, коли в контекст підтягують лише потрібні шматки з бази знань (), — окрема велика тема, але принцип той самий: менше нерелевантного в контексті.
    • Рахуйте перед відправкою. Для важливих чи масових прогонів прикидайте токени лічильником потрібної моделі, а не «на око».

    Вибір моделі під задачу

    Немає «найкращої» моделі — є доречна. Провайдери зазвичай мають лінійку: від маленьких швидких і дешевих (клас Haiku) до великих потужних і дорогих (клас Opus), з проміжними (клас Sonnet). Компроміс завжди між трьома осями: якість — швидкість — вартість.

    Орієнтир:

    • прості, масові, чітко окреслені задачі (класифікація баг-репортів, витяг полів, коротке підсумовування) — маленька швидка модель; часто різниця в якості мізерна, а в ціні й латентності — кратна;
    • складне міркування, генерація й ревʼю коду, багатокрокові агентні задачі — велика модель;
    • проміжне — середня.

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

    Енергія й CO₂: рахунок, який вам не виставляють

    У кожного запиту є друга ціна, якої немає у вашому інвойсі, — енергія. ISTQB винесла її в окремий екзаменований підрозділ силабуса CT-GenAI (§3.3) з ціллю рівня K2: пояснити вплив характеристик задачі й ужитку моделі на (energy consumption of Generative AI). У силабусі цей підрозділ стоїть у главі про керування ризиками — поруч із приватністю й AI-регуляціями.

    Механіка та сама, що з грошима. Навчання й робота LLM, за силабусом, «потребують інтенсивного використання великої кількості спеціалізованих обчислювальних ресурсів»; модель ви викликаєте як вебсервіс, тож її використання «збільшує навантаження на пристрої, мережі й дата-центри». Далі — залежність від обсягу: вплив на довкілля не варто недооцінювати, бо енергоспоживання різко зростає зі зростанням використання.

    Чинників силабус називає дослівно два — складність задачі і потрібні обчислювальні ресурси; опис вправи додає третій кут, ужиток моделі (яку саме модель і як часто ви берете). Тобто ті самі важелі, що й у рахунку: що ви просите і чим.

    Тепер найважливіше — про числа. Силабус їх не дає. Ані кіловат-годин на запит, ані грамів CO₂ на тисячу токенів. Єдина його кількісна опора — обережне порівняння: генерація одного зображення потужною AI-моделлю може спожити стільки ж енергії, скільки повна зарядка смартфона, тоді як генерація тексту витрачає лише невеликий відсоток заряду смартфона (силабус посилається тут на публікацію MIT Technology Review 2023 року). І в тому ж абзаці зізнається, що точні дані про вплив GenAI на довкілля здобути важко — хоча сам висновок про викиди називає очевидним: енергоємні операції сукупно дають значні викиди CO₂.

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

    Практику пом'якшення силабус називає одну — обмежувати зайві взаємодії з моделлю. Приємна новина: це рівно те, чого вчить решта цієї глави. Подати зріз замість цілого файлу, не перепитувати те саме втретє, узяти маленьку модель там, де велика не дасть виграшу, кешувати спільний префікс — усе це однаково економить і бюджет, і енергію. Окремої «зеленої» дисципліни вчити не треба: важелі ті самі.

    І суто QA-шне: не переказуйте чужих цифр. Навколо теми ходить багато ефектних чисел на кшталт «один запит — стільки-то мілілітрів води», і майже за жодним із них не стоїть джерело, яке ви тримали в руках. Документ, за яким складають іспит, чисел не наводить узагалі — тож якщо називаєте число, називайте разом із ним джерело й дату, коли ви його перевіряли.

    Типові помилки

    • Виглядає як «модель забула контекст» — а насправді історія вилізла за межі вікна й старі повідомлення обрізало. Не баг моделі, а переповнене вікно.
    • Виглядає як «токенів приблизно стільки ж» для англійської та української — а насправді той самий текст українською займає у 2–3 рази більше токенів. Оцінка за словами вводить в оману.
    • Виглядає як «великий контекст = точніше» — а насправді через lost in the middle факт у середині довгого документа модель може проігнорувати, і якість на довгому вході просідає.
    • Виглядає як «кеш не працює, хоча промпт майже той самий» — а насправді змінився початок префікса (дата, id, порядок ключів), і збіг за префіксом зламався.
    • Виглядає як «вартість = ціна одного запиту» — а насправді в діалозі історія пересилається щоразу, тож вартість росте з кожним ходом; вихідні токени ще й дорожчі за вхідні.
    • Виглядає як «візьмемо найпотужнішу модель, щоб напевно» — а насправді на простих масових задачах це зайві гроші й латентність без виграшу в якості.

    Підсумок

    • Модель оперує токенами, не словами; українська й код коштують більше токенів, ніж здається, а різні моделі рахують токени по-різному.
    • Контекстне вікно — спільний бюджет на промпт, історію, документи й відповідь; API stateless, тож історію пересилають щоразу, і вона впирається у вікно.
    • Довгий контекст не гарантує кращих відповідей: працює lost in the middle і загальна деградація — подавайте релевантний зріз.
    • Платять за токени; вихідні дорожчі за вхідні в кілька разів, а діалог дорожчає нелінійно через повторне пересилання історії.
    • Prompt caching здешевлює спільний префікс, але тримається на побайтовому збігу початку; модель обирають під задачу за трикутником якість/швидкість/ціна.
    • Друга ціна того самого запиту — енергія: за CT-GenAI на неї впливають складність задачі й ужиток моделі, а єдина названа там практика — не робити зайвих звернень до моделі. Чисел силабус не наводить, тож і ви їх не вигадуйте.

    Можливі питання

    • «Що таке токен і чому це важливо для роботи з LLM?» — інтервʼюер хоче почути, що модель оперує підслівними токенами, що від них залежать і ліміт контексту, і вартість, і що українська та код токенізуються дорожче.
    • «Що таке контекстне вікно і що станеться, якщо його перевищити?» — очікують згадку, що у вікно входить усе (промпт + історія + відповідь), що API stateless, і що при переповненні буде помилка, обрізання або стиснення, а не магічна памʼять.
    • «Чому не варто просто закидати в модель усі логи й вимоги?» — перевіряють розуміння деградації на довгому контексті (lost in the middle) і вартості; сильний кандидат говорить про подання релевантного зрізу.
    • «Чим відрізняється ціна input і output і як здешевити роботу з LLM?» — дивляться, чи знаєте, що output дорожчий, що діалог пересилає історію, і чи назвете prompt caching, стиснення контексту, вибір меншої моделі.
    • «Як обрати модель під задачу?» — хочуть побачити мислення в осях якість/швидкість/вартість, а не «беру найкращу»; плюс — приклад, де дешева модель доречна.
    • «Що ISTQB каже про енергоспоживання GenAI?» — очікують, що назвете окремий підрозділ CT-GenAI (§3.3), два чинники (складність задачі й потрібні обчислювальні ресурси) плюс ужиток моделі та практику «не робити зайвих звернень». Сильний кандидат окремо зауважить, що чисел силабус не дає й сам пише про брак точних даних.

    Джерела

    Токен: одиниця, якою мислить модель

    • ISTQB CT-GenAI Syllabus v1.1 — канонічне означення токенізації як розбиття тексту на менші одиниці, де токен буває завбільшки як символ, підслово або слово.
    • Google — Machine Learning Glossary — токен як атомарна одиниця, на якій модель навчається й робить передбачення; підслово складається з кореня, префікса або суфікса.
    • Claude Platform Docs — Context windows — чим рахувати замість «на око»: поле usage у відповіді й окреме API підрахунку токенів під конкретну модель.

    Контекстне вікно: скільки модель бачить за раз

    • Claude Platform Docs — Context windows — що входить у вікно (системний промпт, кожне повідомлення, означення інструментів і сама відповідь), як накопичується історія, розміри на дату забору й окремий ліміт вихідних токенів; там же — стиснення на боці сервера й обрізання як поведінка чат-інтерфейсів.
    • ISTQB CT-GenAI Syllabus v1.1 — вендор-нейтральне означення вікна як обсягу попереднього тексту в токенах і ціна довгого вікна: більше токенів — вища вартість і латентність.

    Чому довгий контекст ≠ кращі відповіді

    Скільки це коштує: input проти output

    • Claude Platform Docs — Prompt caching — прайс-таблиця на дату забору, з якої й береться відношення входу до виходу як 1:5.
    • Claude Platform Docs — Context windows — механіка нелінійності: попередні ходи зберігаються повністю, вхідна фаза кожного ходу містить усю історію, а токени міркування тарифікуються як вихідні.
    • ISTQB CT-GenAI Syllabus v1.1 — вендор-нейтральна рамка витрат і вправа на оцінку регулярних витрат із трьома множниками: кількість вхідних і вихідних токенів, вартість моделі, частота запитів.

    Prompt caching: платити один раз за спільний префікс

    • Claude Platform Docs — Prompt caching — механіка цілком: кешується весь префікс у порядку tools → system → messages, множники запису й читання на дату забору, TTL за замовчуванням, кумулятивний хеш префікса й класична пастка з timestamp у останньому блоці.

    Як економити контекст і гроші

    • Claude Platform Docs — Prompt caching — чому стабільне кладуть на початок: зміна будь-якого блока на або перед ним дає інший хеш і анулює кеш.
    • Claude Platform Docs — Context windows — основна стратегія для довгих агентних названа прямо: стиснення на боці сервера; і окреме API, яким рахують запит наперед.
    • Claude Code Docs — Best practices for Claude Code — практики керування контекстом: /clear між незвʼязаними задачами, автоматичне ущільнення історії, делегування дослідження в окремі вікна.
    • Lewis et al. — Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (arXiv:2005.11401) — першоджерело підходу «підтягнути лише потрібні шматки»: непараметрична памʼять через ретривер замість усього корпусу в контексті.

    Вибір моделі під задачу

    • ISTQB CT-GenAI Syllabus v1.1 — вибір моделі як економічне рішення: враховують поточні витрати на використання, включно з ліцензійними платежами й операційними видатками.
    • Claude Platform Docs — Prompt engineering overview — пряма підстава під «є доречна, а не найкраща»: латентність і вартість часто дешевше поправити вибором іншої моделі, ніж промпт-інженерією.

    Енергія й CO₂: рахунок, який вам не виставляють

    • ISTQB CT-GenAI Syllabus v1.1 — §3.3 як окремий екзаменований підрозділ із ціллю GenAI-3.3.1 (K2): два чинники впливу, накопичувальний ефект, єдина названа практика пом'якшення й пряме визнання, що точні дані здобути важко.
    • ISTQB — Certified Tester Specialist Level – Testing with Generative AI (CT-GenAI) Overview — сторінка сертифікації називає пʼять поіменно, і вплив на довкілля стоїть у цьому переліку нарівні з , упередженнями, безпекою й приватністю.

    Пояснення

    «Поясни» працює з власним API-ключем Anthropic: запит іде з вашого браузера прямо до Anthropic.

    Свій API-ключ (BYOK)

    Вставте власний ключ Anthropic — пояснення працюватиме на реальній моделі. Ключ зберігається лише у вашому браузері (localStorage), нікуди не надсилається, крім api.anthropic.com, і не логується.