Головна / Статті

Порівняння шести фреймворків AI-агентів на Python шляхом створення однакового агента.

Той самий дослідницький агент, створений у LangGraph, CrewAI, PydanticAI, OpenAI Agents SDK, Smolagents та Google ADK, із лініями, токенами, показниками дебагування та посібником з вибору.

Видавець: REACTAPP.TOP11 хв читання2518 слів

Джерела: I Compared 6 Python AI Agent Frameworks So You Don’t Have To: LangGraph vs CrewAI vs PydanticAI vs OpenAI SDK vs Smolagents vs 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 доларів. Якщо запускати агента тисячі разів на день, різниця значно збільшується.

За шкалою відлову помилок цей інструмент отримує оцінку 5/10 о 2 годині ночі. Успіхи чудові, але невдачі зникають у ланцюзі делегування, який поводиться як чорна скринька. Одна помилка забрала 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 є продакшн-версією проекту Swarm від OpenAI, створеною на основі попередніх експериментів, і вона складається з чотирьох базових елементів: Агентів, Механізмів передачі завдань, Інструментів та Обмежень. Особливою перевагою є механізми передачі завдань – ви визначаєте, які агенти можуть передавати роботу іншим, а фреймворк займається її маршрутизацією. Він менш гнучкий, ніж графова модель LangGraph, але для приблизно 80% сценаріїв використання кількох агентів цього достатньо, і він значно простіший.

agent = Agent(
    name="Researcher",
    instructions="You are a financial research assistant.",
    tools=[search_tool, db_tool],
    handoffs=[summary_agent],
)

Він також більше не прив’язаний до одного постачальника. Підтримка понад 100 моделей LLM з’явилася завдяки адаптеру any-llm, і той самий тест було проведено з Claude без змін у коді.

Ефективність використання токенів дорівнює показникам LangGraph, що робить його одним із найкращих у тесті. Вбудоване відстеження є надійним, хоча трохи гіршим за LangSmith.

Недоліком є менший екосистема. У LangGraph є роки розробки інструментів спільноти, навчальних матеріалів та перевірених підходів. Тут продукт є новішим, тож у складних ситуаціях часто доводиться діяти самостійно.

Оцінка для виправлення помилок о 2 годині ночі: 7/10. Відстеження є вбудованим та корисним, а помилки зрозумілі. Однак прогалини в документації змушують частіше читати вихідний код, ніж хотілося б.

Smolagents: вибір мінімалістів

Близько 95 рядків коду. 30 хвилин на створення функціонального агента. 3 340 токенів за один запуск.

Ці цифри — не помилка. Proект Hugging Face серйозно ставиться до мінімалізму: основна логіка складається з приблизно 1 000 рядків коду на Python, які можна прочитати за один день. Спробуйте це з LangGraph.

Різниця полягає не лише у розмірі. Усі інші фреймворки тут використовують виклики інструментів у форматі JSON, де агент надсилає повідомлення з інструкціями щодо виконання певної функції з певними аргументами. У Smolagents CodeAgent натомість пише справжній код на 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 підходить переважно для роботи з одним агентом із структурованими результатами, де майбутні користувачі мають розуміти код.
  • Вже є вибір екосистеми: оберіть OpenAI Agents SDK на платформі 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 Harness: компоненти, які перетворюють LLM на агента — що таке Agent Harness, чому агентам, які працюють тривалий час, він потрібен, його вісім компонентів та те, як вони співпрацюють під час виконання реального завдання з програмування.