Архітектура React-агента: патерни, помилки, рішення

Опануй патерн ReAct для React-агентів: reason-act цикл, робота з інструментами і guardrails проти типових production-помилок.
На цій сторінці
  1. Суть патерна
  2. Проблема
  3. Рішення
  4. Як працює
  5. Важливо: агент не виконує дії сам
  6. У коді це виглядає так
  7. Як це виглядає під час виконання
  8. Коли підходить — і коли ні
  9. Підходить
  10. Не підходить
  11. Коли використовувати ReAct (vs інші патерни)
  12. Як комбінувати з іншими патернами
  13. Коротко
  14. Переваги та Недоліки
  15. FAQ
  16. Що далі

Суть патерна

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

Коли потрібен: коли неможливо надійно спланувати весь шлях наперед і наступний крок залежить від результату попереднього.


Кожен крок складається з трьох дій:

  • Think — вирішує, що зробити далі
  • Act — виконує дію або викликає інструмент
  • Observe — аналізує результат

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

ReAct Agent: дія крок за кроком

Проблема

Уяви: ти вперше в новому місті й шукаєш відкриту аптеку з потрібними ліками.

Ти ще не знаєш наперед:

  • які аптеки поруч
  • чи працюють вони зараз
  • чи є там потрібний препарат

Повний план одразу скласти неможливо, бо кожен крок залежить від нового результату.

Тому ти дієш по циклу:

  1. Знайшов найближчу аптеку
  2. Перевірив, чи відкрита
  3. Якщо ні — перейшов до наступної
  4. Повторив, доки не знайшов потрібну

Тобто постійно: інформація -> рішення -> дія -> нова інформація.

А якщо змусити себе одразу зафіксувати маршрут ("№1 -> №2 -> №3"), це буде план навмання.

У цьому й проблема: у багатьох задачах неможливо коректно спланувати всі кроки наперед.

Рішення

ReAct вирішує це через рішення під час виконання, а не через жорсткий план наперед.

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

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

Замість підходу спочатку весь план -> потім виконання, агент працює так:

  1. Міркування (Think): приймає рішення
  2. Дія (Act): виконує дію
  3. Спостереження (Observe): аналізує результат

Після цього він визначає наступний крок вже на основі нового контексту.

Якщо аптека зачинена, агент не "дотискає" старий план, а одразу коригує дії.

Кожен новий результат:

  • додається до контексту
  • впливає на наступне рішення
  • змінює подальший маршрут

ReAct не виконує наперед заданий сценарій, а адаптується на кожному кроці.

Модель може "хотіти" повторювати дії безкінечно, тому саме політика виконання (execution-policy) визначає умови зупинки циклу.

Як працює

Diagram

Важливо: агент не виконує дії сам

На етапі міркування (Think) агент лише вирішує, що потрібно зробити далі.

Але він не виконує дію самостійно.

Він генерує рішення у вигляді тексту, наприклад:

“Потрібно викликати інструмент search_docs з параметром X”

Після цього:

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

Цей результат стає новим спостереженням (Observe).

Опис повного флоу: Think → Act → Observe

Міркування
Агент вирішує, що потрібно зробити далі.

Дія
Система виконує дію або викликає інструмент.

Спостереження
Середовище повертає результат, який стає новим контекстом.

Агент лише приймає рішення.

Усі дії виконує зовнішній шар виконання (execution layer).

Якщо цей шар не має обмежень, агент може:

  • викликати інструмент десятки разів
  • повторювати ті самі дії
  • витратити бюджет на API-запити

Цикл повторюється, доки задача не виконана або не досягнуто умов зупинки.

У коді це виглядає так

PYTHON
max_steps = 8

for step_no in range(1, max_steps + 1):
    thought = think(context)
    action = act(thought)
    result = observe(action)

    context.append(result)  # Observe -> новий context для наступного Think.

    if is_done(result):
        done = True
        break

if not done:
    return stop_with_reason("max_steps_reached")

Як це виглядає під час виконання

TEXT
Goal: знайти найближчу відкриту аптеку

Think: потрібно знайти аптеку поруч
Act: система викликає find_nearby_pharmacies(user_location)
Observe: отримано список аптек, відсортований за відстанню
Між ітераціями: список аптек додається в context

Think: перевірити першу (найближчу) аптеку
Act: система викликає check_pharmacy("Аптека №1")
Observe: аптека зачинена
Між ітераціями: статус "зачинена" додається в context

Think: перевірити наступну аптеку
Act: система викликає check_pharmacy("Аптека №2")
Observe: аптека відкрита

Think: це найближча відкрита аптека
Act: система повертає адресу
Observe: користувач отримав результат
Stop: умова виконана, цикл завершується

Агент вирішує, що зробити, виконує дію і отримує результат.

Кожен результат додається до контексту і стає основою для наступного кроку.

Повний приклад ReAct агента

PYPython
TSTypeScript · скоро

Коли підходить — і коли ні

Підходить

СитуаціяЧому ReAct підходить
Шлях до результату неочевиднийReAct уточнює план на кожному кроці за новими спостереженнями.
Наступний крок залежить від відповіді інструментаЛогіка Think -> Act -> Observe створена саме для такого циклу.
Потрібно працювати з API, БД, пошуком або іншими інструментамиАгент викликає інструменти під час виконання і адаптується.

Не підходить

СитуаціяЧому ReAct не підходить
Задача має фіксований, передбачуваний сценарійПростіше й дешевше виконати заздалегідь заданий pipeline.
Критична швидкість відповіді (мінімальна затримка)Кожен цикл додає час через додаткові кроки міркування та виклики.
Кожен виклик інструмента дорогий або суворо лімітованийБез жорстких обмежень ReAct може зробити багато ітерацій.

Якщо обираєш ReAct, задай обмеження одразу: max_steps, таймаути, умови зупинки та бюджет на виклики інструментів.

Коли використовувати ReAct (vs інші патерни)

Використовуйте ReAct, коли агент має приймати рішення крок за кроком за результатами попередніх дій.

Короткий тест:

  • якщо потрібно "подивився результат -> вирішив наступний крок" -> ReAct
  • якщо потрібно "спочатку розбити велику ціль на підзадачі" -> Task Decomposition Agent
Порівняння з іншими патернами та приклади

Швидка шпаргалка:

Якщо задача виглядає так...Використовуйте
Після кожного кроку треба вирішити, що робити даліReAct Agent
Спочатку треба розбити велику ціль на менші виконувані задачіTask Decomposition Agent
Потрібно запускати код, перевіряти результати і безпечно ітеруватиCode Execution Agent
Потрібно досліджувати дані та повертати висновки на основі аналізуData Analysis Agent
Потрібне дослідження з кількох джерел зі структурованими доказамиResearch Agent

Приклади:

ReAct: "Знайди причину падіння API: перевір логи -> подивись помилки -> запусти наступну перевірку за результатом".

Task Decomposition: "Підготуй запуск нового тарифу: розбий задачу на підзадачі для контенту, техніки, QA і підтримки".

Code Execution: "Порахуй retention за 12 місяців у Python і перевір коректність формул на реальних даних".

Data Analysis: "Проаналізуй CSV із продажами: знайди тренди, аномалії та дай короткі висновки".

Research: "Збери дані про 5 конкурентів із кількох джерел і зроби порівняльне резюме".

Як комбінувати з іншими патернами

ReAct часто використовують разом з іншими патернами.

  • ReAct + RAG — коли не вистачає фактів, агент спочатку дістає їх із бази знань і тільки потім робить крок.
  • ReAct + Reflection — після кожного кроку агент перевіряє себе, щоб швидко помітити і виправити помилку.
  • ReAct + Supervisor — ризикові дії агент не виконує сам, а передає на погодження людині.

ReAct додає цикл прийняття рішень. Інші патерни — контроль, пам'ять або координацію.

Коротко

Коротко

ReAct Agent:

  • приймає рішення поступово
  • виконує дію
  • аналізує результат

І повторює цикл, доки задача не виконана.

Переваги та Недоліки

Переваги

швидко підлаштовується під нові дані

помилки видно вже на наступному кроці

добре працює, коли умови змінюються в процесі

кожен крок легко пояснити

Недоліки

через більшу кількість кроків може працювати повільніше

без обмежень може зациклитися

потрібно чітко задати умови зупинки

FAQ

Q: Чи планує ReAct усі кроки наперед?
A: Ні. Він приймає рішення після кожної дії.

Q: Чи може ReAct застрягти в циклі?
A: Так, якщо не задано умов зупинки.

Q: Чи працює ReAct без інструментів?
A: Так. Агент може використовувати цикл Think -> Act -> Observe навіть без виклику інструментів, наприклад щоб змінювати підхід до задачі. Але без доступу до зовнішніх дій він не може отримувати нові дані і працює лише з тим, що вже є у контексті.

Що далі

ReAct дозволяє агенту діяти крок за кроком.

Але що робити, якщо задача складна і складається з кількох підзадач?

⏱️ 10 хв читанняОновлено Бер, 2026Складність: ★★☆
Практичне продовження

Приклади реалізації патерна

Перейди до реалізації на готових прикладах.

Python
ReAct Agent — Python (повна реалізація з LLM)
Відкрити приклад
TypeScript
ReAct Agent — TypeScript (повна реалізація)
Скоро
Інтегровано: продакшен-контрольOnceOnly
Додай guardrails до агентів з tool-calling
Зашип цей патерн з governance:
  • Бюджетами (кроки / ліміти витрат)
  • Дозволами на інструменти (allowlist / blocklist)
  • Kill switch та аварійна зупинка
  • Ідемпотентність і dedupe
  • Audit logs та трасування
Інтегрована згадка: OnceOnly — контрольний шар для продакшен агент-систем.
Автор

Цю документацію курують і підтримують інженери, які запускають AI-агентів у продакшені.

Контент створено з допомогою AI, із людською редакторською відповідальністю за точність, ясність і продакшн-релевантність.

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