Развертывание, управление и наблюдение за агентом ADK в облаке Run

1. Введение

В этом руководстве вы узнаете, как развернуть, управлять и отслеживать работу мощного агента, созданного с помощью Agent Development Kit (ADK) на платформе Google Cloud Run. ADK позволяет создавать агентов, способных выполнять сложные многоагентные рабочие процессы. Используя Cloud Run, полностью управляемую бессерверную платформу, вы можете развернуть своего агента как масштабируемое контейнеризированное приложение, не беспокоясь о базовой инфраструктуре. Это мощное сочетание позволяет вам сосредоточиться на основной логике вашего агента, одновременно пользуясь преимуществами надежной и масштабируемой среды Google Cloud.

В этом руководстве мы рассмотрим бесшовную интеграцию ADK с Cloud Run. Вы узнаете, как развернуть агент, а затем перейдете к практическим аспектам управления вашим приложением в условиях, приближенных к производственной среде. Мы рассмотрим, как безопасно развертывать новые версии агента, управляя трафиком, что позволит вам тестировать новые функции на ограниченном количестве пользователей перед полным релизом.

Кроме того, вы получите практический опыт мониторинга производительности вашего агента. Мы смоделируем реальный сценарий, проведя нагрузочное тестирование, чтобы понаблюдать за возможностями автоматического масштабирования Cloud Run в действии. Для более глубокого понимания поведения и производительности вашего агента мы включим трассировку с помощью Cloud Trace. Это обеспечит детальное, сквозное представление запросов по мере их прохождения через ваш агент, что позволит вам выявлять и устранять любые узкие места в производительности. К концу этого руководства вы получите полное понимание того, как эффективно развертывать, управлять и отслеживать ваши агенты на базе ADK в Cloud Run.

В ходе выполнения практического задания вы будете использовать следующий пошаговый подход:

  1. Создайте базу данных PostgreSQL в CloudSQL для использования в качестве службы сессий базы данных ADK Agent.
  2. Настройте базовый агент ADK.
  3. Настройте службу сессий базы данных для использования в ADK Runner.
  4. Первоначально разверните агент в облаке.
  5. Тестирование нагрузки и проверка масштабируемости облачных сервисов.
  6. Внедрите новую версию агента и постепенно увеличивайте трафик на новые версии.
  7. Настройте трассировку облака и проверьте трассировку выполнения агента.

Обзор архитектуры

20d503f01eaadfd.jpeg

Предварительные требования

  • Уверенно работаю с Python.
  • Понимание базовой архитектуры полного стека с использованием HTTP-сервисов.

Что вы узнаете

  • Структура ADK и локальные утилиты
  • Настройка агента ADK с использованием службы сессий базы данных.
  • Настройка PostgreSQL в CloudSQL для использования службой сессий базы данных.
  • Разверните приложение в Cloud Run с помощью Dockerfile и настройте начальные переменные среды.
  • Настройка и тестирование автоматического масштабирования Cloud Run с нагрузочным тестированием.
  • Стратегия поэтапного внедрения с помощью Cloud Run
  • Настройте трассировку агента ADK в Cloud Trace.

Что вам понадобится

  • Веб-браузер Chrome
  • Аккаунт Gmail
  • Облачный проект с включенной функцией выставления счетов.

Этот практический урок, разработанный для разработчиков всех уровней (включая начинающих), использует Python в качестве примера приложения. Однако знание Python не требуется для понимания представленных концепций.

2. 🚀 Подготовка к настройке процесса разработки в мастерской.

Шаг 1: Выберите активный проект в облачной консоли.

В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud (см. раздел в левом верхнем углу консоли).

9a0e28d3a550a989.png

Нажмите на него, и вы увидите список всех ваших проектов, как в этом примере.

14e76d7abc8aeaba.png

Значение, обозначенное красной рамкой, — это идентификатор проекта , и это значение будет использоваться на протяжении всего урока.

Убедитесь, что для вашего облачного проекта включена оплата. Для этого нажмите на значок меню (гамбургер) ☰ в верхнем левом углу панели, где отображается меню навигации, и найдите пункт «Оплата».

db07810b26fc61d6.png

Если в разделе «Биллинг / Обзор » ( в верхнем левом углу консоли облачных сервисов ) вы видите пункт «Пробный платёжный аккаунт Google Cloud Platform» , значит, ваш проект готов к использованию в этом руководстве. В противном случае вернитесь к началу руководства и активируйте пробный платёжный аккаунт.

45539d4ac57dd995.png

Шаг 2: Подготовка базы данных Cloud SQL

Нам понадобится база данных для дальнейшего использования агентом ADK. Давайте создадим базу данных PostgreSQL в Cloud SQL. Сначала перейдите к строке поиска в верхней части консоли Cloud и введите «Cloud SQL». Затем щелкните продукт Cloud SQL .

39dbcf39661a8b65.png

После этого нам потребуется создать новый экземпляр базы данных, нажать кнопку «Создать экземпляр» и выбрать PostgreSQL.

b004e6ead3213818.png

2fd64e7f862ebbc2.png

При создании нового проекта вам также может потребоваться включить API Compute Engine. Просто нажмите « Включить API», если появится соответствующее сообщение.

509305746061b60b.png

Далее мы выберем характеристики базы данных, выберем версию Enterprise с предустановленными параметрами Sandbox Edition.

f1a642e4ecd3295.png

После этого задайте имя экземпляра и пароль по умолчанию для пользователя postgres . Вы можете использовать любые учетные данные, однако в рамках этого руководства мы будем использовать имя экземпляра " adk-deployment " и пароль "ADK-deployment123".

4f1dfe940451606d.png

Для этого урока давайте используем us-central1 с одной зоной. После этого мы можем завершить создание базы данных и дождаться завершения всех необходимых настроек, нажав кнопку «Создать экземпляр» .

6dceef8db8c1c7aa.png

Пока это не будет завершено, мы можем перейти к следующему разделу.

Шаг 3: Ознакомьтесь с Cloud Shell.

В большинстве руководств вы будете использовать Cloud Shell . Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud. Если система запросит авторизацию, нажмите «Авторизовать».

26f20e837ff06119.png

79b06cc89a99f840.png

После подключения к Cloud Shell нам потребуется проверить, авторизована ли оболочка (или терминал) уже с использованием нашей учетной записи.

gcloud auth list

Если вы видите в своей личной почте Gmail результат, как в приведенном ниже примере, значит, все в порядке.

Credentialed Accounts

ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

Если это не поможет, попробуйте обновить страницу в браузере и обязательно нажмите кнопку « Авторизовать» , когда появится соответствующий запрос (возможно, авторизация прервалась из-за проблем с подключением).

Далее нам также необходимо проверить, настроена ли оболочка уже для правильного идентификатора проекта (PROJECT ID ). Если вы видите значение внутри скобок ( ) перед значком $ в терминале (на скриншоте ниже значение равно "adk-cloudrun-deployment-476504" ), это значение показывает настроенный проект для вашей активной сессии оболочки.

7695eb78acb3cacb.png

Если отображаемое значение уже верное , вы можете пропустить следующую команду . Однако, если оно неверно или отсутствует, выполните следующую команду.

gcloud config set project <YOUR_PROJECT_ID>

Затем клонируйте рабочую директорию шаблона для этого практического задания с Github и выполните следующую команду. Она создаст рабочую директорию в каталоге deploy_and_manage_adk.

git clone https://github.com/alphinside/deploy-and-manage-adk-service.git deploy_and_manage_adk

Шаг 4: Ознакомьтесь с редактором Cloud Shell и настройте рабочий каталог приложения.

Теперь мы можем настроить наш редактор кода для выполнения некоторых действий по программированию. Для этого мы будем использовать редактор Cloud Shell.

Нажмите кнопку «Открыть редактор» , это откроет редактор Cloud Shell. 168eacea651b086c.png

После этого перейдите в верхнюю часть редактора Cloud Shell и нажмите «Файл» -> «Открыть папку», найдите каталог с вашим именем пользователя и найдите каталог deploy_and_manage_adk, затем нажмите кнопку «ОК». Это сделает выбранный каталог основным рабочим каталогом. В этом примере имя пользователя — alvinprayuda , поэтому путь к каталогу показан ниже.

8eb3f593141dbcbf.png

ea96d0447c4160a2.png

Теперь ваша рабочая директория в Cloud Shell Editor должна выглядеть следующим образом (внутри папки deploy_and_manage_adk ):

612d7958881293cc.png

Теперь откройте терминал для редактора. Это можно сделать, щелкнув «Терминал» -> «Новый терминал» в строке меню, или используя Ctrl + Shift + C — это откроет окно терминала в нижней части браузера.

aa04a318f1fc485f.png

Ваш текущий активный терминал должен находиться в рабочей директории deploy_and_manage_adk . В этом практическом занятии мы будем использовать Python 3.12 и менеджер проектов Python uv для упрощения создания и управления версиями Python и виртуальными средами. Этот пакет uv уже предустановлен в Cloud Shell.

Выполните эту команду, чтобы установить необходимые зависимости в виртуальное окружение в каталоге .venv.

uv sync --frozen

Теперь нам нужно будет включить необходимые API с помощью команды, показанной ниже. Это может занять некоторое время.

gcloud services enable aiplatform.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       sqladmin.googleapis.com

После успешного выполнения команды вы должны увидеть сообщение, похожее на показанное ниже:

Operation "operations/..." finished successfully.

Далее нам потребуется настроить конфигурационные файлы для этого проекта.

Переименуйте файл .env.example в .env

cp .env.example .env

Откройте файл .env и обновите значение GOOGLE_CLOUD_PROJECT, указав идентификатор вашего проекта.

# .env

# Google Cloud and Vertex AI configuration
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=global
GOOGLE_GENAI_USE_VERTEXAI=True

# Database connection for session service
# DB_CONNECTION_NAME=your-db-connection-name

Для этой практической работы мы будем использовать предварительно настроенные значения для GOOGLE_CLOUD_LOCATION и GOOGLE_GENAI_USE_VERTEXAI. Пока что мы оставим DB_CONNECTION_NAME закомментированным.

Теперь мы можем перейти к следующему шагу: изучить логику работы агента и развернуть его.

3. 🚀 Создайте агента погоды с помощью ADK и Gemini 2.5

Введение в структуру каталогов ADK

Начнём с изучения возможностей ADK и способов создания агента. Полную документацию по ADK можно найти по этому адресу . ADK предлагает множество утилит в рамках выполнения команд CLI. Некоторые из них:

  • Настройка структуры каталогов агента
  • Быстро попробуйте взаимодействие через ввод/вывод командной строки.
  • Быстрая настройка локального веб-интерфейса для разработки.

Теперь давайте проверим структуру агента в каталоге weather_agent.

weather_agent/
├── __init__.py
├── agent.py
└── tool.py

А если вы изучите файлы init.py и agent.py, то увидите следующий код.

# __init__.py

from weather_agent.agent import root_agent

__all__ = ["root_agent"]
# agent.py


import os
from pathlib import Path

import google.auth
from dotenv import load_dotenv
from google.adk.agents import Agent
from weather_agent.tool import get_weather

# Load environment variables from .env file in root directory
root_dir = Path(__file__).parent.parent
dotenv_path = root_dir / ".env"
load_dotenv(dotenv_path=dotenv_path)


# Use default project from credentials if not in .env
_, project_id = google.auth.default()
os.environ.setdefault("GOOGLE_CLOUD_PROJECT", project_id)
os.environ.setdefault("GOOGLE_CLOUD_LOCATION", "global")
os.environ.setdefault("GOOGLE_GENAI_USE_VERTEXAI", "True")

root_agent = Agent(
    name="weather_agent",
    model="gemini-2.5-flash",
    instruction="""
You are a helpful AI assistant designed to provide accurate and useful information.
""",
    tools=[get_weather],
)

Пояснение к коду ADK

Этот скрипт содержит инициализацию нашего агента, в ходе которой мы выполняем следующие действия:

  • Установите модель для использования: gemini-2.5-flash
  • Предоставьте инструменту get_weather поддержку функциональности агента в качестве агента погоды.

Запустите веб-интерфейс

Теперь мы можем взаимодействовать с агентом и локально изучать его поведение. ADK позволяет нам использовать веб-интерфейс для разработки, чтобы взаимодействовать с ним и отслеживать происходящее во время взаимодействия. Выполните следующую команду, чтобы запустить локальный сервер пользовательского интерфейса для разработки.

uv run adk web --port 8080

Результат будет выглядеть примерно так, как в следующем примере, это означает, что мы уже можем получить доступ к веб-интерфейсу.

INFO:     Started server process [xxxx]
INFO:     Waiting for application startup.

+-----------------------------------------------------------------------------+
| ADK Web Server started                                                      |
|                                                                             |
| For local testing, access at http://localhost:8080.                         |
+-----------------------------------------------------------------------------+

INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8080 (Press CTRL+C to quit)

Чтобы проверить это, нажмите кнопку « Предварительный просмотр веб-страниц» в верхней части редактора Cloud Shell и выберите «Предварительный просмотр на порту 8080».

edc73e971b9fc60c.png

Вы увидите следующую веб-страницу, где сможете выбрать доступных агентов в выпадающем списке в верхнем левом углу (в нашем случае это должен быть weather_agent ) и взаимодействовать с ботом. В левом окне вы увидите подробную информацию о логах во время работы агента.

25999e0b71c3989.png

Теперь попробуйте взаимодействовать с ним. На левой панели мы можем просмотреть трассировку для каждого входного сигнала, чтобы понять, сколько времени требуется агенту для выполнения каждого действия, прежде чем сформировать окончательный ответ.

b4ba38adf419017e.png

Это одна из функций мониторинга, встроенных в ADK, в настоящее время мы изучаем её локально. Позже мы увидим, как она интегрирована в Cloud Tracing, чтобы у нас была централизованная трассировка всех запросов.

4. 🚀 Развертывание в Cloud Run

Теперь давайте развернем этот агентский сервис в Cloud Run. В рамках этой демонстрации сервис будет предоставлен как общедоступный, к которому смогут получить доступ другие пользователи. Однако имейте в виду, что это не является лучшей практикой, поскольку это небезопасно.

20d503f01eaadfd.jpeg

В этом практическом занятии мы будем использовать Dockerfile для развертывания нашего агента в Cloud Run. На данный момент у нас уже есть все необходимые файлы ( Dockerfile и server.py ) для развертывания наших приложений в Cloud Run. Мы обсудим это подробнее позже.

Теперь давайте сначала развернем сервис. Перейдите в терминал Cloud Shell и убедитесь, что текущий проект настроен на ваш активный проект. Если нет, используйте команду gcloud configure для установки идентификатора проекта:

gcloud config set project [PROJECT_ID]

Теперь нам нужно снова открыть файл .env , и вы увидите, что нам нужно раскомментировать переменную DB_CONNECTION_NAME и заполнить её правильным значением.

# Google Cloud and Vertex AI configuration
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=global
GOOGLE_GENAI_USE_VERTEXAI=True

# Database connection for session service
DB_CONNECTION_NAME=your-db-connection-name

Чтобы получить значение DB_CONNECTION_NAME , снова перейдите в Cloud SQL и щелкните созданный вами экземпляр. Перейдите к строке поиска в верхней части консоли Cloud и введите «Cloud SQL». Затем щелкните продукт Cloud SQL .

39dbcf39661a8b65.png

После этого вы увидите ранее созданный экземпляр, щелкните по нему.

8faf706622293e9a.png

На странице экземпляра прокрутите вниз до раздела « Подключиться к этому экземпляру », и вы сможете скопировать имя подключения , чтобы заменить им значение DB_CONNECTION_NAME .

d669fc62ae37ab7d.png

После этого откройте файл .env и измените переменную DB_CONNECTION_NAME . Ваш файл env должен выглядеть примерно так, как показано в примере ниже.

# Google Cloud and Vertex AI configuration
GOOGLE_CLOUD_PROJECT=your-project-id
GOOGLE_CLOUD_LOCATION=global
GOOGLE_GENAI_USE_VERTEXAI=True

# Database connection for session service
DB_CONNECTION_NAME=your-project-id:your-location:your-instance-name

После этого запустите скрипт развертывания.

bash deploy_to_cloudrun.sh

Если появится запрос на подтверждение создания реестра артефактов для репозитория Docker, просто ответьте «Да».

Пока мы ждём завершения процесса развертывания, давайте взглянем на скрипт deploy_to_cloudrun.sh.

#!/bin/bash

# Load environment variables from .env file
if [ -f .env ]; then
    export $(cat .env | grep -v '^#' | xargs)
else
    echo "Error: .env file not found"
    exit 1
fi

# Validate required variables
required_vars=("GOOGLE_CLOUD_PROJECT" "DB_CONNECTION_NAME")
for var in "${required_vars[@]}"; do
    if [ -z "${!var}" ]; then
        echo "Error: $var is not set in .env file"
        exit 1
    fi
done

gcloud run deploy weather-agent \
    --source . \
    --port 8080 \
    --project ${GOOGLE_CLOUD_PROJECT} \
    --allow-unauthenticated \
    --add-cloudsql-instances ${DB_CONNECTION_NAME} \
    --update-env-vars SESSION_SERVICE_URI="postgresql+pg8000://postgres:ADK-deployment123@postgres/?unix_sock=/cloudsql/${DB_CONNECTION_NAME}/.s.PGSQL.5432",GOOGLE_CLOUD_PROJECT=${GOOGLE_CLOUD_PROJECT} \
    --region us-central1 \
    --min 1 \
    --memory 1G \
    --concurrency 10

Этот скрипт загрузит вашу переменную .env , а затем выполнит команду развертывания.

Если присмотреться, нам нужна всего одна команда `gcloud run deploy`, чтобы выполнить все необходимые действия для развертывания сервиса: сборку образа, отправку в реестр, развертывание сервиса, настройку политики IAM, создание ревизии и даже маршрутизацию трафика. В этом примере у нас уже есть Dockerfile, поэтому эта команда будет использовать его для сборки приложения.

После завершения развертывания вы должны получить ссылку, похожую на приведенную ниже:

https://weather-agent-*******.us-central1.run.app

Получив этот URL-адрес, вы можете использовать свое приложение в режиме инкогнито или на мобильном устройстве и получить доступ к пользовательскому интерфейсу разработчика агента. Пока ожидается развертывание, давайте рассмотрим подробную информацию о службе, которую мы только что развернули, в следующем разделе.

5. 💡 Dockerfile и скрипт бэкэнд-сервера

Чтобы сделать агента доступным в качестве сервиса, мы обернем его в приложение FastAPI, которое будет запускаться по команде Dockerfile. Ниже приведено содержимое Dockerfile.

FROM python:3.12-slim

RUN pip install --no-cache-dir uv==0.7.13

WORKDIR /app

COPY . .

RUN uv sync --frozen

EXPOSE 8080

CMD ["uv", "run", "uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8080"]

Здесь мы можем настроить необходимые службы для поддержки агента, например, подготовить службы сессий , памяти или артефактов для использования в производственной среде. Вот код файла server.py , который будет использоваться.

import os

from dotenv import load_dotenv
from fastapi import FastAPI
from google.adk.cli.fast_api import get_fast_api_app
from pydantic import BaseModel
from typing import Literal
from google.cloud import logging as google_cloud_logging


# Load environment variables from .env file
load_dotenv()

logging_client = google_cloud_logging.Client()
logger = logging_client.logger(__name__)

AGENT_DIR = os.path.dirname(os.path.abspath(__file__))

# Get session service URI from environment variables
session_uri = os.getenv("SESSION_SERVICE_URI", None)

# Prepare arguments for get_fast_api_app
app_args = {"agents_dir": AGENT_DIR, "web": True, "trace_to_cloud": True}

# Only include session_service_uri if it's provided
if session_uri:
    app_args["session_service_uri"] = session_uri
else:
    logger.log_text(
        "SESSION_SERVICE_URI not provided. Using in-memory session service instead. "
        "All sessions will be lost when the server restarts.",
        severity="WARNING",
    )

# Create FastAPI app with appropriate arguments
app: FastAPI = get_fast_api_app(**app_args)

app.title = "weather-agent"
app.description = "API for interacting with the Agent weather-agent"


class Feedback(BaseModel):
    """Represents feedback for a conversation."""

    score: int | float
    text: str | None = ""
    invocation_id: str
    log_type: Literal["feedback"] = "feedback"
    service_name: Literal["weather-agent"] = "weather-agent"
    user_id: str = ""


# Example if you want to add your custom endpoint
@app.post("/feedback")
def collect_feedback(feedback: Feedback) -> dict[str, str]:
    """Collect and log feedback.

    Args:
        feedback: The feedback data to log

    Returns:
        Success message
    """
    logger.log_struct(feedback.model_dump(), severity="INFO")
    return {"status": "success"}


# Main execution
if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8080)

Пояснение к серверному коду

Вот параметры, которые определены в скрипте server.py :

  1. Преобразуем наш агент в приложение FastAPI, используя метод get_fast_api_app . Таким образом, мы унаследуем то же определение маршрута, которое используется для пользовательского интерфейса веб-разработки.
  2. Настройте необходимые службы для работы с сессиями, памятью или артефактами, добавив ключевые аргументы к методу get_fast_api_app . В этом руководстве, если мы настроим переменную окружения SESSION_SERVICE_URI , служба сессий будет использовать её, в противном случае она будет использовать сессию в памяти.
  3. Мы можем добавить пользовательский маршрут для поддержки другой бизнес-логики бэкэнда; в скрипте мы добавляем маршрут для функциональности обратной связи, например.
  4. Включите трассировку облака в параметре get_fast_api_app , чтобы отправлять трассировку в Google Cloud Trace.
  5. Запустите сервис FastAPI с помощью uvicorn.

Если развертывание уже завершено, попробуйте взаимодействовать с агентом через веб-интерфейс разработчика, перейдя по URL-адресу Cloud Run.

6. 🚀 Проверка автоматического масштабирования Cloud Run с помощью нагрузочного тестирования

Теперь рассмотрим возможности автоматического масштабирования Cloud Run. Для этого сценария развернем новую версию, включив ограничение на максимальное количество параллельных экземпляров. В предыдущем разделе мы установили максимальное количество параллельных экземпляров равным 10 (флаг --concurrency 10 ). Следовательно, можно ожидать, что Cloud Run попытается масштабировать свой экземпляр при проведении нагрузочного тестирования, превышающего это число.

Давайте рассмотрим файл load_test.py . Это скрипт, который мы будем использовать для нагрузочного тестирования с помощью фреймворка Locust . Этот скрипт выполнит следующие действия:

  1. Случайные значения user_id и session_id
  2. Создайте session_id для user_id.
  3. Обратитесь к конечной точке "/run_sse", используя созданные user_id и session_id.

Нам потребуется URL-адрес развернутой нами службы, если вы его пропустили. Перейдите в консоль Cloud Run и щелкните по службе weather-agent.

979ec433acc4e35f.png

Затем найдите свою службу метеорологического агентства и нажмите на неё.

6f0874f1e96cdbd6.png

URL-адрес сервиса будет отображаться рядом с информацией о регионе. Например:

6d0823829ee15d1.png

Затем выполните следующую команду для проведения нагрузочного тестирования.

uv run locust -f load_test.py \
              -H {YOUR_SERVICE_URL} \
              -u 60 \
              -r 5 \
              -t 120 \
              --headless

При запуске программы вы увидите метрики, подобные этим. (В этом примере все запросы выполнены успешно)

Type     Name                                  # reqs      # fails |    Avg     Min     Max    Med |   req/s  failures/s
--------|------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
POST     /run_sse end                             813     0(0.00%) |   5817    2217   26421   5000 |    6.79        0.00
POST     /run_sse message                         813     0(0.00%) |   2678    1107   17195   2200 |    6.79        0.00
--------|------------------------------------|-------|-------------|-------|-------|-------|-------|--------|-----------
         Aggregated                              1626     0(0.00%) |   4247    1107   26421   3500 |   13.59        0.00  

Давайте посмотрим, что произошло в Cloud Run. Снова перейдите к развернутой службе и посмотрите на панель мониторинга. Там будет показано, как Cloud Run автоматически масштабирует экземпляр для обработки входящих запросов. Поскольку мы ограничиваем максимальное количество параллельных запросов до 10 на экземпляр, экземпляр Cloud Run попытается автоматически скорректировать количество контейнеров, чтобы удовлетворить это условие.

a23679982c072041.png

7. 🚀 Постепенный выпуск новых версий

Теперь рассмотрим следующий сценарий. Мы хотим обновить подсказку агента. Откройте файл weather_agent/agent.py и замените его следующим кодом:

# weather_agent/agent.py

import os
from pathlib import Path

import google.auth
from dotenv import load_dotenv
from google.adk.agents import Agent
from weather_agent.tool import get_weather

# Load environment variables from .env file in root directory
root_dir = Path(__file__).parent.parent
dotenv_path = root_dir / ".env"
load_dotenv(dotenv_path=dotenv_path)


# Use default project from credentials if not in .env
_, project_id = google.auth.default()
os.environ.setdefault("GOOGLE_CLOUD_PROJECT", project_id)
os.environ.setdefault("GOOGLE_CLOUD_LOCATION", "global")
os.environ.setdefault("GOOGLE_GENAI_USE_VERTEXAI", "True")

root_agent = Agent(
    name="weather_agent",
    model="gemini-2.5-flash",
    instruction="""
You are a helpful AI assistant designed to provide accurate and useful information.
You only answer inquiries about the weather. Refuse all other user query
""",
    tools=[get_weather],
)

Итак, вы хотите выпустить новые ревизии, но не хотите, чтобы весь трафик запросов направлялся напрямую на новую версию. Мы можем осуществить поэтапный выпуск с помощью Cloud Run. Сначала нам нужно развернуть новую ревизию, но с флагом –no-traffic . Сохраните предыдущий скрипт агента и выполните следующую команду.

gcloud run deploy weather-agent \
                  --source . \
                  --port 8080 \
                  --project {YOUR_PROJECT_ID} \
                  --allow-unauthenticated \
                  --region us-central1 \
                  --no-traffic

После завершения вы получите аналогичный журнал, как и в предыдущем процессе развертывания, но с той разницей, что будет отображаться количество обработанного трафика. В нем будет показано 0% обработанного трафика.

Service [weather-agent] revision [weather-agent-xxxx-xxx] has been deployed and is serving 0 percent of traffic.

Далее перейдем на страницу продукта Cloud Run и найдем развернутый вами экземпляр. Введите «Cloud Run» в строку поиска и щелкните по продукту Cloud Run.

979ec433acc4e35f.png

Затем найдите свою службу метеорологического агентства и нажмите на неё.

6f0874f1e96cdbd6.png

Перейдите на вкладку «Ревизии» , и вы увидите там список развернутых ревизий.

de00ac6870ed120b.png

Вы увидите, что новые развернутые версии обслуживают 0%, отсюда вы можете нажать кнопку с изображением шашлычка (⋮) и выбрать «Управление трафиком».

f35344086aecc5e6.png

В появившемся окне вы можете изменить процент трафика, направляемого на те или иные версии.

525ae793ebeee87f.png

После некоторого ожидания трафик будет распределен пропорционально в соответствии с заданными процентными настройками. Таким образом, мы сможем легко вернуться к предыдущим версиям, если что-то случится с новым релизом.

8. 🚀 Отслеживание ADK

Агенты, созданные с использованием ADK, уже поддерживают трассировку с помощью встроенной открытой телеметрии. У нас есть Cloud Trace для сбора и визуализации этих данных. Давайте посмотрим в файле server.py , как мы включаем эту функцию в нашем ранее развернутом сервисе.

# server.py

...

app_args = {"agents_dir": AGENT_DIR, "web": True, "trace_to_cloud": True}

...

app: FastAPI = get_fast_api_app(**app_args)

...

Здесь мы передаем аргумент trace_to_cloud со значением True . Если вы развертываете систему с другими параметрами, вы можете ознакомиться с этой документацией для получения более подробной информации о том, как включить трассировку в Cloud Trace из различных вариантов развертывания.

Попробуйте получить доступ к веб-интерфейсу разработчика вашей службы и пообщайтесь с агентом. После этого перейдите в строку поиска консоли облака, введите «trace explorer» и выберите продукт Trace Explorer .

8d6786e232c8fd40.png

На странице просмотра трассировки вы увидите, что наша переписка с агентом отправлена. В разделе «Имя сегмента» вы можете отфильтровать сегмент, относящийся к нашему агенту (он называется agent_run [weather_agent] ).

ab15b7e94ae72e85.png

После фильтрации трассировок вы также можете просмотреть каждую из них напрямую. Будет показана подробная продолжительность каждого действия, выполненного агентом. Например, посмотрите изображения ниже.

6258b48344a61a4b.png

92ab222ff1200011.png

В каждом разделе вы можете просмотреть подробную информацию в атрибутах, как показано ниже.

8b19a748d40276cb.png

Вот и все, теперь у нас есть хорошая возможность наблюдения и информация о каждом взаимодействии нашего агента с пользователем, что поможет в отладке проблем. Смело пробуйте различные инструменты или рабочие процессы!

9. 🎯 Вызов

Попробуйте использовать многоагентные или агентные рабочие процессы, чтобы посмотреть, как они работают под нагрузкой и как выглядит трассировка.

10. 🧹 Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этом практическом задании, выполните следующие действия:

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
  2. В списке проектов выберите проект, который хотите удалить, и нажмите кнопку «Удалить» .
  3. В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить» , чтобы удалить проект.
  4. В качестве альтернативы вы можете перейти в Cloud Run в консоли, выбрать только что развернутую службу и удалить ее.