Сравнение шести Python-фреймворков для ИИ-агентов на примере создания одного и того же агента.
Тот же исследовательский агент, реализованный в LangGraph, CrewAI, PydanticAI, OpenAI Agents SDK, Smolagents и Google ADK, с отображением строк, токенов, показателей отладки и руководством по выбору.
Если спросить у группы людей, какую фреймворк-среду для агентов использовать, вы получите дюжину уверенных, но противоречивых ответов. Одни считают LangGraph чрезмерно сложным, другие — единственным серьезным вариантом. Третьи предлагают вообще отказаться от фреймворков и общаться напрямую с API модели. Однако реализация такого подхода дорогостояща, поэтому практическим решением становится прекращение споров и проведение эксперимента.
Эксперимент был простым: за одни выходные был создан идентичный агент в шести Python-фреймворках с использованием одной и той же задачи, одной и той же модели, одних и тех же инструментов и одинаковой системы оценки. Задачей проекта была обработка документов в духе технологий 2026 года, то есть извлечение данных из PDF, сопоставление их с базой данных, составление краткого резюме и отправка результата по электронной почте. Результаты не устроили ни одну из сторон, активно высказывавшихся по этому вопросу.
Что было создано и как оценивалось
Тестовый агент принимает название компании, находит свежие новости в Интернете, извлекает ключевые финансовые показатели, сравнивает их с локальной базой данных SQLite и возвращает структурированный краткий отчет в формате JSON. Это три инструмента, один агент и одна схема вывода.
Это сделано намеренно скучно. Почти никто не выпускает автономного кодирующего агента в качестве своей первой производственной системы. Большинство реальных задач агентов представляют собой оркестратор API с небольшим уровнем логики, и любая фреймворк-среда должна справляться с этим без проблем. GPT-4o использовался в качестве модели там, где это позволяла фреймворк-среда.
Было измерено пять показателей:
- количество необходимых строк кода
- количество токенов за одну работу, среднее за 10 работ
- среднее время задержки
- количество часов от начала работы до готового прототипа
- «Оценка отладки в 2 часа ночи» — степень легкости выявления причин сбоев, когда процесс нарушается поздно ночью
Этот последний показатель важнее, чем кажется. Всё постоянно ломается.
LangGraph: для тех, кто любит контроль
Примерно 210 строк. Три часа на создание рабочего агента. 2 847 токенов за одну обработку.
LangGraph создаёт впечатление, будто его разработали инженеры по распределённым системам. Вы задаёте состояние, определяете узлы, соединяете между собой рёбра и компилируете результат. Это больше похоже на настройку потока данных, чем на создание ИИ-агента, что является комплиментом.
Первый час бывает сложным. Вид кода StateGraph, add_node и add_conditional_edges для трёхфункционального агента кажется чрезмерно сложным, и возникает соблазн перейти к следующему варианту.
Тогда сбой меняет ситуацию. При третьем тестовом запросе агент совершил серьезные ошибки, и запуск LangSmith показал весь процесс шаг за шагом: какой узел принял неверное решение, какое состояние он имел и почему он вызвал инструмент базы данных до начала поиска. Лишь немногие фреймворки позволяют проводить столь прямую диагностику.
Функция, о которой люди редко упоминают: надежная работа. Завершившийся процесс возобновляется с последней точки контроля. Во время эксперимента на выходных это удобно. Но когда система обрабатывает 10 000 документов за ночь, это влияет на то, сможете ли вы спать или вам придется вставать в 3 часа ночи.
LangGraph также потребовал наименьшее количество токенов в ходе теста. Поскольку граф отображает структуру управления, модели не нужно тратить токены на определение следующего шага — вы уже сказали ей об этом.
Стоимость связана с заранее продуманным подходом. Нет ситуаций, когда просто вставляешь инструкции и надеешься на лучшее. Четко сформулированная проблема позволяет эффективно использовать структуру, но если вы все еще пытаетесь разобраться в процессе работы, вы нарисуете больше диаграмм, чем выпустите функциональные возможности.
Оценка отладки в 2 часа ночи: 9/10. LangSmith заслуживает своей репутации — проблемы здесь диагностируются быстрее, чем где-либо еще.
CrewAI: инструмент для быстрой разработки прототипов
Примерно 340 строк кода. 45 минут на создание рабочего агента. 4,216 токенов за один запуск.
От команды pip install crewai до получения правильного результата потребовалось три четверти часа — это самое быстрое время запуска среди всех инструментов, за исключением Smolagents.
CrewAI работает в командах, а не с отдельными агентами. Каждый участник имеет свою роль, цель и предысторию; задачи передаются группе, а участники сами решают, кто что будет делать.
researcher = Agent(
role="Financial Research Analyst",
goal="Find and verify recent financial data",
backstory="You're a senior analyst at a hedge fund...",
)
Поле с описанием контекста кажется излишним и было воспринято с скепсисом. Однако результаты работы агента CrewAI оказались заметно более детальными, чем при использовании того же запроса через прямые API-звонки, так что задание, сформулированное в определенном контексте, действительно влияет на подход модели к решению задачи.
Скорость имеет свою цену. Для выполнения одной и той же задачи CrewAI потребовал примерно на 48% больше токенов, чем LangGraph. Архитектура предполагает сотрудничество как минимум двух-трех агентов, поэтому даже работа, которую мог бы выполнить один агент — например, исследователь вместе с писателем, — требует дополнительных затрат на взаимодействие между ними. К тому же система работает синхронно, и для интеграции ее в асинхронный FastAPI-бэкенд приходилось оборачивать вызовы в функцию run_in_executor. Это еще терпимо, но довольно раздражает.
Расходы растут быстро. Согласно одному из опубликованных сравнений, стоимость тестирования с использованием CrewAI составила 1 088 долларов, тогда как аналогичное решение на PydanticAI обошлось в 390 долларов. Если запускать агента тысячи раз в день, разница будет только увеличиваться.
По шкале отладки в 2 часа ночи она получает оценку 5/10. Успехи прекрасны, но неудачи исчезают в цепочке делегирования, которая ведет себя как «черный ящик». Один баг занял 40 минут, прежде чем выяснилось, что это два агента, передающих одну и ту же задачу друг другу.
PydanticAI: тихий талант
Примерно 130 строк. 1,5 часа на создание рабочего агента. 2 912 токенов за один запуск.
Если LangGraph подходит тем, кто ценит контроль, а CrewAI — нетерпеливым, то PydanticAI подходит разработчикам, которые хотят, чтобы код стал понятным уже через шесть месяцев. Его создала команда Pydantic, и те, кто уже использовал FastAPI, знают половину API. Агенты имеют типизацию, выводы проверяются, а зависимости внедряются автоматически, так что всё, что можно обнаружить до запуска, действительно находится.
agent = Agent(
"openai:gpt-4o",
result_type=CompanyAnalysis, # Pydantic model
system_prompt="You are a financial research assistant.",
)
Параметр result_type выполняет больше функций, чем кажется на первый взгляд. Каждый ответ модели автоматически проверяется с учётом вашей схемы. Когда модель возвращает некорректный JSON, что в конечном итоге происходит, фреймворк это замечает и пытается выполнить операцию заново, при этом не требуется ручного кода для валидации.
В проекте full-stack-ai-agent-template было проведено контролируемое сравнение, соответствующее этой схеме. Для одного и того же чат-приложения в PydanticAI потребовалось примерно 160 строк кода, в LangGraph — около 280 строк, а в CrewAI — примерно 420 строк.
Короче код не всегда означает его лучшую эффективность, однако здесь была измерена скорость понимания каждой версии. Код PydanticAI можно было читать и осмысливать по строкам. Для кода LangGraph требовалось мысленно воспроизводить структуру графа, а для кода CrewAI — понимать его модель делегирования.
Ограничением является то, что PydanticAI — это фреймворк с одним агентом. В нем отсутствует встроенная система оркестрации нескольких агентов, передачи задач или делегирования, поэтому для трехагентной архитектуры приходится самостоятельно писать механизмы координации. Модуль pydantic-graph существует, но пока не сравнится с LangGraph или CrewAI по сложности обработки задач.
Оценка отладки поздней ночью — 8/10. Ошибки типов обнаруживаются рано, интегрированная среда разработки выделяет проблемы ещё до запуска кода, а трейсы вызовов указывают на нужную строку.
OpenAI Agents SDK: неожиданный хит
Примерно 150 строк кода. Час на создание рабочего агента. 2,791 токена за один запуск.
Фреймворк от поставщика моделей кажется способом создания зависимости, и его почти не включили в тестирование. Однако эти ожидания оказались ошибочными.
SDK представляет собой серийную версию разработки OpenAI на основе их предыдущего эксперимента Swarm; он сводится к четырем примитивам: агентам, передачам задач, инструментам и ограничениям. Особое внимание уделяется механизму передач задач. Вы указываете, какие агенты могут передавать работу другим, а фреймворк занимается её маршрутизацией. Этот подход менее гибкий, чем графовая модель LangGraph, но для примерно 80% сценариев использования нескольких агентов он достаточен и гораздо проще в применении.
agent = Agent(
name="Researcher",
instructions="You are a financial research assistant.",
tools=[search_tool, db_tool],
handoffs=[summary_agent],
)
Он также больше не связан с одним поставщиком. Поддержка более 100 больших языковых моделей была реализована с помощью адаптера any-llm, и тот же тест был проведен с Claude без изменений в коде.
Эффективность использования токенов сравнима с LangGraph, что позволяет ему занять место с самыми низкими показателями в тесте. Встроенный механизм отслеживания работает надежно, хотя и немного уступает LangSmith.
Недостатком является более ограниченная экосистема. У LangGraph есть годы разработки сообщественных инструментов, учебников и проверенных подходов. У этого продукта он более новый, поэтому при решении сложных случаев часто приходится полагаться только на собственные силы.
Оценка при отладке в 2 часа ночи: 7/10. Механизм отслеживания встроен и полезен, а ошибки ясно выражены. Однако отсутствие документации заставляет чаще читать исходный код, чем хотелось бы.
Smolagents: выбор минималистов
Примерно 95 строк кода. 30 минут на создание рабочего агента. 3 340 токенов за один запуск.
Эти цифры — не ошибка. Proект Hugging Face серьезно относится к принципу минимализма: основная логика состоит примерно из 1 000 строк кода на Python, которые можно прочитать за один день. Попробуйте то же самое с LangGraph.
Разница заключается не только в размере. Все остальные фреймворки здесь используют вызовы инструментов в формате JSON, при которых агент отправляет данные с указанием функции и аргументов для ее выполнения. В свою очередь, CodeAgent из Smolagents пишет настоящий код на Python.
agent = CodeAgent(
tools=[search_tool, db_tool],
model=InferenceClientModel(),
)
result = agent.run("Analyze recent financial news for Acme Corp")
Написание кода позволяет агенту естественным образом составлять инструменты с использованием циклов, условий и последовательных операций, которые невозможно выразить с помощью вызовов JSON. Исследования в области тестирования производительности подтверждают это, поскольку кодовые агенты показывают лучшие результаты, чем агенты, основанные на JSON, в большинстве тестов.
Однако это сопряжено с рисками для безопасности, поскольку агент генерирует и запускает код на Python. Технологии сандбоксинга доступны через E2B, Docker и Pyodide, но их необходимо настроить самостоятельно. По умолчанию используемый LocalPythonExecutor явно не является механизмом обеспечения безопасности, и об этом прямо сказано в его документации.
Потребление токенов оказалось выше, чем у LangGraph и OpenAI SDK. Генерируемый на Python код более объемным, чем компактный JSON, и каждая импортная строка и объявление переменной потребляют токены.
С Gemini или GPT всё работает нормально, но это скорее временное решение. Инструмент демонстрирует наилучшие результаты с моделями и инфраструктурой Hugging Face, а интеграция с Hub, позволяющая делиться и загружать агентов так же, как модели, просто отлична, если вы уже работаете в этой экосистеме.
Оценка при отладке в 2 часа ночи: 8/10. Чтение кода, написанного агентом, проще, чем декодирование последовательности вызовов JSON-инструментов, а при сбое формируется обычный отчет об ошибках в Python.
Google ADK: тайный фаворит корпоративного сектора
Примерно 180 строк кода. На создание рабочего агента уходит два часа. 3,102 токена за один запуск.
Набор инструментов для разработки агентов от Google появился незаметно в 2025 году, и многие разработчики на Python даже не пробовали им пользоваться. Это пробел, который стоит преодолеть.
ADK придерживается строгих принципов в отношении структуры, но проявляет гибкость в реализации, как это обычно бывает с внутренними инструментами Google. Агенты определяются с помощью модели, имени, инструкций и инструментов, примерно как в SDK OpenAI. В дополнение существуют агенты для рабочих процессов (последовательные, параллельные и циклические), а также более новый API AgentTeam для координации нескольких агентов.
from google.adk.agents import Agent
root_agent = Agent(
model="gemini-2.5-flash",
name="financial_analyst",
instruction="You are a financial research assistant.",
tools=[search_tool, db_tool],
)
Именно система оценки делает его уникальным. Тест-кейсы записываются в формате JSON, adk eval запускает их, и вы получаете структурированные отчеты о том, соответствует ли поведение ожиданиям. Ни одна другая система в этом списке не поставляется с настолько развитыми инструментами оценки.
Развертывание также проходит гладко, если вы используете Google Cloud. Vertex AI Agent Engine обрабатывает масштабирование, мониторинг и сессии, но это условие имеет большое значение.
ADK настроен для Gemini. Другие модели работают через LiteLLM, однако документация, примеры и инструменты предполагают использование Gemini. Запуск GPT-4o привел к недокументированным ситуациям, разрешение которых заняло 45 минут.
Оценка при отладке в 2 часа ночи: 6/10. Интерфейс разработчика adk web помогает. Однако сообщения об ошибках иногда бывают неясными, а документация настолько обширна в типичном для Google стиле, что ею трудно ориентироваться.
Какой выбрать
Фраза «Это зависит» раздражает всех, поэтому вот логика принятия решений, сформированная в процессе создания агента шесть раз:
- Необходимо запустить к пятнице: выберите CrewAI или Smolagents. CrewAI подходит для команд, которые не уверены в умении отлаживать выполнение кода на Python. Smolagents подходит для тех, кто умеет это делать и хочет минимизировать количество зависимостей.
- Необходимо стабильно работать месяцами: выберите LangGraph или PydanticAI. LangGraph подходит для логики с ветвлениями, этапов с участием человека и требований к долговременной работе. PydanticAI подходит в основном для работы с одним агентом с структурированными результатами, когда будущие пользователи должны понимать код.
- Вы уже выбрали определенную экосистему: выберите SDK OpenAI Agents на платформе OpenAI благодаря ее возможностям отслеживания и оценки, или Google ADK на GCP для нативной интеграции с Vertex AI с встроенными инструментами оценки.
Проблема в том, что для большинства проектов фреймворк имеет меньшее значение, чем разработка промптов и дизайн инструментов. Качество вывода оказалось практически одинаковым у всех шести подходов, как только системным промптам и описаниям инструментов стало уделяться должное внимание. Различия проявлялись в пользовательском опыте разработчика, возможностях отладки и операционных затратах.
Система, которая осталась в эксплуатации: PydanticAI для задач с одним агентом, что составляет основную часть работы, и LangGraph в случаях крайне сложных рабочих процессов. Нет необходимости извиняться за использование двух фреймворков.
Все шесть подходов рядом
| Metric | LangGraph | CrewAI | PydanticAI | OpenAI SDK | Smolagents | Google ADK |
| ----------------- | ----------- | --------------- | ------------- | ---------------- | --------------- | --------------- |
| Lines of code | ~210 | ~340 | ~130 | ~150 | ~95 | ~180 |
| Time to prototype | 3 hrs | 45 min | 1.5 hrs | 1 hr | 30 min | 2 hrs |
| Avg tokens/run | 2,847 | 4,216 | 2,912 | 2,791 | 3,340 | 3,102 |
| Multi-agent | Yes (graph) | Yes (teams) | Manual | Yes (handoffs) | Yes (hierarchy) | Yes (AgentTeam) |
| Type safety | TypedDict | Pydantic config | Full generics | Generic context | Minimal | Standard |
| MCP support | Yes | Limited | Native + A2A | Native | Yes | Yes |
| Model-agnostic | Yes | Yes | Yes (20+) | Yes (100+) | Yes (LiteLLM) | Gemini-first |
| Best debugger | LangSmith | Logs | IDE/types | Built-in tracing | Code output | ADK Web UI |
| GitHub stars | ~48K | ~44K | ~15K | ~16K | ~26K | ~23K |
| 2 AM debug | 9/10 | 5/10 | 8/10 | 7/10 | 8/10 | 6/10 |
Ни один из этих показателей не отражает всю картину, но они служат более честной отправной точкой, чем в большинстве статей с сравнениями.
Ожидайте изменений
Эти фреймворки развиваются быстрее, чем кто-либо может их задокументировать. Во время написания статьи вышло крупное обновление LangGraph. В течение недели в корпоративной версии CrewAI появились новые интеграции. PydanticAI добавил поддержку протокола A2A, а Google ADK выпустил функцию SkillToolset за несколько дней до этого.
Любое сравнение имеет срок годности. Через шесть месяцев разрывы в производительности могут сократиться, могут появиться отсутствующие функции, а фреймворк, который вы отвергли, может стать очевидным выбором. Поэтому выбирайте тот, с которым ваша команда сможет работать в 2 часа ночи, когда вся инфраструктура выключена, а клиент ждет, а не тот, у которого больше всего звезд на GitHub.
Связанные материалы
- Agent Plugins 1.0.0: Формат совместной упаковки для навыков и серверов MCP — Agent Plugins 1.0.0 стандартизирует структуру папок с плагинами, файл plugin.json, а также настройки навыков и mcp.json во всех клиентах. Описываются охватываемые аспекты, моменты, игнорируемые с точки зрения безопасности, и пример использования Google Agents CLI.
- MCP, A2A и ACP на практике: как банк связывает инструменты и агентов — Рассматривается, как MCP, A2A и ACP распределяют задачи по подключению моделей к инструментам и агентам друг к другу, на примере работы банковского ассистента с обнаружением мошенничества и кредитованием.