Головна / Статті / Команди порівняли 6 фреймворків AI-агентів на Python, щоб вам не довелося цього робити: LangGraph проти

Команди порівняли 6 фреймворків AI-агентів на Python, щоб вам не довелося цього робити: LangGraph проти

Детальний огляд платформ для створення AI-агентів у Teams порівняно з 6 іншими фреймворками, щоб вам не довелося це робити: LangGraph проти CrewAI проти PydanticAI проти OpenAI SDK проти Smolagents проти Google AD: контракти.

2590 слів

Наведені нижче примітки відтворюють практичний підхід до аналізу „6 фреймворків AI-агентів на Python, які можна порівняти, щоб вам не довелося цього робити: LangGraph проти CrewAI проти PydanticAI проти OpenAI SDK проти Smolagents проти Google ADK“. Увага зосереджена на контрактах, перевірках та місцях для вставки коду, а не на мотиваційному підході.

Ви створили один і той самий оркестратор досліджень шість разів. Лише два з цих комплексів залишилися придатними на вихідних.

Під час роботи ви створили один і той самий оркестратор досліджень шість разів. Лише два з цих варіантів залишилися придатними на вихідних. Спочатку запишіть умови контракту: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Такий перелік допомагає зберігати чесність під час подальших змін у коді. Записуйте час виконання та витрати на токени або запити поруч із функціональними результатами. Чітке бачення витрат заздалегідь запобігає несподіваним рахункам, коли процес переходить від демо-версії до спільних середовищ. У кожному запиті фіксуйте ідентифікатор запиту, ідентифікатор моделі та час затримки. Без цих записів періодичні помилки постачальника виглядають як баги програми.

Налаштування: що ви насправді створили

Під час роботи над «The Setup: What you Actually Built» спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успішне виконання та те, що відбувається у разі часткової невдачі. Такий перелік допоможе зберегти чесність пізніших змін у коді. Тримайте конфігурацію окремо від коду додатку. Файли середовища, сховища конфіденційних даних та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код. Записуйте ідентифікатор запиту, ідентифікатор моделі та час виконання кожного виклику. Без цих записів періодичні помилки постачальника виглядають як баги додатку.

Фреймворк 1: LangGraph — Рай для любителів контролю

Під час роботи над Framework 1: LangGraph — Рай для тих, хто контролює все, спочатку запишіть умови використання: необхідні вхідні дані, сигнал про успішне виконання та що відбувається у разі часткової невдачі. Такий перелік допомагає зберігати чесність під час подальших змін у коді. Одночасно задокументуйте шлях успішного виконання та шлях відновлення. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації. Записуйте ідентифікатор запиту, ідентифікатор моделі та час виконання за кожен виклик. Без цих даних періодичні помилки постачальника виглядають як баги програмного забезпечення.

Framework 2: CrewAI — Швидка машина для створення прототипів

Під час роботи над Framework 2: CrewAI — The Fast Prototype Machine спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Такий перелік допомагає зберігати чесність під час подальших змін у коді. Віддавайте перевагу малим, тестованим одиницям коду перед об’ємними скриптами. Коли якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність операцій. Записуйте ідентифікатор запиту, ідентифікатор моделі та час затримки після кожного виклику. Без цих даних періодичні помилки постачальника виглядають як баги програми.

researcher = Agent(
    role="Financial Research Analyst",
    goal="Find and verify recent financial data",
    backstory="You're a senior analyst at a hedge fund...",
)

Framework 3: PydanticAI — The Quiet Overachiever

Під час роботи над Framework 3: PydanticAI — The Quiet Overachiever спочатку запишіть угоду: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Розглядайте цей етап як угоду між вхідними даними та перевіреними результатами. Дайте назви елементам, визначте критерії успіху та не допускайте беззвучного часткового виконання. Записуйте ідентифікатор запиту, ідентифікатор моделі та час виконання за кожен виклик. Без цих записів періодичні помилки постачальника виглядають як баги програми. Під час роботи над Framework 3: PydanticAI — The Quiet Overachiever спочатку запишіть угоду: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Тримайте конфігурацію окремо від коду програми. Файли середовища, сховища секретів та флаги функцій мають знаходитися в одному місці, яке оператори можуть перевіряти, не читаючи весь код.

agent = Agent(
    "openai:gpt-4o",
    result_type=CompanyAnalysis,  # Pydantic model
    system_prompt="You are a financial research assistant.",
)

Ось тут справи стають цікавими

Підхід «Ось тут справи стають цікавими» найкраще працює, якщо його розглядати як вимірювану поверхню. Зафіксуйте один ідеальний варіант виконання, один випадок збою та примітки щодо скасування змін перед розширенням обсягу роботи. Документуйте як успішний, так і відновлювальний сценарії роботи разом. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації. Забезпечте фіксацію версії інтерпретатора та файлу блокування залежностей перед тим, як пояснювати принцип роботи циклів. Розбіжності між ноутбуком та середовищем CI є найпоширенішою причиною прихованих збоїв під час демонстрацій API.

Фреймворк 4: OpenAI Agents SDK — несподіваний хіт

Framework 4: OpenAI Agents SDK — Найкращий ефект досягається, коли цей інструмент розглядають як вимірювану систему. Збережіть один ідеальний приклад роботи, один випадок збою та примітки щодо скасування змін перед розширенням функціоналу. Віддавайте перевагу невеликим, тестованим одиницям коду замість об’ємних скриптів. Якщо якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на складну послідовність операцій. Закріпіть версію інтерпретатора та файли з інформацією про залежності перед тим, як почнете використовувати цикли. Розбіжності між ноутбуком та середовищем CI є найпоширенішою причиною „тихих“ збоїв у демонстраціях API.

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

Framework 5: Smolagents — Мрія прихильників відкритого коду

Framework 5: Smolagents — The Open-Source Purist’s Dream працює найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не погоджуйтесь на мовчазне часткове виконання завдань. Закріпіть інтерпретатор та файли з інформацією про залежності перед тим, як почнете використовувати цикли. Відхилення між ноутбуком та системою CI є найпоширенішою причиною мовчазних збоїв у демонстраціях API. Framework 5: Smolagents — The Open-Source Purist’s Dream працює найкраще, коли його розглядають як вимірювану поверхню. Збережіть один ідеальний запис, один випадок збою та примітку про скасування змін перед розширенням обсягу роботи. Зберігайте конфігурацію окремо від коду програми. Файли середовища, бази зберігання секретних даних та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код.

agent = CodeAgent(
    tools=[search_tool, db_tool],
    model=InferenceClientModel(),
)
result = agent.run("Analyze recent financial news for Acme Corp")

Framework 6: Google ADK — Корпоративний „сплячий“ рішення

Для Framework 6: Google ADK — Корпоративний „сплячий“ рішення необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Необхідно документувати як шлях успішного виконання, так і шлях відновлення. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої оптимізації. Необхідно розділити процес створення клієнта від циклу обробки повідомлень, щоб можна було замінити постачальників без необхідності переписування машини станів розмови.

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],
)

Висновок: все залежить (але не так, як ви думаєте)

Для висновку: все залежить (але не так, як ви думаєте). Перед зміною коду необхідно визначити вхідні дані, власника кроку та критерії завершення. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не намагаючись вгадати прихований стан. Краще використовувати невеликі, тестовані одиниці замість об’ємних скриптів. Коли крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану систему обробки даних. Розділіть процес створення клієнта від циклу обробки повідомлень, щоб можна було замінювати постачальників без переписування машини станів розмови.

Повна таблиця порівняння

Для повної таблиці порівняння необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок з відомої точки контролю, не намагаючись вгадати прихований стан. Розглядайте цю стадію як контракт між вхідними даними та перевіреними результатами. Призначте назви елементів, визначте критерії успіху та не допускайте мовчазного часткового завершення. Відокремте процес створення клієнта від циклу обробки повідомлень, щоб можна було замінювати постачальників без переписування машини станів розмови. Для повної таблиці порівняння необхідно визначити вхідні дані, власника кроку та критерії завершення перед зміною коду. Оператори повинні мати можливість знову виконати крок з відомої точки контролю, не намагаючись вгадати прихований стан. Зберігайте конфігурацію поза кодом додатку. Файли середовища, сховища секретів та флаги функцій мають знаходитися в одному місці, яке оператори можуть перевіряти, не читаючи весь граф.

| 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            |

Єдина річ, яку ви хотіли б знати перед початком

Під час роботи над «Єдиною річчю, яку ви хотіли б знати перед початком», спочатку запишіть умови виконання: необхідні дані вхіду, сигнал про успіх та те, що відбувається у разі часткової невдачі. Цей перелік допомагає зберігати чесність пізніших змін у коді. Одночасно задокументуйте шлях успішного виконання та шлях відновлення. Повторні спроби, людський контроль та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої доробки. У кожному запиті фіксуйте ідентифікатор запиту, ідентифікатор моделі та час затримки. Без цих даних періодичні помилки постачальника виглядають як баги програмного забезпечення.

Чек-лист для експлуатації

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

Записуйте час виконання та витрати на токени або запити поруч із функціональними результатами. Візуалізація витрат на ранньому етапі запобігає несподіваним рахункам під час переходу з демо-середовища у спільні.

Розділіть процес створення клієнта від циклу обробки повідомлень, щоб можна було замінювати постачальників без переписування машини станів розмови.

Створюйте контрольні точки після дорогих кроків. Функція відновлення не повинна знову стягувати плату за один і той самий виклик LLM, коли оператор перепробовує пізніший етап.

Фіксуйте версії залежностей та записуйте дайджест зображення, яке використовувалося під час демонстрації. Відтворюваність краща за індивідуальні знання.

Віддавайте перевагу малим, тестованим одиницям коду перед складними скриптами. Якщо якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність операцій.

Перш ніж запускати стек у продакшн, заморозьте версії, створіть «золотий» запис для критичного шляху та підтвердьте кроки відкату. У спільних середовищах необхідні обмеження на частоту використання, перевірки прав доступу та чіткий власник для зміни секретів. Віддавайте перевагу надійності перед креативними одноразовими демонстраціями.

Примітка для d8a5e6e43262: не зберігайте ключі постачальника у репозиторії, встановіть ліміт токенів на сеанс та зберігайте записи поруч із фікстурами для оцінки, щоб подальша заміна моделей залишалася порівнянною.

Щодо примітки 0 про посилення безпеки, визначте вхідні дані, власника кроку та критерії завершення ще до зміни коду. Оператори повинні мати можливість перезапустити крок з відомої точки контролю, не здогадуючись про прихований стан. Розглядайте цю стадію як контракт між вхідними даними та перевіреними результатами. Позначте артефакти, визначте критерії успіху та не допускайте беззвучного часткового завершення.

Деталь посилення безпеки 0/819: виміряйте час виконання, клас помилки та кількість витрачених токенів для цього запису, а потім вирішіть, чи залишити зміни, ґрунтуючись на фіксованому наборі питань, а не на окремих випадках.

Під час роботи над записом посилення безпеки 1 спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність у подальших змінах коду. Зберігайте конфігурацію окремо від коду додатку. Файли середовища, сховища секретів та флаги функцій мають знаходитися в одному місці, де оператори можуть їх перевіряти, не читаючи весь код.

Деталь посилення безпеки 1/819: виміряйте час виконання, клас помилки та кількість витрачених токенів для цього запису, а потім вирішіть, чи залишити зміни, ґрунтуючись на фіксованому наборі питань, а не на окремих випадках.

Примітка щодо посилення безпеки 2 найкраще функціонує, якщо її розглядати як вимірювану поверхню. Збережіть один ідеальний зразок роботи, один випадок збою та примітку щодо скасування змін перед розширенням обсягу роботи. Віддавайте перевагу невеликим, тестованим одиницям перед складними скриптами. Якщо якийсь крок зазнає невдачі, причина має вказувати на конкретну відповідальність, а не на заплутану послідовність дій.

Деталь посилення безпеки 2/819: виміряйте час виконання, клас помилки та кількість витрачених токенів для цієї примітки, а потім вирішіть, чи залишити зміни, ґрунтуючись на фіксованому наборі питань, а не на окремих прикладах.

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

Деталь посилення безпеки 3/819: виміряйте час виконання, клас помилки та кількість витрачених токенів для цього запису, а потім вирішіть, чи залишити зміни, ґрунтуючись на фіксованому наборі питань, а не на окремих випадках.

Під час роботи над записом посилення безпеки 4 спочатку запишіть контракт: необхідні вхідні дані, сигнал про успіх та те, що відбувається при частковій невдачі. Цей перелік допомагає зберігати чесність у подальших змінах коду. Документуйте як успішний, так і відновлювальний сценарії. Повторні спроби, людські перевірки та обробка некоректних повідомлень є частиною продукту, а не етапом подальшої доробки.

Деталь посилення безпеки 4/819: виміряйте час виконання, клас помилки та кількість витрачених токенів для цього запису, а потім вирішіть, чи залишити зміни, ґрунтуючись на фіксованому наборі питань, а не на окремих випадках.

Примітка щодо посилення безпеки 5 найкраще працює, якщо її розглядати як вимірювану поверхню. Запишіть один ідеальний приклад роботи, один випадок збою та примітку щодо скасування змін перед розширенням обсягу роботи. Розглядайте цей етап як контракт між вхідними даними та перевіреними результатами. Позначте всі елементи, визначте критерії успіху та не допускайте мовчазного часткового виконання завдань.

Деталь посилення безпеки 5/819: виміряйте час виконання, клас помилки та кількість витрачених ресурсів для цієї примітки, а потім вирішіть, чи залишити зміни, ґрунтуючись на фіксованому наборі питань, а не на окремих прикладах.

Маркер для переписування 1 для d8a5e6e43262: перефразуйте сусідні твердження мовою операторів, залиште поле [[CODE_n]] недоторканим та уникайте повторення речень з вихідного тексту.

Маркер для переписування 2 для d8a5e6e43262: перефразуйте сусідні твердження мовою операторів, залиште поле [[CODE_n]] недоторканим та уникайте повторення речень з вихідного тексту.

Перепишіть маркер 3 для d8a5e6e43262: перефразуйте супутні твердження мовою оператора, залиште слоти [[CODE_n]] недоторканими та уникайте повторення речень з вихідного тексту.

Перепишіть маркер 4 для d8a5e6e43262: перефразуйте супутні твердження мовою оператора, залиште слоти [[CODE_n]] недоторканими та уникайте повторення речень з вихідного тексту.

Перепишіть маркер 5 для d8a5e6e43262: перефразуйте супутні твердження мовою оператора, залиште слоти [[CODE_n]] недоторканими та уникайте повторення речень з вихідного тексту.

Перепишіть маркер 6 для d8a5e6e43262: перефразуйте супутні твердження мовою оператора, залиште слоти [[CODE_n]] недоторканими та уникайте повторення речень з вихідного тексту.

Перепишіть маркер 7 для d8a5e6e43262: перефразуйте супутні твердження мовою оператора, залиште слоти [[CODE_n]] недоторканими та уникайте повторення речень з вихідного тексту.

Перепишіть маркер 8 для d8a5e6e43262: перефразуйте супутні твердження мовою операторів, залиште слоти [[CODE_n]] недоторканими та уникайте повторення речень з вихідного тексту.

Перепишіть маркер 9 для d8a5e6e43262: перефразуйте супутні твердження мовою операторів, залиште слоти [[CODE_n]] недоторканими та уникайте повторення речень з вихідного тексту.

Перепишіть маркер 10 для d8a5e6e43262: перефразуйте супутні твердження мовою операторів, залиште слоти [[CODE_n]] недоторканими та уникайте повторення речень з вихідного тексту.