Главная / Статьи

Выбор фреймворка для агентного ИИ: LangGraph, CrewAI, OpenAI SDK, ADK

Пропустите таблицы с функциями. Разделите свой проект на одну из пяти категорий, сравните четыре стиля оркестрации и посмотрите минимальные примеры использования LangGraph, CrewAI и OpenAI SDK.

Издатель: REACTAPP.TOP9 мин чтения2024 слов

Источники: A Guide to Choosing an Agentic AI Framework

Выбор фреймворка для агентов в 2026 году кажется сложнее, чем должно быть. Если начать поиски, вы столкнетесь с LangGraph, CrewAI, OpenAI Agents SDK, Google’s Agent Development Kit, Claude Agent SDK, AG2, PydanticAI и ещё несколькими решениями, каждое из которых предлагает себя в качестве наиболее подходящего варианта.

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

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

Что на самом деле экономит вам фреймворк

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

  • Цикл рассуждений. Вызываете модель, запускаете выбранные ею инструменты, возвращаете результаты обратно и повторяете процесс до тех пор, пока не будет выполнено условие остановки.
  • Состояние и память. Сохранение контекста между этапами, а у агентов с длительным сроком жизни — также между перезапусками процессов.
  • Координация между агентами. Определение способов, с помощью которых агенты находят друг друга, передают задачи, а также делятся состоянием или изолируют его.
  • Наблюдаемость. Возможность понять, почему агент совершил тот или иной поступок. Это практически не важно при демонстрации, но имеет огромное значение, когда что-то ломается в производственной среде.
  • Все приведённые здесь фреймворки охватывают эти четыре области. Они отличаются степенью настойчивости в продвижении собственного решения.

    Начните с конкретного случая использования

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

    • Линейные рабочие процессы. Шаги выполняются в предсказуемом, в основном фиксированном порядке: сотрудник службы поддержки ищет информацию в базе знаний, составляет ответ и, возможно, открывает заявку. Здесь не требуется обсуждений между сотрудниками. Необходима надежность. LangChain подходит для последовательностей, LlamaIndex — для задач, требующих активного поиска информации, а LangGraph находит свое применение там, где последовательности нуждаются в условиях или циклах.
    • Автономные команды из нескольких агентов. Цель задачи передается группе агентов, которые сами определяют способ её выполнения — например, планировщик, программист и рецензент совместно работают над программным проектом. Такие задачи по своей природе являются открытыми. AG2 (поддерживаемый преемник AutoGen) и CrewAI — это наиболее распространенные решения для таких случаев.
  • Системы на основе ролей. Похожи на предыдущие, но каждый агент выполняет четко определенные функции — исследователя, писателя или редактора, вместо того чтобы действовать импровизированно. CrewAI отлично подходит для этой цели, как и специализированные инструменты вроде ChatDev для ролевых игр в области разработки программного обеспечения.
  • Оркестрация производства. В этом случае система использует настоящие API, базы данных и бизнес-процессы: агенты обрабатывают сигналы тревоги, обращаются к руководствам и выполняют исправления. Среди примеров — LangGraph, Google ADK и Agent Framework от Microsoft, включающий AutoGen и Semantic Kernel. Все три решения разработаны с учетом надежности и глубокой интеграции.
  • Быстрое прототипирование. Иногда достаточно быстрого ответа «да» или «нет» на какую-либо идею. Инструменты типа LangFlow и Flowise позволяют нарисовать схему работы еще до написания кода с помощью функции перетаскивания элементов.
  • Такой способ сортировки превращает вопрос «какая фреймворк?» в более конкретную формулировку. Является ли процесс предсказуемым, исследовательским, ограниченным определенными ролями, направленным на внедрение в производство или всего лишь гипотезой?

    Четыре способа, с помощью которых фреймворки моделируют координацию

    Даже среди фреймворков, попавших в список возможных решений, существуют различия в способах представления координации. В целом они следуют одной из четырех философий.

    • На основе графов. Агенты и логика представляются в виде узлов направленного графа, а явные ребра, будь то условные или циклические, определяют последующие действия. LangGraph — наиболее яркий пример; по сути, здесь определяется машина состояний.
    • На основе ролей. Каждый агент — это участник команды с определенной ролью, целью и предысторией, в то время как слой процессов определяет, как задачи передаются между ними. CrewAI построена именно на этой концепции.
  • Основано на передаче задач. Предоставляются несколько примитивов — агент, его инструменты и возможность передать разговор другому агенту — без лишних сложностей. SDK OpenAI Agents работает именно так.
  • Иерархическое строение. Один корневой агент передает задачи подагентам, расположенным в виде дерева, которые могут работать локально или как удаленные сервисы. ADK от Google использует именно этот подход.
  • Ни одна философия не является абсолютно лучшей. Ваш выбор должен определяться существующей моделью понимания проблемы в вашей команде и степенью явного контроля над путями выполнения, которую вы действительно хотите иметь.

    Место фреймворка в стеке

    Каждая платформа строится на одном или нескольких поставщиках моделей и управляет циклом рассуждений. Над этим находится вызов инструментов, который всё больше стандартизируется с помощью MCP. Сообщается, что с декабря 2025 года за его развитие отвечает Agentic AI Foundation при Linux Foundation, и каждая из этих платформ поддерживает его в той или иной форме. Когда агентам необходимо обмениваться информацией между разными процессами или сервисами, протокол Agent2Agent (A2A) становится аналогичным стандартом, имеющим встроенную поддержку в ADK и постепенно появляющимся и в других решениях.

    Ниже рассматриваются механизмы сохранения состояния, такие как создание чекпоинтов LangGraph в базе данных или простая история чатов в памяти, а также слои наблюдаемости, например LangSmith для LangGraph или встроенный трейсинг в SDK OpenAI Agents. Эти элементы становятся гораздо более важными, когда агент работает с реальными пользователями, чем в рамках ноутбука. Ни одна из этих платформ не привязана к конкретной облачной платформе. SDK OpenAI Agents и Google ADK естественным образом ориентированы на модели своих поставщиков, в то время как LangGraph и CrewAI стремятся оставаться независимыми от конкретных моделей.

    Три минимальных примера

    Эти фрагменты преднамеренно очень маленькие. Они демонстрируют модель программирования каждой платформы и не являются производственными системами. Названия пакетов и шаги установки в этой области быстро меняются, поэтому сначала проверьте актуальную документацию к каждому проекту.

    LangGraph: граф из двух узлов

    # pip install langgraph
    from langgraph.graph import StateGraph, END
    from typing import TypedDict
    
    class State(TypedDict):
        question: str
        answer: str
    
    def research(state: State) -> State:
        state["answer"] = f"Researched: {state['question']}"
        return state
    
    def write(state: State) -> State:
        state["answer"] = f"Written up: {state['answer']}"
        return state
    
    graph = StateGraph(State)
    graph.add_node("research", research)
    graph.add_node("write", write)
    graph.set_entry_point("research")
    graph.add_edge("research", "write")
    graph.add_edge("write", END)
    
    app = graph.compile()
    result = app.invoke({"question": "What is agentic AI?", "answer": ""})
    print(result["answer"])
    # Output: Written up: Researched: What is agentic AI?
    

    Код определяет типизированное состояние, общее для всех узлов, добавляет два узла в виде обычных функций Python и соединяет их с помощью явного ребра. Здесь не используется никакой LLM. LangGraph преднамеренно остаётся нейтральным в этом отношении, поэтому вы можете подключать любой нужный вам клиент модели к каждому узлу.

    CrewAI: двухагентная команда

    # pip install crewai
    from crewai import Agent, Task, Crew
    
    researcher = Agent(
        role="Researcher",
        goal="Find accurate information on the given topic",
        backstory="An experienced analyst who values accuracy over speed."
    )
    
    writer = Agent(
        role="Writer",
        goal="Turn research into a clear summary",
        backstory="A technical writer who favours plain language."
    )
    
    research_task = Task(
        description="Research agentic AI frameworks",
        expected_output="A short list of key considerations",
        agent=researcher
    )
    
    write_task = Task(
        description="Summarise the research for a developer audience",
        expected_output="A concise paragraph",
        agent=writer
    )
    
    crew = Crew(agents=[researcher, writer], tasks=[research_task, write_task])
    result = crew.kickoff()
    

    Нет узлов или рёбер, которые нужно соединить. Два агента описываются через их роль и цель, и каждому из них задаётся задание. Стандартный процесс команды выполняет задания поочерёдно, передавая результат каждого следующему. CrewAI осуществляет координацию, которую в LangGraph пришлось бы моделировать явно.

    OpenAI Agents SDK: передача диалога между агентами

    # pip install openai-agents
    from agents import Agent, Runner
    
    billing_agent = Agent(
        name="Billing",
        instructions="Handle billing questions concisely."
    )
    
    triage_agent = Agent(
        name="Triage",
        instructions="Answer general questions; hand off billing questions to Billing.",
        handoffs=[billing_agent]
    )
    
    result = Runner.run_sync(triage_agent, "Why was I charged twice this month?")
    print(result.final_output)
    

    В примере агенту, отвечающему за сортировку задач, сообщают о ещё одном агенте, которому он может передать работу. Если модель определяет, что сообщение касается вопросов оплаты, движок SDK автоматически переносит разговор к агенту по оплате. Никаких графов, никаких метафор ролей: только агенты, а также инструменты и способы передачи задач, которые они могут использовать. Google ADK похож по масштабу — это корневой агент с sub_agents, однако его подагенты образуют явное дерево, которое может включать удалённых агентов через протокол A2A, в то время как перечень способов передачи задач выше представлен в виде плоской структуры.

    Подбор подходящей платформы для вашей ситуации

    Используйте LangGraph, когда:

    • в вашем рабочем процессе есть циклы, повторные попытки или условные ветви, которые вы хотите явно описать;
    • вам нужно сохранять состояние после перезапуска или для отладки с использованием механизма «путешествия во времени»;
    • ваша команда уже использует компоненты LangChain.

    Используйте CrewAI, когда:

    • проблема естественным образом делится на определённые роли, и такая структуризация помогает людям вне инженерных команд понимать ситуацию;
    • вам нужно, чтобы что-то заработало в течение нескольких часов;
    • вы готовы использовать более простые фреймворки для критически важных компонентов, если последовательность действий, основанная на ролях, становится недостаточной;

    Используйте OpenAI Agents SDK в следующих случаях:

    • вы разрабатываете приложения в основном на моделях OpenAI и хотите добавить минимально необходимый слой над циклом рассуждений;
    • вам нужна простая передача задач между несколькими специалистами.

    Используйте Google ADK в следующих случаях:

    • вы уже работаете в Google Cloud или экосистеме Gemini;
    • агенты должны работать в разных командах или сервисах, что идеально подходит для модели удалённых агентов A2A.

    Обратитесь к другим решениям в следующих случаях:

    • Безопасность типов важнее гибкости оркестрации, и в таком случае PydanticAI, который проверяет входные и выходные данные агента согласно моделям Pydantic, может превзойти все четыре подхода;
    • Вы находитесь на этапе прототипирования одного из пяти сценариев использования, и в таком случае LangFlow или Flowise до написания кода фреймворка — лучший старт.

    Ошибки, которые допускают команды

    • Выбор до определения.** Команды берут тот фреймворк, у которого больше всего оценок, и пытаются вписать свою задачу в его структуру. Сначала определить категорию обычно помогает четко сформировать список возможных вариантов, гораздо эффективнее, чем изучение четырех наборов документации.
    • Игнорирование затрат на смену.** Подсказки, логика агента и шаблоны оркестрации редко можно легко перенести с одного фреймворка на другой. Если вы предполагаете, что первый выбор вскоре окажется недостаточным, планируйте частичную переработку и не рассчитывайте на быструю замену.
  • Отсрочка обеспечения наблюдаемости. Отслеживание и оценку легко откладывать на этапе прототипирования, но внедрять их позже, когда агент начинает обрабатывать реальный трафик, бывает сложно. Включите любые инструменты отслеживания, которые предлагает ваша платформа, с самого начала.
  • Ваши следующие шаги

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

    Kраткий вариант

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

    Ответ на этот вопрос сужает круг возможных вариантов еще до того, как откроется таблица функций. После этого остается в основном вопрос философии. Выберите LangGraph для прямого контроля над ветвлением логики, CrewAI для работы на основе ролей и быстрой итерации, OpenAI Agents SDK для простоты использования моделей OpenAI, а ADK — если вы уже работаете в экосистеме Google. MCP и A2A постепенно становятся стандартами для инструментов и взаимодействия агентов, поэтому смена подхода позже будет менее болезненной, хотя это все равно не обойдется без затрат.