Кожен AI-агент - це модель, яка викликає інструменти в певному порядку. Єдине справжнє питання - хто цей порядок визначає. У loop-агента модель вирішує під час виконання. У graph-агента порядок визначаєте ви заздалегідь, а модель заповнює кроки. Більшість суперечок про агентні фреймворки насправді зводяться саме до цього вибору.
Loop-агент - найпростіше, що працює: надсилаєте моделі задачу й список інструментів, виконуєте інструмент, який вона просить, додаєте результат і повторюєте, доки вона не відповість без виклику інструмента. Це патерн ReAct, і саме його з коробки дають tool-use API від OpenAI та Anthropic, Vercel AI SDK і createAgent у LangChain. Він напрочуд здібний: більшість асистентів для коду й дослідницьких агентів працюють саме на такому циклі.
Його сила - гнучкість: шлях не треба знати заздалегідь, тож відкриті задачі - дослідження, дебаг, «з’ясуй, чому впало це замовлення» - лягають природно. Його слабкість - те саме. Кількість кроків невідома, отже невідомі вартість і час; модель може ходити колами, пропустити перевірку чи викликати інструмент, на який ви не розраховували. Тримати її в рамках допомагають запобіжники навколо циклу: ліміт кроків (stopWhen у Vercel AI SDK), бюджет токенів, список дозволених інструментів і перевірка фінальної відповіді.
Graph-агент перетворює процес на явні вузли й ребра: класифікувати, знайти, написати чернетку, перевірити, спитати людину, записати. Кожен вузол може бути викликом моделі, інструментом чи звичайним кодом, а ребра можуть розгалужуватись або навмисно вертатися назад - «перевірка не пройшла, повернись до чернетки». Стан - це явний об’єкт, який зберігається після кожного вузла. Найвідоміший приклад - LangGraph: у Python і TypeScript він додає чекпоінти, тож виконання може стати на паузу для схвалення людиною і продовжитись через кілька годин рівно з того місця, де зупинилось.
Його сила - контроль. Ви знаєте, які кроки можуть статися, в якому порядку і де людина має схвалити. Кожне виконання можна відстежити вузол за вузлом, вартість обмежена формою графа, а збій на п’ятому кроці не перезапускає кроки з першого по четвертий. Ціна - проєктування наперед і менше свободи: якщо задача не вкладається у ваш граф, агент не зможе зімпровізувати вихід.
Швидкість першого прототипу
Відкриті задачі
Передбачувані вартість і час
Налагодження й трасування
Схвалення людиною
Довгі процеси й відновлення
Безпечні записи (гроші, персональні дані)
Показати таблицею
| Критерій | Loop-агент | Graph-агент |
|---|---|---|
| Швидкість першого прототипу | 5 / 5 | 2 / 5 |
| Відкриті задачі | 5 / 5 | 2 / 5 |
| Передбачувані вартість і час | 2 / 5 | 4 / 5 |
| Налагодження й трасування | 2 / 5 | 5 / 5 |
| Схвалення людиною | 2 / 5 | 5 / 5 |
| Довгі процеси й відновлення | 1 / 5 | 5 / 5 |
| Безпечні записи (гроші, персональні дані) | 2 / 5 | 5 / 5 |
Якщо поставити їх поруч, вибір - це не «що краще», а «де ваша задача»: між відкритою й повторюваною, між дешевими помилками й дорогими. Цікава деталь: межа розмитіша, ніж у маркетингу. createAgent у LangChain - це цикл, але з версії 1.0 він працює на рантаймі LangGraph: цикл - це просто найменший можливий граф.
Розмір бульбашки показує типову кількість викликів моделі на задачу
Показати списком
- Один виклик моделі — Один промпт — одна відповідь: максимум передбачуваності, мінімум автономії. (1 виклик моделі)
- Graph-агент — Кроки й розгалуження спроєктовані наперед; модель працює всередині кожного вузла. (фіксована кількість викликів)
- Граф із циклом усередині — Фіксований процес з одним відкритим кроком, наприклад дослідженням. (фіксовані кроки + обмежений цикл)
- Loop-агент — Модель сама обирає кожен наступний крок, доки не завершить роботу. (стільки викликів, скільки вирішить)
Моє правило: починати з циклу для досліджень і внутрішніх інструментів, де людина однаково читає результат. Переходити до графа, коли процес повторюється, торкається грошей чи даних клієнтів, потребує схвалення або триває довше за один запит. Найкращі продакшен-системи зазвичай поєднують обидва: граф для бізнес-процесу, а всередині одного вузла - маленький цикл, наприклад крок дослідження, який може кілька разів викликати пошук, перш ніж передати чистий результат наступному, детермінованому вузлу.
Що б ви не обрали, правила однакові: типізовані входи інструментів, жорсткий бюджет, лог кожного кроку і жодного запису в систему обліку без перевірки. У TypeScript чи Python це кілька десятків рядків навколо виклику моделі - і саме вони відрізняють демо від продукту. Якщо у вас є процес, який хочеться віддати агенту, - надішліть кроки так, як їх сьогодні робить ваша команда. Скажу, чи це цикл, граф, чи граф із циклом усередині.
Дайте наступному продукту того, хто лишається.
Готовий стартувати зараз і лишитись. Довготермінові ретейнери, не злив за два тижні. Напишіть - обговоримо проєкт, вимоги і як рухатись далі.