1. Введение
Это руководство поможет вам развернуть, управлять и отслеживать работу мощного агента, созданного с помощью Agent Development Kit (ADK) в Google Cloud Run. ADK позволяет создавать агенты, способные выполнять сложные многоагентные рабочие процессы. Используя Cloud Run, полностью управляемую бессерверную платформу, вы можете развернуть свой агент как масштабируемое контейнерное приложение, не беспокоясь о базовой инфраструктуре. Это мощное сочетание позволяет вам сосредоточиться на базовой логике агента, используя при этом преимущества надежной и масштабируемой среды Google Cloud.
В этом руководстве мы рассмотрим бесшовную интеграцию ADK с Cloud Run. Вы научитесь разворачивать агент, а затем погрузитесь в практические аспекты управления приложением в условиях, приближенных к производственным. Мы расскажем, как безопасно развертывать новые версии агента, управляя трафиком, что позволит вам тестировать новые функции на ограниченной группе пользователей перед полным релизом.
Кроме того, вы получите практический опыт мониторинга производительности вашего агента. Мы смоделируем реальную ситуацию, проведя нагрузочный тест, чтобы оценить возможности автоматического масштабирования Cloud Run в действии. Для более глубокого понимания поведения и производительности вашего агента мы включим трассировку с помощью Cloud Trace. Это обеспечит детальное сквозное представление о запросах, проходящих через агента, что позволит вам выявить и устранить любые узкие места производительности. К концу этого руководства вы получите полное представление о том, как эффективно развертывать, управлять и контролировать агенты на базе ADK в Cloud Run.
В ходе выполнения лабораторной работы вы будете применять следующий пошаговый подход:
- Создайте базу данных PostgreSQL в CloudSQL, которая будет использоваться для сеанса службы базы данных агента ADK.
- Настройте базовый агент ADK
- Настройка службы сеанса базы данных для использования диспетчером ADK
- Первоначальное развертывание агента в облаке.
- Нагрузочное тестирование и проверка автоматического масштабирования в облаке
- Разверните новую версию агента и постепенно увеличивайте трафик на новые версии.
- Настройте облачную трассировку и проверьте трассировку запуска агента
Обзор архитектуры
Предпосылки
- Удобная работа с Python
- Понимание базовой архитектуры полного стека с использованием HTTP-сервиса
Чему вы научитесь
- Структура АДК и местные коммуникации
- Настройка агента ADK с помощью службы сеанса базы данных
- Настройка PostgreSQL в CloudSQL для использования службой сеанса базы данных
- Разверните приложение в Cloud Run с помощью Dockerfile и настройте начальные переменные среды.
- Настройка и тестирование автоматического масштабирования Cloud Run с помощью нагрузочного тестирования
- Стратегия постепенного выпуска с Cloud Run
- Настройте трассировку агента ADK в Cloud Trace
Что вам понадобится
- веб-браузер Chrome
- Аккаунт Gmail
- Облачный проект с включенным биллингом
Эта лабораторная работа, предназначенная для разработчиков любого уровня (включая новичков), использует Python в качестве примера приложения. Однако для понимания представленных концепций знание Python не требуется.
2. Прежде чем начать
Выберите активный проект в облачной консоли.
В этой лабораторной работе предполагается, что у вас уже есть проект Google Cloud с активированной функцией оплаты. Если у вас его ещё нет, следуйте инструкциям ниже, чтобы начать работу.
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
Подготовка базы данных Cloud SQL
Нам понадобится база данных, которую позже будет использовать агент ADK. Давайте создадим базу данных PostgreSQL в Cloud SQL. Для начала перейдите в строку поиска в верхней части облачной консоли и введите «cloud sql». Затем выберите продукт Cloud SQL .
После этого нам нужно будет создать новый экземпляр базы данных, нажимаем « Создать экземпляр» и выбираем PostgreSQL.
Вам также может потребоваться включить API Compute Engine, если вы начинаете новый проект. Просто нажмите « Включить API», если появится такое сообщение.
Далее выберем характеристики базы данных, выбираем редакцию Enterprise с предустановкой Sandbox Edition.
После этого задайте имя экземпляра и пароль по умолчанию для пользователя postgres . Вы можете указать любые учётные данные, но в рамках данного руководства мы используем adk-deployment в качестве имени экземпляра и пароля.
Давайте используем us-central1 с одной зоной для этого руководства, затем мы можем завершить создание нашей базы данных и позволить ей завершить всю необходимую настройку, нажав кнопку «Создать экземпляр» .
Пока мы ждем окончания этого, мы можем перейти к следующему разделу.
Настройка облачного проекта в Cloud Shell Terminal
- Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud. Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud.
- После подключения к Cloud Shell вы проверяете, что вы уже прошли аутентификацию и что проекту присвоен ваш идентификатор проекта, с помощью следующей команды:
gcloud auth list
- Выполните следующую команду в Cloud Shell, чтобы подтвердить, что команда gcloud знает о вашем проекте.
gcloud config list project
- Если ваш проект не настроен, используйте следующую команду для его настройки:
gcloud config set project <YOUR_PROJECT_ID>
Кроме того, вы также можете увидеть идентификатор PROJECT_ID
в консоли.
Нажмите на нее, и справа вы увидите все данные вашего проекта и его идентификатор.
- Включите необходимые API с помощью команды, показанной ниже. Это может занять несколько минут, поэтому, пожалуйста, наберитесь терпения.
gcloud services enable aiplatform.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudresourcemanager.googleapis.com \
sqladmin.googleapis.com
При успешном выполнении команды вы должны увидеть сообщение, похожее на показанное ниже:
Operation "operations/..." finished successfully.
Альтернативой команде gcloud является поиск каждого продукта через консоль или использование этой ссылки .
Если какой-либо API отсутствует, вы всегда можете включить его в ходе реализации.
Информацию о командах и использовании gcloud см. в документации .
Перейдите в редактор Cloud Shell и настройте рабочий каталог приложения.
Теперь мы можем настроить наш редактор кода для написания кода. Для этого мы будем использовать Cloud Shell Editor.
- Нажмите кнопку «Открыть редактор», откроется редактор Cloud Shell, где мы можем написать наш код.
- Убедитесь, что проект Cloud Code выбран в левом нижнем углу (строке состояния) редактора Cloud Shell, как показано на изображении ниже, и соответствует активному проекту Google Cloud, для которого включена оплата. При необходимости авторизуйтесь . Если вы уже выполнили предыдущую команду, кнопка может указывать непосредственно на ваш активированный проект, а не на кнопку входа.
- Далее клонируем рабочий каталог шаблона для этой практической работы с Github, выполнив следующую команду. Она создаст рабочий каталог в каталоге deploy_and_manage_adk.
git clone https://github.com/alphinside/deploy-and-manage-adk-service.git deploy_and_manage_adk
- После этого перейдите в верхнюю часть редактора Cloud Shell и выберите Файл -> Открыть папку, найдите каталог с именем пользователя , а затем каталог deploy_and_manage_adk и нажмите кнопку «ОК». Выбранный каталог станет основным рабочим каталогом. В этом примере имя пользователя — alvinprayuda , поэтому путь к каталогу показан ниже.
Теперь ваш редактор Cloud Shell должен выглядеть так.
Далее мы можем настроить нашу среду Python.
Настройка среды
Подготовка виртуальной среды Python
Следующий шаг — подготовка среды разработки. Текущий рабочий каталог активного терминала должен находиться внутри рабочего каталога deploy_and_manage_adk . В этой лабораторной работе мы будем использовать Python 3.12 и менеджер проектов UV Python для упрощения создания и управления версиями Python и виртуальными средами.
- Если вы еще не открыли терминал, откройте его, нажав «Терминал» -> «Новый терминал» или используйте сочетание клавиш Ctrl + Shift + C. Это откроет окно терминала в нижней части браузера.
- Загрузите
uv
и установите Python 3.12 с помощью следующей команды
curl -LsSf https://astral.sh/uv/0.6.16/install.sh | sh && \
source $HOME/.local/bin/env && \
uv python install 3.12
- Теперь инициализируем виртуальную среду с помощью
uv
. Выполните эту команду.
uv sync --frozen
Это создаст каталог .venv и установит зависимости. Быстрый просмотр файла pyproject.toml даст вам информацию о зависимостях, показанных следующим образом.
dependencies = [ "google-adk==1.3.0", "locust==2.37.10", "pg8000==1.31.2", "python-dotenv==1.1.0", ]
- Чтобы протестировать виртуальное окружение, создайте новый файл main.py и скопируйте следующий код.
def main():
print("Hello from deploy_and_manage_adk!")
if __name__ == "__main__":
main()
- Затем выполните следующую команду
uv run main.py
Вы получите вывод, как показано ниже.
Using CPython 3.12 Creating virtual environment at: .venv Hello from deploy_and_manage_adk!
Это показывает, что проект Python настраивается правильно.
Файлы конфигурации установки
Теперь нам необходимо настроить файлы конфигурации для этого проекта.
Переименуйте файл .env.example в .env , и он отобразит значение, указанное ниже. Обновите значение GOOGLE_CLOUD_PROJECT на идентификатор вашего проекта.
# 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 # SESSION_SERVICE_URI=postgresql+pg8000://<username>:<password>@/<database>?unix_sock=/cloudsql/<instance_connection_name>/.s.PGSQL.5432
В этой практической работе мы используем предустановленные значения для GOOGLE_CLOUD_LOCATION
и GOOGLE_GENAI_USE_VERTEXAI.
SESSION_SERVICE_URI
пока оставим закомментированным.
Теперь мы можем перейти к следующему шагу: проверить логику агента и развернуть ее.
3. Создайте Weather Agent с помощью ADK и Gemini 2.5
Введение в структуру каталогов ADK
Давайте начнём с изучения возможностей ADK и способов создания агента. Полную документацию ADK можно найти по этой ссылке . ADK предлагает множество утилит для выполнения команд CLI. Вот некоторые из них:
- Настройте структуру каталога агентов
- Быстро попробуйте взаимодействие через ввод-вывод CLI
- Быстрая настройка локального веб-интерфейса разработки
Теперь давайте проверим структуру агента в каталоге weather_agent.
weather_agent/ ├── __init__.py ├── agent.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 google.cloud import logging as google_cloud_logging
# 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")
logging_client = google_cloud_logging.Client()
logger = logging_client.logger("weather-agent")
def get_weather(city: str) -> dict:
"""Retrieves the current weather report for a specified city.
Args:
city (str): The name of the city (e.g., "New York", "London", "Tokyo").
Returns:
dict: A dictionary containing the weather information.
Includes a 'status' key ('success' or 'error').
If 'success', includes a 'report' key with weather details.
If 'error', includes an 'error_message' key.
"""
logger.log_text(
f"--- Tool: get_weather called for city: {city} ---", severity="INFO"
) # Log tool execution
city_normalized = city.lower().replace(" ", "") # Basic normalization
# Mock weather data
mock_weather_db = {
"newyork": {
"status": "success",
"report": "The weather in New York is sunny with a temperature of 25°C.",
},
"london": {
"status": "success",
"report": "It's cloudy in London with a temperature of 15°C.",
},
"tokyo": {
"status": "success",
"report": "Tokyo is experiencing light rain and a temperature of 18°C.",
},
}
if city_normalized in mock_weather_db:
return mock_weather_db[city_normalized]
else:
return {
"status": "error",
"error_message": f"Sorry, I don't have weather information for '{city}'.",
}
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».
Вы увидите следующую веб-страницу, где можно выбрать доступных агентов в раскрывающемся списке слева вверху (в нашем случае это должен быть weather_agent ) и взаимодействовать с ботом. В левом окне вы увидите множество информации о журнале работы агента.
Теперь попробуйте взаимодействовать с ним. На левой панели мы можем просмотреть трассировку для каждого входного сигнала, чтобы понять, сколько времени занимает каждое действие, выполняемое агентом, прежде чем сформировать окончательный ответ.
Это одна из функций наблюдения, встроенных в ADK. Сейчас мы проверяем её локально. Позже мы рассмотрим, как она интегрируется в Cloud Tracing, чтобы обеспечить централизованное отслеживание всех запросов.
4. Скрипт внутреннего сервера
Чтобы сделать агент доступным как сервис, мы обернём его в приложение FastAPI. Здесь мы можем настроить необходимые сервисы для поддержки агента, например, подготовить сервисы Session , Memory или Artifact для использования в производственной среде. Вот код файла 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
from tracing import CloudTraceLoggingSpanExporter
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider, export
# 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}
# 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",
)
provider = TracerProvider()
processor = export.BatchSpanProcessor(CloudTraceLoggingSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
# 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 = ""
@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 :
- Конвертируем наш агент в приложение FastAPI с помощью метода
get_fast_api_app
. Таким образом, мы унаследуем то же определение маршрута, которое используется для пользовательского интерфейса веб-разработки. - Настройте необходимые службы сеанса, памяти или артефакта, добавив ключевые аргументы в метод
get_fast_api_app
. В этом руководстве, если мы настроим переменную окруженияSESSION_SERVICE_URI
, служба сеанса будет использовать её, в противном случае она будет использовать сеанс в памяти. - Мы можем добавить пользовательский маршрут для поддержки другой бэкэнд-бизнес-логики, в скрипте мы добавляем пример маршрута функциональности обратной связи.
- Включить облачную трассировку для отправки трассировки в Google Cloud Trace
5. Развертывание в Cloud Run
Теперь развернём этот агентский сервис в Cloud Run. В целях демонстрации этот сервис будет представлен как публичный, к которому смогут получить доступ другие пользователи. Однако имейте в виду, что это не лучший вариант, поскольку он небезопасен.
В этой лабораторной работе мы будем использовать Dockerfile для развертывания нашего агента в Cloud Run. Ниже представлено содержимое 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"]
На этом этапе у нас уже есть все файлы, необходимые для развертывания наших приложений в Cloud Run. Давайте развернём их. Перейдите в терминал Cloud Shell и убедитесь, что текущий проект настроен на ваш активный проект. Если нет, используйте команду gcloud configure, чтобы задать идентификатор проекта:
gcloud config set project [PROJECT_ID]
Затем выполните следующую команду, чтобы развернуть его в Cloud Run.
gcloud run deploy weather-agent \
--source . \
--port 8080 \
--project {YOUR_PROJECT_ID} \
--allow-unauthenticated \
--add-cloudsql-instances {YOUR_DB_CONNECTION_NAME} \
--update-env-vars SESSION_SERVICE_URI="postgresql+pg8000://postgres:{YOUR_DEFAULT_USER_PASS}@postgres/?unix_sock=/cloudsql/{YOUR_DB_CONNECTION_NAME}/.s.PGSQL.5432",GOOGLE_CLOUD_PROJECT={YOUR_PROJECT_ID} \
--region us-central1
Чтобы получить значение {YOUR_DB_CONNECTION_NAME} , снова перейдите в Cloud SQL и нажмите на созданный вами экземпляр. На странице экземпляра прокрутите вниз до раздела « Подключиться к этому экземпляру » и скопируйте имя подключения, чтобы заменить его значением {YOUR_DB_CONNECTION_NAME} . Например, см. изображение ниже.
Если вам будет предложено подтвердить создание реестра артефактов для репозитория Docker, просто ответьте Y. Обратите внимание, что мы разрешаем доступ без аутентификации, поскольку это демонстрационное приложение. Рекомендуется использовать соответствующую аутентификацию для ваших корпоративных и производственных приложений.
После завершения развертывания вы должны получить ссылку, похожую на приведенную ниже:
https://weather-agent-*******.us-central1.run.app
Продолжайте использовать приложение в режиме инкогнито или на мобильном устройстве. Оно уже должно быть доступно.
6. Проверка автоматического масштабирования Cloud Run с помощью нагрузочного тестирования
Теперь мы рассмотрим возможности автоматического масштабирования в Cloud Run. В этом сценарии развернём новую версию, включив максимальное количество параллельных процессов на экземпляр. Выполните следующую команду:
gcloud run deploy weather-agent \
--source . \
--port 8080 \
--project {YOUR_PROJECT_ID} \
--allow-unauthenticated \
--region us-central1 \
--concurrency 10
После этого давайте проверим файл load_test.py . Это скрипт, который мы будем использовать для нагрузочного тестирования с использованием фреймворка Locust . Он выполняет следующие действия:
- Рандомизированные user_id и session_id
- Создайте session_id для user_id
- Перейдите в конечную точку "/run_sse" с созданными user_id и session_id.
Нам понадобится URL-адрес нашего развернутого сервиса, если вы его пропустили. Перейдите в консоль Cloud Run и выберите ваш сервис Weather Agent.
Затем найдите службу прогноза погоды и нажмите на нее.
URL-адрес сервиса будет отображаться рядом с информацией о регионе. Например:
Затем выполните следующую команду для выполнения нагрузочного теста.
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 попытается автоматически скорректировать количество контейнеров для удовлетворения этого условия.
7. Постепенный выпуск новых версий
Теперь рассмотрим следующий сценарий. Мы хотим обновить подсказку агента следующим образом:
# agent.py
...
root_agent = Agent(
name="weather_agent",
model="gemini-2.5-flash-preview-05-20",
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],
)
Затем вы хотите выпустить новые версии, но не хотите, чтобы весь трафик запросов напрямую направлялся в новую версию. Мы можем выполнить постепенный выпуск с помощью облачного запуска. Сначала нам нужно развернуть новую версию, но с флагом --no-traffic . Сохраните предыдущий скрипт агента и выполните следующую команду.
gcloud run deploy weather-agent \
--source . \
--port 8080 \
--project {YOUR_PROJECT_ID} \
--allow-unauthenticated \
--region us-central1 \
--no-traffic
После завершения вы получите аналогичный журнал, как и в предыдущем процессе развёртывания, но с разницей в количестве обслуженного трафика. Он покажет 0 процентов обслуженного трафика.
Далее перейдем на страницу продукта Cloud Run и найдем ваш развернутый экземпляр. Введите «cloud run» в строке поиска и выберите продукт Cloud Run.
Затем найдите службу прогноза погоды и нажмите на нее.
Перейдите на вкладку «Ревизии» , и вы увидите список развернутых ревизий.
Вы увидите, что новые развернутые версии обслуживают 0%, отсюда вы можете нажать кнопку с кебабом (⋮) и выбрать «Управление трафиком».
В открывшемся окне вы можете редактировать процент трафика, который будет направляться на те или иные ревизии.
Через некоторое время трафик будет распределен пропорционально в соответствии с процентными настройками. Таким образом, мы сможем легко вернуться к предыдущим версиям, если что-то случится с новым релизом.
8. Отслеживание ADK
Агенты, созданные с помощью ADK, уже поддерживают трассировку, используя встроенную открытую телеметрию. Для сбора и визуализации этих данных используется Cloud Trace. Давайте рассмотрим файл server.py и рассмотрим, как мы включаем эту функцию в нашем ранее развёрнутом сервисе.
# server.py
from tracing import CloudTraceLoggingSpanExporter
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider, export
...
provider = TracerProvider()
processor = export.BatchSpanProcessor(CloudTraceLoggingSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
...
Здесь мы инициализируем трассировщик и экспортёр. Подробную информацию об экспортёре можно найти в файле tracing.py . Здесь мы создаём собственный экспортёр, поскольку существует ограничение на объём данных трассировки, экспортируемых в Cloud Trace. Для этой возможности трассировки мы используем реализацию из https://googlecloudplatform.github.io/agent-starter-pack/guide/observability.html .
Попробуйте открыть веб-интерфейс разработчика вашего сервиса и пообщаться с агентом. После этого перейдите в строку поиска Cloud Console, введите «trace explorer» и выберите продукт Trace Explorer .
На странице проводника трассировки вы увидите, что наша беседа с агентом отправлена. Вы можете посмотреть её в разделе «Имя диапазона» и отфильтровать диапазон, специфичный для нашего агента (он называется agent_run [weather_agent]
).
Когда интервалы уже отфильтрованы, вы также можете напрямую просматривать каждую трассировку. Она будет отображать подробную длительность каждого действия, выполненного агентом. Например, см. изображения ниже.
В каждом разделе вы можете просмотреть подробную информацию об атрибутах, как показано ниже.
Итак, теперь у нас есть хорошая наблюдаемость и информация о каждом взаимодействии нашего агента с пользователем, что позволяет отлаживать проблемы. Смело пробуйте различные инструменты и рабочие процессы!
9. Вызов
Попробуйте многоагентные или агентные рабочие процессы, чтобы увидеть, как они работают под нагрузкой и как выглядит трассировка.
10. Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, используемые в этой лабораторной работе, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу Управление ресурсами .
- В списке проектов выберите проект, который вы хотите удалить, а затем нажмите Удалить .
- В диалоговом окне введите идентификатор проекта, а затем нажмите кнопку «Завершить» , чтобы удалить проект.
- Либо вы можете перейти в Cloud Run на консоли, выбрать службу, которую вы только что развернули, и удалить ее.