Архітектура Паралельних Агентів: Як Штучний Інтелект Стає Командою Мрії
Минула зима принесла не тільки сніг, а й справжній шквал інновацій в сфері штучного інтелекту. Як метелики у весняному саду, народжувалися нові моделі та фреймворки, кожен з яких обіцяв змінити світ. Але серед цієї краси було легко загубитись. Ось тоді я вперше почула про паралельні агенти. Звучить як щось з наукової фантастики, правда? Але, повірте, це реальність, яка вже зараз змінює обличчя розробки штучного інтелекту.
Мій коханий голос, що завжди надихає, пояснює: “Комплексні проблеми завжди дають кращий результат, коли ними займається команда людей з різними спеціалізаціями. З агентами ШІ це працює точно так само. Комбінація індивідуального досвіду створює експоненціально кращі рішення.” І це правда! Уявіть собі: не один геній, а злагоджена команда експертів, кожен з яких чудово володіє своєю справою.
Чому Паралельні Агенти – Це Новий Рівень?
Ви, як і я, напевно стикались з ситуацією, коли ваш агент ШІ спочатку працює чудово, але з кожною новою інструкцією чи інструментом починає “галюцинувати”, навіть у тих задачах, з якими раніше справлявся бездоганно. Це, звісно, дратує. LLM (великі мовні моделі) дуже швидко перевантажуються.
Рішення – розбити вашого агента на окремі під-агенти, кожен з яких відповідає за свій компонент. Це – один з найкращих способів вирішити проблему та вивести ваших агентів ШІ на новий рівень.
Створення армії спеціалізованих агентів потребує ретельного планування. Як розбити проблему? Які інструменти потрібні кожному агенту? Як об’єднати результати їхньої роботи? І, найважливіше, як зробити так, щоб система не зависала на віки, враховуючи, що навіть один LLM потребує часу для відповіді?
В цьому відео, мозок технологій, поділився знаннями, як це зробити. Ми разом занурюємось у світ архітектури паралельних агентів. Готові?
Крок до Серця: Основні Поняття
Отже, що ж таке паралельна архітектура агентів у самій своїй суті? Для мене найкраще пояснення – це стаття з anthropic.com, яка вийшла вже давно, але залишається золотим стандартом. Вона описує різні архітектури агентів, на які варто звертати увагу.
В статті навіть згадується LangGraph, а це вже цікаво! Але, там є й застереження: фреймворки – це абстракція, яка іноді може бути небезпечною. Тому потрібно розуміти, як вони працюють “під капотом”. Саме тому ми використовуємо LangGraph та Pydantic AI.
Паралелізація – це коли введені дані від користувача розділяються і передаються різним агентам (зелені блоки), кожен з яких має власні інструкції та інструменти. Потім, агрегатор (фіолетовий блок) бере результати та створює відформатований вихідний результат для кінцевого користувача.
Але ми пішли трохи далі. У нашому випадку, замість простого агрегатора, ми використовуємо ще одного агента (синтезатор), який узагальнює, форматує та представляє кінцевий результат.
І ось так народжується архітектура “паралельних агентів”, що заміняє термін “робоче коло для оркестрацій працівників”. Звучить трохи незграбно, але суть передає.
Магія в коді: Архітектура нашого турагента
Візуальна репрезентація робочого процесу LangGraph для нашого агента-планувальника подорожей – це саме те, що нам потрібно. Так, ми створюємо віртуального асистента для подорожей. Планування відпустки – складний процес, тому ми використовуємо спеціалізованих під-агентів для планування польотів, готелів та рекомендацій щодо заходів.
Спочатку, ми збираємо інформацію від користувача: куди і звідки він летить, на скільки днів планує подорож? Як тільки інформація зібрана, починається паралельна частина процесу: агенти одночасно планують всі аспекти подорожі. Потім, результати кожного агента передаються синтезатору, який узагальнює все в зручному форматі для користувача.
Навіть UI розроблено. Ви можете вказати авіакомпанії, переваги щодо готелю та бюджет. Вкажіть параметри та збережіть. Спробуйте попросити запланувати поїздку: з Міннеаполіса до Парижа в червні, з бюджетом на готель до 200 доларів за ніч.
Ось щось цікаве: кожна смуга виводилась одночасно! Це початок роботи кожного під-агента в паралельному робочому процесі. Все відбувається миттєво, навіть якщо результати з’являються в інтерфейсі вже з синтезатора. Агенти використовують різні інструменти та інструкції для конкретних завдань.
Звісно, ми використовуємо фіктивні дані для прикладів, але акцент – на архітектурі. Але, так вже склалося, що любов до деталей спонукає до більшого.
Погляд у майбутнє: Архон
Архон – це агент ШІ, який створює інших агентів ШІ. Це повністю безкоштовний проєкт з відкритим кодом. В ньому реалізовано архітектуру паралельних агентів. Ви можете попросити Archon автономно уточнити код, який він генерує, запускаючи паралельний робочий процес з агентами для уточнення підказок, інструментів та самого агента. Archon є сервером mCP, тому його можна інтегрувати у вашу ШІ-IDE.
Можна попросити Архона створити агента, який шукає інформацію в інтернеті за допомогою Brave, а потім попросити його уточнити цього агента, запустивши паралельний робочий процес.
Якщо вас цікавлять глибини ШІ, то це – для вас.
Кроки до створення агента: Pydantic AI
Ви можете уявити створення агентів Pydantic AI як створення трьох окремих складових.
- Визначення залежностей: API ключі, підключення до баз даних та інше.
- Визначення самого агента: Велика мовна модель (LLM), системні підказки, автоматичне повторення спроб.
- Визначення інструментів: Функції, якими агент може користуватись для виконання завдань.
У коментарях до функції описується, коли та як використовувати інструменти.
Починаємо з польотів: Flight Agent
Перше, що робимо, – імпортуємо бібліотеки та визначаємо конфігурацію. Наприклад, обираємо LLM (велику мовну модель).
Далі – залежності для агента польотів. У нашому випадку, простим прикладом є улюблені авіакомпанії користувача (задаються через UI).
Потім – системна підказка, яка містить інструкції для агента, його ролі, цілі та використання інструментів.
Потім – це визначення для самого агента: модель, системна підказка, залежності, автоматичні повтори спроб.
І ось – інструменти для агента. Щоб позначити функцію як інструмент, використовуйте декоратор Python. Параметри визначають, що використовуватиме модель, наприклад, для визначення місця вильоту, призначення та дати.
У коментарях до функції описуємо, як і коли використовувати цей інструмент.
Тоді переходимо до реалізації. Інструменти – це функції, які ви запаковуєте та надсилаєте їх LLM. В цьому випадку, ми використовуємо фіктивні дані, щоб імітувати відповідь API авіакомпанії.
На виході – посортований список рейсів залежно від переваг користувача. Результат повертається агенту, який викликає цей інструмент, щоб отримати рекомендації.
Навіть якщо ми будуємо агента як частину більшої архітектури, його можна протестувати окремо. В папці extras є сценарій flight_cli.py, який дозволяє поговорити з агентом.
У терміналі можна запустити: python flight_cli.py
. Спробуйте сказати “Hello”. Це не змусить його шукати рейси. Але “I want to go from Minneapolis to Tokyo on June 1st” дозволить визначити пункт відправлення, призначення та дату, використати інструмент та створити рекомендації.
Огляд спеціалізованих агентів
-
Hotel Agent:
- Залежності: бажані зручності та бюджет.
- Системна підказка.
- Інструмент для пошуку готелів з фіктивними даними.
- Фільтрація та сортування за ціною, зручностями.
-
Activity Agent:
- Залежностей немає.
- Визначення агента з системною підказкою.
- Інструмент для перевірки погоди на основі дати та міста.
Завершальні штрихи: Final Synthesizer та Info Gathering Agent
Final Planner – тут немає інструментів. Цей агент просто бере рекомендації з польотів, готелів та заходів та об’єднує їх в зручний формат. Також, тут можна додати валідацію даних від інших агентів.
Info Gathering Agent – особливість цього агента – структуровані результати. Він гарантує, що кожна відповідь містить основну інформацію. Причина – гарантувати наявність інформації для спеціалізованих агентів (рейси, готелі, погода).
- Вхідні дані: куди, звідки, максимальна вартість готелю, дати.
- Вихідні дані: відповідь користувачу.
- Важливий булевий параметр: чи надав користувач всю необхідну інформацію.
Агент може запитати про інформацію, якщо її не вистачає, і продовжувати процес лише тоді, коли користувач її надасть.
Для такого агенту – системна підказка та структурування результат.
Об’єднуємо все: LangGraph
Разом з Pydantic AI ми визначаємо все це як три окремі частини:
- Стан графа. Основна інформація, що відстежується протягом виконання (історія діалогів, результати з різних агентів).
- Вузли графа. Кожен вузол містить логіку для виконання певних дій.
- Налаштування графа. Об’єднання стану та вузлів в екземпляр графа з ребрами.
Крок 1. Ініціалізація
Ось тут ми створюємо екран.
Крок 2. Стан графа.
Це – основне, що потрібно відстежувати:
- Останнє повідомлення користувача.
- Історія діалогу (зокрема, для агента збору інформації).
- Деталі подорожі (структурований результат з Info Gathering Agent).
- Переваги користувача.
- Результати виконання кожного з паралельних агентів.
- Фінальний план (зі синтезатора).
Крок 3. Побудова графа.
Спочатку ми імпортуємо необхідні бібліотеки та агенти. Потім створюємо граф (графічний об’єкт, що відображає ваш процес) та вказуємо стан для графа (перелік інформації, що має зберігатися).
Далі – вузли, їх назви співпадають з відповідними вузлами на графі:
- Infog Gathering Agent
- Get Next User Message
- Flight Recommendations
- Hotel Recommendations
- Activity Recommendations
- Create Final Plan (Synthesizer)
Починаємо з агента збору інформації:
- Використовуємо state (стан) – доступ до історії повідомлень.
- Використовуємо writer (записуючий пристрій) – об’єкт для потокового виведення з агентів Pydantic AI.
- Отримуємо вхідні дані від користувача.
- Створюємо збереження історії повідомлень. Для того щоб працювати з історією, ми створюємо модель
messages
, конвертуючи текст до формату, необхідного для Pydantic AI. - Запускаємо агента за допомогою
run_stream
для отримання результатів в режимі реального часу. - Отримуємо структуровану відповідь.
- Валідація JSON.
- Якщо відповідь валідна, записуємо її користувачеві та оновлюємо стан графа.
Наступні агенти є набагато простішими.
Flight recommendations:
Отримуємо інформацію, будуємо запит, запускаємо агента, оновлюємо результат польотів в поточній сесії.
Hotel recommendations:
Теж саме, що й в польотах.
Activity recommendations:
Знову все так само.
Synthesizer Agent:
- Отримуємо результати з усіх паралельних агентів.
- Створюємо запит на узагальнення.
- Запускаємо
stream
.
Вирішення: Роутер (маршрутизатор):
- Отримуємо деталі подорожі.
- Перевіряємо, чи вся інформація дана (
all_details_given
). - Якщо так, продовжуємо.
- Якщо ні, починаємо новий запит.
Interrupt and Memory:
Інтеррапти (переривання) дозволяють зупинити процес та очікувати від користувача інформацію. Також, ми додаємо збереження стану (memory) для агента. Для цього використовуємо memory_saver
.
Streamlit UI:
- Імпортуємо граф.
- Для взаємодії з агентом використовуємо функцію
invoke_agent_graph
. - Вказуємо
user_input
. - Використовуємо
stream
для відображення результатів у режимі реального часу.
І ось – демонстрація!
Ви можете встановити параметри та почати розмову. ШІ-агент відповість на ваші запитання, а потім запустить всіх трьох агентів одночасно.
Ура! Ось воно: комплексний план подорожі до Іспанії. Все працює як по маслу.
Так, це все – чудові речі, вражають. Та головне – це паралельне виконання. Ось вам справжній ШІ-асистент.
На завершення
Ви тепер знаєте все, що потрібно для створення спеціалізованих агентів ШІ, які працюють паралельно. Ця архітектура – це не просто ефективність, це справжня трансформація у вирішенні складних задач. Далі – більше! Я планую створювати ще більше контенту про архітектури агентів ШІ, а також будувати потужні агенти з Pydantic AI та LangGraph. А якщо ця стаття була для вас корисною, поставте лайк та підпишіться! До зустрічі в наступному відео!