Детальный обзор LangGraph — Stateful multi-actor приложения от создателей LangChain
Переход на официальный сайт продукта.
LangGraph — это фреймворк для построения stateful (состояние-зависимых) мультиагентных приложений, разработанный командой LangChain. В отличие от традиционных цепочек LLM-вызовов (DAG), LangGraph моделирует логику приложения как граф, где узлы — это вызовы LLM, функций или инструментов, а рёбра — условные переходы между ними. Ключевое УТП: возможность создавать циклические графы с сохранением состояния между шагами, что критически важно для агентов, которые должны «думать», наблюдать за результатом своих действий и корректировать поведение. Фреймворк решает проблему «забывчивости» агентов, позволяя им хранить историю взаимодействий, промежуточные данные и контекст выполнения в гранулярном виде.
LangGraph построен на Python (основной SDK) и TypeScript (экспериментальная поддержка). Ядро фреймворка распространяется под лицензией MIT, что делает его полностью открытым для коммерческого использования. Платформа LangGraph Cloud (проприетарная) предоставляет managed-инфраструктуру для деплоя, мониторинга и масштабирования. Стек технологий: LangChain Core, Pydantic для валидации схем, Redis/PostgreSQL для персистентности состояния, и любой LLM-провайдер через интеграции LangChain.
Внутренняя архитектура LangGraph базируется на концепции «графа состояний» (StateGraph). Каждый экземпляр приложения имеет объект состояния (State), который проходит через последовательность узлов (Nodes). Узлы — это callable-объекты (функции, классы или цепочки LangChain), которые принимают текущее состояние и возвращают обновлённое. Рёбра (Edges) определяют, какой узел будет вызван следующим, на основе анализа текущего состояния (условные рёбра) или безусловно (прямые рёбра).
Воркфлоу выглядит так: пользователь отправляет запрос → инициализируется начальное состояние (State) → граф запускается из корневого узла (entry point) → каждый узел выполняется, модифицируя состояние → после выполнения узла срабатывает условное ребро, которое анализирует состояние и выбирает следующий узел → процесс повторяется, пока не будет достигнут терминальный узел (end point) → финальное состояние возвращается пользователю. Ключевая особенность — поддержка циклов: агент может повторять вызов LLM, если результат не удовлетворяет условиям, что невозможно в линейных цепочках LangChain.
Память реализована через механизм «чекпоинтов» (checkpoints): на каждом шаге графа состояние сериализуется и сохраняется в бэкенде (по умолчанию — in-memory, для продакшена — Redis или PostgreSQL). Это позволяет восстанавливать выполнение после сбоев, откатывать шаги и реализовывать «человек-в-цикле» (human-in-the-loop), когда выполнение приостанавливается для ручного подтверждения или коррекции.
1. Циклические графы с условными переходами. В отличие от LangChain Expression Language (LCEL), который строит только направленные ациклические графы (DAG), LangGraph поддерживает циклы. Это позволяет реализовать паттерн «ReAct» (Reasoning + Acting): агент делает шаг рассуждения, выполняет действие, анализирует результат и, если нужно, повторяет цикл. Технически реализуется через условные рёбра, которые возвращают имя следующего узла на основе анализа состояния.
2. Персистентность состояния с чекпоинтами. Каждый шаг графа автоматически сохраняет состояние в бэкенде. Поддерживаются три режима: «always» (сохранять каждый шаг), «never» (только финальное состояние) и «on_error» (только при ошибке). Чекпоинты позволяют восстанавливать выполнение с любого шага, что критично для длительных агентских задач (например, многошаговый веб-скрапинг или анализ документов).
3. Human-in-the-loop (HITL). Встроенная поддержка паузы выполнения графа для ручного вмешательства. Разработчик может определить узлы, которые требуют подтверждения человека (например, перед отправкой email или выполнением финансовой транзакции). Выполнение приостанавливается, состояние сохраняется, и после ручного одобрения граф продолжает работу с того же места.
4. Параллельное выполнение узлов. LangGraph поддерживает fan-out/fan-in паттерны: один узел может породить несколько параллельных ветвей выполнения (например, одновременный запрос к трём разным API), а затем узел-агрегатор объединяет результаты. Реализовано через специальные рёбра типа «parallel» и встроенный пул потоков (thread pool).
5. Встроенная поддержка инструментов и функций. Любой узел может вызывать инструменты (API, базы данных, калькуляторы) через стандартный интерфейс LangChain Tool. Фреймворк автоматически обрабатывает ошибки вызова инструментов, повторные попытки (retry) и таймауты. Для каждого инструмента можно задать схему входных параметров через Pydantic.
6. LangGraph Cloud — managed-деплой. Проприетарная платформа для развёртывания графов в production. Включает: автоматическое масштабирование (горизонтальное до 1000+ инстансов), встроенный мониторинг (латентность каждого узла, частота вызовов, ошибки), A/B-тестирование разных версий графа, и интеграцию с LangSmith для трассировки и отладки. Цена — от $0.10 за 1000 вызовов узлов.
7. Композиция графов. Графы можно вкладывать друг в друга: один граф может быть узлом другого графа. Это позволяет строить иерархические мультиагентные системы, где каждый агент — это отдельный граф со своей логикой и состоянием. Например, supervisor-агент управляет подчинёнными агентами (research, coding, summarization), каждый из которых работает в своём графе.
| Характеристика | Значение |
|---|---|
| Модель распространения | Freemium (ядро — open-source, облачная платформа — проприетарная) |
| Цена (Open-source) | Бесплатно (лицензия MIT) |
| Цена (LangGraph Cloud) | от $0.10/1000 вызовов узлов (Starter), Enterprise — $2000/мес |
| API | Python SDK, TypeScript SDK, REST API (только для Cloud) |
| Интеграции | LangChain Hub, LangSmith, OpenAI, Anthropic, Google, Hugging Face, Redis, PostgreSQL, SQLite |
| Лицензия | MIT (ядро), Proprietary (Cloud) |
| Языки программирования | Python 3.9+, TypeScript (экспериментально) |
| Поддержка | GitHub Issues, Discord, Enterprise SLA (платный) |
Установка через pip. Для работы потребуется Python 3.9+ и ключ API от любого LLM-провайдера. Ниже — минимальный пример агента с циклом ReAct, который использует поисковый инструмент.
# Установка
pip install langgraph langchain-openai
# Пример: агент с циклом ReAct
from langgraph.graph import StateGraph, END
from typing import TypedDict, List
from langchain_openai import ChatOpenAI
from langchain_community.tools import DuckDuckGoSearchRun
class AgentState(TypedDict):
messages: List[str]
next_step: str
def call_model(state: AgentState):
llm = ChatOpenAI(model="gpt-4")
response = llm.invoke(state["messages"])
return {"messages": state["messages"] + [response.content]}
def should_continue(state: AgentState):
if "FINAL_ANSWER" in state["messages"][-1]:
return "end"
return "continue"
# Построение графа
graph = StateGraph(AgentState)
graph.add_node("agent", call_model)
graph.set_entry_point("agent")
graph.add_conditional_edges("agent", should_continue, {"continue": "agent", "end": END})
# Компиляция и запуск
app = graph.compile()
result = app.invoke({"messages": ["What is the capital of France?"]})
print(result["messages"][-1])
| Критерий | LangGraph | CrewAI | AutoGen (Microsoft) |
|---|---|---|---|
| Ключевая фича | Графы с циклами и чекпоинтами | Ролевые агенты с делегированием задач | Мультиагентные диалоги с контекстом |
| Цена | Бесплатно (OSS) / от $0.10/1000 узлов (Cloud) | Бесплатно (OSS) / $19/мес (Cloud) | Бесплатно (OSS) / Azure pricing (Cloud) |
| Open Source | Да (MIT) | Да (MIT) | Да (MIT) |
| Сложность | Высокая (требует понимания графов и состояний) | Средняя (концепция ролей интуитивна) | Средняя (основан на диалогах) |
| Поддержка циклов | Нативная (условные рёбра) | Через рекурсивные вызовы (ограниченно) | Через циклы в диалогах (сложно) |
| Human-in-the-loop | Встроенная (пауза графа) | Через кастомные инструменты | Через кастомные обработчики |
| Персистентность | Чекпоинты (Redis/PostgreSQL) | Только в облачной версии | Через Azure Cosmos DB |
Ближайшие конкуренты — CrewAI и AutoGen от Microsoft. CrewAI проще в освоении (ролевая модель агентов), но не поддерживает сложные графы с циклами и чекпоинтами. AutoGen силён в мультиагентных диалогах, но его архитектура менее гибкая для построения stateful-приложений с ветвлением. LangGraph выигрывает в гибкости и контроле над потоком выполнения, но требует больше кода и понимания теории графов. Для простых сценариев (2-3 агента с линейным взаимодействием) CrewAI может быть быстрее; для сложных production-систем с отказоустойчивостью и HITL — LangGraph.
LangGraph — лучший выбор для команд, которые строят production-grade мультиагентные системы со сложной логикой, отказоустойчивостью и необходимостью человеческого контроля. Фреймворк идеально подходит для сценариев: автоматизация бизнес-процессов с HITL (одобрение счетов, модерация контента), многошаговый анализ данных (юридические документы, медицинские записи), и сложные RAG-системы с итеративным уточнением запросов.
Кому стоит выбрать LangGraph: инженерам, которые уже используют LangChain и хотят перейти от простых цепочек к агентам; командам, которым нужна отказоустойчивость и возможность восстановления после сбоев; проектам с требованиями к аудиту и человеческому контролю.
Кому стоит посмотреть альтернативы: если вам нужен быстрый прототип с минимальным кодом — используйте CrewAI; если вы строите систему на основе диалогов между агентами — AutoGen; если вам нужен визуальный редактор и low-code — Relevance AI. LangGraph — это мощный, но требовательный инструмент для тех, кто готов инвестировать в архитектуру.