Усі уроки · 44
Як насправді працюють LLM
Що таке велика мовна модель насправді: передбачення наступного токена, токени, навчання та інференс, контекстне вікно — і чому моделі іноді впевнено вигадують факти.
Машина, яка дуже добре передбачає текст
Чому це важливо? Щойно ви зрозумієте, як усе влаштовано, «магія» стане передбачуваною, а збої моделі перестануть вас дивувати. Усе дивне, що робить LLM, — від вигаданого посилання на джерело до того, що вона «забула» ваше ім’я, — пояснюється одним-єдиним механізмом, про який ідеться на цій сторінці.
Якщо відкинути галас навколо ШІ, велика мовна модель (LLM) робить рівно одне: отримавши текст, вона передбачає, що буде далі. Ось і весь фокус.
Дайте їй початок фрази «Столиця Франції —», і вона обчислить імовірність кожного можливого наступного слова: «Париж» — найімовірніше, «це» — можливо, «банан» — навряд чи. Вона обирає одне слово, дописує його до тексту й починає спочатку. Так, слово за словом, будується будь-яка відповідь — від однієї фрази до кількох абзаців: модель постійно робить те саме — передбачає наступний фрагмент, додає його й передбачає знову.
Магією все це здається через масштаб. Під час навчання моделі показали величезну кількість тексту, і з’ясувалося, що для доброго передбачення наступного фрагмента потрібне щось, що виглядає майже як розуміння: знання граматики, фактів, коду й навіть покрокових міркувань.
Тепер уточнімо, чого в цьому циклі немає:
- Модель нічого не шукає. Відповідаючи, вона не звертається до жодної бази даних. Факти зберігаються в її параметрах — числах, підібраних під час навчання, — і «спливають» у вигляді передбачень.
- Модель мислить не так, як людина. «Міркування» у відповіді — теж передбачений текст. Воно часто допомагає, але нічого не доводить.
- Модель не перевіряє власну відповідь. У самому механізмі немає нічого, що звіряло б результат із реальністю. Ця частина роботи — ваша.
Інференс: передбачення наступного токена
Роботу вже навченої моделі називають інференсом. Щоразу, коли ви надсилаєте повідомлення LLM, вона передбачає відповідь по одному фрагменту.
На кожному кроці модель семплює — тобто кидає «зважені кубики»: слово обирається випадково, але що воно ймовірніше, то більше в нього шансів. Наскільки «ризиковано» падають ці кубики, визначає одне налаштування — температура (temperature). Уявіть її як регулятор: за низької температури модель майже завжди бере найбезпечніше слово, а якщо повернути регулятор угору, дедалі частіше перемагають менш імовірні й несподіваніші слова. Спробуйте самі:
low temperature → the sharp token wins almost always (safe, repetitive). high temperature → the distribution flattens, unusual tokens get a real chance (creative, risky).
Натисніть «вибрати» кілька разів за низької температури: щоразу випадатиме «Париж». Посуньте повзунок температури вгору — і раптом з’являється «Ліон» або щось іще дивніше. Ось чому той самий промпт може давати різні відповіді й чому для фактичних завдань краще низька температура, а для мозкового штурму іноді корисна вища.
Що це означає для вас
Майже будь-яка «дивна поведінка моделі», яку вам доведеться розбирати як AI-інженеру, пояснюється цим механізмом: токен за токеном модель кидає зважені кубики.
Токени: модель бачить не слова
Для багатьох це несподіванка: LLM працює не зі словами, а з токенами — фрагментами тексту. Токеном може бути ціле слово, частина слова або навіть просто розділовий знак.
Якщо спрощено, поширені англійські слова зазвичай вміщуються в один токен, а рідкісніші розбиваються на частини («astounding» може стати «ast» + «ounding»); числа часто розрізаються на окремі цифри. Слово «unbelievable» може становити три токени, а пробіл перед словом теж рахується.
Звідси чимало практичних дивацтв:
- Моделі нерідко помиляються, коли треба порахувати літери в слові: самих літер вони не бачать, лише токени
- Текст не англійською часто займає більше токенів (і коштує більше грошей) на одне речення
- Ціни в API й обмеження на розмір контексту завжди вимірюються в токенах
Грубе правило: один токен — це приблизно три чверті англійського слова. Докладніше про все це — в уроці «Розмова з моделлю: токени, контекст і семплінг».
Навчання та інференс
Ці дві фази різняться і за вартістю, і за тим, що вони змінюють:
- Навчання (training) — дорога фаза, яка відбувається один раз для кожної моделі. Моделі показують величезні обсяги тексту, і вона поступово підлаштовує свої внутрішні параметри — мільярди чисел, — щоб дедалі краще передбачати наступний токен. На це йдуть місяці роботи тисяч GPU (дорогих чипів, на яких працюють такі моделі), і займаються цим лабораторії, а не ви.
- Інференс (inference) — те, що відбувається щоразу, коли ви користуєтеся моделлю. Параметри заморожені, з вашого чату модель нічого не вчиться. Вона просто проганяє текст уперед, токен за токеном.
З цього випливає висновок, який багатьом здається неочевидним: модель вас не пам’ятає. Закрийте чат, почніть новий — і вона нічого не знає про попередню розмову. Усе, що вона «знає» про вас, має поміститися в те, що ви їй надсилаєте. А це підводить нас до контекстного вікна.
Контекстне вікно
Контекстне вікно — це робоча пам’ять моделі: увесь текст, який вона може враховувати одночасно. Уявіть письмовий стіл моделі: усе, на що їй дозволено дивитися просто зараз, має лежати на цьому столі. Там міститься системний промпт — постійні інструкції, які для неї написав розробник застосунку і яких ви не бачите, — а також ваші повідомлення, прикріплені файли та її власні відповіді. Усе це має вміститися у вікно, а коли воно заповнюється, старий вміст доводиться видаляти або замінювати коротким переказом.
Подивіться, як вікно заповнюється в реалістичній ситуації: асистент для програмування відповідає на запитання про файл:
Що видно в цій симуляції:
- Системний промпт завжди присутній, хоча користувач його не бачить
- Прикріплений файл займає більше токенів, ніж усе решта разом узяте
- З кожним новим повідомленням моделі знову надсилається вся історія розмови, тому довгі діалоги працюють дедалі повільніше й обходяться дедалі дорожче
Керувати тим, що потрапляє в це вікно, а що лишається за його межами, — настільки важливе вміння, що в нього є власна назва й власний урок: контекстна інженерія (context engineering). У цьому курсі багато відсилань на кшталт «докладніше в іншому уроці», і це навмисно: кожна ідея має власний докладний розбір.
Розмова крок за кроком
Ще один спосіб відчути, як влаштований діалог. Кожне ваше повідомлення робить розмову довшою: модель щоразу перечитує її повністю:
Модель «пам’ятає» ваше ім’я лише тому, що перше повідомлення все ще лежить у контекстному вікні й пересилається заново з кожним новим повідомленням. У новому чаті вона гадки не має, хто така Дана. Пам’ять між сесіями — це функція, яку ви створюєте самі, за допомогою баз даних.
Усе — це один і той самий виклик
Чат, агенти, інструменти, RAG — усе це один і той самий виклик моделі, який повторюють з різним текстом.
Вікно чату у вашому улюбленому застосунку — це просто цикл: ваше повідомлення разом з усіма попередніми надходить на вхід, на виході з’являється продовження, воно дописується до розмови, і при наступному повідомленні все це надсилається знову. Ось і весь інтерфейс чату, більше там нічого немає.
Усе інше, що трапиться вам далі, — це той самий виклик, лише з іншим текстом у контексті:
- Інструменти та виклик функцій (function calling) — у своєму продовженні модель просить запустити функцію; ваш код запускає її й вставляє результат назад у вигляді тексту.
- RAG — ваш код знаходить потрібні документи й додає їх до контексту перед викликом.
- Агенти — цикл викликів: на кожному кроці продовження моделі називає наступну дію, ваш код її виконує, а результат повертається на вхід.
Механізм один — передбачити продовження; змінюється тільки текст. Коли ви це зрозумієте, «розробка зі ШІ» перестане здаватися загадкою: це рішення про те, який текст подати на вхід і що робити з текстом, який вийшов на виході.
Чому моделі вигадують
Якщо модель така добра, чому вона впевнено стверджує те, що просто хибно, — вигадані джерела, неіснуючі функції, неправильні дати?
Тому що вона передбачає правдоподібний текст, а не правдивий. Здебільшого «правдоподібне» і «правдиве» збігаються — тому LLM такі корисні, — але це не одне й те саме. Коли модель доходить до місця, де вона не знає відповіді, вона не зупиняється й не мовчить. Вона продовжує текст так, як це виглядає найприродніше за статистикою. У такого збою є назва: галюцинація.
Галюцинації — прямий наслідок самого механізму, і черговим оновленням їх не усунути. Усе практичне, що є в цьому курсі, — прив’язка моделі до ваших даних через RAG, інструменти для перевірки фактів, відповіді в суворо заданому форматі, регулярне оцінювання якості, — потрібне для того, щоб обійти саме цю властивість.
Правило інженера
Ніколи не сприймайте відповідь моделі як джерело істини. Ставтеся до неї як до доброго чорновика, який потрібно перевірити, — і проєктуйте продукт так, щоб перевірка була дешевою або автоматичною.
Абзац про ШІ та AGI
Чи складається передбачення наступного токена в «справжній інтелект»? Про це постійно сперечаються. Відповідь з інженерного погляду така: для вашої щоденної роботи це поки що не має значення. Те, що ми маємо сьогодні, — це вузький ШІ: інструменти з великими можливостями, яким і далі потрібна людина, щоб поставити мету, перевірити результат і відповідати за наслідки. Чи досягнемо ми AGI — систем із загальними здібностями на рівні людини — і коли, це захопливе питання, але воно нічого не змінює в тому, як ви створюєте надійну функцію цього року.
Ви двічі поставили те саме запитання й отримали дві різні відповіді. Що сталося?
Ви закрили чат і відкрили новий. Чому модель більше не знає вашого імені?
Чому модель іноді впевнено повідомляє вигаданий факт?
Є запитання?
Застрягли чи виникли запитання щодо цієї дорожньої карти? Заходьте до Telegram-каналу — залюбки все обговоримо.