РозробкаБудь-який рівень

Основи LLM

Велика мовна модель (LLM) оцінює кожен можливий наступний токен щодо наявного тексту, дає семплеру обрати один і повторює це, доки відповідь не завершиться. Чат, виклики інструментів, міркування й агенти — усе це та сама операція, виконана багато разів. Сторінка починається з дванадцяти речей, які модель робить і які виглядають дефектами, не будучи ними, — кожна з механізмом за нею і з тим, що справді лікує; далі — сам цикл, чому те саме речення коштує більше українською, що насправді вміщує контекстне вікно, обмеження, які не залатати, пʼять задокументованих провалів і те, скільки все це коштує у проді.

Одиниця роботи
Один токен за раз
Памʼять
Лише контекстне вікно
Відповіді
Згенеровані, не знайдені

Дванадцять речей, які виглядають багами, не будучи ними

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

№Що ви побачилиМеханізмЩо справді лікує
1Вона не може порахувати літери у слові.Вона не бачить літер. Текст приходить як номери токенів, а літери всередині токена їй не видно.Зробіть це кодом. Це не той промпт, який можна покращити.
2Вона забула, про що ми домовились три повідомлення тому.API не зберігає нічого між викликами. Історію надсилає ваш застосунок — і щось її обрізало.Свідомо вирішуйте, що викидається чи стискається, а не дозволяйте бібліотеці різати початок.
3Вона вигадала джерело, яке виглядало цілком правдивим.Вона видає найправдоподібніше продовження, а окремого стану «я не знаю» в ній немає.Покладіть документ у промпт і дайте їй законний спосіб сказати, що відповіді там немає.
4Той самий промпт дав дві різні відповіді.Семплер обирає з розподілу, а вибір випадковий за побудовою.Перевіряйте властивості відповіді — мітку, схему, посилання, — а не її точний текст.
5Вона зігнорувала середину довгого документа, який я вставив.Увага надійно найсильніша ближче до початку й кінця промпту й слабша посередині.Ставте вказівку й питання в кінець і вставляйте менше, а не більше.
6Двадцятий крок коштував удесятеро більше за перший.Уся розмова надсилається заново на кожному кроці — ви щоразу платите за перечитування історії.Свідомо підрізайте чи стискайте історію й логуйте кількість токенів із першого дня.
7Відповідь урвалася посеред речення.Стеля максимуму токенів обірвала генерацію. Моделі про цей ліміт не казали.Підніміть стелю, щоб коректна відповідь помістилася, і вважайте обрізану відповідь помилкою, а не результатом.
8Вона описала функцію, яку ми випустили минулого місяця, — неправильно.Ваги заморожені на межі навчання. Усього пізнішого в них просто немає.Пошук. Ваша документація має приходити в промпт на кожному запиті.
9Арифметика в підсумку хибна.Числа передбачаються як токени, так само як слова. Ніщо в циклі нічого не обчислює.Рахуйте підсумок кодом, дайте моделі викликати цей код — і хай цитує результат.
10Українська версія коштує вдвічі дорожче за запит.Токенізатор зібрано на переважно англійському корпусі, тож кирилиця розпадається на значно більше токенів.Плануйте контекст і вартість за мовою. Це ще й означає, що українською вікно заповнюється швидше.
11Вона відмовила, а на переформульований запит погодилась.Відмова — це завчена поведінка над текстом, а не рушій правил, що звіряється з політикою.Забезпечуйте політику кодом. Формулювання — це побажання, права доступу — межа.
12Вона виконала вказівку, написану всередині завантаженого документа.Вказівки й дані — це ті самі токени. Ніщо не позначає частину промпту як довірену.Мінімум прав, перевірка у вашому коді й підтвердження перед усім безповоротним.

Одна операція, повторена багато разів

Модель не читає слів. Текст спершу ріжеться на токени — фрагменти приблизно з трьох-чотирьох символів в англійській, — і кожен токен має номер, тож насправді модель отримує послідовність чисел. У цьому весь рядок 1: спитайте її, скільки літер у слові, — і вона гадає про те, чого ніколи не бачила, як ви гадали б про кількість доріжок на платівці, поданій вам у запечатаному конверті.

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

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

Семплер — це те місце, де живуть налаштування, які ви справді можете змінювати, і їх менше, ніж підказує інструментарій. Вони визначають, як розподіл перетворюється на вибір: додати знань вони не можуть і уважнішою модель не зроблять. Звідси ж і рядок 4: той самий промпт може дати різні відповіді, бо вибір із розподілу — це вибір, а навіть за найнижчої температури пакетування й відмінності заліза на боці постачальника лишають точну відтворюваність недосяжною.

НалаштуванняЩо робитьПрактична порада
temperatureЗгладжує або загострює розподіл перед вибіркою. Вище значення — малоймовірні токени дістають справжній шанс.Низька — для видобування, класифікації й коду. Вища — лише для чернеток та ідей, де різноманіття і є метою.
top_pЛишає лише найімовірніші токени, чиї ймовірності разом дають p, і робить вибірку серед них.Змінюйте одне з двох, а не обидва: вони взаємодіють, і підкручування обох одночасно робить результат незбагненним.
Ліміт токенів виводуЖорстка стеля відповіді. Модель про неї не знає — генерацію просто обрізають.Рядок 7. Ставте достатньо високо, щоб коректна відповідь помістилася, і вважайте обрізану відповідь помилкою, а не результатом.
Стоп-послідовностіРядки, що завершують генерацію тієї миті, коли зʼявляються.Корисні, коли ви генеруєте по одному елементу списку. Здебільшого зайві, якщо просите структурований вивід.
SeedПросить постачальника зробити вибірку повторюваною. Найкраще зусилля, а не гарантія — ні між версіями моделі, ні між серверами.Корисний для налагодження однієї сесії. Ніколи не основа тесту, бо потрібної вам гарантії просто не пропонують.

Чому те саме речення коштує більше українською

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

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

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

Контекстне вікно — це вся памʼять

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

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

Велике вікно — це не те саме, що увага до всього, що в ньому. Моделі надійно використовують те, що ближче до початку й до кінця промпту, а середину — гірше: це рядок 5, і довгий документ, вкинутий у центр запиту, — класичний спосіб отримати відповідь, яка ігнорує половину його. Ставте вказівку й саме питання в кінець, найближче до місця, де починається генерація, а зайве не кладіть узагалі. Заповнювати мільйонне вікно лише тому, що воно є, — це рішення про вартість і затримку не менше, ніж про якість.

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

Обмеження, які структурні, а не помилки

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

Запит до бази даних

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

Виклик моделі

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

Ще два обмеження випливають із того, як роблять модель. Її ваги заморожені на межі навчання, тож усе пізніше — реліз, зміна цін, інцидент, ваша ж документація з минулого тижня — просто не всередині, і питання про це дає описану вище правдоподібну вигадку, а не зізнання. Це рядок 8. А відмови — те саме явище з іншого боку: відмова є завченою поведінкою над текстом, а не рушієм політик, — тому й стається рядок 11, і тому будь-яке правило, що справді має триматися, належить вашому власному коду.

Пʼять провалів і чого бракувало в кожному

Жоден із цих випадків не стався через несправність моделі. У кожному модель зробила рівно те, що описує механізм вище, а бракувало контролю, який хтось вважав зайвим. Їх варто знати на імена, бо кожен тепер є найдешевшим способом обґрунтувати цей контроль на плануванні.

ВипадокЩо сталосяКонтроль, якого бракувало
Mata v. Avianca, червень 2023Нью-йоркський адвокат подав документ із посиланнями на шість рішень, яких не існує. На прохання підтвердити їх модель видала ще й повні тексти. Суд оштрафував адвокатів і фірму на $5 000.Рядок 3 без жодної перевірки. Усе, що можна перевірити, перевіряється кодом: посилання або існує, або ні.
Moffatt v. Air Canada, лютий 2024Чатбот авіакомпанії описав політику повернення за тарифом у разі втрати близьких, яка суперечила власній опублікованій сторінці компанії. Трибунал зобовʼязав Air Canada заплатити й відхилив аргумент, що чатбот — окрема юридична особа.Рядок 8. Правильна політика була на тому самому сайті й жодного разу не потрапила в промпт.
CNET, січень 2023Сімдесят сім статей про особисті фінанси, написаних із AI, опублікували без розголосу. Перевіряльники знайшли помилки в прикладах зі складними відсотками; десятки статей дістали виправлення, а програму зупинили.Рядок 9. Числа передбачили як текст. Арифметика належить коду, який викликає модель, а не відповіді, яку вона пише.
Samsung, травень 2023Інженери вставляли внутрішній код у публічний чатбот, щоб дістати з ним допомогу. Невдовзі компанія заборонила генеративні AI-інструменти на корпоративних пристроях.Це взагалі не збій моделі. Промпт — це вихідний запит: вирішіть, що може покидати будівлю, до того, як людям доведеться це пояснювати.
Stack Overflow, грудень 2022Сайт заборонив згенеровані відповіді за кілька тижнів після виходу ChatGPT, мотивуючи тим, що вони достатньо правдоподібні, щоб їх було дорого модерувати, і достатньо хибні, щоб бути шкідливими.Ціна рядка 3 на масштабі. Упевненість — не сигнал, тож обсяг без перевірки перекладає роботу на того, хто перевіряє.

Скільки це коштує, коли приходить справжній трафік

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

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

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

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

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

Де це вироджується

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

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

Коли це застосовувати

Застосовуйте, коли

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

Уникайте, коли

  • Усе, що потребує точної, перевірюваної відповіді: арифметика, підсумки, правила відповідності. Для цього викликайте код — і дайте моделі викликати саме його.
  • Факти про вашу власну галузь без нічого знайденого в промпті: очікуваним результатом є впевнена вигадка.
  • Шляхи, де хибна відповідь діє негайно й безповоротно — платежі, видалення, вихідні повідомлення — без людського контролю.
  • Численні дешеві виклики, де правило, таблиця відповідностей чи маленький класифікатор роблять те саме за тисячну частку вартості.

Джерела й метод

На чому стоїть ця стаття

  • 8 джерел
  • 5 задокументованих збоїв
  • Перевірено 13 жовтня 2026 р.

Дослідження з Claude. Пошук і звірку першоджерел зроблено з Claude (Anthropic). Відбір, текст і перевірку фактів — редакція Anatomy of IT Product.

Було корисно?

Поділіться з тим, хто працює над тією ж задачею.