1. Обзор
Чтобы выполнить запрос на поездку с несколькими ограничениями (например, составить маршрут на целый день по Киото стоимостью менее 100 долларов США с акцентом на исторические храмы и местную кухню и без галерей современного искусства), необходимо извлечь ограничения, одновременно изучить достопримечательности и рестораны, составить подробное расписание и проверить окончательный план. Если полагаться на одного монолитного агента с множеством инструментов, он может пропускать шаги проверки или нарушать исключения. Поэтому оркестрация координирует специализированных субагентов с помощью детерминированных контроллеров рабочих процессов.
В третьей части серии Создание ИИ-агентов с помощью ADK вы создадите автономный многоагентный планировщик путешествий на платформе агентов, используя контроллеры рабочих процессов Agent Development Kit (ADK) 2 (SequentialAgent, ParallelAgent и LoopAgent). На трех последовательных этапах (без необходимости настройки рабочей области из частей 1 и 2) вы скоординируете работу шести специализированных агентов на базе gemini-3.8-flash с общим состоянием сеанса (output_key), параллельным выполнением google_search и итеративным циклом доработки "создатель-проверяющий".
Требования
- Понимание концепций генеративного искусственного интеллекта.
- Базовые навыки программирования на Python.
- Знание основ работы ИИ-агентов и Google ADK.
Что вы узнаете
- Как создать проект ADK 2 с несколькими агентами с нуля
- Как создать команду специализированных агентов, которые делятся статусом сеанса, используя
output_key - Как использовать
SequentialAgentдля выполнения субагентов в детерминированном пошаговом конвейере - Как использовать
ParallelAgentдля одновременного запуска независимых агентов, чтобы снизить задержку - Как использовать эскалацию
LoopAgentиToolContextдля реализации итеративного цикла уточнения "создатель-проверяющий" - Как объединить последовательные, параллельные и циклические шаблоны в иерархический многоагентный рабочий процесс.
Что вам потребуется
- Аккаунт Google (если вы хотите получить бонусы за участие в семинаре, используйте личный аккаунт
@gmail.com). - ссылка на бонус от преподавателя (и камера телефона, чтобы отсканировать QR-код) или активный платежный аккаунт Cloud.
- Google Chrome (рекомендуется использовать окно инкогнито, чтобы не путать личный и рабочий аккаунты).
2. Как получить бонусы Google Cloud (необязательно)
Если вы посещаете семинар, на котором предоставляется ссылка на бонус, воспользуйтесь бонусом Google Developer Program, чтобы создать платежный аккаунт без кредитной карты.
Получите бонус на рекламу
- Откройте ссылку на бонусы в окне инкогнито и войдите в аккаунт
@gmail.com. - На странице Claim Your Benefit (Получить бонус) нажмите Claim Credit (Получить бонус).

- Если вам будет предложено создать профиль Google Developer Program, заполните форму.
- Когда появится сообщение Отсканируйте, чтобы подтвердить, что вы человек, отсканируйте QR-код с помощью телефона и пройдите проверку. Если QR-код не появился, обновите страницу и снова нажмите Получить бонус.

- Дождитесь сообщения Бонус за участие в мероприятии успешно активирован и нажмите Открыть платежный аккаунт.

🔍 Проверьте свою работу
Настройка платежного аккаунта занимает до 3 минут.
- Откройте Google Cloud Billing (или скопируйте URL в окно инкогнито) и выберите Your billing accounts (Ваши платежные аккаунты).
https://console.cloud.google.com/billing
- Обновляйте страницу, пока у аккаунта
GDP Creditне появится статус Активно.

3. Создайте проект Google Cloud (необязательно)
Создайте отдельный проект Google Cloud, чтобы все ресурсы из этой практической работы были изолированы и их можно было легко удалить.
- Откройте страницу Создание проекта или скопируйте URL в окно инкогнито.
https://console.cloud.google.com/projectcreate
- Укажите сведения о проекте:
- Название проекта, например
google-cloud-workshop. - Платежный аккаунт (если показан): выберите
GDP Credit(или ваш активный платежный аккаунт). - Родительский ресурс: Без организации (или ваша организация, если требуется).
- Название проекта, например
- Запишите сгенерированный идентификатор проекта, который указан под названием проекта, и нажмите Создать.

🔍 Проверьте свою работу
Нажмите Уведомления на панели инструментов в правом верхнем углу, а затем – Выбрать проект.

4. Как настроить среду
Настройте Google Cloud Shell, включите Agent Platform API и создайте изолированную виртуальную среду Python 3.12 с помощью uv.
Как настроить Cloud Shell
- Нажмите Activate Cloud Shell (Активировать Cloud Shell) (
>_) на панели инструментов консоли Google Cloud или откройте Google Cloud Shell напрямую (или скопируйте URL в окно инкогнито):
https://shell.cloud.google.com/?show=ide,terminal

- При необходимости нажмите Авторизовать.

- Выберите активный идентификатор проекта Google Cloud в нумерованном меню терминала.
unset CLOUDSDK_CORE_PROJECT
PS3="Select your project (e.g. 1): "
select PROJECT_ID in $(gcloud projects list --format="value(projectId)"); do
[ -n "$PROJECT_ID" ] && gcloud config set project "$PROJECT_ID" && break
done
Вы должны увидеть примерно такой результат (для проектов без тегов также выводится информационная строка [environment: untagged]):
1) google-cloud-workshop-4210 2) my-cloud-project-8812 Select your project (e.g. 1): 1 Updated property [core/project].
Убедитесь, что выбранный идентификатор проекта выделен желтым цветом в командной строке Cloud Shell:

Включите необходимые API
Включите Agent Platform API, чтобы агенты ADK могли вызывать модели Gemini.
gcloud services enable aiplatform.googleapis.com
Вы должны увидеть примерно следующее:
Operation "operations/acat.p2-..." finished successfully.
Как создать виртуальную среду Python и установить ADK
Создайте рабочую область ~/adk-agents и активируйте виртуальную среду Python 3.12:
cd ~
mkdir -p adk-agents && cd ~/adk-agents
which uv >/dev/null 2>&1 || curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
uv venv .venv --python 3.12
source .venv/bin/activate
Убедитесь, что в начале командной строки терминала появился префикс (.venv):

Установите ADK 2 в активной виртуальной среде:
uv pip install --no-cache "google-adk==2.14.0"
🔍 Проверьте свою работу
Проверьте установленную версию CLI adk:
adk --version
Вы должны увидеть примерно следующее:
adk, version 2.14.0
5. Создайте каркас агента для планирования путешествий
Когда среда будет готова, используйте встроенную команду ADK adk create, чтобы сгенерировать начальные файлы для пакета агента travel_planner.
Создайте стартовый пакет
Выполните команду adk create из каталога ~/adk-agents:
cd ~/adk-agents
adk create travel_planner
Когда в терминале появится запрос, выберите следующие параметры конфигурации (если при первом запуске появится запрос Enable telemetry? [Y/n]:, нажмите Ввод или введите n и нажмите Ввод):
- Выберите модель для корневого агента. Введите
2, чтобы выбратьgemini-3.8-flash(вариант1выбираетgemini-3.5-flash), и нажмите Ввод. - Выберите серверную часть. Введите
2, чтобы выбрать серверную часть Google Cloud Agent Platform (вариант2в меню CLI ниже), и нажмите Ввод. - Enter Google Cloud project ID (Введите идентификатор проекта Google Cloud). Подтвердите идентификатор проекта, указанный в скобках, нажав клавишу Ввод.
- Enter Google Cloud region (Укажите регион Google Cloud): введите
globalи нажмите Ввод.
adk create записывает GOOGLE_GENAI_USE_ENTERPRISE=1, идентификатор проекта и GOOGLE_CLOUD_LOCATION=global в travel_planner/.env, чтобы ваши учетные данные оставались настроенными при последующем обновлении agent.py.
🔍 Проверьте свою работу
Вы должны увидеть примерно следующее:
Choose a model for the root agent: 1. gemini-3.5-flash 2. gemini-3.8-flash 3. Other models (fill later) Choose model (1, 2, 3): 2 1. Google AI 2. Vertex AI 3. Login with Google Choose a backend (1, 2, 3): 2 You need an existing Google Cloud account and project, check out this link for details: https://google.github.io/adk-docs/get-started/quickstart/#gemini---google-cloud-vertex-ai Enter Google Cloud project ID [google-cloud-workshop-4210]: Enter Google Cloud region [us-central1]: global Agent created in /home/your_username/adk-agents/travel_planner: - .env - .gitignore - __init__.py - agent.py ⚠️ WARNING: Secrets (like GOOGLE_API_KEY) are stored in .env. Next steps: - Chat with your agent in the terminal: adk run travel_planner - Or in the browser: adk web . - Have your coding agent evaluate and deploy it: uvx google-agents-cli setup (other install options: https://adk.dev/get-started/agents-cli/)
Откройте текущую папку в редакторе кода Cloud Shell, чтобы просматривать и редактировать файлы параллельно с терминалом:
which cloudshell >/dev/null 2>&1 && cloudshell workspace ~/adk-agents || true
cd ~/adk-agents
source .venv/bin/activate
Как протестировать агент по умолчанию
Прежде чем создавать рабочие процессы с несколькими агентами, запустите интерфейс разработки ADK, чтобы посмотреть, как агент по умолчанию отвечает на общий запрос о планировании путешествия.
cd ~/adk-agents
adk web --allow_origins "*"
Откройте интерфейс разработки в браузере с помощью веб-просмотра Cloud Shell:
- Нажмите на значок Web Preview (Предварительный просмотр) на панели инструментов в правом верхнем углу Cloud Shell.
- Нажмите Изменить порт, введите
8000и выберите Изменить и посмотреть.

После загрузки веб-интерфейса ADK отправьте приветствие, например "hello, what can you do?" или "Help me plan a trip to Japan":

Обратите внимание, что root_agent отвечает сразу, не извлекая структурированные предпочтения, не выполняя поиск в интернете и не проверяя бюджет.
Завершив тестирование, нажмите Ctrl + C в терминале Cloud Shell, чтобы остановить сервер adk web и вернуться в командную строку.
6. Как создать рабочий процесс SequentialAgent
Теперь вы создадите свой первый шаблон оркестрации – линейный рабочий процесс на основе SequentialAgent. В последовательном конвейере субагенты выполняются в строгом порядке. Первый специалист извлекает структурированные параметры и сохраняет их в общем состоянии сеанса с помощью output_key="user_preferences", а второй специалист считывает {user_preferences} из общего состояния, чтобы составить маршрут.

Создайте первых специалистов (specialists.py)
Создайте файл specialists.py в папке travel_planner/.
cloudshell edit ~/adk-agents/travel_planner/specialists.py
Вставьте следующий код в travel_planner/specialists.py, чтобы определить user_profiler_agent и itinerary_synthesizer_agent (импортировав ToolContext и google_search для следующих шагов):
from google.adk import Agent
from google.adk.tools import ToolContext, google_search
# --- Specialist 1: The User Profiler ---
user_profiler_agent = Agent(
name="user_profiler_agent",
description="Extracts travel preferences and constraints from user input.",
instruction="""
Extract destination, duration (default 1 day), budget, interests, and exclusions.
Return a single JSON object with keys: "destination", "duration", "budget", "interests", "exclusions".
""",
output_key="user_preferences", # Saves output to state['user_preferences']
)
# --- Specialist 2: The Synthesizer ---
itinerary_synthesizer_agent = Agent(
name="itinerary_synthesizer_agent",
description="Compiles preferences and research into a final Markdown itinerary.",
instruction="""
You are an elite Travel Concierge. Write a Markdown itinerary with an itemized USD and local currency cost breakdown using:
- User Preferences: {user_preferences}
- Activities (if available): {activity_recommendations?}
- Restaurants (if available): {restaurant_recommendations?}
""",
output_key="final_itinerary",
)
Подключите последовательный конвейер (workflows.py)
Создайте файл workflows.py в папке travel_planner/, чтобы координировать работу специалистов.
cloudshell edit ~/adk-agents/travel_planner/workflows.py
Добавьте следующее определение SequentialAgent в travel_planner/workflows.py:
from google.adk.agents import SequentialAgent
from .specialists import (
user_profiler_agent,
itinerary_synthesizer_agent,
)
# 1. SEQUENTIAL PHASE: A linear two-step workflow
master_travel_agent = SequentialAgent(
name="master_travel_agent",
description="Orchestrates the end-to-end travel planning process for trip and itinerary requests.",
sub_agents=[
user_profiler_agent, # Step 1: Extract constraints into user_preferences
itinerary_synthesizer_agent, # Step 2: Draft itinerary from user_preferences
],
)
Подключите рабочий процесс к root_agent (agent.py)
Теперь зарегистрируйте master_travel_agent как субагента root_agent. Откройте travel_planner/agent.py:
cloudshell edit ~/adk-agents/travel_planner/agent.py
Замените содержимое файла travel_planner/agent.py следующим кодом:
from google.adk import Agent
from .workflows import master_travel_agent
MODEL = "gemini-3.8-flash"
root_agent = Agent(
model=MODEL,
name="root_agent",
description="A helpful assistant for user questions.",
instruction=(
"Greet the user and delegate any travel or trip planning requests "
"to master_travel_agent."
),
sub_agents=[master_travel_agent],
)
🔍 Проверьте свою работу
Запустите веб-интерфейс ADK из терминала:
cd ~/adk-agents
adk web --allow_origins "*"
Откройте веб-просмотр на порте 8000 и введите запрос:
Help me plan a trip to Kyoto
В представлении События вы должны увидеть примерно следующее:
1. root_agent -> calls transfer_to_agent(agent_name="master_travel_agent")
2. user_profiler_agent -> outputs JSON {"destination": "Kyoto", "duration": "1 day", ...} to state['user_preferences']
3. itinerary_synthesizer_agent -> reads {user_preferences} and outputs the formatted Markdown itinerary

Нажмите на любой значок события (или на чип State: final_itinerary) и перейдите на вкладку State (Состояние) на панели инспектора слева, чтобы убедиться, что в состоянии сеанса заполнены оба параметра: user_preferences и final_itinerary.
Закончив проверку трассировки, нажмите Ctrl + C в терминале, чтобы остановить adk web.
7. Проводите исследования с помощью ParallelAgent
Хотя последовательный рабочий процесс четко отделяет извлечение предпочтений от составления маршрута, его рекомендации по-прежнему полагаются исключительно на статические знания модели, полученные в ходе обучения. Вы можете дополнить маршрут актуальными данными из интернета, добавив двух исследователей, которые будут использовать встроенный инструмент google_search.
activity_finder_agentнаходит три достопримечательности, которые соответствуют пункту назначения и интересам пользователя, и указывает примерные цены на билеты.restaurant_finder_agent: находит три местных ресторана с высоким рейтингом и указывает примерную стоимость на человека.
Поскольку поиск достопримечательностей и поиск ресторанов не зависят друг от друга, их последовательное выполнение приводит к потере времени. Вместо этого вы поместите обоих исследователей в ParallelAgent (parallel_research_agent), чтобы ADK выполнял оба рабочих процесса Google Поиска одновременно и заполнял {activity_recommendations?} и {restaurant_recommendations?} перед передачей в itinerary_synthesizer_agent.

Добавить специалистов по параллельным исследованиям в specialists.py
Откройте travel_planner/specialists.py:
cloudshell edit ~/adk-agents/travel_planner/specialists.py
Добавьте в конец файла travel_planner/specialists.py (сразу после itinerary_synthesizer_agent) следующие две строки, относящиеся к Google Поиску:
# --- Specialist 3: The Activity Finder ---
activity_finder_agent = Agent(
name="activity_finder_agent",
description="Finds 3 attractions matching the user's destination and interests.",
instruction="""
Based on {user_preferences}, use google_search to find 3 specific attractions (including budget-friendly options).
Return a JSON list with keys: "attraction_name", "estimated_cost_local", "estimated_cost_usd", "notes".
""",
tools=[google_search],
output_key="activity_recommendations",
)
# --- Specialist 4: The Restaurant Finder ---
restaurant_finder_agent = Agent(
name="restaurant_finder_agent",
description="Finds 3 restaurants matching the destination and budget.",
instruction="""
Based on {user_preferences}, use google_search to find 3 highly-rated restaurants across price points.
Return a JSON list with keys: "restaurant_name", "cuisine", "estimated_cost_local", "estimated_cost_usd".
""",
tools=[google_search],
output_key="restaurant_recommendations",
)
Вставить ParallelAgent в workflows.py
Откройте travel_planner/workflows.py:
cloudshell edit ~/adk-agents/travel_planner/workflows.py
Обновите travel_planner/workflows.py, чтобы определить parallel_research_agent с помощью ParallelAgent, и поместите его между user_profiler_agent и itinerary_synthesizer_agent:
from google.adk.agents import ParallelAgent, SequentialAgent
from .specialists import (
activity_finder_agent,
itinerary_synthesizer_agent,
restaurant_finder_agent,
user_profiler_agent,
)
# Parallel branch: Run activity and restaurant research simultaneously
parallel_research_agent = ParallelAgent(
name="parallel_research_agent",
description="Runs activity and restaurant research concurrently.",
sub_agents=[
activity_finder_agent,
restaurant_finder_agent,
],
)
# Master pipeline: Profile -> Parallel Research -> Synthesize
master_travel_agent = SequentialAgent(
name="master_travel_agent",
description="Orchestrates the end-to-end travel planning process for trip and itinerary requests.",
sub_agents=[
user_profiler_agent, # Step 1: Extract constraints
parallel_research_agent, # Step 2: Research activities & restaurants in parallel
itinerary_synthesizer_agent, # Step 3: Synthesize into an itinerary
],
)
🔍 Проверьте свою работу
Снова запустите adk web, чтобы протестировать параллельный конвейер исследований:
cd ~/adk-agents
adk web --allow_origins "*"
В интерфейсе Web Preview отправьте запрос:
Help me plan a trip to Kyoto focused on historic temples and ramen
В представлении События вы должны увидеть примерно такую последовательность:
1. user_profiler_agent -> writes state['user_preferences'] 2. parallel_research_agent -> fans out concurrently: - activity_finder_agent invokes google_search -> writes state['activity_recommendations'] - restaurant_finder_agent invokes google_search -> writes state['restaurant_recommendations'] 3. itinerary_synthesizer_agent -> merges all three state keys into state['final_itinerary']
- Просмотр трассировок. Нажмите Трассировки в верхней части панели чата (рядом с пунктом События) и проверьте реплику. Вы увидите, что временные шкалы для
activity_finder_agentиrestaurant_finder_agentв разделеparallel_research_agentперекрываются. Это означает, что общая задержка при поиске в интернете сократилась почти вдвое по сравнению с последовательным выполнением этих задач. - Вкладка State (Состояние). Нажмите на вкладку State (Состояние) на панели инспектора слева, чтобы проверить словарь текущего сеанса (
user_preferences,activity_recommendations,restaurant_recommendationsиfinal_itinerary).
Завершив тестирование, нажмите Ctrl + C в терминале, чтобы остановить adk web.
8. Как дорабатывать черновики с помощью LoopAgent
Даже с учетом результатов поиска в реальном времени первоначальный черновик, созданный itinerary_synthesizer_agent, может превышать общий бюджет пользователя или случайно включать исключенную категорию (например, галерею современного искусства, когда пользователь просил ее не включать).
Чтобы гарантировать соблюдение ограничений, вы добавите цикл доработки с участием исполнителя и проверяющего в конце конвейера с помощью LoopAgent:
itinerary_critic_agent(The Checker): Audits{final_itinerary}against{user_preferences}. Она суммирует расчетные затраты, проверяет каждое отрицательное ограничение и либо записывает конкретные инструкции по пересмотру вcritique_feedback, либо отвечает точной фразой"APPROVED".itinerary_refiner_agent(создатель/выход): считывает свойство{critique_feedback}. Если критика равна"APPROVED", вызывается инструментexit_loop(tool_context.actions.escalate = True), чтобы немедленно выйти изLoopAgent. В противном случае он исправляет{final_itinerary}, чтобы устранить помеченные проблемы, и перезаписываетfinal_itineraryдля следующего прохода.

Добавьте exit_loop, Critic и Refiner в specialists.py.
Откройте travel_planner/specialists.py:
cloudshell edit ~/adk-agents/travel_planner/specialists.py
Добавьте инструмент exit_loop (ToolContext), itinerary_critic_agent и itinerary_refiner_agent в нижнюю часть travel_planner/specialists.py:
def exit_loop(tool_context: ToolContext) -> dict:
"""Call ONLY when the critique is APPROVED to exit the refinement loop."""
print(f"[Tool Call] exit_loop triggered by {tool_context.agent_name}")
tool_context.actions.escalate = True
return {"status": "approved", "message": "Itinerary approved. Exiting refinement loop."}
# --- Specialist 5: The Budget & Constraint Critic (Inside LoopAgent) ---
itinerary_critic_agent = Agent(
name="itinerary_critic_agent",
include_contents="none",
description="Audits the itinerary draft against budget and negative constraints.",
instruction="""
Audit Current Itinerary ({final_itinerary}) against User Preferences ({user_preferences}).
Verify that the USD total stays within the user's budget and no excluded venue types appear.
If all checks pass, respond EXACTLY with the single word "APPROVED".
Otherwise, output 1-2 concise revision instructions explaining what to swap or adjust.
""",
output_key="critique_feedback",
)
# --- Specialist 6: The Itinerary Refiner / Exiter (Inside LoopAgent) ---
itinerary_refiner_agent = Agent(
name="itinerary_refiner_agent",
include_contents="none",
description="Refines the itinerary from critique feedback, or calls exit_loop when APPROVED.",
instruction="""
Review Auditor Critique ({critique_feedback}) for Current Itinerary ({final_itinerary}).
If the critique is EXACTLY "APPROVED", call `exit_loop` immediately and return the itinerary unchanged.
Otherwise, revise the draft using {activity_recommendations} and {restaurant_recommendations}
so all USD budget and exclusion rules pass, and output ONLY the updated Markdown itinerary.
""",
tools=[exit_loop],
output_key="final_itinerary",
)
Добавьте аудиторию "LoopAgent" в кампании: workflows.py.
Откройте travel_planner/workflows.py:
cloudshell edit ~/adk-agents/travel_planner/workflows.py
Обновите travel_planner/workflows.py, чтобы обернуть itinerary_critic_agent и itinerary_refiner_agent в LoopAgent (max_iterations=3) и добавить его в качестве четвертого этапа master_travel_agent:
from google.adk.agents import LoopAgent, ParallelAgent, SequentialAgent
from .specialists import (
activity_finder_agent,
itinerary_critic_agent,
itinerary_refiner_agent,
itinerary_synthesizer_agent,
restaurant_finder_agent,
user_profiler_agent,
)
# Stage 2: Parallel research branch
parallel_research_agent = ParallelAgent(
name="parallel_research_agent",
description="Runs activity and restaurant research concurrently.",
sub_agents=[
activity_finder_agent,
restaurant_finder_agent,
],
)
# Stage 4: Iterative Maker-Checker refinement loop
refinement_loop_agent = LoopAgent(
name="refinement_loop_agent",
description="Iteratively audits and refines the itinerary until constraints and budget are approved.",
sub_agents=[
itinerary_critic_agent,
itinerary_refiner_agent,
],
max_iterations=3,
)
# Master pipeline: Profile -> Parallel Research -> Synthesize -> Refinement Loop
master_travel_agent = SequentialAgent(
name="master_travel_agent",
description="Orchestrates the end-to-end travel planning process for trip and itinerary requests.",
sub_agents=[
user_profiler_agent, # Stage 1: Extract constraints
parallel_research_agent, # Stage 2: Research activities & restaurants in parallel
itinerary_synthesizer_agent, # Stage 3: Draft initial itinerary
refinement_loop_agent, # Stage 4: Audit and refine until approved
],
)
🔍 Проверьте свою работу
Запустите adk web, чтобы протестировать весь рабочий процесс с несколькими агентами:
cd ~/adk-agents
adk web --allow_origins "*"
Откройте интерфейс предварительного просмотра в браузере на порте 8000, начните новый сеанс и протестируйте всю систему с помощью этого запроса с несколькими ограничениями для Киото:
Design a full-day itinerary for Kyoto with a total budget of $100. My main interests are historical landmarks, temples, and authentic local cuisine. Please do not include any modern art museums or galleries.
В представлении События и журналах терминала вы должны увидеть примерно такую последовательность выполнения:
1. user_profiler_agent -> writes JSON with destination="Kyoto", budget="$100", exclusions=["modern art museums", "galleries"] 2. parallel_research_agent -> runs activity_finder_agent and restaurant_finder_agent in parallel 3. itinerary_synthesizer_agent -> produces initial draft in state['final_itinerary'] 4. refinement_loop_agent: - itinerary_critic_agent -> audits USD budget and exclusions -> outputs "APPROVED" (or revision notes) - itinerary_refiner_agent -> triggers [Tool Call] exit_loop triggered by itinerary_refiner_agent and outputs the approved itinerary
- Режим событий. Нажмите на любой чип события в
itinerary_critic_agentилиitinerary_refiner_agent, чтобы посмотреть его полезную нагрузку на вкладке Информация слева. Когдаitinerary_refiner_agentвызываетexit_loop, проверьте событие, чтобы увидетьactions.escalate: true– сигнал, который сообщаетLoopAgent, что нужно остановить итерацию до достиженияmax_iterations=3. - Вкладка State (Состояние). Нажмите на вкладку State (Состояние), чтобы посмотреть, как обновляются значения
state['critique_feedback']иstate['final_itinerary']в разных картах. Если первоначальный черновик превысил$100 USD,critique_feedbackсодержит инструкции аудитора по пересмотру на этапе 1, прежде чемfinal_itineraryобновится с более дешевыми альтернативами, аcritique_feedbackизменится на"APPROVED"на этапе 2.
Завершив тестирование, нажмите Ctrl + C в терминале, чтобы остановить adk web.
9. Организовать
Удалите файлы проекта в локальном хранилище браузера
Чтобы удалить каталог проекта adk-agents и виртуальную среду из главной папки Cloud Shell, выполните следующую команду:
cd ~
rm -rf ~/adk-agents
Как отключить Agent Platform API
Если вам больше не нужен Agent Platform API, отключите его с помощью gcloud:
gcloud services disable aiplatform.googleapis.com --quiet
Удалите весь облачный проект Google Cloud (необязательно)
PROJECT_ID=$(gcloud config get-value project)
gcloud projects delete "$PROJECT_ID" --quiet
🔍 Проверьте свою работу
Подтвердите, что ~/adk-agents удален:
test ! -d ~/adk-agents && echo "Workspace ~/adk-agents removed"
Вы должны увидеть примерно следующее:
Workspace ~/adk-agents removed
10. Поздравляю!
Поздравляем! Вы создали иерархическую многоагентную систему с помощью Google Agent Development Kit (ADK), которая координирует команду из шести специализированных агентов в последовательных, параллельных и итеративных рабочих процессах.
Чего вы достигли
- Структурированное взаимодействие между агентами через общее состояние сеанса (внедрение шаблонов
output_keyи{state_variable}). - Создан детерминированный пошаговый конвейер с помощью
SequentialAgent. - Одновременно запущены независимые агенты Google Поиска для исследований с помощью
ParallelAgent - Внедрил автоматизированный цикл проверки с участием двух специалистов, используя
LoopAgentиtool_context.actions.escalate = True.
Дальнейшие действия
- Перейдите к четвертой части серии Создание ИИ-агентов с помощью ADK: управление рабочими процессами графов, чтобы перестроить этот планировщик путешествий с помощью унифицированных циклов
Workflow,JoinNodeи детерминированных цикловEvent(route=...)в ADK 2. - Прочитайте официальную документацию по агентам рабочих процессов ADK.
- Подробнее о мультиагентных системах в ADK…
- Присоединяйтесь к программам GEAR (Gemini Enterprise Agent Ready) и Get Certified, чтобы участвовать в практических семинарах и проходить обучение.