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

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

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

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

Создайте личный платежный аккаунт.
Если вы настроили оплату с использованием кредитов Google Cloud, этот шаг можно пропустить.
Чтобы настроить личный платежный аккаунт, перейдите сюда, чтобы включить оплату в облачной консоли.
Несколько замечаний:
- Выполнение этой лабораторной работы должно обойтись менее чем в 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 и установке зависимостей.
Введение в SDK Vertex AI для Python
Для взаимодействия с моделями, размещенными на Vertex AI, из вашего приложения на Python вам понадобится SDK Vertex AI для 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 devrel-demos-multiagent-lab--depth 1клонирует только последнюю версию, что работает быстрее. - В терминале переместите папку, относящуюся к данной лабораторной работе, в свой домашний каталог и переименуйте её в соответствии с ожидаемой структурой папки.
mv devrel-demos-multiagent-lab/ai-ml/build-multiagent-systems-with-adk/adk_multiagent_systems ~ - В терминале перейдите в правильную рабочую директорию для этой лабораторной работы (
adk_multiagent_systems).cd ~/adk_multiagent_systems
Проверьте структуру файлов.
Теперь, когда все ваши файлы созданы, откройте папку adk_multiagent_systems в проводнике, чтобы увидеть полную структуру.
- В меню редактора Cloud Shell выберите Файл > Открыть папку... .

- В появившемся окне добавьте следующую информацию о папке после имени пользователя:
adk_multiagent_systems/. Нажмите ОК .
Это должно выглядеть примерно так:
- Панель проводника слева обновится. Теперь вы должны увидеть полную структуру вашего проекта, включая подкаталоги
parent_and_subagentsиworkflow_agents, готовые к следующим шагам.
Активировать виртуальную среду
- В терминале создайте и активируйте виртуальное окружение с помощью
uv. Это гарантирует, что зависимости вашего проекта не будут конфликтовать с системным Python или другими проектами.uv venv source .venv/bin/activate - В терминале установите
google-adkи другие зависимости из файлаrequirements.txt:uv pip install -r requirements.txt
Настройте переменные среды.
- Вы уже находитесь в каталоге
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_plannerroot_agent, добавьте следующую строку при созданииroot_agent:sub_agents=[travel_brainstormer, attractions_planner] - В терминале пообщайтесь со своим агентом в чате:
cd ~/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.

- В раскрывающемся списке «Выберите агента» слева выберите
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 ~/adk_multiagent_systems adk web --reload_agents - В терминале Cloud Shell нажмите кнопку «Предварительный просмотр веб-интерфейса» и выберите «Изменить порт». Чтобы открыть веб-интерфейс в новой вкладке, нажмите кнопку « Предварительный просмотр веб-интерфейса» и выберите «Изменить порт» .

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

- В раскрывающемся списке «Выберите агента» выберите
workflow_agents. - Начните разговор со слов:
hello. Сотрудникgreeter, ответит. - При появлении запроса введите имя исторической личности. Вы можете использовать одно из перечисленных имен или свое собственное:
- Чжан Чжунцзин
- Ада Лавлейс
- Марк Аврелий
- Теперь управление перейдет
SequentialAgent. Вы не увидите никаких промежуточных сообщений.researcher,screenwriterиfile_writerбудут выполняться один за другим. Агент ответит только после завершения всей последовательности.
Если это не удастся, вы можете нажать кнопку «+ Новая сессия» в правом верхнем углу и попробовать снова. - После того как агент подтвердит запись файла, найдите и откройте новый файл
.txtв каталогеmovie_pitchesв редакторе Cloud Shell, чтобы увидеть результат. - В пользовательском интерфейсе разработчика ADK щелкните по значку последнего агента в истории чата, чтобы открыть представление событий .
- В окне событий отображается визуальный граф дерева агентов. Вы можете увидеть, как
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] ) - Создайте объект
writers_roomLoopAgent. Он будет содержать трех агентов, которые будут работать в цикле.
Вставьте следующий код над определением агента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, ) - Обновите
SequentialAgentfilm_concept_team, чтобы использовать новый цикл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 и нажмите кнопку «+ Новая сессия» в правом верхнем углу.
- Начните новый разговор со слов:
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_teamвSequentialAgent, добавив в него новую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 и нажмите + Новая сессия .
- Введите
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для рабочих процессов, которые не соответствуют стандартным шаблонам. Попробуйте создать, например, такой рабочий процесс, который запускает агент только при наличии определенного ключа в состоянии сессии.