LLM, токен і контекстне вікно
LLM (large language model) — нейромережа, навчена на великому корпусі тексту передбачати наступний токен. Вона не «знає» фактів як база даних і не виконує код: на кожному кроці видає розподіл ймовірностей наступного токена, з якого обирається один. Звідси і сила (гнучке розуміння тексту), і слабкість (правдоподібна, але хибна відповідь).
Токен — одиниця, якою модель читає і пише текст: частина слова, слово, розділовий знак. Для англійської в середньому 1 токен ≈ 4 символи або ¾ слова; українська і код зазвичай «дорожчі», бо розбиваються на більше токенів. Модель не бачить літер, тому погано рахує літери в слові чи робить точну арифметику.
Контекстне вікно — максимальна кількість токенів, які модель бачить за один запит: system prompt, історія діалогу, вкладені документи, результати tools і сама відповідь. Усе, що не влізло, модель просто не знає. Довгий контекст не безкоштовний: дорожчий, повільніший, а якість часто падає для інформації «посередині» (lost in the middle).
Контекст у побутовому значенні — усе, що ми передали моделі в запиті. Модель сама по собі без стану: «пам'ять» діалогу — це клієнт, який щоразу надсилає всю історію заново.
Модель, версія і параметри генерації
Модель — конкретні навчені ваги з назвою і версією (наприклад, сімейство великих/середніх/малих моделей одного вендора). Більша модель зазвичай розумніша, але повільніша й дорожча; мала — швидка й дешева для простих задач (класифікація, екстракція). Для QA важливо: версія моделі — частина конфігурації. Вендор може оновити «alias» на нову версію, і поведінка продукту зміниться без жодного коміту. Тому в тестах і проді фіксують конкретний ідентифікатор моделі.
Параметри генерації:
temperature — «випадковість» вибору токена. 0 — майже детермінований вибір найімовірнішого, вища — різноманітніше й менш передбачувано;
top_p (nucleus sampling) — обирати лише з токенів, чия сумарна ймовірність ≤ p;
max_tokens — ліміт довжини відповіді; при перевищенні відповідь обривається посеред речення (finish_reason = length);
stop sequences — рядки, на яких генерація зупиняється;
seed — підтримується не всіма вендорами і не гарантує повної відтворюваності.
Важливо: навіть з temperature: 0 відповідь може відрізнятися між запусками (паралельні обчислення на GPU, оновлення моделі, batching). Тест не повинен припускати побайтову рівність виводу.
Кредити, ціна й ліміти
API-моделі тарифікуються за токенами: окремо input (усе, що ми надіслали) і output (те, що згенерувала модель). Output зазвичай у кілька разів дорожчий за input. Вартість запиту = input_tokens × ціна_input + output_tokens × ціна_output.
Кредити — абстрактна одиниця оплати: попередньо купований баланс (prepaid) або «умовні бали» в підписці, у які сервіс конвертує токени, запити чи хвилини агента. Коли кредити закінчуються, сервіс повертає помилку або вимикає функцію. Для QA це окремий клас сценаріїв: що бачить користувач при нульовому балансі, чи не списуються кредити за провалений запит, чи коректний лічильник.
Що ще впливає на вартість і швидкість:
- Довжина контексту: кожен крок діалогу чи агента повторно надсилає історію, тож вартість росте швидше, ніж лінійно;
- Prompt caching: повторюваний префікс (system prompt, документи) кешується і коштує дешевше та швидше;
- Rate limits: ліміти запитів і токенів на хвилину. Відповідь
429 — повторити з exponential backoff;
- Latency: час до першого токена (TTFT) і загальний час; streaming робить відповідь «живою» до завершення генерації;
- Агенти: один запит користувача може породити десятки викликів моделі — потрібен бюджет і ліміт кроків.