1. Обзор
В этом практическом занятии вы создадите агента для анализа данных, который будет запрашивать реальные данные из общедоступных наборов данных BigQuery и запоминать ваши предпочтения между сессиями. Затем вы развернете его в Agent Runtime, полностью управляемом сервисе Google Cloud, который занимается инфраструктурой, масштабированием и управлением сессиями.
Агент использует три основные возможности, которые активируются постепенно:
- Инструментарий BigQuery : Агент исследует схемы и выполняет SQL-запросы к реальным наборам данных BigQuery — это работает как локально, так и при развертывании.
- Банк памяти : После развертывания агент запоминает пользовательские предпочтения и контекст в условиях разъединенных сессий.
- Наблюдаемость : Cloud Trace фиксирует этапы обработки информации агентом, вызовы инструментов и задержки с помощью инструментов OpenTelemetry.
Что вы узнаете
- Как создать агент ADK с помощью
BigQueryToolsetдля доступа к реальным данным - Как настроить банк памяти для обеспечения сохранения данных между сессиями
- Как развернуть агент в Agent Runtime с помощью
adk deploy - Как предоставить разрешения IAM для служебной учетной записи развернутого агента
- Как проверить устойчивость и наблюдаемость памяти
Что вам понадобится
- Проект Google Cloud с включенной функцией выставления счетов.
- Веб-браузер, например Chrome.
- Если вы запускаете код на своем компьютере, а не в Cloud Shell: Google Cloud SDK (
gcloudCLI), uv (менеджер пакетов Python) и Python 3.12+ (устанавливается автоматическиuvпри необходимости).
ADK (Agent Development Kit) — это фреймворк от Google для создания агентов искусственного интеллекта. В этом практическом занятии используется ADK для создания агента и его развертывания в среде выполнения агентов (Agent Runtime).
Этот практический урок предназначен для разработчиков среднего уровня, имеющих некоторое представление о Python и Google Cloud.
Выполнение этого практического задания займет приблизительно 35 минут (включая 5–10 минут на развертывание).
Стоимость ресурсов, созданных в рамках этого практического занятия, должна составлять менее 5 долларов.
2. Настройте свою среду.
Создайте проект в Google Cloud.
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud .
- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
Настройте свой проект
Откройте редактор Cloud Shell в созданном вами проекте GCP.
Затем создайте терминал > Новый терминал и выполните следующую команду, чтобы задать свой проект. Последующие команды будут считывать идентификатор проекта из этой настройки.
gcloud config set project <INSERT_YOUR_GCP_PROJECT_HERE>
Включить API
В терминале выполните следующую команду.
gcloud services enable \
aiplatform.googleapis.com \
bigquery.googleapis.com \
telemetry.googleapis.com \
--project=$(gcloud config get project)
-
aiplatform.googleapis.com: размещает вашего агента на Agent Runtime, включая Gemini Enterprise Sessions и Memory Bank, и использует модель Gemini. - API BigQuery (
bigquery.googleapis.com): SQL-запросы к общедоступным и закрытым наборам данных. - API телеметрии (
telemetry.googleapis.com): трассировка OpenTelemetry для мониторинга агентов.
Установите ADK
В терминале выполните следующие команды, чтобы создать папку для этого практического занятия и установить ADK и его зависимости:
mkdir -p ~/adk-deploy-scale
cd ~/adk-deploy-scale
uv init --bare
uv add google-adk google-auth google-cloud-bigquery "google-cloud-aiplatform[agent_engines]"
uv создает изолированную среду Python для этого практического занятия, поэтому вам не нужно ничего активировать. Добавляйте префикс uv run к командам Python.
Пакет google-adk включает в себя инструмент командной строки adk , который вы будете использовать для тестирования и развертывания агента. adk deploy использует google-cloud-aiplatform для создания вашего агента в Agent Runtime, а google-cloud-bigquery — это клиентская библиотека, лежащая в основе инструментов BigQuery в ADK.
3. Создайте агента.
В папке ~/adk-deploy-scale создайте каталог агента. Все последующие команды выполняйте из ~/adk-deploy-scale (родительской папки для data_science_agent/ ):
mkdir data_science_agent
Затем выполните следующую команду, чтобы создать файл data_science_agent/.env , содержащий ваш проект, регион, куда вы будете развертывать агента, и настройки для развернутого агента. adk deploy считывает этот файл, поэтому эти настройки будут работать и в новом окне терминала.
cat > ~/adk-deploy-scale/data_science_agent/.env <<EOF
GOOGLE_CLOUD_PROJECT=$(gcloud config get project)
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_GENAI_USE_ENTERPRISE=True
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
EOF
-
GOOGLE_CLOUD_PROJECTиGOOGLE_CLOUD_LOCATION: идентификатор вашего проекта (заполняется изgcloud) и регион, в котором работает агент. -
GOOGLE_GENAI_USE_ENTERPRISE: использует ADK для вызова Gemini через ваш проект Google Cloud. -
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT: регистрирует полные входные запросы и ответы агента, полезно для отладки.
Итоговая структура ваших каталогов будет выглядеть следующим образом:
adk-deploy-scale/
data_science_agent/
.env
__init__.py
agent.py
requirements.txt # created in the Deploy step
Теперь создайте __init__.py и agent.py , а затем добавьте requirements.txt на этапе развертывания.
Создайте файл data_science_agent/__init__.py — он необходим для того, чтобы ADK мог обнаружить и загрузить вашего агента:
from . import agent # noqa: F401 — required by `adk eval` and `adk web`
Создайте файл data_science_agent/agent.py :
Этот агент подключается к BigQuery для извлечения данных и сохраняет сессии в Memory Bank.
Память активируется автоматически при развертывании. Agent Runtime устанавливает переменную среды GOOGLE_CLOUD_AGENT_ENGINE_ID , которая отсутствует при локальном запуске.
from __future__ import annotations
import os
from google.adk.agents import LlmAgent
from google.adk.agents.callback_context import CallbackContext
from google.adk.apps import App
from google.adk.integrations.bigquery import BigQueryCredentialsConfig
from google.adk.integrations.bigquery import BigQueryToolset
from google.adk.models import Gemini
from google.adk.tools.preload_memory_tool import PreloadMemoryTool
from google.genai import types
import google.auth
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT")
if not PROJECT_ID:
raise ValueError(
"GOOGLE_CLOUD_PROJECT environment variable is required. "
"Add it to data_science_agent/.env: GOOGLE_CLOUD_PROJECT=<your-project-id>"
)
credentials, _ = google.auth.default()
bq_toolset = BigQueryToolset(credentials_config=BigQueryCredentialsConfig(credentials=credentials))
# GOOGLE_CLOUD_AGENT_ENGINE_ID is set automatically by Agent Runtime.
agent_engine_id = os.getenv("GOOGLE_CLOUD_AGENT_ENGINE_ID")
async def _save_memory(callback_context: CallbackContext) -> None:
"""Persist the session to Memory Bank after each agent run.
Only activates on Agent Runtime, where Memory Bank is available.
"""
if agent_engine_id:
await callback_context.add_session_to_memory()
root_agent = LlmAgent(
name="data_science_agent",
model=Gemini(
model="gemini-3.8-flash",
# gemini-3.8-flash is served from the global endpoint. The agent
# itself runs in GOOGLE_CLOUD_LOCATION (us-central1).
client_kwargs={"location": "global"},
retry_options=types.HttpRetryOptions(attempts=5),
),
instruction=(
"You are an expert Data Science Agent. "
"Your goal is to query enterprise BigQuery datasets, analyze the data, "
"and summarize your findings. "
f"When executing SQL queries, use project_id `{PROJECT_ID}` as the "
"billing project unless the user specifies a different one. "
"Present results clearly with formatted numbers. "
"Remember user preferences like preferred regions, date ranges, "
"or analysis formats across conversations."
),
tools=[bq_toolset, PreloadMemoryTool()],
after_agent_callback=_save_memory,
)
app = App(
name="data_science_agent",
root_agent=root_agent,
)
Давайте разберем, что делает этот код:
- BigQueryToolset предоставляет агенту такие инструменты, как
execute_sql,list_table_idsиget_table_info— он может исследовать схемы и запрашивать любой набор данных, к которому имеет доступ вызывающая сторона. - PreloadMemoryTool автоматически извлекает соответствующие данные из памяти перед каждым вызовом LLM, выполняя поиск в банке памяти контента, связанного с сообщением пользователя. Функция обратного вызова
_save_memoryсохраняет сессию в банке памяти после каждого запуска агента, чтобы агент мог восстанавливать контекст в будущих сессиях. - Приложение инкапсулирует корневой агент в развертываемое приложение, которое может обслуживать среда выполнения агента.
nameдолжно совпадать с именем каталога (data_science_agent) —adk webиспользует это для поиска и загрузки агента. - Инструкция предписывает агенту использовать проект выставления счетов для SQL-запросов и запоминать пользовательские настройки.
- Gemini с
client_kwargs={"location": "global"}отправляет вызовы модели на глобальную конечную точку, где доступенgemini-3.8-flash. Сам агент работает вus-central1:adk deployустанавливаетGOOGLE_CLOUD_LOCATIONна развернутом агенте в регион, в который вы развертываете, поэтому местоположение модели задается в коде.
4. Развертывание в среде выполнения агента.
Создайте файл requirements.txt в каталоге data_science_agent :
google-adk
google-genai
google-auth
google-cloud-bigquery
python-dotenv
opentelemetry-instrumentation-google-genai
opentelemetry-instrumentation-httpx
opentelemetry-instrumentation-grpc
-
google-adkиgoogle-genai: ADK и клиент Gemini -
google-auth: аутентификация Google Cloud -
google-cloud-bigquery: клиентская библиотека BigQuery, используемаяBigQueryToolset. ADK не устанавливает её по умолчанию. -
python-dotenv: загружает файл.envпри запуске. - Три пакета
opentelemetry-instrumentation-*обеспечивают функции мониторинга, которые вы изучите позже. Они инструментируют вызовы модели Gemini и внутреннюю связь gRPC/HTTP, так что трассировки отображаются на вкладке «Трассировки» вашего агента.
adk deploy также считывает созданный вами ранее файл data_science_agent/.env и устанавливает его параметры для развернутого агента.
Разверните агента. Последний аргумент data_science_agent — это каталог, содержащий код вашего агента:
uv run adk deploy agent_engine \
--project=$(gcloud config get project) \
--region=us-central1 \
--display_name="Data Science Agent" \
--otel_to_cloud \
data_science_agent
В начале вывода отображаются две желтые строки: « Ignoring GOOGLE_CLOUD_PROJECT in .env ... и Ignoring GOOGLE_CLOUD_LOCATION in .env ... . Это ожидаемо: флаги --project и --region имеют приоритет над одинаковыми значениями в .env .
Флаг | Цель |
| Целевой проект и регион Google Cloud |
| Удобочитаемое имя, отображаемое в консоли Cloud Console. |
| Экспортирует трассировки и журналы OpenTelemetry в Google Cloud и включает телеметрию ( |
При развертывании в среде выполнения агента автоматически активируются две возможности:
- Memory Bank :
adk deployподключает агента к Sessions и Memory Bank в его экземпляре Agent Runtime.PreloadMemoryToolсчитывает данные из Memory Bank, а_save_memoryавтоматически сохраняет сессии. - Наблюдаемость : Cloud Trace фиксирует этапы обработки информации агентом, вызовы инструментов и задержки.
5. Предоставьте BigQuery разрешения.
Необходимо предоставить BigQuery доступ к сервисному агенту Agent Runtime (агенту сервиса AI Platform Reasoning Engine). После развертывания агент будет работать от имени этой учетной записи службы, управляемой Google (а не ваших личных учетных данных), поэтому ему необходимы явные разрешения для выполнения SQL-запросов.
PROJECT_NUMBER=$(gcloud projects describe $(gcloud config get project) \
--format='value(projectNumber)')
SA="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"
# Required to execute SQL queries
gcloud projects add-iam-policy-binding $(gcloud config get project) \
--member="serviceAccount:${SA}" \
--role="roles/bigquery.jobUser"
# Required to read table metadata and data
gcloud projects add-iam-policy-binding $(gcloud config get project) \
--member="serviceAccount:${SA}" \
--role="roles/bigquery.dataViewer"
Каждая команда при успешном выполнении выводит на экран Updated IAM policy for project [...] .
6. Проверьте развернутого агента.
Откройте страницу «Развертывания» в консоли Google Cloud. Щелкните по развернутому агенту, затем перейдите на вкладку «Playground» .
Проверьте возможности BigQuery:
- "Перечислите таблицы в bigquery-public-data.hacker_news"
- Ожидается : Агент вызывает
list_table_idsи возвращает имена таблиц, включаяfull.
- Ожидается : Агент вызывает
- "Найдите количество сообщений в год в bigquery-public-data.hacker_news.full"
- Ожидаемый результат : Агент вызывает
execute_sqlс SQL-запросом и возвращает таблицу с годами и количеством публикаций.
- Ожидаемый результат : Агент вызывает
- «Каково процентное изменение количества публикаций по сравнению с прошлым годом?»
- Ожидаемый результат : Агент вызывает
execute_sqlс SQL-запросом, который вычисляет процентное изменение и возвращает результаты.
- Ожидаемый результат : Агент вызывает
7. Проверка устойчивости памяти
Оставаясь на игровой площадке, научите агента одному из предпочтений:
- «Помните, что мой любимый набор данных — это bigquery-public-data.hacker_news»
- Какие столы в нём есть?
Подождите несколько секунд, пока память сохранится (функция обратного вызова _save_memory выполняется после того, как агент ответит).
Теперь начните новую сессию , нажав кнопку «Новая сессия» на игровой площадке, а затем задайте следующий вопрос:
- «Какой мой любимый набор данных?»
Агент должен вспомнить ссылку bigquery-public-data.hacker_news , даже если это совершенно новая сессия без истории переписки. Это работает, потому что:
-
_save_memoryсохраняет данные каждой сессии в банк памяти черезcallback_context.add_session_to_memory() -
PreloadMemoryToolизвлекает соответствующие данные из памяти перед каждым вызовом LLM. - Memory Bank сопоставляет контент семантически, а не только по ключевым словам.
8. Изучите возможности наблюдения.
В консоли Cloud перейдите к развернутому агенту и нажмите вкладку «Трассировки» .

Вы должны увидеть таблицу «Сессии» , содержащую список сессий из тестовых запросов, выполненных на предыдущих шагах. В таблице отображаются сводные метрики для каждой сессии — средняя продолжительность, вызовы модели, вызовы инструментов, использование токенов и любые ошибки.
Щёлкните по сессии , чтобы просмотреть подробные сведения о её трассировке, включая:
- Направленный ациклический граф (DAG) его сегментов — показывающий пошаговое описание рассуждений агента, вызовов инструментов (запросов BigQuery) и задержек.
- Входы и выходы для каждого участка (включаются с помощью переменной окружения
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTв файле.env) - Метаданные, такие как идентификаторы сегментов, идентификаторы трассировки и временные параметры.
Вы также можете переключиться в режим просмотра отдельных фрагментов (переключатель вверху), чтобы увидеть отдельные фрагменты по всем сессиям.
Как работает отслеживание
При развертывании с --otel_to_cloud adk deploy создает контейнер, в котором запускается сервер API ADK с включенной функцией OpenTelemetry. В среде выполнения агента сервер инициализирует конвейер OpenTelemetry, который:
- Создает объект TracerProvider с экспортером OTLP, который отправляет данные трассировки на
telemetry.googleapis.com - Записывает собственные трассировки ADK для запусков агентов, вызовов моделей и вызовов инструментов, а также использует три пакета инструментирования из вашего
requirements.txtдля добавления трассировок из ключевых библиотек (Gemini, httpx, gRPC). - Пакетная обработка и экспорт данных осуществляется через API телеметрии, где вкладка «Трассировки» считывает их.
Развернутый контейнер включает ADK, SDK OpenTelemetry и экспортер, но не включает пакеты инструментов . Именно поэтому в вашем requirements.txt указаны все три. Без них сервер API ADK выдает предупреждение и пропускает эти сегменты.
Поиск неисправностей
Если через несколько минут следы не появятся:
- Убедитесь, что API телеметрии включен : вы включили его на этапе настройки. Проверьте это с помощью команды:
gcloud services list --enabled --project=$(gcloud config get project) | grep telemetry - Проверьте Cloud Logging на наличие предупреждений : перейдите в Logging > Logs Explorer и найдите
"proceeding without"или"GoogleGenAiSdkInstrumentor". Предупреждение, указывающее на инструментарий (GenAI, HTTPX или gRPC), означает, что соответствующий пакетopentelemetry-instrumentation-*отсутствует в вашемrequirements.txt. - Не добавляйте
google-cloud-aiplatformв вашrequirements.txt.adk deployдобавляет его автоматически; самостоятельное указание этого параметра может привести к конфликтам пакетов OpenTelemetry и незаметно нарушить работу инструментария.
9. Уборка
Во избежание дальнейших списаний средств удалите ресурсы, созданные в ходе этого практического занятия.
Удалите развернутый агент со страницы «Развертывания» в консоли Cloud. Выберите свой агент и нажмите «Удалить» .
Если вы создали проект специально для этого практического занятия, вы можете удалить весь проект целиком:
gcloud projects delete <YOUR_PROJECT_ID>
При желании, вы можете очистить окружающую среду в вашем регионе:
cd ~
rm -rf ~/adk-deploy-scale
10. Поздравляем!
Вы создали агент для анализа данных с сохранением состояния и развернули его в Agent Runtime!
Что вы узнали
- Как создать агент ADK с помощью
BigQueryToolsetдля доступа к реальным данным - Как включить постоянную память с помощью Memory Bank, используя
PreloadMemoryToolиafter_agent_callback - Как предоставить разрешения IAM для служебной учетной записи развернутого агента
- Как развернуть приложение в Agent Runtime и включить мониторинг с помощью Cloud Trace
Следующие шаги
- Выполняйте запросы к собственным частным наборам данных BigQuery, предоставив агенту службы Agent Runtime доступ к вашим данным.
- Добавьте функцию выполнения кода для запуска анализа на Python в защищенной песочнице.
- Настройте панели мониторинга Cloud Trace для отслеживания работы вашего агента в производственной среде.
- Опубликуйте результаты в Google Workspace с помощью инструментов MCP.