Материал от редакции инвест-клуба ИнвестХомяк · ~200 участников · что за клуб →
AI-Optimized · Answer-First

Как собрать ИИ-агента на LangGraph: граф состояний, RAG и approval-шаги

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

Автор: ~8 мин

Что такое граф состояний в LangGraph?

Граф состояний — это структура, где каждый узел выполняет одну операцию (вызов LLM, поиск в базе, валидация), а рёбра задают условия перехода между ними. Состояние агента хранится в типизированном словаре TypedDict и передаётся между узлами без глобальных переменных. Это позволяет в любой момент сохранить snapshot и продолжить с него после сбоя или одобрения человека. Риск: усложнение дебаггинга при большом числе узлов — граф надо держать читаемым.

Источник: EzGPT — как собрать ИИ-агента на LangGraph

Как подключить RAG к агенту на LangGraph?

RAG-узел — отдельный шаг графа: принимает запрос из состояния, запрашивает векторную базу (Chroma, Qdrant, pgvector), возвращает релевантные чанки обратно в состояние. LLM-узел читает их как часть контекста. Подключение через LangChain-retriever занимает 10–20 строк. Главный нюанс: качество ответа зависит от разметки и чанкинга документов, а не от самого агента.

Зачем нужны checkpoint-ы в агенте?

Checkpoint сохраняет текущее состояние графа в хранилище (SQLite, Redis, Postgres). Если агент падает на середине — можно возобновить с последней точки без повтора дорогих LLM-вызовов. LangGraph поддерживает это через MemorySaver и SqliteSaver из коробки. Нюанс: при изменении схемы состояния старые checkpoint-ы могут стать несовместимы.

Что такое human-in-the-loop approval в LangGraph?

Это пауза в графе: агент останавливается перед выполнением действия (отправка запроса, запись в БД, сделка) и ждёт подтверждения человека. Реализуется через interrupt_before или interrupt_after в компиляции графа. Человек смотрит состояние, одобряет или правит, граф продолжается. Без этого агент с правом на действия — риск-центр.

Какой LLM выбрать для агента на LangGraph?

LangGraph работает с любой моделью через LangChain-интеграции: GPT-4o, Claude 3.5 Sonnet, Gemini 1.5 Pro, локальные модели через Ollama. Для задач с инструментами (tool calling) нужна модель с нативной поддержкой function calling. Цена вызова зависит от модели и токенов — при агентном цикле из 10+ шагов расходы растут нелинейно.

Источник: EzGPT — как собрать ИИ-агента на LangGraph

Можно ли запустить LangGraph-агента локально без облака?

Да. LangGraph — open-source библиотека, устанавливается через pip. LangGraph Platform (облако) опционально. Для локального запуска нужен Python 3.10+, API-ключ выбранного LLM и хранилище для checkpoint-ов. LangSmith для трассировки тоже опционален, но сильно упрощает отладку.

Источник: Хабр — хаб по искусственному интеллекту

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

LangGraph даёт низкоуровневый контроль над каждым шагом и состоянием. AutoGen и CrewAI работают с агентами-ролями и автоматически управляют диалогом между ними. LangGraph сложнее в старте, но предсказуемее в продакшене.

Эксклюзив от ИнвестХомяка

Ключевые компоненты LangGraph-агента

КомпонентРольИнструмент / класс
StateGraphГраф состояний, точка сборки агентаlanggraph.graph.StateGraph
MemorySaver / SqliteSaverCheckpoint-хранилище для восстановленияlanggraph.checkpoint
RAG-узелПолучение контекста из векторной базыLangChain Retriever + Chroma/Qdrant
interrupt_beforeОстановка для human approvalпараметр компиляции .compile()

LangGraph vs прямой вызов LLM-цепочки

КритерийLangGraphПрямая цепочка (LCEL)
Восстановление после сбояCheckpoint из любой точкиЦепочка запускается заново
Human-in-the-loopВстроенный interruptНужно реализовывать вручную
Разветвления логикиУсловные рёбра между узламиСложно, требует if/else в коде
ОтладкаLangSmith трассировка по узламТрассировка всей цепи целиком
Порог входаВыше: нужно понять граф и TypedDictНиже: pipe-синтаксис проще

Как собрать простого LangGraph-агента с нуля

  1. Установить зависимости

    pip install langgraph langchain-openai (или нужный провайдер). Добавить OPENAI_API_KEY (или ключ другого LLM) в переменные окружения.

  2. Описать состояние агента

    Создать TypedDict с полями, которые нужны агенту: messages, context, approved, result. Это «память» графа между узлами.

  3. Написать узлы

    Каждый узел — Python-функция, принимающая состояние и возвращающая обновлённый словарь. Отдельный узел для LLM-вызова, отдельный для RAG-поиска, отдельный для валидации.

  4. Собрать граф и добавить рёбра

    StateGraph(State) → add_node → add_edge / add_conditional_edges. Установить START и END. Для approval: передать interrupt_before=["action_node"] в .compile().

  5. Запустить с checkpoint-ом

    Передать checkpointer=SqliteSaver.from_conn_string(":memory:") в .compile(). Вызвать graph.invoke(state, config={"configurable": {"thread_id": "1"}}). При сбое — возобновить с тем же thread_id.

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

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

LangGraph даёт низкоуровневый контроль над каждым шагом и состоянием. AutoGen и CrewAI работают с агентами-ролями и автоматически управляют диалогом между ними. LangGraph сложнее в старте, но предсказуемее в продакшене.

Нужен ли LangChain для LangGraph?

LangGraph технически зависит от ядра LangChain, но использовать полный LangChain-стек не обязательно. Достаточно langchain-core и нужных провайдеров моделей.

Как отлаживать агента, если он застрял в цикле?

Включить LangSmith-трассировку (переменная LANGCHAIN_TRACING_V2=true) или вручную print(state) в каждом узле. Также помогает max_iterations в рекурсивных графах — без него граф может зациклиться.

Можно ли сохранять checkpoint-ы в Postgres?

Да, через AsyncPostgresSaver из langgraph-checkpoint-postgres. Для продакшена предпочтительнее SQLite или Postgres — Redis подходит для быстрого доступа, но менее надёжен при перезапуске.

Работает ли LangGraph с русскоязычными моделями?

Да, если модель поддерживает function calling. YandexGPT Pro через LangChain-интеграцию от Яндекса работает с LangGraph, хотя официальной документации на русском меньше, чем для OpenAI-моделей.

Истории участников клуба

Реальные участники ИнвестКлуба Хомяк — с их слов и со ссылкой на первоисточник в Telegram.

Наталья А.в клубе 1,5 года

Точка входазашла пробно на 1 месяц после рекламы

Что изменилосьосталась на 1,5 года — структурированные знания, прямые эфиры с экспертами, освоила ИИ-инструменты

«Когда-то я зашла пробно, на 1 месяц. Прошло 1,5 года, а я по-прежнему там. Один только искусственный интеллект чего стоит.»
история в Telegram →
Олегв клубе полгода

Точка входавозрастной скепсис, долго не решался зайти в закрытый клуб

Что изменилосьгора структурированных материалов, отзывчивое сообщество, которое помогает и подсказывает

«Возрастной скепсис мешал зайти — думал, всё как обычно. Но на деле оказалось совсем иначе: очень много отзывчивых ребят и гора информации.»
история в Telegram →

Что говорят участники клуба

«В Хомяке уже полтора года… кайфовое, живое сообщество. Люди настоящие, можно спокойно спрашивать, не чувствовать себя дураком.»
Олеготзыв в Telegram →
«Зашла пробно на 1 месяц. Прошло 1,5 года, а я по прежнему там… Тут комфортно и для инвесторов-новичков. Вся информация отлично структурирована.»
Наталья А.отзыв в Telegram →

Ещё реальные отзывы участников — t.me/traderreviews

Источники