Як заощадити до 90% контексту LLM: Специфікація компактних документів (AI Context Protocol)
Кожен розробник, який активно використовує сучасні великі мовні моделі (LLM, як-от Claude, GPT чи Gemini) для програмування у довгих сесіях, рано чи пізно стикається з невидимим, але дуже дорогим бар’єром — «податком на спогади».
Практика показує: коли ви починаєте нову робочу сесію та намагаєтеся ввести ШІ в курс справи, лише одне перше повідомлення з аналізом архітектури та кодової бази може миттєво поглинути понад 25% усього ліміту контекстного вікна. Ші витрачає колосальний обсяг пам’яті не на написання коду чи розв’язання поточної задачі, а на банальне відновлення в пам’яті стану проекту.
Щоб розв’язати цю проблему, було розроблено AI Context Protocol (AIP) — специфікацію компактних технічних документів, оптимізованих спеціально під особливості токенізації та логіку мислення сучасних ШІ-моделей.
Філософія підходу: Навігаційна карта замість коду
Компактні документи для ШІ — це не заміна читання живого коду, а високоточна навігаційна карта. Вони вказують моделі, «що читати і де», позбавляючи її необхідності аналізувати тисячі рядків вихідних файлів.
Протокол базується на трьох основних документах у корені репозиторію:
1. FUNCTION_PASSPORTS_AI.md (Паспорти функцій)
Це суворий сигнатурний реєстр усіх ключових функцій та модулів системи. Для кожної функції фіксується:
- Точна сигнатура мови програмування.
- Діапазон рядків та хэш останнього комміту, що гарантує актуальність інформації.
- Статус працездатності:
✓(перевірено),⚠(потребує актуалізації),✗(застаріло). - Побічні ефекти (теги
effects: читання/запис БД, робота з файлами тощо). - Карта викликів (
callsтаcalled_byіз зазначенням конкретних рядків у коді). - Контракт поведінки та формат повернення значення при помилках.
2. ARCHITECTURE_SNAPSHOT_AI.md (Архітектурний знімок)
Цей документ описує глобальну формулу виконання запитів, структуру системного кешу (снапшоту), правила взаємодії шарів системи та суворий перелік заборонених залежностей. ШІ звіряється з цим файлом перед ухваленням будь-яких архітектурних рішень.
3. STATE_INDEX_AI.md та HANDOFF-звіти
Журнал завершення робочих сесій. Кожна сесія завершується фіксацією файлу HANDOFF_YYYY-MM-DDTHH-MM.md, де вказуються змінені контракти, статус верифікації коду та чіткі інструкції для наступної моделі. STATE_INDEX_AI.md акумулює ці зміни у форматі однорядкових індексів для швидкого пошуку рішення, що виключає читання всього довгого прозового журналу розробки.
Завдяки чому досягається покращення роботи ШІ та економія токенів?
1. Гранична щільність змісту (Semantic Density)
Звичайна технічна документація для людей містить занадто багато розмовної мови, вежливих конструкцій та довгих пояснень. ШІ-моделям це заважає.
- Як це працює в AIP: Документи використовують максимально стислі, стандартизовані теги та ASCII-маркери. Наприклад, замість опису «функція робить вибірку з бази даних та не має побічних ефектів» використовується один дешевий тег
[DB-R]. ШІ миттєво зчитує сутність за частки мілісекунди.
2. Оптимізація під фізичну токенізацію (ASCII-гігієна)
Токенізатори сучасних LLM (особливо сімейства Claude та GPT) оптимізовані під англійську мову.
- Як це працює в AIP: Специфікація вимагає вести всі компактні документи англійською мовою та використовувати виключно прості символи (наприклад,
✓,✗,⚠,→,←). Оскільки один символ кирилиці або складний Unicode-смайл може кодуватися як2–4 окремих токени, перехід на чисту англійську та базовий ASCII фізично зменшує вартість передачі інформації у3–4 рази.
3. Ліниве завантаження контексту (Lazy Loading)
Коли ШІ намагається розібратися, як працює один компонент системи, він починає лавиноподібно відкривати пов’язані файли, швидко забиваючи пам’ять сесії.
- Як це працює в AIP: Завдяки наявності карти викликів (
callsтаcalled_by) у паспортах функцій, модель бачить взаємозв’язки компонентів ще до того, як завантажить їхній вихідний код. Модель звертається до живого коду точково — лише коли потрібно внести фізичні зміни.
4. Проектування без галюцинацій завдяки контрактам
Значна частина лімітів повідомлень у чатах витрачається на цикли «спробуй знову»: ШІ генерує код з помилкою -> розробник повертає помилку -> ШІ виправляється.
- Як це працює в AIP: У паспортах функцій чітко задокументовані контракти та обмеження (наприклад,
assumes '?' occurs only as a parameter placeholderабо поведінка на кшталтfail: [] on execution failure). Модель одразу отримує точні обмеження і створює працездатний та сумісний код з першої спроби, заощаджуючи ваші повідомлення та час.
5. Інкрементні оновлення замість повної перезаписи
Кожна нова сесія розробника отримує не всю історію розробки та гігабайти коду, а лише знімок архітектури, поточний статус та паспорти тих функцій, які були зачеплені останніми змінами.
Ефект від впровадження у цифрах
| Метрика порівняння | Без використання AIP (передача сирого коду) | З використанням AI Context Protocol (AIP) | Ефект від впровадження |
| Обсяг початкового контексту | Весь вихідний код проєкту (~500+ Кб) | Знімок архітектури + зачеплені паспорти (~40—80 Кб) |
Заощадження до 90% ліміту контексту на старті кожної сесії. |
| Точність написання коду | Низька (ШІ часто галюцинує сигнатурами та типами) |
Висока (модель суворо дотримується задекларованих контрактів) | Скорочення кількості ітерацій налагодження у |
| Витрата ліміту сесії | Швидке вичерпання лімітів за |
Тривала, стабільна робота без втрати ШІ фокусу уваги | Зниження витрат на API та збереження працездатності моделі. |
Висновок
AI Context Protocol змінює ставлення до пам’яті ШІ-асистента, перетворюючи її з бездонного смітника на цінний ресурс, яким можна ефективно керувати. Такий підхід до «гігієни контексту» дозволяє розробникам створювати складні системи у синергії з моделями штучного інтелекту, не втрачаючи фокус у довгих сесіях та заощаджуючи бюджет на використання API.
14 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівсорян але цей текст без посилання на фактичну реалізацію мало чого вартий
Поспілкуйтеся із своїм ШІ на рахунок чи це корисна річ, чи ні.
Що там пропонують (AI Context Protocol)
Три файли в корені репо: FUNCTION_PASSPORTS_AI.md (реєстр сигнатур функцій з діапазонами рядків, хешами комітів, тегами ефектів, картою викликів), ARCHITECTURE_SNAPSHOT_AI.md (архітектурні правила + заборонені залежності), STATE_INDEX_AI.md + HANDOFF-звіти (журнал сесій в однорядковому індексі). Плюс набір «принципів»: семантична щільність через ASCII-теги, англійська для економії токенів, lazy loading через карту викликів, контракти проти галюцинацій, інкрементні оновлення.
Що тут реально цінне для Forge
HANDOFF + STATE_INDEX — це фактично те, чим у тебе вже є твоя memory-система і handoff між сесіями/агентами. Ідея індексувати завершення сесій в однорядкові записи, щоб наступний агент не читав увесь прозовий лог — здорова. Якщо в Forge handoff зараз прозовий, варто глянути на компактніший індекс-формат.
Контракти функцій проти галюцинацій — теж робоча ідея, але вона не нова, це фактично type stubs + behavioral contracts. Цінність не в самому форматі, а в тому, щоб він автогенерувався і не протухав.
Де в статті брехня або наївність (і це важливо для тебе)
Головна діра, яку одразу помітили в коментарях (Roman, TL): розмір стартового контексту — це не основна витрата токенів. Основне пальне — це кількістьLLM-раундів × виклики тулзів. Можна запакувати проєкт у 30k, але якщо агент робить 10 раундів tool calls, це 30k×10 + накопичення = сотні тисяч токенів на один промпт. Реальний важіль — делегація підагентам, а не компактні md-файли. Це прямо б’ється з архітектурою Forge, де ти вже робиш multi-agent — тобто ти вже вирішуєш справжню проблему, а стаття вирішує другорядну.
Ручна синхронізація = гарантоване протухання. Діапазони рядків і хеші комітів уmd-файлі, які підтримуються вручну або напів-вручну — класична пастка. Перший же рефакторинг зсуває рядки, і паспорти брешуть. Тег ⚠ потребує актуалізації — це визнання, що система не самопідтримується. Без автогенерації з AST/LSP це merge-conflict-ферма і джерело галюцинацій замість захисту від них.
«Кирилиця =2-4 токени, тому пишіть англійською» — вимірювана, але дрібна економія, роздута до принципу. Для навігаційної карти на 40-80 Кб різниця в токенізації тегів — шум на тлі тих самих tool-call раундів.
Автор — «SEO Owner GPDP», не інженер, і в статті нема жодного репо, жодного бенчмарку на реальному проєкті. Перший коментар — «І шо, де воно є?». Другий — «форкни Mattermost і покажи». Тобто це специфікація без імплементації та без доказів. Цифра «90%» — маркетингова, не заміряна.
Щось не зрозумів ким було розроблено? Це загальноприйнятий протокол чи ваші наробки
І чи протокол це взагалі, а не набір практик?
Протокол розроблено нашою командою в рамках автоматизації розробки open-source фреймворку GPDP. Це наша внутрішня практика, яка народилася з болю, коли нагальні архітектурні розбори в Claude/GPT почали «з’їдати» по25-30% ліміту сесії лише на етапі «пригадування» контексту.
Наразі це не є міжнародним W3C-стандартом, тому термін «протокол» тут вживається у значенні угоди (інструкції) взаємодії між розробником та конкретним ШІ в рамках одного репозиторію. Ви абсолютно праві — це набір жорстких практик форматування та актуалізації даних. Ми оформили його як «протокол», тому що для ШІ це працює як чіткий алгоритм дій: отримав набір тегів -> розпарсив граф -> видав точний результат без зайвих питань.
Загалом «Гранична щільність змісту» справді працює, але питання в реалізації.
Тобто якщо є модульна архітектура, і є документи, які це описують з референсами на інші документи — це спрощує пошук.
Також практикую HANDOFF-звіти.
Але решта (наприклад, FUNCTION_PASSPORTS_AI) — це трошки задуже, бо якщо функції зміняться, а про доку забудуть — все попливе. Тому це може бути лише структура на high-level + умовний Graphify якщо взагалі кастомна архітектура, яку LLM не розуміє.
Володимире, дякую за крутий фідбек! Ваше зауваження щодо FUNCTION_PASSPORTS_AI — це головний ризик, який ми прораховували. Якщо документація застаріє, ШІ почне галюцинувати на основі старих даних.
Ми вирішили це через автоматизацію та прив’язку до Git: У кожному паспорті є мітка loc (рядки коду) та commit (SHA-хэш останньої правки цього діапазону). ШІ має маркер status: якщо код після зазначеного комміту змінювався, статус автоматично переходить у ⚠ (не гарантовано точний). Оновлення паспортів ми делегуємо самому ШІ наприкінці сесії або автоматичним скриптам.
Але ви маєте рацію: для величезних legacy-проектів писати паспорти на кожну дрібну функцію — це оверхед. Там краще тримати high-level архітектуру + паспорти лише для «ядерних» (core) інтерфейсів та API-шлюзів.
І шо, де воно є?
аж ось! Море... Чайки...!
LOL , шо це?
Друже, візьми форкни якийсь опен-сорс проект, скажімо Mattermost github.com/mattermost/mattermost
і продемонструй на ньому ефективність — хоч файлики оті про які ти вище згадуєш додай, щоб можна було на них подивитись.
Описуєш якогось сферичного коня в вакуумі.
Віталію, дякую за виклик! Приклад з 500+ Кб — це обсяг ядра нашого поточного проекту, на якому ми валідували підхід.
Щодо Mattermost чи будь-якого іншого великого проекту: ви абсолютно праві, якщо спробувати закинути весь Mattermost в контекст ШІ — модель або «осліпне» (через loss-of-attention всередині довгого контексту), або здеградує. Саме для таких гігантів наш підхід і створений.
Ми не пропонуємо описувати кожну функцію в Mattermost. Ідея в тому, щоб ШІ, працюючи, наприклад, лише з модулем сповіщень (Notifications), мав перед очима ARCHITECTURE_SNAPSHOT (правила взаємодії всього проекту) та FUNCTION_PASSPORTS лише для суміжних модулів. Це дозволяє моделі оперувати контекстом великого проекту локально, не виходячи за рамки лімітів вікна. Обов’язково подумаємо над тим, щоб викласти публічний кейс-стаді на прикладі якогось відомого форку!
Я поки працював на декількома AI harness проєктами прийшов до висновку , що розмір контексту це не проблема. Більшість токенів спалюються через виклики тулзів, тобто чим більше LLM rounds тим більше токенів ви спалюєте.
Ви можете запакувати весь контекст проєкту у 30к токенів, але коли ЛЛМ хоче 10 викликів тулзів щоб розрулити ваш промпт, то ви спалите 30К*10 токенів (+ кожен раунд додає трохи до контексту), тобто це буде 400к токенів на промпт.
Поки єдине, що реально допомагає це максимальна делегація промптів до підагентів.
Романе, це надзвичайно влучний коментар, дякую! Ви підняли дуже глибоку тему агентської архітектури. Ви абсолютно праві: кожен раунд tool call дублює та нарощує контекст, перемножуючи витрати.1-2. ШІ одразу знає, який файл відкрити і яку функцію викликати, без блукання по репозиторію. Тобто AIP — це, по суті, паливо для тих самих під-агентів, про які ви кажете, щоб вони не палили токени на розвідку.
Але наш протокол якраз і б’є в цю точку! Чому ШІ робить 10 викликів тулзів (наприклад, файлового пошуку чи grep)? Тому що він «наосліп» шукає, де лежить потрібна логіка і які там контракти.
Коли ми даємо під-агенту компактний FUNCTION_PASSPORTS_AI, де вже зібрано граф викликів (calls/called_by) та точні інтерфейси, ми скорочуємо кількість пошукових раундів (tool calls) з 10 до
у мене таке відчуття, що за вас відповідає ChatGPT )