Открытый гайд · ИИ-офис

LangGraph — агент как граф состояний

Фреймворк оркестрации, в котором поведение агента описано явно. Установка, первый граф, чекпойнты и откаты, остановка на человеке, локальный сервер, Studio и подключение MCP.

Кирилл СандаковКирилл СандаковВайбкодер, предприниматель, продюсерОпубликовано 19.08.202611 мин чтения

LangGraph — открытый фреймворк оркестрации ИИ-агентов на Python от команды LangChain: поведение агента описывается графом, где узлы выполняют работу, рёбра выбирают следующий шаг, а состояние сохраняется между вызовами. Ставится командой pip install -U langgraph, лицензия MIT. Разбираем первый граф, память и чекпойнты, остановку на человеке, локальный сервер со Studio и подключение MCP-серверов. Проверено по официальной документации 19 августа 2026 года.

Что узнаешь из гайда

  • Чем LangGraph отличается от LangChain
  • Как собрать первый граф из четырёх строк
  • Где живёт короткая память, а где долгая
  • Как поставить агента на паузу и спросить человека
  • Как поднять локальный сервер и подключить MCP

Часть 1 · Знакомство

Что такое LangGraph и где он в стеке

Главное

LangGraph отвечает только за оркестрацию: кто, когда и после кого работает. Модели и инструменты он не абстрагирует.

Документация называет LangGraph низкоуровневым фреймворком и рантаймом для долгоживущих агентов с состоянием. Ключевая мысль: в одном графе спокойно уживаются жёстко прописанные шаги и шаги, которые ведёт модель. Там, где нужна предсказуемость и аудит, стоит обычный код; там, где нужна гибкость, решает модель. Среди компаний, которые строят на нём агентов, документация называет Klarna, Uber и J.P. Morgan.

СлойЗа что отвечает
LangChainФреймворк агентов: модели, инструменты, готовые циклы вызова
LangGraphРантайм оркестрации: устойчивое выполнение, потоковая отдача, человек в цикле, состояние
Deep AgentsОбвязка поверх LangGraph: планирование, субагенты, файловые инструменты, работа с контекстом
LangSmithПлатформа наблюдения: трассировка, оценка, промпты, выкладка

Кому он вообще нужен

Если задача — «агент отвечает и вызывает пару инструментов», графа не надо: хватит готового агента LangChain, а то и SDK от Anthropic. LangGraph окупается там, где процесс длинный, ветвится, требует согласования человеком и должен переживать перезапуск. Организационную сторону вопроса — какие роли вообще стоит отдавать агентам — разбирал отдельно в гайде про офис ИИ-агентов.


Часть 2 · Установка

Установка LangGraph и первый граф

Главное

Один пакет, четыре сущности — состояние, узлы, рёбра, компиляция.

терминал · установка
pip install -U langgraph

# или через uv
uv add langgraph

# модели и инструменты обычно берут из LangChain (нужен Python 3.10+)
pip install -U langchain

Минимальный пример из документации выглядит так: вместо модели подставлена заглушка, но структура уже полная — схема состояния, узел, рёбра от старта до конца и компиляция.

python · граф hello world
from langgraph.graph import StateGraph, MessagesState, START, END

def mock_llm(state: MessagesState):
    return {"messages": [{"role": "ai", "content": "hello world"}]}

graph = StateGraph(MessagesState)
graph.add_node(mock_llm)
graph.add_edge(START, "mock_llm")
graph.add_edge("mock_llm", END)
graph = graph.compile()

graph.invoke({"messages": [{"role": "user", "content": "hi!"}]})

Чем платить за модель

Сам фреймворк бесплатный и открытый, но агент ходит в модель, а токены платные. В примерах документации используется ключ Anthropic — как его получить и сколько стоит обращение, разобрано в гайде про API-ключ Claude. Из России зарубежная консоль пополняется либо иностранной картой, либо через посредника вроде «Оплати по миру». Альтернатива без валюты — подключить локальную модель.


Часть 3 · Как устроен граф

Состояние, узлы и рёбра

Главное

Узлы делают работу, рёбра говорят, куда идти дальше — эта формула из документации описывает почти всё.

  • State. Общая структура данных, снимок текущего состояния приложения. Обычно описывается схемой, которую видят все узлы.
  • Nodes. Обычные функции: получают состояние, делают работу или побочный эффект, возвращают обновление состояния. Внутри может быть вызов модели, а может — просто код.
  • Edges. Функции, решающие, какой узел выполнится следующим. Бывают фиксированными переходами и условными ветвлениями.

Под капотом работает передача сообщений: узел завершил работу и отправил сообщения по рёбрам дальше, получатели выполнились и передали свои — и так шаг за шагом. Эти шаги в документации называют супер-шагами, а сама идея заимствована у системы Pregel от Google. Практический смысл терминологии простой: узлы, работающие параллельно, относятся к одному супер-шагу, а те, что идут друг за другом, — к разным. Выполнение заканчивается, когда все узлы неактивны и сообщений в пути не осталось.

Два API на выбор

Кроме графового есть функциональный API: тот же рантайм, но агент описывается одной функцией без явных узлов и рёбер. Графовый берут, когда важна видимая схема процесса; функциональный — когда логика естественно ложится в обычный код.


Часть 4 · Память

Чекпойнты, потоки и долгая память

Главное

Две разные вещи: чекпойнтер помнит диалог, хранилище — факты.

МеханизмЧто хранит и зачем
ЧекпойнтерыСостояние потока в виде снимков: продолжение диалога, человек в цикле, откат во времени, восстановление после сбоя
ХранилищаДанные вне состояния графа и вне одного потока: предпочтения пользователя, факты, общие знания
python · короткая и долгая память
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.store.memory import InMemoryStore

checkpointer = InMemorySaver()
store = InMemoryStore()

graph = builder.compile(checkpointer=checkpointer, store=store)

result = graph.invoke(
    {"messages": [{"role": "user", "content": "Hi, my name is Bob."}]},
    {"configurable": {"thread_id": "thread-1"}},
)

Ключевая деталь — thread_id. Это указатель на сохранённое состояние: тот же идентификатор продолжает прежний разговор, новый начинает чистый. Классы из примера держат всё в оперативной памяти и годятся для разработки; для продакшена документация советует долговечный чекпойнтер. Отдельно оговорено, что при работе через серверный вариант запуска персистентность настраивать руками не нужно — сервер берёт её на себя.

Узел может выполниться дважды

Снимки состояния пишутся на границах супер-шагов, а не в середине функции узла. Поэтому после паузы или повтора затронутый узел запускается заново с начала — вместе с кодом и побочными эффектами, которые успели отработать до остановки. Документация прямо советует писать узлы идемпотентно: повторный запуск не должен портить данные.


Часть 5 · Согласование

Как остановить агента и спросить человека

Главное

Функция interrupt() ставит граф на паузу в любой точке узла и ждёт сколько угодно.

Это тот самый механизм, который отличает демонстрацию от рабочего процесса. Агент дошёл до места, где нужно подтверждение — отправка письма, списание денег, публикация — и остановился. Состояние сохранилось через слой персистентности, процесс можно погасить, а через час возобновить: продолжение запускается повторным вызовом графа с объектом Command, и переданное значение становится результатом interrupt() внутри узла.

  1. Подключите чекпойнтер. Без него сохранять состояние негде; в продакшене он должен быть долговечным.
  2. Передайте thread_id. По нему рантайм понимает, какое состояние загружать при возобновлении.
  3. Вызовите interrupt там, где нужна пауза. Значение, которое вы передаёте, должно сериализоваться в JSON — оно уходит наружу, вызывающей стороне.

Прерывания против точек останова

Статические точки останова срабатывают до или после конкретного узла. Прерывания динамические: их ставят где угодно внутри кода и делают условными — например, спрашивать человека только если сумма больше порога.


Часть 6 · Разработка

Локальный сервер и визуальная Studio

Главное

Команда langgraph dev поднимает агента локально, а визуальный интерфейс показывает каждый шаг.

терминал · локальный сервер (нужен Python 3.11+)
pip install -U "langgraph-cli[inmem]"

langgraph new путь/к/проекту --template new-langgraph-project-python

cd путь/к/проекту
pip install -e .

# в .env положить ключ LangSmith
# LANGSMITH_API_KEY=lsv2...

langgraph dev

Визуальный интерфейс, который многие ищут как LangGraph Studio, в документации сейчас называется LangSmith Studio. Он бесплатный, подключается к локально запущенному агенту и показывает каждый шаг: какие промпты ушли в модель, какие инструменты вызывались и что они вернули, каким было промежуточное состояние. Отладка агента без него сводится к чтению логов.

Что уходит наружу

Для подключения нужны аккаунт LangSmith и ключ. Если данные не должны покидать машину, в .env ставится LANGSMITH_TRACING=false: документация прямо оговаривает, что с выключенной трассировкой из локального сервера ничего не отправляется.


Часть 7 · Инструменты

Как подключить MCP-серверы

Главное

Отдельная библиотека превращает инструменты MCP в обычные инструменты агента.

MCP — открытый протокол, по которому приложения отдают моделям инструменты и контекст: файловые системы, базы, внешние сервисы. В экосистеме LangChain за это отвечает пакет langchain-mcp-adapters: клиент принимает описание сразу нескольких серверов и возвращает их инструменты одним списком.

python · несколько MCP-серверов сразу
pip install langchain-mcp-adapters

# ---

from langchain_mcp_adapters.client import MultiServerMCPClient

client = MultiServerMCPClient(
    {
        "math": {
            "transport": "stdio",          # локальный процесс
            "command": "python",
            "args": ["/path/to/math_server.py"],
        },
        "weather": {
            "transport": "http",           # удалённый сервер
            "url": "http://localhost:8000/mcp",
        },
    }
)

tools = await client.get_tools()

Важная деталь поведения: клиент по умолчанию не держит сессию. Каждый вызов инструмента поднимает свежую сессию MCP, выполняет вызов и закрывает её — для инструментов, которым нужно состояние между вызовами, в документации предусмотрен отдельный режим. Что вообще даёт протокол и какие серверы имеет смысл подключить первыми, разобрано в гайдах про MCP-серверы и подборку полезных серверов.

Коротко

  • LangGraph — открытый фреймворк оркестрации агентов на Python под лицензией MIT, ставится командой pip install -U langgraph.
  • Граф собирается из трёх сущностей: состояние, узлы-функции и рёбра, выбирающие следующий шаг.
  • Чекпойнтеры дают короткую память потока и откаты, хранилища — долгую память между потоками; поток выбирается через thread_id.
  • Функция interrupt() останавливает граф в любой точке и ждёт человека; возобновление — вызовом с Command.
  • Локальный сервер поднимается командой langgraph dev, а визуальный интерфейс в документации называется LangSmith Studio.
  • MCP-инструменты подключаются пакетом langchain-mcp-adapters через MultiServerMCPClient.

Вопросы

Частые вопросы

Что такое LangGraph простыми словами?

LangGraph — низкоуровневый фреймворк оркестрации для ИИ-агентов на Python. Логика агента описывается графом: узлы делают работу, рёбра решают, куда идти дальше, а общее состояние передаётся между ними. Главная ценность в том, что детерминированные шаги и шаги, которые ведёт модель, живут в одном графе, поэтому поведение агента остаётся предсказуемым там, где это важно.

Чем LangGraph отличается от LangChain?

LangChain — фреймворк агентов: абстракции и интеграции для моделей, инструментов и готовых циклов работы. LangGraph — рантайм оркестрации под ними: устойчивое выполнение, потоковая отдача, человек в цикле и сохранение состояния. Использовать LangChain необязательно, но в документации модели и инструменты берут именно оттуда. Новичку советуют начинать с готовых агентов LangChain, а к графу переходить, когда нужен точный контроль.

Как установить LangGraph и написать первый граф?

Установка — команда pip install -U langgraph либо uv add langgraph. Минимальный граф собирается из четырёх сущностей: класс StateGraph описывает схему состояния, add_node добавляет функции-узлы, add_edge связывает их со стартом и концом, compile превращает всё в исполняемый объект. Дальше граф вызывается методом invoke со словарём сообщений.

Как в LangGraph работает память?

Механизмов два, и они дополняют друг друга. Чекпойнтеры сохраняют состояние конкретного потока диалога — это короткая память, она же даёт продолжение разговора, откат во времени и устойчивость к сбоям. Хранилища держат данные вне состояния графа и живут между потоками — это долгая память для фактов о пользователе и общих знаний. Оба подключаются при компиляции графа, а поток выбирается параметром thread_id.

Как остановить агента и спросить человека?

Для этого есть функция interrupt: её вызывают в любом месте узла, и выполнение останавливается, а состояние графа сохраняется через слой персистентности. Ждать можно сколько угодно — продолжение запускается повторным вызовом графа с объектом Command, и переданное значение становится результатом interrupt внутри узла. Нужны две вещи: подключённый чекпойнтер и thread_id в конфигурации.

Можно ли подключить MCP-серверы к агенту на LangGraph?

Да, через библиотеку langchain-mcp-adapters. Клиент MultiServerMCPClient принимает описание сразу нескольких серверов: для локальных указывается транспорт stdio с командой запуска, для удалённых — транспорт http с адресом. Метод get_tools возвращает инструменты всех серверов сразу, и их можно отдать агенту как обычные функции. По умолчанию клиент работает без сохранения сессии: каждый вызов инструмента открывает новую и закрывает её.

Читать дальше

Соседние гайды

ИИ-офис
Собери свой ИИ-офис и перестань делать руками то, что делает нейросеть

Платформа и сообщество, где я по шагам показываю, как поставить ИИ на рутину: контент, код, продажи, аналитика. Заходи и забирай рабочие связки, которыми пользуюсь сам.

Посмотреть, что внутри

telegram

Канал с полезными материалами про нейросети

Разборы, новые инструменты и приёмы по ИИ — то, чем пользуюсь сам, без воды. Подпишись, чтобы не потерять.

Перейти в канал
Кирилл Сандаков

Об авторе

Кирилл Сандаков

Вайбкодер, предприниматель, продюсер

Завайбкодил контент-ферму на США в Instagram (более 300 тыс. подписчиков, среди читателей Дональд Трамп Младший), создатель платформы и сообщества ИИ-офис, автор блога о нейросетях «Выжимаем из ИИ Максимум».

Все статьи автора