LangGraph(Фреймворк циклічних графів стану для агентських систем)
Низькорівневий фреймворк від команди LangChain для побудови детермінованих, циклічних мультиагентних систем у вигляді кінцевих автоматів (State Machines) із повною підтримкою персистентності.
1. Огляд концепції та системна проблема
Спроби побудувати надійного продакшен-агента за допомогою простих циклів while True на Python або лінійних ланцюжків швидко стикаються з критичними інженерними обмеженнями:
- Відсутність персистентності: Якщо сервер перезавантажується під час 5-хвилинного агентського процесу, весь поточний стан і прогрес безповоротно втрачаються.
- Неконтрольованість потоку (Black Box Problem): Складно передбачити, в який момент агент вирішить завершити роботу, або як примусово повернути його на крок назад у разі помилки валідації.
- Неможливість довготривалої паузи (Human-in-the-Loop): Зупинити виконання програми в очікуванні підтвердження від користувача без блокування пам'яті процесу в звичайному коді вкрай важко.
LangGraph розв'язує ці проблеми, моделюючи агентські системи як Орієнтовані графи стану (Stateful Graphs). Будь-який складний процес розбивається на прозорі вузли (Nodes), ребра переходів (Edges) та єдиний типізований стан (State), який атомарно фіксується в базі даних після кожного кроку.
2. Архітектурна таксономія та ментальна модель
Архітектура LangGraph побудована навколо чотирьох ключових сутностей:
- 1. Shared State (Спільний стан):
Суворо типізований інтерфейс (через
TypedDictабо Pydantic). Визначає схему даних, доступних усім вузлам. Для полів можна задавати специфічні редуктори (Reducers), наприкладAnnotated[list, add_messages], які автоматично дописують нові повідомлення замість перезапису масиву. - 2. Nodes (Вузли графа): Звичайні синхронні або асинхронні функції. Кожен вузол приймає поточний стан, виконує обчислення (виклик моделі, запуск тестів чи звернення до БД) і повертає часткове оновлення стану (State Delta).
- 3. Edges & Conditional Edges (Ребра переходів):
- Звичайні ребра: детермінований перехід від вузла А до вузла Б.
- Умовні ребра: функція-роутер аналізує останній вивід моделі та вирішує, куди спрямувати потік (наприклад: якщо викликано інструмент — перейти до
tools, якщо знайдено фінальну відповідь — доEND).
- 4. Checkpointers (Чекпоінтери): Драйвери довготривалого збереження (MemorySaver для тестів, PostgresSaver / SqliteSaver для продакшену). Створюють незмінні знімки (Snapshots) на кожному супершазі.
3. Технічний пайплайн та внутрішня механіка
Виконання графа відбувається за моделлю масового синхронного паралелізму (Bulk Synchronous Parallel, BSP):
- State Initialization (Старт сесії):
Граф приймає початковий ввід і конфігураційний об'єкт із ключем
thread_id. Чекпоінтер завантажує останній збережений стан для цього треду. - Superstep Execution (Виконання суперкроку): Усі активні вузли поточної фази виконуються паралельно. Кожен вузол читає ідентичний знімок стану і генерує свій патч оновлення.
- Reducer Aggregation & Checkpoint Commit (Злиття стану): Після завершення роботи всіх вузлів фази система застосовує редуктори до отриманих змін, формує новий стан і атомарно фіксує його в базі даних.
- Edge Routing & Interrupt Inspection (Маршрутизація та перевірка пауз):
Оцінюються умовні переходи. Якщо граф натрапляє на точку переривання (
interrupt_before), виконання безпечно завершується, віддаючи управління зовнішньому застосунку.
4. Практичні інженерні сценарії в продакшені
01. Автономний цикл розробки та виправлення помилок коду
Граф із чотирьох вузлів:
generate_code->run_unit_tests->evaluate_output.- Якщо тести пройшли успішно — перехід до
create_pr. - Якщо тести впали — умовне ребро повертає стан у
generate_codeразом зі стектрейсом помилки (з обмеженням у максимум 5 ітерацій).
02. Фінансовий Human-in-the-Loop процес
Агент аналізує суперечливі рахунки клієнтів. Якщо сума повернення менша за $100, граф виконує повернення автоматично через вузол execute_refund. Якщо сума більша — граф переривається (interrupt), генерує посилання на форму погодження для менеджера і відновлює роботу лише після отримання вебхука від людини.
03. Мультиагентна система «Супервайзер — Спеціалісти»
Центральний вузол Supervisor виступає маршрутизатором верхнього рівня. Залежно від типу завдання він перемикає контекст між спеціалізованими підграфами: ResearchSubgraph (пошук в інтернеті та аналітика) та DraftingSubgraph (генерація контрактів), контролюючи єдиний корпоративний контекст.
5. Підводні камені, типові помилки та безпека
- Роздування стану (State Bloat): Збереження в спільний стан гігабайтних PDF-файлів або масивних таблиць призводить до того, що кожен чекпоінт у PostgreSQL займає сотні мілісекунд. Зберігайте в стані лише легкі метадані та S3-урли артефактів.
- Recursion Limit Exceeded: Якщо умовні ребра не мають гарантованого виходу з циклу, виконання впаде з системною помилкою досягнення ліміту глибини (за замовчуванням 25 кроків). Завжди контролюйте лічильник спроб прямо в схемі стану.
- Несеріалізовані об'єкти в State: Спроба зберегти в стан відкритий дескриптор файлу, з'єднання з базою або функціональне замикання призведе до падіння чекпоінтера при спробі серіалізації в JSON/Pickle.
FAQ: LangGraph
Пов'язані терміни
Multi-Agent Orchestration
Архітектура взаємодії незалежних спеціалізованих ШІ-агентів, об'єднаних у розподілену мережу або ієрархію для паралельного вирішення комплексних інженерних задач.
CrewAI
Один із найпопулярніших Python-фреймворків для створення автономних команд агентів, заснований на рольовому розподілі обов'язків, інструментів і делегуванні завдань.
PydanticAI
Сучасний Python-фреймворк від творців Pydantic, що привносить строгу типізацію, ін'єкцію залежностей (Dependency Injection) та детерміновану валідацію схем у світ AI-агентів.
Agent Memory (Пам'ять агента)
Комплексна підсистема зберігання, фільтрації та вибірки даних, яка перетворює stateless-виклик LLM на stateful-систему: від короткотривалого scratchpad-буфера до мультисесійного сховища знань.