1. Введение
Обзор
В этой лабораторной работе вы научитесь организовывать сложные многоагентные системы с помощью Google Agent Development Kit (Google ADK) . Вы перейдёте от простых иерархий агентов к построению автоматизированных совместных рабочих процессов.
Что вы построите
Вы создадите две отдельные многоагентные системы:
- Простой агент по планированию путешествий , который учится переводить разговоры между агентом по «мозговому штурму» и агентом по «планированию достопримечательностей».
- Более продвинутый генератор презентаций фильмов , который использует «компанию сценаристов» из автоматизированных агентов (например, исследователя, сценариста и критика), которые работают вместе в цикле для создания полноценного сюжета фильма.
Чему вы научитесь
- Как создать родительские и субагентские отношения.
- Как записать данные в
stateсеанса из инструмента. - Как прочитать
state, используя шаблоны ключей (например,{my_key?}). - Как использовать
SequentialAgentдля пошаговых рабочих процессов. - Как использовать
LoopAgentдля создания итеративных циклов уточнения. - Как использовать
ParallelAgentдля одновременного выполнения независимых задач.
2. Многоагентные системы
Набор инструментов для разработки агентов (ADK) позволяет разработчикам создавать более надёжные, сложные и многошаговые модели поведения на основе генеративных моделей. Вместо одного сложного запроса ADK позволяет создать поток из нескольких более простых агентов , которые совместно работают над задачей, разделяя задачи.
Такой подход имеет ряд преимуществ по сравнению с использованием единого монолитного приглашения:
- Упрощенная конструкция: проще спроектировать и организовать поток небольших специализированных агентов, чем разработать одну большую сложную подсказку.
- Надежность: Специализированные агенты более надежны при выполнении своих конкретных задач, чем один большой, сложный агент.
- Поддерживаемость: легче исправить или улучшить небольшой специализированный агент, не нарушая работу других частей системы.
- Модульность: агенты, созданные для одного рабочего процесса, могут быть легко использованы повторно в других.
Иерархическое дерево агентов

В ADK агенты организованы в древовидную структуру . Эта иерархия играет ключевую роль в управлении ходом диалога, поскольку ограничивает возможности агентов «передавать» диалог другим агентам. Это делает поведение системы более предсказуемым и упрощает отладку. Преимущества включают:
- Интуитивно понятный дизайн: структура вдохновлена реальными командами, что упрощает осмысление.
- Управляемый поток: иерархия обеспечивает точный контроль над делегированием задач, что облегчает отладку. Например, древовидная структура гарантирует вызов нужного агента для составления отчётов, даже если у вас есть два агента с похожими описаниями.
Вся структура начинается с root_agent . Этот агент выступает в качестве родителя и может иметь одного или нескольких подагентов , которые, в свою очередь, также могут быть родительскими для своих подагентов, образуя дерево.
3. Настройка проекта
Аккаунт Google
Если у вас еще нет личного аккаунта Google, вам необходимо создать аккаунт Google .
Используйте личный аккаунт вместо рабочего или школьного.
Войдите в Google Cloud Console.
Войдите в Google Cloud Console, используя личный аккаунт Google.
Включить биллинг
Получите кредиты Google Cloud на сумму 5 долларов США (по желанию)
Для проведения этого семинара вам понадобится платёжный счёт с определённым балансом. Если вы планируете использовать собственный платёжный счёт, пропустите этот шаг.
- Нажмите на эту ссылку и войдите в систему, используя личный аккаунт Google. Вы увидите что-то вроде этого:

- Нажмите кнопку «НАЖМИТЕ ЗДЕСЬ, ЧТОБЫ ПОЛУЧИТЬ ДОСТУП К ВАШИМ КРЕДИТАМ». Это приведет вас на страницу для настройки вашего платежного профиля.

- Нажмите «Подтвердить».
Теперь вы подключены к пробной учетной записи Google Cloud Platform.

Настройте личный платежный аккаунт
Если вы настраиваете оплату с использованием кредитов Google Cloud, вы можете пропустить этот шаг.
Чтобы настроить персональную учетную запись для выставления счетов, перейдите сюда и включите выставление счетов в Cloud Console.
Некоторые заметки:
- Выполнение этой лабораторной работы обойдется менее чем в 1 доллар США в виде облачных ресурсов.
- Вы можете следовать инструкциям в конце этой лабораторной работы, чтобы удалить ресурсы и избежать дальнейших расходов.
- Новые пользователи имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Создать проект (необязательно)
Если у вас нет текущего проекта, который вы хотели бы использовать для этого ярлыка, создайте новый проект здесь .
4. Откройте редактор Cloud Shell
- Нажмите эту ссылку, чтобы перейти непосредственно в редактор Cloud Shell.
- Если сегодня в какой-либо момент вам будет предложено авторизоваться, нажмите «Авторизовать» , чтобы продолжить.

- Если терминал не отображается внизу экрана, откройте его:
- Нажмите «Просмотр»
- Нажмите «Терминал»

- В терминале настройте свой проект с помощью этой команды:
gcloud config set project [PROJECT_ID]- Пример:
gcloud config set project lab-project-id-example - Если вы не можете вспомнить идентификатор своего проекта, вы можете перечислить все идентификаторы своих проектов с помощью:
gcloud projects list
- Пример:
- Вы должны увидеть это сообщение:
Updated property [core/project].
5. Включите API
Чтобы использовать API Vertex AI и взаимодействовать с моделью Gemini, вам необходимо включить API Vertex AI в вашем проекте Google Cloud.
- В терминале включите API:
gcloud services enable aiplatform.googleapis.com
Вот обновленные разделы, заменяющие ручное создание файлов инструкциями по клонированию репозитория GitHub и установке зависимостей.
Введение в Vertex AI SDK для Python
Для взаимодействия с моделями, размещёнными в Vertex AI, из вашего приложения Python вам понадобится Vertex AI SDK для Python. Этот SDK упрощает процесс отправки запросов, указания параметров модели и получения ответов, избавляя от необходимости напрямую обрабатывать сложные вызовы API.
Подробную документацию по Vertex AI SDK для Python можно найти здесь: Введение в Vertex AI SDK для Python | Google Cloud .
6. Настройте среду проекта
Клонировать репозиторий
- В терминале клонируйте репозиторий, содержащий стартовые файлы.
Флагgit clone --depth 1 https://github.com/GoogleCloudPlatform/devrel-demos.git--depth 1клонирует только последнюю версию, что быстрее. - В терминале перейдите в нужный рабочий каталог для этой лабораторной работы.
cd devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems
Активировать виртуальную среду
- В терминале создайте и активируйте виртуальную среду с помощью
uv:uv venv source .venv/bin/activate - В терминале установите
google-adkи остальные зависимости из файлаrequirements.txt:uv pip install -r requirements.txt
Проверьте структуру вашего файла
Теперь, когда все файлы созданы, откройте папку adk_multiagent_systems в проводнике, чтобы увидеть полную структуру.
- В меню редактора Cloud Shell выберите Файл > Открыть папку... .

- В открывшемся окне добавьте следующую информацию о папке после имени пользователя:
devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems/. Нажмите «ОК» .
Это должно выглядеть примерно так:
- Панель обозревателя слева обновится. Теперь вы видите полную структуру проекта с подкаталогами
parent_and_subagentsиworkflow_agents, готовую к следующим шагам.
Настройка переменных среды
- Вы уже находитесь в каталоге
adk_multiagent_systems. В терминале создайте файл.envдля хранения переменных окружения:cloudshell edit .env - Вставьте следующее в файл
.env, который откроется в редакторе:GOOGLE_GENAI_USE_VERTEXAI=TRUE GOOGLE_CLOUD_PROJECT="[YOUR-PROJECT-ID]" GOOGLE_CLOUD_LOCATION=global MODEL="gemini-2.5-flash" - Замените
[YOUR-PROJECT-ID]на фактический идентификатор вашего проекта Google Cloud. (например,PROJECT_ID = "google-cloud-labs")
Если вы не можете вспомнить идентификатор своего проекта, выполните следующую команду в терминале . Она покажет вам список всех ваших проектов и их идентификаторов.gcloud projects list - В терминале скопируйте этот файл
.envв каталоги подагентов, чтобы они также могли получить доступ к переменным: Структура файла теперь должна выглядеть так:cp .env parent_and_subagents/.env cp .env workflow_agents/.env
7. Изучите трансферы между родительскими, субагентскими и одноранговыми агентами.
Диалог всегда начинается с root_agent . По умолчанию родительский агент использует description своих подагентов для принятия решения о передаче диалога. Вы также можете явно указать эти передачи в instruction родительского агента, используя name подагентов.
Давайте проверим это.
- В редакторе Cloud Shell откройте
adk_multiagent_systems/parent_and_subagents/agent.py. Обратите внимание на три агента в файлеagent.py:-
root_agent(с именемsteering) : задаёт пользователю вопрос, чтобы решить, к какому субагенту переключиться. Изначально он полагается только наdescriptionсвоих субагентов. -
travel_brainstormer: помогает пользователю провести мозговой штурм по выбору направлений. -
attractions_planner: помогает пользователю составить список мероприятий, которые можно сделать в определенной стране.
-
- Сделайте
travel_brainstormerиattractions_plannerсубагентамиroot_agent, добавив следующую строку в созданиеroot_agent:sub_agents=[travel_brainstormer, attractions_planner] - В терминале пообщайтесь со своим агентом:
cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems adk run parent_and_subagents - В командной строке
[user]:терминала введите: Пример вывода (ваш может немного отличаться):hello[steering]: Hi there! Do you already have a country in mind for your trip, or would you like some help deciding where to go?
- Теперь скажите агенту в терминале :
Пример вывода (ваш может немного отличаться):I could use some help deciding. Обратите внимание на тег[travel_brainstormer]: Okay! To give you the best recommendations, I need to understand what you're looking for in a trip. ...
[travel_brainstormer].root_agentпередал управление только на основеdescriptionсубагента. - В
user:строке терминала введитеexitи нажмите ENTER, чтобы завершить разговор. - Теперь давайте будем более явными. В
agent.pyдобавьте следующее кinstructionroot_agent:If they need help deciding, send them to 'travel_brainstormer'. If they know what country they'd like to visit, send them to the 'attractions_planner'. - В терминале снова запустите агент:
adk run parent_and_subagents - В командной строке
[user]:терминала введите:hello - Ответить:
Пример вывода (ваш может немного отличаться):I would like to go to Japan. Обратите внимание на переход на[attractions_planner]: Okay, I can help you with that! Here are some popular attractions in Japan: ...
attractions_plannerв соответствии с вашими новыми инструкциями. - Теперь ответьте:
Пример вывода (ваш может немного отличаться):Actually I don't know what country to visit. Обратите внимание, что вы перенаправлены на[travel_brainstormer]: Okay! I can help you brainstorm some countries for travel...
travel_brainstormer, одноранговый ресурсattractions_planner. Это разрешено по умолчанию. - В ответ на приглашение пользователя введите
exitчтобы завершить сеанс.
Резюме
В этом разделе вы изучили основы иерархии агентов и потока разговора:
- Разговор всегда начинается с
root_agent. - Родительский агент может автоматически переходить к субагенту на основе его
description. - Вы можете явно контролировать этот поток, давая родительскому агенту
instructionпередать его субагенту по егоname. - По умолчанию агенты могут передаваться своим
peerагентам (родственным в иерархии).
8. Используйте состояние сеанса для хранения и извлечения информации.
У каждого сеанса ADK есть Session , включающий словарь состояний сеанса. Это состояние доступно всем агентам, что делает его идеальным способом передачи информации между ними или сохранения данных (например, списка) на протяжении всего сеанса.
Чтобы изучить добавление и чтение из состояния:
- Вернитесь к файлу
adk_multiagent_systems/parent_and_subagents/agent.py - Вставьте следующее определение функции после заголовка
# Tools: В этом коде обратите внимание:def save_attractions_to_state( tool_context: ToolContext, attractions: List[str] ) -> dict[str, str]: """Saves the list of attractions to state["attractions"]. Args: attractions [str]: a list of strings to add to the list of attractions Returns: None """ # Load existing attractions from state. If none exist, start an empty list existing_attractions = tool_context.state.get("attractions", []) # Update the 'attractions' key with a combo of old and new lists. # When the tool is run, ADK will create an event and make # corresponding updates in the session's state. tool_context.state["attractions"] = existing_attractions + attractions # A best practice for tools is to return a status message in a return dict return {"status": "success"}- Функция получает
tool_context: ToolContext. Этот объект — ваш шлюз для сеанса. - Строка
tool_context.state["attractions"] = ...напрямую считывает и записывает данные в словарь состояний сеанса. ADK берёт на себя всё остальное.
- Функция получает
- Добавьте инструмент в агент
attractions_planner, добавив параметрtools:tools=[save_attractions_to_state] - Добавьте следующие пункты в существующую
instructionагентаattractions_planner:- When they reply, use your tool to save their selected attraction and then provide more possible attractions. - If they ask to view the list, provide a bulleted list of { attractions? } and then suggest some more. - Запустите веб-интерфейс Agent Development Kit с помощью следующей команды в терминале :
Выходadk webINFO: Started server process [2434] INFO: Waiting for application startup. +-------------------------------------------------------+ | ADK Web Server started | | | | For local testing, access at http://localhost:8000. | +-------------------------------------------------------+ INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) - В терминале Cloud Shell нажмите кнопку Чтобы просмотреть веб-интерфейс в новой вкладке, нажмите кнопку Веб-просмотр и выберите Изменить порт .

- Введите номер порта 8000 и нажмите «Изменить и просмотреть» . Откроется новая вкладка браузера с интерфейсом ADK Dev.

- В раскрывающемся списке «Выбрать агента» слева выберите
parent_and_subagents. - Начните разговор с:
hello - После того, как агент поприветствует вас, ответьте:
Вас перенаправят наI'd like to go to Egypt.attractions_plannerи предоставят список достопримечательностей. - Выберите достопримечательность, например:
I'll go to the Sphinx - Вы должны получить ответ вроде: Хорошо, я сохранил «Сфинкса» в ваш список...
- Щелкните поле инструмента ответа (отмечено галочкой), чтобы просмотреть событие, созданное на основе ответа инструмента.
Обратите внимание, что он включает поле действий , которое включаетstateDeltaописывающее изменения состояния. - Ответьте другим интересным предложением из списка агента.
- В левом навигационном меню нажмите «X», чтобы выйти из фокуса на событии, которое вы проверили ранее.
- На левой боковой панели нажмите вкладку «Состояние» . Теперь вы видите массив
attractionsв состоянии сеанса, который должен содержать оба выбранных вами элемента.
- Отправьте это сообщение агенту:
Теперь агент должен прочитать ваш список и вернуть его.What is on my list? - Завершив эксперименты с агентом, закройте вкладку веб-браузера и нажмите CTRL + C в терминале Cloud Shell, чтобы остановить сервер.
Обзор раздела
В этом разделе вы узнали, как использовать состояние Session для обмена данными:
- Запись состояния : запись в словарь состояний выполняется из инструмента с помощью объекта
tool_context.state(например,tool_context.state["my_list"] = [...]). - Чтобы прочитать состояние : вы вводите данные о состоянии непосредственно в
instructionагента, используя шаблонизацию ключей (например,Here is your list: {my_list?}). - Чтобы проверить состояние : вы можете отслеживать состояние сеанса в реальном времени в пользовательском интерфейсе разработчика ADK, используя вкладку «Состояние».
9. Агенты рабочего процесса
До сих пор вы видели, как родительский агент передаётся подагенту и затем ждёт пользователя. Агенты рабочих процессов работают иначе: они выполняют свои подагенты один за другим в автоматическом режиме, не дожидаясь ввода данных пользователем.
Это идеально подходит для автоматизированных многоэтапных задач, таких как конвейеры «Планирование и выполнение» или «Составление черновиков и редактирование». ADK предоставляет три встроенных агента рабочих процессов для управления этими задачами:
-
SequentialAgent -
LoopAgent -
ParallelAgent
Остальная часть этой лабораторной работы будет посвящена созданию многоагентной системы с использованием этих трех агентов рабочего процесса.
Вы создадите агента, который разработает презентацию для нового фильма об историческом персонаже. Ваши агенты будут заниматься исследованиями, итеративным написанием текстов и составлением отчётов.
В конечном итоге ваша система будет выглядеть так:

Вы будете создавать эту систему шаг за шагом, начиная с самого простого рабочего процесса.
10. Создайте многоагентную систему с помощью SequentialAgent
SequentialAgent — это агент рабочего процесса , который выполняет свои подагенты в простой линейной последовательности. Каждый агент из списка sub_agents запускается один за другим по порядку. Это идеально подходит для конвейеров, где задачи должны выполняться в определённом порядке, например, для агента для презентации фильма, который вы сейчас создадите.
Первая версия будет иметь следующую структуру:

-
root_agent(greeter) поприветствует пользователя и получит тему фильма. - Затем он будет передан
SequentialAgentс именемfilm_concept_team, который выполнит следующие действия:- Запустите
researcherагента для получения фактов из Википедии. - Наймите
screenwriter, который сможет использовать эти факты для написания сюжета. - Запустите агент
file_writer, чтобы сохранить окончательный график в файл.
- Запустите
Давайте запустим его.
- В редакторе Cloud Shell откройте
adk_multiagent_systems/workflow_agents/agent.py.
Прочитайте этот файл определения агента. Поскольку подагенты должны быть определены до назначения их родительскому агенту, чтобы читать файл в порядке ведения диалога, вы можете читать агентов снизу вверх. - Обратите внимание на инструмент
append_to_state. Эта вспомогательная функция позволяет агентам добавлять данные в список в состоянии сеанса, что позволяетresearcherиscreenwriterпередавать свою работу. - Попробуйте агент. В терминале запустите веб-интерфейс с включённой функцией живой перезагрузки:
cd ~/devrel-demos/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems adk web --reload_agents - В терминале Cloud Shell нажмите кнопку Чтобы просмотреть веб-интерфейс в новой вкладке, нажмите кнопку Веб-просмотр и выберите Изменить порт .

- Введите номер порта 8000 и нажмите «Изменить и просмотреть» . Откроется новая вкладка браузера с интерфейсом ADK Dev.

- В раскрывающемся списке «Выберите агента» выберите
workflow_agents. - Начните разговор с
hello.greeterагент ответит. - При появлении запроса введите историческую личность. Вы можете использовать одну из предложенных или свою собственную:
- Чжан Чжунцзин
- Ада Лавлейс
- Марк Аврелий
- Теперь управление возьмёт на себя
SequentialAgent. Вы не увидите никаких промежуточных сообщений.researcher,screenwriterиfile_writerбудут запущены один за другим. Агент ответит только после завершения всей последовательности.
Если попытка не удалась, нажмите кнопку + Новый сеанс в правом верхнем углу и повторите попытку. - Как только агент подтвердит, что файл записан, найдите и откройте новый файл
.txtв каталогеmovie_pitchesв редакторе Cloud Shell, чтобы увидеть вывод. - В пользовательском интерфейсе ADK Dev щелкните значок последнего агента в истории чата, чтобы открыть просмотр событий .
- В окне событий отображается визуальный граф дерева агентов. Вы можете видеть, как
greeterвызвал командуfilm_concept_team, которая затем вызвала каждого из своих подагентов по порядку.
- Вы можете щелкнуть вкладки «Запрос» и «Ответ» для любого агента на графике, чтобы проверить точные данные, которые были переданы, включая состояние сеанса.
Обзор раздела
В этом разделе вы узнали, как использовать агент рабочего процесса :
-
SequentialAgentвыполняет свои подагенты один за другим по порядку, не дожидаясь ввода данных пользователем между шагами. - Это «рабочий процесс», поскольку пользователь взаимодействует с
root_agent, который затем передает работуSequentialAgentдля ее завершения. - Подагенты в последовательности используют состояние сеанса (например,
{ PLOT_OUTLINE? }) для доступа к работе предыдущих агентов. - Вы можете использовать график событий в интерфейсе разработчика для визуализации и отладки всего рабочего процесса «агент-агент».
11. Добавьте LoopAgent для итеративной работы.
LoopAgent — это агент рабочего процесса, который последовательно запускает свои подагенты, а затем повторяет цикл, начиная с самого начала. Этот «цикл» продолжается до тех пор, пока не будет выполнено условие, например, достигнуто max_iterations или подагент не вызовет встроенный инструмент exit_loop .
Это полезно для задач, требующих итеративной доработки. Вы добавите этот LoopAgent , чтобы создать «кабинет сценаристов» для вашего агента, отвечающего за питчинг фильма. Это позволит researcher , screenwriter и новому агенту critic работать в цикле, улучшая сюжет с каждым проходом, пока critic не решит, что он готов. Это также помогает агенту обрабатывать более расплывчатые пользовательские запросы (например, «древний врач»), позволяя ему исследовать и дорабатывать идею.

Чтобы внести эти изменения:
- В
adk_multiagent_systems/workflow_agents/agent.pyдобавьте импорт дляexit_loop(рядом с другими импортамиgoogle.adk):from google.adk.tools import exit_loop - Добавьте нового агента
critic. Этот агент проверит график. Если всё хорошо, он вызоветexit_loop. Если нет, он добавит обратную связь к состоянию для следующего цикла.
Вставьте следующее определение агента в раздел# Agents:critic = Agent( name="critic", model=model_name, description="Reviews the outline so that it can be improved.", instruction=""" INSTRUCTIONS: Consider these questions about the PLOT_OUTLINE: - Does it meet a satisfying three-act cinematic structure? - Do the characters' struggles seem engaging? - Does it feel grounded in a real time period in history? - Does it sufficiently incorporate historical details from the RESEARCH? If the PLOT_OUTLINE does a good job with these questions, exit the writing loop with your 'exit_loop' tool. If significant improvements can be made, use the 'append_to_state' tool to add your feedback to the field 'CRITICAL_FEEDBACK'. Explain your decision and briefly summarize the feedback you have provided. PLOT_OUTLINE: { PLOT_OUTLINE? } RESEARCH: { research? } """, before_model_callback=log_query_to_model, after_model_callback=log_model_response, tools=[append_to_state, exit_loop] ) - Создайте объект
LoopAgentwriters_room. Он будет содержать три агента, которые будут работать в цикле.
Вставьте следующий код над определением агентаfilm_concept_team:writers_room = LoopAgent( name="writers_room", description="Iterates through research and writing to improve a movie plot outline.", sub_agents=[ researcher, screenwriter, critic ], max_iterations=5, ) - Обновите определение
film_concept_teamSequentialAgent, чтобы использовать новый циклwriters_room. Заменитеresearcherиscreenwriterодним агентомwriters_room. Замените существующее определениеfilm_concept_teamследующим:film_concept_team = SequentialAgent( name="film_concept_team", description="Write a film plot outline and save it as a text file.", sub_agents=[ writers_room, file_writer ], ) - Вернитесь на вкладку ADK Dev UI и нажмите + New Session в правом верхнем углу.
- Начните новый разговор с:
hello - Когда появится запрос, на этот раз предложите агенту более общую тему. Вот несколько идей:
- промышленный дизайнер, создававший продукцию для масс
- картограф (составитель карт)
- тот парень, который заставил урожай давать больше еды
- После завершения цикла агент запишет файл. Просмотрите сгенерированный файл в каталоге
adk_multiagent_systems/movie_pitches. - Изучите график событий в интерфейсе разработчика, чтобы увидеть структуру цикла.
Обзор раздела
В этом разделе вы узнали, как использовать LoopAgent :
-
LoopAgent— это агент рабочего процесса, который повторяет последовательность своих подагентов, создавая «внутренний цикл» для итеративных задач. - Агенты внутри цикла используют состояние сеанса для передачи работы (например,
PLOT_OUTLINE) и обратной связи (например,CRITICAL_FEEDBACK) друг другу при последующих проходах. - Цикл может быть остановлен при достижении предела
max_iterationsили с помощью вызова агентом инструментаexit_loop.
12. Используйте ParallelAgent для «разветвления и сбора»
ParallelAgent — это агент рабочего процесса, который выполняет все свои подагенты одновременно (параллельно). Это полезно для задач, которые можно разделить на независимые подзадачи, например, для выполнения двух разных исследовательских задач.
Вы будете использовать ParallelAgent для создания «команды препродакшена», работающей параллельно. Один агент будет исследовать кассовый потенциал, а другой одновременно продумывать идеи кастинга. Это часто называют шаблоном «развёртывание и сбор»: ParallelAgent «развёртывает» работу, а следующий агент (наш file_writer ) «собирает» результаты.

Ваш окончательный агентский поток будет следующим:
-
greeter(root) начинает чат. - Он передается в
film_concept_team(SequentialAgent), который выполняет:-
writers_room(LoopAgent) для создания сюжета. - Новая
preproduction_team(ParallelAgent) будет заниматься исследованием кассовых сборов и подбором актеров одновременно . -
file_writerсобирает все результаты и сохраняет файл.
-
Чтобы внести эти изменения:
- В
adk_multiagent_systems/workflow_agents/agent.pyвставьте новыйParallelAgentи его подагенты под заголовком# Agents.box_office_researcher = Agent( name="box_office_researcher", model=model_name, description="Considers the box office potential of this film", instruction=""" PLOT_OUTLINE: { PLOT_OUTLINE? } INSTRUCTIONS: Write a report on the box office potential of a movie like that described in PLOT_OUTLINE based on the reported box office performance of other recent films. """, output_key="box_office_report" ) casting_agent = Agent( name="casting_agent", model=model_name, description="Generates casting ideas for this film", instruction=""" PLOT_OUTLINE: { PLOT_OUTLINE? } INSTRUCTIONS: Generate ideas for casting for the characters described in PLOT_OUTLINE by suggesting actors who have received positive feedback from critics and/or fans when they have played similar roles. """, output_key="casting_report" ) preproduction_team = ParallelAgent( name="preproduction_team", sub_agents=[ box_office_researcher, casting_agent ] ) - Обновите список
sub_agentsобъектаfilm_concept_teamSequentialAgent, включив в него новуюpreproduction_team(междуwriters_roomиfile_writer). Замените существующее определениеfilm_concept_teamследующим:film_concept_team = SequentialAgent( name="film_concept_team", description="Write a film plot outline and save it as a text file.", sub_agents=[ writers_room, preproduction_team, file_writer ], ) - Обновите
instructionагентаfile_writer, чтобы он «собирал» новые отчеты из состояния и добавлял их в файл.
Замените строкуinstructionдляfile_writerна эту:instruction=""" INSTRUCTIONS: - Create a marketable, contemporary movie title suggestion for the movie described in the PLOT_OUTLINE. If a title has been suggested in PLOT_OUTLINE, you can use it, or replace it with a better one. - Use your 'write_file' tool to create a new txt file with the following arguments: - for a filename, use the movie title - Write to the 'movie_pitches' directory. - For the 'content' to write, include: - The PLOT_OUTLINE - The BOX_OFFICE_REPORT - The CASTING_REPORT PLOT_OUTLINE: { PLOT_OUTLINE? } BOX_OFFICE_REPORT: { box_office_report? } CASTING_REPORT: { casting_report? } """, - Вернитесь на вкладку ADK Dev UI и нажмите + New Session .
- Введите
hello, чтобы начать разговор. - При появлении запроса введите идею нового персонажа. Вот несколько идей:
- актриса, которая изобрела технологию Wi-Fi
- захватывающий шеф-повар
- ключевые игроки на всемирных выставках
- Когда агент завершит работу, проверьте итоговый файл в каталоге
adk_multiagent_systems/movie_pitches. Теперь он должен содержать сюжет, отчёт о кассовых сборах и отчёт о кастинге — всё в одном документе.
Обзор раздела
В этом разделе вы узнали, как использовать ParallelAgent :
-
ParallelAgent«разветвляет» работу, запуская все свои подагенты одновременно, а не последовательно. - Это очень эффективно для задач, которые не зависят друг от друга (например, исследование двух разных тем).
- Результаты работы параллельных агентов «собираются» последующим агентом. Это достигается путём сохранения работы параллельных агентов в состоянии сеанса (с помощью
output_key) и последующего чтения этих ключей конечным агентом (например,file_writer).
13. Пользовательские агенты рабочих процессов
Если предопределенных агентов рабочего процесса SequentialAgent , LoopAgent и ParallelAgent недостаточно для ваших нужд, CustomAgent обеспечивает гибкость для реализации новой логики рабочего процесса.
Вы можете определить шаблоны для управления потоками, условного выполнения или управления состоянием между подагентами. Это полезно для сложных рабочих процессов, оркестрации с отслеживанием состояния или интеграции пользовательской бизнес-логики в уровень оркестрации фреймворка.
Создание CustomAgent выходит за рамки данной лабораторной работы, но полезно знать, что он существует, если он вам нужен!
14. Поздравляем!
Вы успешно создали сложную многоагентную систему с помощью Google Agent Development Kit (ADK) . Вы прошли путь от простых отношений родитель-дочерний агент до организации сложных автоматизированных рабочих процессов, позволяющих исследовать, писать и совершенствовать творческий проект.
Резюме
В этой лабораторной работе вы выполнили следующее:
- Организованные агенты в иерархическом дереве с родительскими и подагентскими отношениями.
- Управляемые передачи от агента к агенту , как автоматически (с использованием
description), так и явно (с использованиемinstruction). - Использовал инструмент для записи данных в словарь
tool_context.state. - Использовал ключевые шаблоны (например,
{ PLOT_OUTLINE? }) для чтения состояния сеанса и управления подсказками агента. - Реализовал
SequentialAgentдля создания простого пошагового рабочего процесса (исследование -> написание -> сохранение). - Использовал
LoopAgentсcriticагентом и инструментомexit_loopдля создания итеративного цикла уточнения. - Использовал
ParallelAgentдля «разветвления» независимых задач (например, подбора актеров и исследования кассовых сборов), которые выполнялись бы одновременно.
Продолжение экспериментов
Есть много способов развить полученные знания. Вот несколько идей:
- Добавьте больше агентов: попробуйте добавить нового агента в свою команду
preproduction_teamParallelAgent. Например, можно создатьmarketing_agent, который пишет слоган для фильма на основеPLOT_OUTLINE. - Добавьте больше инструментов: предоставьте вашему
researcherагенту больше инструментов. Вы можете создать инструмент, использующий API поиска Google для поиска информации, которой нет в Википедии. - Изучите
CustomAgent: в лаборатории упоминаетсяCustomAgentдля рабочих процессов, не соответствующих стандартным шаблонам. Попробуйте создать такой, который, например, будет запускать агент только при наличии определённого ключа в состоянии сеанса.