AI-агент як технічний письменник: як я автоматизував генерацію бізнес-документації з Agile-артефактів за $20

💡 Усі статті, обговорення, новини про AI — в одному місці. Приєднуйтесь до AI спільноти!

Привіт. Мене звати Євген Харчук. Я Salesforce-архітект з дев’ятирічним досвідом, більшість із яких — робота на ентерпрайз-проєктах. Зараз працюю в EPAM як Software Architect. Поза роботою граю у великий теніс, проводжу час із дітьми і копаю все, що пов’язано з AI — особливо цікавить, як цю нову реальність вбудовувати в існуючі ентерпрайз-системи.

Вступ

Ми почали впроваджувати на проєкті систему AI-агентів для повного циклу розробки — від аналізу вимог до імплементації. Агент-продакт-овнер, агент-архітектор, агент-розробник — кожен зі своєю роллю, кожен працює на своєму етапі. Щось на кшталт BMAD Method — open-source фреймворк для agile-розробки з AI-агентами.

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

А ці знання — бізнес-процеси, ролі, зв’язки між модулями — в гіті не живуть. Код є, тікети є, сотні закритих stories є. Але цілісної картини, яку можна швидко скормити агенту, — нуль.

Тому я написав фреймворк і зібрав агентний pipeline, який тягне Agile-артефакти (Rally у моєму випадку, але підходить і Jira, і Azure DevOps — що завгодно з ієрархією Feature → Story) і перетворює їх на структуровану базу знань. Понад десять бізнес-процесів, десятки автоматизацій, інтеграції, персони — усе зібрано в одному місці, з метаданими і графом залежностей. Триста фіч за три роки проєкту я обробив приблизно за 600 premium-запитів у GitHub Copilot на GPT-5.4. За публічним прайсом це десь $20.

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

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

Чому git-репозиторію недостатньо

Перше, що хочу розмежувати відразу. Є купа тулів, які генерують доку з коду: JavaDoc, JSDoc, різні API-референс генератори. Це все працює на технічному рівні — класи, методи, ендпоінти. Якщо вашому проєкту вистачає такого, далі можна не читати, ця стаття про інше.

У мене задача виглядала зовсім по-іншому. Бо коли маєш справу з великою CRM чи ERP — Salesforce, SAP, ServiceNow, та навіть кастомна платформа — там система живе не класами, а бізнес-сценаріями. От є процес обробки замовлення. Є процес онбордингу клієнта. Є ескалація інциденту. І ці штуки ніде в гіті в явному вигляді не існують. Вони розмазані по десятках класів, конфігурацій, автоматизацій, UI-сторінок. Жоден генератор доки з коду не скаже тобі: «ось твій бізнес-процес від А до Я, ось де він розгалужується, ось які інтеграції зачіпає».

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

Agile-артефакти: вони не хаотичні, але читати їх неможливо

У більшості проєктів, де окрему доку ніхто не тримав, Agile-інструмент стає єдиною базою знань де-факто. Rally, Jira, Azure DevOps — неважливо. Feature → User Story → Test Case: у цій ієрархії є і бізнес-контекст, і вимоги, і сценарії, і ролі.

Але тут є підступ, який я довго не міг сформулювати. Agile-артефакти — вони не хаотичні. Вони цілком собі структуровані, кожен окремо. Проблема в іншому: вони відображають таймлайн розробки, а не актуальний стан системи. Працюють як ланцюжок git-комітів — кожна нова фіча, кожна story це ніби «патч» поверх попереднього стану. Нові stories перетирають старі, уточнюють, змінюють поведінку, додають винятки. І щоб зрозуміти, як конкретна річ працює зараз, тобі треба прошерстити всі пов’язані артефакти — а їх буває десятки. Для системи з трьома сотнями фіч це робити вручну доволі складно.

Ще один момент, який мене здивував: я пробував підключити AI-агента напряму до Rally через MCP-інтеграцію. Думав — ну он, нехай сам шукає потрібні тікети. Пробував і пошук по ключових словах, і навіть контекстний пошук через векторну базу. Не працює. Нормально не працює — агент не може зібрати повну картину з розрізнених фрагментів через пошук. Йому потрібна або вся історія по сутності цілком, або вже готовий структурований документ.

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

Мій контекст: чому Salesforce, і чому це не тільки про Salesforce

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

Документація в нас була в типовому стані: щось на Confluence (написане два роки тому і з тих пір ніхто не відкривав), щось у головах людей (які частково вже пішли з проєкту), а щось — просто ніде. Зате в Rally лежало кілька сотень фіч і тисячі user stories. Найповніший опис системи, який існував — тільки от не у вигляді документації, а у вигляді хронологічного потоку тікетів.

З чим я мав справу: п’ять болів

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

Другий — знання розкидані всюди. По тікетах, по Confluence, по чатах, по коду, по головах людей. Ніхто — ні людина, ні агент — не бачить цілісної картини.

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

Четвертий — impact analysis на інтуїції. Хочеш щось змінити — і не знаєш, що посиплеться. Люди покладаються на «ну я ж тут давно працюю, я приблизно знаю». Продакт-овнери і бізнес-аналітики упускають деталі, які потім довго рефайниш і допрацьовуєш. А потім prod incidents.

П’ятий — вручну документувати неймовірно дорого. Бізнес-аналітику мало просто тікети вести. Треба ще описувати модулі, бізнес-процеси, залежності між ними. Сотні людино-годин. І все це застаріває через місяць, бо система не стоїть на місці.

Що я зробив

Я побудував фреймворк для модульної бізнес-документації. Не «попросив ChatGPT написати доку», а інженерну систему з правилами, типами документів, валідацією і пайплайном.

Ось що вона вміє:

  • Генерувати документацію з Agile-артефактів або будь якої неструктурованої інформаціі (чати, транскрипціі мітингів, коміти в гіті) автоматично — агент читає інформацію і розкладає по поличках
  • Тримати жорстку структуру — у кожного документа є тип, метадані, межі вмісту, зв’язки з іншими документами
  • Підтримуватись інкрементально — зробив нову story, прогнав через той самий pipeline, документація оновилась
  • Бути зручною для AI-агентів — метадані машинно-зчитувані, є граф залежностей, є механізм прогресивного завантаження (агент підвантажує тільки те, що йому зараз потрібно)

Ключова штука, яка відрізняє це від генерації доки з коду: фреймворк документує те, чого в гіті немає у явному вигляді. Бізнес-процеси, ролі, зв’язки між модулями на рівні семантики, а не на рівні імпортів між класами.

Як влаштований фреймворк

Шари

Вся документація розбита на семантичні шари:

L1 — це бізнес-процеси, і там заборонено писати про поля бази даних чи ендпоінти. L2 — платформні сутності (об’єкти, автоматизації), і там навпаки — без бізнес-наративу. Це не рекомендація типу «бажано дотримуватись», це контракт, який перевіряється валідаційним скриптом автоматично.

Можна додати ще L3 — інженерний шар (стандарти кодування, тестування, деплоймент), але я вирішив, що це опціонально. Суть-то фреймворку — документувати те, що з гіту не витягнеш. А код агент може й сам прочитати.

Посилання між документами теж мають правила: йдуть «вниз» по шарах (L0→L1→L2) або «вбік» (L2↔L2). Знизу вгору — тільки навігаційний тег participates-in, щоб від об’єкта можна було швидко знайти, у яких бізнес-потоках він задіяний.

Один документ = одна сутність

Це просто, але на практиці дуже важливо. Один файл описує рівно одну річ: один об’єкт, або одну автоматизацію, або одну фазу процесу. Завдяки цьому будь-який документ можна оновити незалежно. І граф залежностей не перетворюється на мотлох.

Композиція бізнес-потоків — над цим я думав найдовше

Ось це, мабуть, найцікавіша частина.

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

Стандартний підхід в IT — діаграми. BPMN, UML activity, swim-lane. Кожен сценарій — окрема діаграма. Але от уявіть бізнес-потік з п’ятьма етапами і десятьма розгалуженнями. Це ж десятки діаграм. А тепер уявіть, що вам їх ще й підтримувати в актуальному стані. Нереально. Плюс діаграми для AI-агента — не дуже зручний формат. Йому потрібен текст, модульний, з чіткими лінками.

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

  • Потік (flow) — просто список фаз у правильному порядку. І загальна інформація.
  • Фаза (phase) — окремий етап процесу. Описує стандартний шлях. Ключовий момент: фаза може входити до кількох потоків.
  • Варіація (variation) — відхилення від стандартного шляху фази. Описує лише дельту: «а от якщо клієнт на credit hold, тоді відбувається отаке».

Якщо проводити аналогію з кодом: потік — це функція, яка викликає інші функції (фази). Варіації — умовні розгалуження. Фаза, яка шариться між кількома потоками — це shared utility. Якщо потрібна поведінка, специфічна для конкретного потоку, — оформляєш як окрему варіацію.

Чому мені це подобається:

  • Фаза написана один раз, навіть якщо входить до п’ятьох потоків. Ніякого copy-paste.
  • Додати нову варіацію — це додати один файлик і лінк. Не переписувати діаграму.
  • Агент завантажує рівно ту фазу чи варіацію, яка йому потрібна. Не весь потік цілком.
  • Прийшла нова user story, яка міняє один етап? Оновлюєш один файл фази, не чіпаючи решту.

Наскільки я шукав, подібний модульний підхід до документування бізнес-потоків саме під AI-споживання раніше ніхто не описував. Можливо, я просто погано шукав — буду вдячний за посилання на аналоги.

Навіщо документувати автоматизації, якщо код і так в гіті

Це питання, яке мені задавали кілька разів, тому хочу пояснити.

Типова автоматизація в ентерпрайз-системі — це не один клас і не один файл. Це trigger handler, який смикає service class, який тягне за собою utility, який працює з трьома об’єктами і має купу guard conditions. Щоб AI-агент зрозумів, що робить ця автоматизація, йому треба завантажити в контекст файлів двадцять. Контекстне вікно не гумове.

А в бібліотеці — один документ на 500–1000 токенів. Написано людською мовою: «спрацьовує при такій події, робить ось це, має такі умови, залежить від таких об’єктів». Агент підвантажує один файлик — і вже розуміє контекст. Якщо потім йому потрібні деталі реалізації — іде в код. Бібліотека — це навігаційний і контекстний шар, не заміна коду.

Робиться це один раз. А потім, коли автоматизація змінюється через нову фічу чи story — прогоняєш через той самий pipeline, і документ оновлюється.

INDEX: зміст всієї системи за дві тисячі токенів

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

Ці підказки беруться з поля ai-when-to-load, яке є в кожному файлі:

ai-when-to-load: "Коли працюєш із процесом обробки замовлень або об'єктом Order"

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

Для агента INDEX — це точка входу. Він не сканує файлову систему і не вгадує імена. Прочитав INDEX за пару тисяч токенів — і вже бачить усю систему: які є бізнес-потоки, об’єкти, автоматизації, інтеграції. Далі підвантажує 1–3 потрібних документи — і працює.

Фронтматер: метадані, які перетворюють текст на граф

На початку кожного документа стоїть YAML-блок — фронтматер. У ньому зібрано все, що потрібно для машинної обробки:

  • тип документа (business-flow, object, automation тощо)
  • унікальний ідентифікатор
  • depends-on — від яких документів цей залежить
  • consumed-by — хто залежить від цього (заповнюється автоматично скриптом)
  • ai-when-to-load — підказка для агента, коли вантажити
  • ai-token-estimate — скільки контексту з’їсть цей файл

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

Як працює pipeline

Stage 1: витягуємо знання з Agile-артефактів

На вході — JSON-файли. Кожна фіча експортована цілком, з усіма дочірніми stories і тест-кейсами (якщо є). На виході — структурована документація.

Архітектура агентна, два рівні:

Orchestrator бере з черги наступну необроблену фічу, передає її Knowledge Curator, чекає результат, просуває чергу далі.

Knowledge Curator — робочий кінь процесу. Він читає фічу, виковирює з неї сутності (об’єкти, автоматизації, персони, потоки), класифікує їх за типами, створює або оновлює документи. І — це важливо — після кожної фічі запускає валідацію. Тобто одразу бачить: о, цей документ виріс за ліміт токенів, а тут посилання бите, а тут контент вилізає за межі типу. І виправляє це в тій самій сесії.

Одна фіча — один виклик агента. Якщо щось крашнулося, я точно знаю, де зупинилось.

Інформації в stories і фічах вистачає для генерації нормальної бізнес-документації — там описано, хто що робить, які об’єкти задіяні, які сценарії є. Тест-кейси, коли вони є, дають додатковий контекст — передумови, кроки, очікувані результати. Але й без тест-кейсів все працює, просто десь будуть маркери [UNVERIFIED].

Агент не просто copy-paste тексту. Він робить структурні операції: мерджить документи, якщо вони про одне й те ж; розбиває, якщо документ роздувається; переносить фази між потоками; підвищує варіацію до фази, якщо вона того заслуговує; переіменовує, якщо канонічне ім’я змінилось. Такі собі рефакторинг-операції, тільки для доки.

Stage 2: перевіряємо документацію кодом (grounding)

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

Це працює по треках — кожен трек перевіряє один тип сутностей. На моєму Salesforce-проєкті це виглядало так: спочатку об’єкти (перевірка проти метаданих), потім автоматизації (зіставлення з кодом), інтеграції, ролі, UI, заплановані задачі (scheduled jobs). Для іншої платформи треки будуть своїми.

Принцип той самий: оркестратор збирає докази з коду, але сам нічого не пише. Писати дозволено тільки Knowledge Curator.

Stage 3: живе підтримання

Після bootstrap і grounding документація підтримується тим самим процесом. Зробив фічу — прогнав Curator — він оновив що треба, запустив валідацію. Все. Документація живе разом з проєктом, а не гниє на Confluence.

Скільки це коштує

Ну от тут найцікавіше, мабуть.

GitHub Copilot, модель GPT-5.4 — у неї достатньо велике контекстне вікно, щоб обробити цілу фічу з десятками stories за одну сесію. Одна фіча — один premium-запит.

У проєкті було десь 300 фіч. На їх обробку пішло приблизно 600 premium-запитів (сам bootstrap плюс повторні прогони, бо паралельно допилював фреймворк). У мене enterprise-підписка через клієнта, тому реально я не платив нічого. Але якщо орієнтуватись на публічний прайс GitHub Copilot — базова підписка $10/місяць дає 300 premium-запитів. Тобто мої 600 запитів коштували б приблизно $20.

Двадцять доларів — і структурована база знань для системи, яку команда не змогла задокументувати за три роки. Ну, звичайно, це не «натиснув кнопку і полетіло». Потрібен час на налаштування фреймворку, review результатів, ручне вирішення конфліктів. Але сама генерація контенту — двадцятка. Порівняйте з вартістю бізнес-аналітика, який би сів писати це руками.

Історія з реального життя: як AI агент заплутався в іменах

Ось один випадок, який непогано ілюструє і сильні, і слабкі сторони підходу.

Був у нас об’єкт в Salesforce. Спочатку він назвався, скажімо, «А». Потім його перейменували на «Б». Через кілька спринтів повернули назад на «А». А ім’я «Б» тим часом забрали під абсолютно новий об’єкт з іншою семантикою.

Тепер уявіть: агент обробляє фічі хронологічно. У ранніх stories згадується «А». У середніх — «Б» (але це той самий об’єкт!). У пізніх — знову «А», але тепер це може бути або повернутий оригінал, або щось зовсім інше. Класична історія з «хронологічними патчами» — щоб розібратись, треба відтворити всю історію перейменувань.

Агент не зміг це розрулити сам. Саме для таких моментів і потрібен human-in-the-loop. Бажано, хтось зі знанням системи. Частину таких сценаріїв агент може підсвітити у session reports.

Як ми це використовуємо

Контекст для AI-агентів — основний use case. Саме для цього все і робилось. Агент-продакт-овнер готує нову фічу — відкриває INDEX, знаходить релевантні бізнес-потоки і автоматизації, підтягує залежності — і має повну картину для прийняття рішень. Не упускає деталі, які раніше випливали вже на етапі розробки. Агент-архітектор бачить граф залежностей і підсвічує ризики: «ця зміна зачепить ось ці три модулі і дві інтеграції». Impact analysis — по графу depends-on / consumed-by за хвилини.

Документація, яка не застаріває. Не Confluence-сторінка, яку хтось написав рік тому і більше не відкривав. А бібліотека, яка оновлюється тим самим процесом, що й розробка.

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

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

Обмеження, без яких було б нечесно

Що на вході — те й на виході

Garbage in, garbage out. Якщо story написана як «зроби щоб працювало» — агент створить порожній документ з маркером [UNVERIFIED]. Але, якщо чесно, більшість проєктів має достатньо інформації в stories і фічах для генерації корисної документації. Тест-кейси допомагають, але без них теж ок.

Edge cases

Перейменування (як розповідав вище), неповні описи інтеграцій, моменти коли агент вирішує реструктурувати документи (merge, split, reparent) — це все потребує уваги. Не критично, але очікувати повну автоматизацію без review поки рано.

Висновки

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

Підхід не прив’язаний ні до Salesforce, ні до Rally. Шарова модель, трирівнева композиція потоків, фронтматер як контракт, валідаційний pipeline — це все переноситься на будь-яку ентерпрайз-систему з ієрархією Epic → Feature → Story. Міняєш формат експорту — і вперед.

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

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

Сподобалась стаття? Підписуйтесь на автора, щоб отримувати сповіщення про нові публікації на пошту.

👍ПодобаєтьсяСподобалось16
До обраногоВ обраному11
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Ви не розглядали можливість застосування доменної онтології або хоча б доменного тезаурусу? Тоді б не було плутанини в іменах і граф знань був би більш якісний.

Плутанина в іменах в нашому випадку виникла через використання стандартного Salesforce-обʼєкта з його канонічним імʼям, яке мало ширше значення і покривало два процеси, які вирішили згодом розділити.

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

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

Тому я б це, якби вирішував, то зробив би трохи інакше. Я б додав guardrails-шар, який би був просто інструкцією агенту пильнувати та підсвічувати потенційні конфлікти в іменах і зупиняти пайплайн для інпуту зі сторони людини. AI добре розуміють семантику, тому цей підхід був би найбільш абстрактним і міг закрити сценарії, які ми ніколи всі не продумаємо і не покриємо зазделегідь.

Запаблішив англомовну, розширену версію статті, на medium, де відповів на найпоширеніші, та найцікавіші питання.

Посилання: medium.com/...​ocumentation-51c114a106b2

Стандартний підхід в IT — діаграми. BPMN, UML activity, swim-lane.
Плюс діаграми для AI-агента — не дуже зручний формат. Йому потрібен текст, модульний, з чіткими лінками.

Не дивилися в сторону Mermaid?

+ Недавно Andrej Karpathy опублікував LLM Wiki (A pattern for building personal knowledge bases using LLMs) — може бути корисно почитати його думки на рахунок генерування і підтримання документації використовуючи LLMs

Так, я бачив гіст Карпаті — він вийшов буквально кілька днів тому і описує рівно той самий патерн: compiled wiki замість RAG, LLM пише і підтримує, людина курирує. Приємно бачити валідацію підходу від такого авторитету.

Різниця в тому, що Карпаті описав патерн — абстрактну ідею верхнього рівня, domain-agnostic, з нульовим порогом входу (Obsidian + будь-який LLM). Мій фреймворк — це production-реалізація того ж патерну для enterprise-систем: строга типізація документів, семантичні шари з правилами що може і не може бути в кожному шарі, формалізований граф залежностей (depends-on / consumed-by), композиційна модель бізнес-процесів (flow → phase → variation), grounding-верифікація проти реального коду, і валідаційний pipeline скриптами, а не промптами. Плюс документація живе в тому ж PR що і код — не окремий артефакт.

Декілька коментаторів у нього в гісті прямо пишуть що наївна реалізація ламається на ~200 документах через компаундінг помилок і конфлікти посилань — саме ті проблеми які типізація і валідація вирішують.

По суті — convergent evolution. Прийшли до одного архітектурного рішення незалежно, з різних сторін.

Дуже крута бібліотека. Дякую за посилання. Зараз йде активна дискусія і пошук підходів для підтримування памʼяті агента: хтось будує RAG, хтось — от такі графи з чоткими часовими мітками актуальності, а хтось — щось проміжне, як-от github.com/MemPalace від Міли Йововіч 😂.

Але важливо підкреслити, що ці бібліотеки побудовані для побудови памʼяті сесій і чатів, у той час як мій фреймворк генерує документацію зі структурованими документами, без дублювання, з залежностями і посиланнями. Це зовсім різні бібліотеки.

Привіт, дуже гарні запитання.

Mermaid ми активно використовуємо бо ці діаграми у текстовому форматі дуже короткі, а VS Code гарно рендерить їх як частину MD файлів. Я навіть дав інструкцію агентам фреймворку опціонально генерувати такі діаграми за необхідності. Але тут важливо відокремити яка цільова аудієнція вашої бібліотеки знань. Якщо це AI агенти то їм важливіше мати текстовий опис елементів та їх взаємодіі, і діаграми наврядчи дадуть якийсь додатковий профіт тут. Якщо ви хочете щоб люди також активно користувались бібліотекою напряму, без використання AI, то дуже важливо додавати діаграми.

Якщо ви хочете щоб люди також активно користувались бібліотекою напряму

Все це вирішується, Github, наприклад, підтримує відображення Mermaid diagrams.

Якщо це AI агенти то їм важливіше мати текстовий опис елементів та їх взаємодіі, і діаграми наврядчи дадуть якийсь додатковий профіт тут.

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

Я розумію вашу точку зору і згоден що є сценарії де Mermaid діаграма може замінити free format документацію. Але багато типів документів не зручно представляти у вигляді діаграм. Принаймні у нас так. Наприклад булет ліст фактів (або характеристик) немає сенсу представляти діаграмою.

Наприклад булет ліст фактів (або характеристик) немає сенсу представляти діаграмою.

а — ви мабуть мене не так зрозуміли (чи я вас) — я мав на увазі опис сценаріїв, залежностей, etc.

Євгене, дякую за статтю!

Питання: чи порівнювали ви свій підхід із коробочними інструментами на кшталт Github spec kit (github.com/github/spec-kit) чи Kiro (kiro.dev) / github.com/gotalab/cc-sdd ?

Дякую за питання! Так, я знайомий з цими інструментами. Вони вирішують суміжну, але принципово іншу задачу.

Spec Kit, Kiro та cc-sdd — це інструменти парадигми Spec-Driven Development (SDD). Їхній workflow: опис фічі (spec) → технічний план (design) → задачі (tasks) → AI генерує код. Фокус на створенні нового коду для окремих фіч. І увага: специфікація в SDD-інструментах одноразова, per-feature. Єдиного снепшоту системи вони не будують.

Мій фреймворк вирішує іншу задачу на іншому рівні абстракції. Він автоматично будує та підтримує в актуальному стані knowledge base всієї системи — бізнес-процеси, фази, варіації, а також додаткова документація, яка може бути корисною для розуміння бізнес-процесів і системи взагалом — об’єкти, інтеграції, UI, автоматизації — зі зв’язками між ними. Джерелом є сам Git-репозиторій та існуючі agile-артефакти (Rally/Jira), а не окремо написані специфікації.

Ключові відмінності:

Напрямок SDD — forward (spec → код). Мій фреймворк — bidirectional (код/метадані → документація → контекст для планування нового).

Скоуп SDD: працює з однією фічею. Фреймворк — з усією системою (100+ взаємопов’язаних документів з directed dependencies).

Абстракція: SDD — рівень feature requirements. Фреймворк — рівень бізнес-процесів та архітектури системи, потрібний product owners та архітекторам для impact analysis та планування нових фічей. В першу чергу дизайн з нахилом в агетних product owners та архітекторів (людина юзає агента для написання нових артефактів).

Документація як код: як Git HEAD є останньою каскадною версією усіх комітів разом, так і дока мого фреймворку є останньою версією знань про систему через послідовне розкладування agile artefacts по «поличках» зазделегіть заданих темплейтів по заданим правилам. Не потрібно вести окрему документацію — фреймворк генерує її автоматично. Все, що потрібно, — це вести стандартну agile розробку.

По суті, ці підходи комплементарні: SDD допомагає якісно написати нову фічу; мій фреймворк забезпечує контекст системи, щоб зрозуміти що саме писати і який вплив це матиме, а після мержу — автоматично оновлює knowledge base.

Достатньо глибока та пізнавальна стаття, читав на одному подиху, дякую автору за якісний контент!

Закинув в АІ в свій проект статтю.
АІ зацінила)
Ось його думки:

Прочитав. Дуже сильна стаття. Ось мої думки.
Що реально цінне

Трирівнева композиція потоків (flow, phase, variation). По суті, він застосував принцип DRY до бізнес-документації. Фаза як shared utility, варіація як conditional branch. Аналогія з кодом точна і інтуїтивно зрозуміла. Вирішує головну біль: дублювання і застарівання.

INDEX як точка входу з ai-when-to-load. Елегантне рішення для progressive loading. 2000 токенів на каталог всієї системи це мало. Агент читає INDEX, розуміє що підвантажити, і не з’їдає контекст на непотрібне.

Фронтматер як контракт. depends-on, consumed-by, ai-token-estimate перетворюють текст на граф. Саме те, чого не вистачає Confluence: машинно-зчитувані зв’язки між документами.

Чесне визнання garbage in, garbage out. Багато хто б це приховав.

Де впізнаю наш підхід

Євген описує по суті ту ж архітектуру, яку ми використовуємо в PaperLink зі skills pipeline. Його Knowledge Curator приблизно відповідає нашим /create-business-requirements + /create-technical-plan. Його шари L0-L2 це наш Clean Architecture (Domain, Application, Infrastructure, Presentation). Його фронтматер це наші YAML frontmatter в memory файлах з type, description, ai-when-to-load аналогами.

Ключова спільна ідея: AI працює як інженерний інструмент тільки коли є чіткий фреймворк з правилами, а не просто промпт «напиши доку».

Що б доповнив

Єдине, чого не вистачає: пропорція автоматичного vs ручного review. Історія з перейменуванням A->Б->A це не edge case, а типова ентерпрайз-реальність. Цифри типу «85% документів не потребували ручного втручання» або «на 300 фіч було 20 конфліктів» суттєво підсилили б довіру до підходу.

Загальна оцінка

Автор вирішує реальну проблему, підхід інженерний, і головне, це реально працює на продакшн-проєкті, а не теоретизування. Для DOU це цінний матеріал, бо більшість статей про AI це або «ось як я попросив ChatGPT написати код», або абстрактні міркування про AGI. А тут конкретний pipeline з конкретними результатами.

Підхід правильний, виконання солідне, подача чесна.

будь ласка спілкуйтесь з нейронкою самостійно, не потрібно ваші діалоги тягнути в чати с живими людьми

Дякую за ваш професійний коментар по темі статі. Але це був комплімент автору статті. Мені було цікаво що скаже АІ про статтю. Ще раз дякую)

Тут скоріше питання не до AI, а до формату 🙂

Згоден, що просто копіпастити відповіді нейронки без контексту не дуже корисно для обговорення.

Цінніше, коли люди діляться власним досвідом або конкретними кейсами. Наприклад, цікаво почути від Євгена про його PaperLink та структуру, що вони побудували.

Хоча як інструмент для швидкого фідбеку чи перевірки гіпотез AI, звісно, вже став частиною щоденної роботи.

В мене просто гарні відносини з твоїм AI, то він мене і хвалить 😄

На справді я просто розумію скільки було витрачено часу і зусиль на написання статті, скільки йшли до цього флоу. Тому на справді дуже класно!
Дякую)

І вам дякую, що знайшли час, щоб написати слова підтримки.

Дякую! Цікава стаття і підхід. От би тільки через кілька ітерацій ці агенти не замінили EPAMу автора і пів-команди:)

За ці агентні системи повинен хтось нести відповідальність у випадку проблем. Тому скоріш за все human in the middle буде завжди, і це будуть інженери, аналітики, продукт овнери і тд. Тому я бачу проєкти майбутнього в яких також будуть працювати команди людей, просто процеси будуть побудовані інакше.

Щодо EPAM, то йому вигідніше розширюватись через прискорення та оптимізацію процесів (augmentation) ніж економити за рахунок звільнень та заміни спеціалістів на агентні системи. Принаймні хочется щоб людство рухалось у цьому напрямку.

Сумнівно но ОК.
Це все ще краще ніж відсутність чи застарілість документації.

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

Доречі всі ці «нейродокументації» дуже плавають в великих проектах. Я сам завдяки клауду нарешті навів чистоту в своїх пет-проектах, але якщо проект складний то приходиться спочатку аналізувати, потім поясняти те що нейронка не зрозуміла або зрозуміла неправильно і тільки потім создавати MD-документи. І то їх вичитувати потрібно.
В рази швидше і якісніше ніж руками, тут я не сперечаюсь, але все ще пару годин праці мінімум. До того як описано в статті ще сильно довго чекати щоб «клік і готово»

Дякую за фідбек.

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

це все — колупання не в ту сторону
Вже давно все існуе — генератори

усі складні речі складаються з простих, це базис. Прості речі робляться нормальними блоками і уся обв’язка генеруються. А вже блоки документуються. Причому зв’язну документацію також можна на базі цього генерувати.

Не створювати багатостраничні запутані мануали по АПІ, а юзати OpenAPI і генерувати з нього, де вже блоки бізнес-логіки під’єднуються до згенерованого коду
Не плодити нескінченні мутуючи json-ни для зв’язку між модулями, а використовувати строгі protobuf які можна і в json потім тягнути також
Не використовувати свої криві самописні рішення, а юзати загальні практики та вже вилизані рішення (і зараз я не про фреймворки, якими навпаки не вміють користуватися но тягнуть повсюди)

AI документація потрібна тільки «з іншої сторони» тобто вам не потрібно вивалювати клієнту як все у вас там працює, а потрібен зрозумілий мануал як користуватись вашим продуктом. З прикладами.

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

зрозуміло що це все фікситься правильними промптами та налаштуваннями, але знов ж таки це все вилазило як раз з нейрослопової документації

Дуже крутий коментар, дякую, багато з чим погоджуюсь.

Я теж не вірю в AI замість інженерії і не пропоную заміняти нормальні практики типу OpenAPI, protobuf чи чітко структуровану архітектуру.

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

AI тут для мене це не джерело істини, а скоріше інструмент для швидкого складання і навігації по цьому контексту, який далі все одно проходить через ревʼю.

Важливо зауважити що все що генерує AI тут це просто переформатування вхідної інформаціі і розкладання (merge, split) по документах з чітко заданою структурою. Це дуже сильно знижує можливіть галюцінацій моделі, адже він проінструктований нічого свого не додавати.

І так, повністю погоджуюсь — без контролю і правильної побудови фреймворку і процесу це дуже легко перетворюється в той самий «нейрослоп».

контекст, саме болюче місце

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

я це к тому що навіть в рамках «працюй тільки з кодом та діфами» можуть бути несподівані артефакти.
я останній час використовую клода як літнер для аналізу і бачив багато «цікавого» саме в рамках праці тільки з кодом що в проекті.
З тих же причин «вайбокодинг» у мене завжди тільки в вузьких рамках під конкретну задачу — якщо задача зі всими роздумами не влазить в половину контекстного вікна то вже повинно пам’ятати що можуть бути помилки.
А в «ідеальному світі» код ніколи не влізае в контекст тому як агенти використовують абстракції щоб економити токени — наприклад вони очікують шо метод String() повертає строку і вони ніколи не подумають про те що сам метод може мати якісь краєві умови, навіть якщо це прописано в коментарі до методу.

може колись MCP дойде і до компіляторів з лібами і агенти реально зможуть працювати ТІЛЬКИ з твоїм кодом, але на зараз це все вилами по воді.
коли по проекту немае нічого — нейрослоп це вже щось, но це просто маскуе проблему

Так, тут якраз дуже добре видно, що ми трохи про різні рівні говоримо 🙂

Те, що ти описуєш, — це робота з кодом як source of truth: аналіз, дебаг, генерація, пошук проблем. І там дійсно контекст — це головний біль, особливо якщо він виходить за межі пари сотен тисяч токенів — починається context rot.

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

Це трохи інший рівень абстракції. Він в статті описаний як L1. Але є і L2, який, наприклад, описує автоматизації. І для агента це виглядає так — він знаходить бізнес флоу і варіацію які йому треба заімпрувати, він бачить залежності на обʼєкт WorkOrder (L2), у якого є залежність на автоматизаціі, наприклад: при створенні запису WorkOrder треба автоматично підтягнути координати локаціі, на апдейт поля інвойса створити таску, а на зміну статуса на компліт — відправити декілька нотифікацій. Це все теж L2. Але для агента це не десятки класів, а посилання на один документ обʼєкта та три документи автоматизацій. І кожен був задокументований на початковому етапі до рівня ~1—2 тис. токенів (2 тис. — це ліміт, який жорстко валідується скриптом). І поки що я не бачив проблем, щоб агент не зміг задокументувати ці сутності, тим паче, що кожна автоматизація — це окрема сесія, і маленька кількість класів взагалі не є проблемою для агента.

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

Тобто це не заміна аналізу коду, а скоріше надбудова, яка допомагає швидше зрозуміти «що взагалі відбувається в системі» без занурення у весь код одразу.

Скоріш за все цей рівень абстракції не потрібен кожному проєкту, особливо якщо він побудований таким чином, що пайплайни бізнес-сценаріїв репрезентовані у коді. В Salesforce ти просто заходиш на сторінку рекорду і далі рухаєшся у тому напрямку, який тобі потрібен. І різні бізнес-персони можуть робити різні речі на одних і тих самих сторінках. Ти це ніяк не побачиш у коді, окрім якихось непрямих свідчень.

Чи використовуєте ви AI у якомусь вигляді для генераціі документаціі на ваших проєктах? Буду радий почути про ваш досвід.

Підписатись на коментарі