Створення AI-додатків, які справді працюють, полягає не стільки в написанні ідеального промпту, скільки в контролі над інформацією, яку ви подаєте моделі. Якщо ви коли-небудь вели довгий чат з асистентом лише для того, щоб усвідомити, що він забув щось, сказане вами десять хвилин тому, ви вже відчули, що стається, коли інженерія контексту дає збій. Легко припустити, що у ШІ погана пам'ять. Насправді ви зіткнулися з жорсткими межами контекстного вікна.

Щоб будувати надійні та швидкі системи, вам потрібно розуміти три основи: токени, контекстні вікна та різницю між контекстом і пам'яттю.

Токени — це справжня валюта

Токен — це не слово. Коли ви надсилаєте текст моделі, токенізатор розбиває його на менші частини. Короткі поширені слова, як-от "cat" або "the", можуть займати по одному токену. Щільний технічний термін на кшталт "internationalization" розрізається на кілька. Пунктуація, пробіли та спеціальні символи також враховуються. Це важливо, тому що токени керують усім: вашим рахунком за API, швидкістю відповіді та якістю результату.

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

Контекстне вікно — це фіксована маркерна дошка

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

Сучасні моделі пропонують контекстні вікна від кількох тисяч до сотень тисяч токенів. Виникає спокуса сприймати велике вікно як необмежене сховище. Але це не так. У дошки все одно є краї. Коли історія перевищує ліміт, додаток має видаляти старі повідомлення або стискати їх. Розуміння цього обмеження допоможе вам перестати сприймати вікно як базу даних і почати ставитися до нього як до робочого простору.

Контекст — це не пам'ять

Ось розрізнення, на якому помиляються навіть досвідчені розробники. Сама модель є безстанною (stateless). Вона не пам'ятає вас із вчорашнього дня, минулого тижня чи десяти хвилин тому в іншій сесії. Коли ШІ ніби згадує, що ви віддаєте перевагу Python замість JavaScript або що вам подобаються стислі відповіді, ця пам'ять живе на рівні додатка, а не моделі.

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

Чому надлишок контексту може зашкодити

Здоровий глузд підказує, що більше фонової інформації має давати кращі відповіді. Часто стається навпаки. Надмірний контекст створює шум. Якщо ви передасте моделі весь кодовий базис, коли потрібно виправити лише одну функцію, ви змусите її шукати сигнал у шумі. Дослідники виявили ефект «Lost in the Middle» (втрата в середині): моделі часто приділяють більше уваги деталям на початку та в кінці промпту, тоді як інформація, заглиблена в центрі, розмивається або ігнорується. Це не баг, який можна виправити розумним формулюванням. Це структурна поведінка, притаманна архітектурам на основі трансформерів.

Роздуті промпти також б'ють по найболючішому. Кожен додатковий токен потребує обчислень. Затримка (latency) зростає. Витрати зростають. Терпіння користувача зменшується. Промпт, набитий нерелевантними документами, вносить суперечності, відволікає модель другорядними деталями та підвищує ймовірність того, що відповідь зосередиться на не тій проблемі. Обсяг — ворог точності.

Як проєктувати кращий контекст

Хороша інженерія контексту — це вправа з безжального редагування. Ось як втілити це на практиці.

Надсилайте лише те, що вимагає завдання. Якщо користувач запитує про вашу політику повернення коштів, не додавайте посібник для працівників, документацію API та маркетингові матеріали за минулий квартал. Релевантність важливіша за повноту.

Використовуйте RAG для пошуку релевантних документів. Retrieval-Augmented Generation дозволяє шукати у великій базі знань і вставляти в промпт лише найбільш відповідні уривки. Замість того, щоб закидати у вікно тисячосторінковий посібник, ви створюєте ембедінги своїх документів, запускаєте семантичний пошук за запитом користувача та додаєте три найбільш релевантні абзаци. Модель отримує саме те, що їй потрібно, а ваш бюджет токенів залишається цілісним.

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

Відокремлюйте довготривалу пам'ять від активного чату. Попередні налаштування користувача, параметри проєкту та історія облікового запису мають зберігатися у зовнішньому сховищі пам'яті. Виконуйте запити до цього сховища вибірково. Активне вікно контексту має містити лише поточне завдання та найкоротший особистий контекст, необхідний для підтримки зв'язку.

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

Головний висновок

Найкращі ШІ-додатки перемагають не тому, що мають найбільші вікна контексту. Вони перемагають завдяки дисциплінованому управлінню контекстом. Величезна дошка марна, якщо вона замальована каракулями. Створюйте системи, які здійснюють пошук, резюмують та фільтрують. Ваші користувачі отримуватимуть швидші відповіді, витрати на інфраструктуру залишатимуться передбачуваними, а ваші моделі нарешті звертатимуть увагу на те, що справді важливо.

Джерело: AI Context Engineering: Tokens, Context Windows, & Memory

Спільнота: GyaanSetu AI у Telegram