Усі уроки · 44
Один виклик: як насправді працює будь-який ШІ-продукт
ChatGPT, Claude, Gemini, агенти для коду, RAG, MCP — за всім цим стоїть одна й та сама дія: надіслали текст, отримали найімовірніше продовження. Усе інше — надбудова над цим викликом.
Одна дія, яка повторюється знову і знову
Чому це важливо? Бо в цьому й увесь механізм роботи ШІ — а про нього вам зазвичай не розповідають. Кожен ШІ-продукт, яким ви користувалися, — вікно чату, агент для коду, кнопка «дослідити», сервіс, що призначає зустрічі, — робить одну й ту саму річ, знову і знову:
Ви надсилаєте текст. Модель дописує найімовірніше продовження. Це один виклик. Потім хтось — ви або програма — вирішує, який текст надіслати далі, і той самий виклик повторюється.
От і все. Для текстового обміну — а саме про нього тут ідеться — ніякої іншої прихованої дії немає. Чат працює так само. Агенти — так само. Інструменти — так само. RAG (відповіді за вашими документами) — теж. Змінюються лише дві речі: скільки тексту надходить на вхід і який саме це текст. Сама дія залишається незмінною.
Фраза, яку варто запамʼятати
Один виклик: текст на вхід — продовження на вихід. Усе інше в ШІ надбудовано над цим викликом — за рахунок того, що змінюється текст, який ви надсилаєте.
Як виглядає один виклик
Ви робите один виклик: надсилаєте фрагмент тексту — і більше нічого. Що модель насправді з ним робить?
pick an answer — you get the explanation right away
Ви надсилаєте:
-
один довгий фрагмент тексту — усе, що моделі дозволено бачити в цей момент (це називається контекст), — і
-
модель повертає продовження, яке вважає найімовірнішим.
Поки модель відповідає, вона нічого не шукає: не відкриває ваших файлів і не заходить в інтернет. Вона читає надісланий вами текст і дописує те, що найправдоподібніше має йти далі. Якщо відповіді потрібен факт, цей факт має бути в надісланому тексті. Інакше модель вигадає щось, що звучить правдоподібно.
Вікно чату — це цикл, а не памʼять
Найбільше людей дивує ось що: модель не памʼятає про вас нічого. Вона бачить лише той текст, що надійшов у цьому виклику. Якщо у застосунку є функція памʼяті, збережені факти додає до цього тексту сам застосунок, а не модель.
Коли ви надсилаєте в чаті друге повідомлення, застосунок нічого моделі не «нагадує». Він надсилає всю розмову заново — ваше перше повідомлення, відповідь моделі, ваше друге повідомлення — як один довший фрагмент тексту. Модель щоразу читає його наново, наче вперше, і продовжує з того місця, де текст закінчується.
Із цього випливають дві речі. Довга розмова стає повільнішою і дорожчою: кожне нове повідомлення знову відправляє все, що було раніше. І модель може раптом «забути» щось із початку довгого чату: якщо текст став занадто довгим, найстаріші його частини відкидають або стискають до короткого переказу — а отже, з погляду моделі цього вже не існує.
Ось це покроково. Кожне з трьох ваших повідомлень — окремий виклик: натискайте «надіслати» і дивіться на панель поруч із чатом. Першого разу йде 14 токенів, другого — 38, третього — 58. Нічого ніде не запамʼятовується: увесь цей набір тексту просто надсилається заново.
Звідки тоді беруться інструменти, агенти й RAG
Модель уміє лише одне: продовжити текст, який їй дали. То що взагалі можуть змінити інструменти, агенти й RAG?
pick an answer — you get the explanation right away
Це не різні механізми. Це способи змінити текст перед наступним викликом:
- Інструменти. Модель пише текст на кшталт «виклич сервіс погоди для Києва». Ваша програма виконує справжній запит, забирає відповідь, вставляє її назад як текст і знову викликає модель. Модель весь цей час бачила лише текст.
- RAG (відповіді за вашими документами). Перед викликом програма знаходить у ваших файлах потрібні абзаци й копіює їх у текст, який надсилає. Модель просто читає їх — так само, як читали б ви.
- Агенти. Цикл: виклик, прочитати, що прийшло, щось зробити, вставити результат як текст, викликати знову — поки завдання не виконане або щось не зупинить цикл.
- MCP. Стандартний спосіб підключати інструменти: він задає узгоджений формат, щоб текст моделі «виклич це» і відповідь вашої програми розуміли одне одного.
У кожному з цих випадків відбувається те саме: текст на вхід — продовження на вихід. Змінилося лише те, який саме текст потрапив на вхід.
Чому це допомагає отримувати кращі відповіді
Якщо модель бачить лише надісланий вами текст, то більшість поганих відповідей — це проблема тексту, а не «інтелекту»: інструкція розмита, потрібного факту не додали або контекст такий довгий, що важливе з нього витіснило. Поправте текст — і відповідь зазвичай виправиться сама.
Спробуйте: поспостерігайте за циклом
Попросіть будь-якого асистента показати вам запит у тому вигляді, в якому він іде до моделі. Справжнього запиту застосунку ви не побачите — асистент відтворить лише правдоподібну його версію, але й цього досить: приблизно за хвилину думка «все — це текст» перестане бути абстрактною:
Я хочу зрозуміти, як ти отримуєш повідомлення. Покажи мені звичайним текстом, як
виглядає запит до тебе: масив messages, ролі (system / user / assistant) і де в ньому
моя поточна розмова. І дай відповідь на одне запитання: якщо я надішлю ще одне
повідомлення, що саме надішлеться знову?Що далі
- Якщо хочете зрозуміти механізм глибше — передбачення наступного токена, чому відповіді щоразу різні, чому трапляється впевнена нісенітниця — читайте Як насправді працюють LLM.
- Якщо хочете побачити текст, який справді надходить, — токени, контекстне вікно і параметри, що змінюють продовження, — читайте Розмова з моделлю: токени, контекст і семплінг.
- Якщо потрібна мапа всіх способів, якими текст потрапляє в модель, — промпти, інструменти, MCP, skills, RAG — читайте Одна карта замість хаосу: промпт, інструменти, MCP, skills, RAG, агенти.
Ви надсилаєте в чаті друге повідомлення. Що насправді робить застосунок?
Агент «використовує інструмент». Що відбувається насправді?
Що змінюється між повідомленням у чаті, відповіддю RAG і кроком агента?
Довга розмова раптом «забуває» щось із початку. Найімовірніша причина?