1. Введение
В этой лабораторной работе вы создадите многоагентную систему с помощью Agent Development Kit (ADK) и включите возможность наблюдения за агентом с помощью плагина BigQuery Agent Analytics. Вы зададите агенту ряд вопросов , а затем используете BigQuery для анализа следов разговоров и использования инструментов агента.

Что ты будешь делать?
- Создайте многоагентного помощника по розничной торговле с помощью ADK
- Инициализируйте плагин аналитики BigQuery Agent для сбора и сохранения данных трассировки о выполнении этих агентов в BigQuery.
- Анализ данных журнала агента в BigQuery
Что вам понадобится
- Веб-браузер, такой как Chrome
- Проект Google Cloud с включенным биллингом, или
- Аккаунт Gmail. В следующем разделе мы расскажем, как получить бесплатный кредит в размере 5 долларов на эту практическую работу и создать новый проект.
Эта практическая работа предназначена для разработчиков любого уровня, включая новичков. Вы будете использовать интерфейс командной строки Google Cloud Shell и код Python для разработки ADK. Вам не нужно быть экспертом по Python, но базовые навыки чтения кода помогут вам понять концепции.
2. Прежде чем начать
Создайте проект Google Cloud
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud .

- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
Запустить Cloud Shell
Cloud Shell — это среда командной строки, работающая в Google Cloud и поставляемая с предустановленными необходимыми инструментами.
- Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud:

- После подключения к Cloud Shell выполните эту команду для проверки вашей аутентификации в Cloud Shell:
gcloud auth list
- Выполните следующую команду, чтобы подтвердить, что ваш проект настроен для использования с gcloud:
gcloud config get project
- Если ваш проект не настроен должным образом, используйте следующую команду для настройки проекта:
export PROJECT_ID=<YOUR_PROJECT_ID>
gcloud config set project $PROJECT_ID
Включить API
- Выполните эту команду, чтобы включить все необходимые API и службы:
gcloud services enable bigquery.googleapis.com \
cloudresourcemanager.googleapis.com \
aiplatform.googleapis.com
- При успешном выполнении команды вы должны увидеть сообщение, похожее на показанное ниже:
Операция «operations/...» завершена успешно.
3. Установка и настройка
Вернитесь в Cloud Shell и убедитесь, что вы находитесь в своем домашнем каталоге.
Выполните следующую команду в Cloud Shell, чтобы создать новый набор данных с именем adk_logs в BigQuery:
bq mk --dataset --location=US adk_logs
Теперь давайте создадим виртуальную среду Python и установим необходимые пакеты.
- Откройте новую вкладку терминала в Cloud Shell и выполните эту команду, чтобы создать и перейти в папку с именем
adk-agent-observability:
mkdir adk-agent-observability
cd adk-agent-observability
- Создайте виртуальную среду Python:
python -m venv .venv
- Активируйте виртуальную среду:
source .venv/bin/activate
- Установить ADK:
pip install --upgrade google-adk
4. Создайте приложение ADK
Теперь давайте создадим нашего помощника по розничной торговле — агента. Этот агент будет предназначен для...
- Запустите команду утилиты adk create , чтобы создать новое приложение агента с необходимыми папками и файлами:
adk create retail_assistant_app
Следуйте инструкциям:
- Выберите модель gemini-2.5-flash .
- Выберите Vertex AI для бэкэнда.
- Подтвердите идентификатор и регион проекта Google Cloud по умолчанию .
Пример взаимодействия показан ниже:

- Нажмите кнопку «Открыть редактор» в Cloud Shell, чтобы открыть Cloud Shell Editor и просмотреть вновь созданные папки и файлы:

Обратите внимание на сгенерированные файлы:
retail_assistant_app/
├── .venv/
└── retail_assistant_app/
├── __init__.py
├── agent.py
└── .env
- init.py: Помечает папку как модуль Python.
- agent.py: Содержит начальное определение агента.
- . env: Для просмотра этого файла вам может потребоваться нажать «Вид» > «Переключить скрытые файлы».

- Файл .env содержит переменные среды для вашего проекта. Обновите все переменные, которые были неправильно установлены, следуя подсказкам:
GOOGLE_GENAI_USE_VERTEXAI=1
GOOGLE_CLOUD_PROJECT=<YOUR_GOOGLE_PROJECT_ID>
GOOGLE_CLOUD_LOCATION=<YOUR_GOOGLE_CLOUD_REGION>
5. Определите своего агента
Давайте теперь определим иерархическую многоагентную систему.
- Real Time Trend Agent: использует поиск Google для поиска текущих модных тенденций.
- Агент данных инвентаризации: использует набор инструментов BigQuery для запроса общедоступного набора данных thelook_ecommerce на предмет доступных продуктов.
- Помощник по розничной торговле (корневой) Агент: организует рабочий процесс, запрашивая у Агента трендов советы и у Агента по инвентаризации — сопоставление продуктов.
Замените все содержимое retail_assistant_app/agent.py следующим кодом.
import os
import uuid
import asyncio
import google.auth
import dotenv
from google.genai import types
from google.adk.agents import Agent
from google.adk.apps import App
from google.adk.runners import InMemoryRunner
from google.adk.tools import AgentTool, google_search
from google.adk.tools.bigquery import BigQueryCredentialsConfig, BigQueryToolset
from google.adk.plugins.bigquery_agent_analytics_plugin import BigQueryAgentAnalyticsPlugin
dotenv.load_dotenv()
# --- Configuration ---
PROJECT_ID = os.getenv('GOOGLE_CLOUD_PROJECT', 'project_not_set')
DATASET_ID = "adk_logs"
TABLE_ID = "retail_assistant_agent_logs"
APP_NAME = "retail_assistant_agent"
USER_ID = "test_user"
# --- Toolsets ---
credentials, _ = google.auth.default()
credentials_config = BigQueryCredentialsConfig(credentials=credentials)
bigquery_toolset = BigQueryToolset(
credentials_config=credentials_config
)
# --- Agents ---
# 1. Trend Spotter
real_time_agent = Agent(
name="real_time_agent",
model="gemini-2.5-flash",
description="Researches external factors like weather, local events, and current fashion trends.",
instruction="""
You are a real-time research agent.
Use Google Search to find real-time information relevant to the user's request,
such as the current weather in their location or trending styles.
""",
tools=[google_search]
)
# 2. Inventory Manager
inventory_data_agent = Agent(
name="inventory_data_agent",
model="gemini-2.5-flash",
description="Oversees product inventory in the BigQuery `thelook_ecommerce` dataset to find available items and prices.",
instruction=f"""
You manage the inventory. You have access to the `bigquery-public-data.thelook_ecommerce` dataset via the BigQuery toolset.
Run all BigQuery queries the project id of: '{PROJECT_ID}'
Your workflow:
1. Look at the products table.
2. Find items that match the requirements, factor in the results from the trend_setter agent if there are any.
3. Return with a user friendly response, including the list of specific products and prices.
""",
tools=[bigquery_toolset]
)
# 3. Root Orchestrator
root_agent = Agent(
name="retail_assistant",
model="gemini-2.5-flash",
description="The primary orchestrator, responsible for handling user input, delegating to sub-agents, and synthesizing the final product recommendation.",
instruction="""
You are a Retail Assistant.
You can ask the 'real_time_agent' agent for any realtime information needed, or style advice, include any information provided by the user.
You should ask the 'inventory_data_agent' agent to find a maximum of 3 available items matching that style.
Combine the results into a recommendation.
""",
tools=[AgentTool(agent=real_time_agent)],
sub_agents=[inventory_data_agent]
)
6. Создавайте журналы с помощью плагина BigQuery Agent Analytics.
Теперь давайте настроим аналитический плагин BigQuery Agent для сбора данных о выполнении.
Для этого вам нужно создать экземпляр класса App . Этот класс служит контейнером среды выполнения для вашего агента; он управляет циклом диалога, обрабатывает состояние пользователя и координирует все подключенные плагины (например, наш логгер аналитики агента).
Код ниже:
- Инициализирует плагин ведения журнала: создает
BigQueryAgentAnalyticsPluginс необходимыми данными о подключении. - Интегрирует плагин: передает инициализированный плагин BigQuery в конструктор
App, обеспечивая автоматический сбор и регистрацию событий выполнения агента. - Запускает и регистрирует выполнение агента: выполняет поток диалога через
runner.run_async, при этом плагин одновременно собирает и отправляет всю последовательность событий в BigQuery перед закрытием своих ресурсов.
Скопируйте и вставьте этот код под определениями агента в файле agent.py :
async def main(prompt: str):
"""Runs a conversation with the BigQuery agent using the ADK Runner."""
bq_logger_plugin = BigQueryAgentAnalyticsPlugin(
project_id=PROJECT_ID, dataset_id=DATASET_ID, table_id=TABLE_ID
)
app = App(name=APP_NAME, root_agent=root_agent, plugins=[bq_logger_plugin])
runner = InMemoryRunner(app=app)
try:
session_id = f"{USER_ID}_{uuid.uuid4().hex[:8]}"
my_session = await runner.session_service.create_session(
app_name=APP_NAME, user_id=USER_ID, session_id=session_id
)
async for event in runner.run_async(
user_id=USER_ID,
new_message=types.Content(
role="user", parts=[types.Part.from_text(text=prompt)]
),
session_id=my_session.id,
):
if event.content.parts and event.content.parts[0].text:
print(f"** {event.author}: {event.content.parts[0].text}")
except Exception as e:
print(f"Error in main: {e}")
finally:
print("Closing BQ Plugin...")
await bq_logger_plugin.close()
print("BQ Plugin closed.")
if __name__ == "__main__":
prompts = [
"what outfits do you have available that are suitable for the weather in london this week?",
"You are such a cool agent! I need a gift idea for my friend who likes yoga.",
"I'd like to complain - the products sold here are not very good quality!"
]
for prompt, prompt in enumerate(prompts):
asyncio.run(main(prompt))
Теперь, когда всё необходимое готово, пора увидеть агента в действии. Запустите скрипт, чтобы запустить рабочий процесс беседы.
python retail_assistant_app/agent.py
Вы должны увидеть помощника продавца, координирующего рабочий процесс:
- Он просит Real Time Trend Agent (real_time_agent) определить погоду в Лондоне и найти подходящие модные тенденции.
- Затем он делегирует полномочия агенту данных инвентаризации (inventory_data_agent) для запроса набора данных BigQuery
thelook_ecommerceна предмет конкретных продуктов, которые соответствуют этим тенденциям. - Наконец, Root Orchestrator синтезирует результаты в окончательную рекомендацию.
Все это время плагин передает трассировку выполнения агента в BigQuery.
7. Анализ журналов агента
Использование инструмента
Теперь мы можем увидеть, чем занимался наш агент за кулисами! Данные переданы в BigQuery и готовы к анализу:
- В Google Cloud Console найдите BigQuery .
- На панели проводника найдите свой проект.
- Расширьте набор данных
adk_logs. - Откройте таблицу
retail_assitant_agent_logsи нажмите «Запрос» .

Чтобы увидеть, какие вызовы инструментов сделал ваш агент, и зафиксировать любые ошибки инструментов, выполните следующий запрос в редакторе BigQuery:
SELECT
-- Extract text between "Tool Name: " and the next comma (or end of line)
REGEXP_EXTRACT(content, r'Tool Name: ([^,]+)') AS tool_name,
-- Count every time a tool finished (successfully or with an error)
COUNT(*) AS total_finished_runs,
-- Count it as a failure if it's an explicit system error OR contains "error" in the text
COUNTIF(event_type = 'TOOL_ERROR' OR REGEXP_CONTAINS(content, r'(?i)\berror\b')) AS failure_count
FROM
`.adk_logs.retail_assistant_agent_logs`
WHERE
event_type IN ('TOOL_COMPLETED', 'TOOL_ERROR')
GROUP BY
1
Нажмите «Визуализация», чтобы просмотреть это в виде диаграммы:

Использование токена
Чтобы подсчитать стоимость ваших агентов, вы можете объединить токены подсказок и токены кандидатов, потребляемые каждым отдельным агентом:
SELECT
t.agent,
SUM(CAST(REGEXP_EXTRACT(t.content, r'prompt:\s*(\d+)') AS INT64)) AS prompt_tokens,
SUM(CAST(REGEXP_EXTRACT(t.content, r'candidates:\s*(\d+)') AS INT64)) AS candidate_tokens
FROM
`adk_logs.retail_assistant_agent_logs` AS t
WHERE
t.event_type = 'LLM_RESPONSE'
AND t.content LIKE '%Token Usage: %'
GROUP BY 1
Нажмите «Визуализация», чтобы просмотреть это в виде диаграммы:

8. [Бонус] Анализируйте настроения пользователей
Теперь давайте проанализируем тональность ввода пользователя, предоставленного агенту.
- Создайте подключение к облачному ресурсу , чтобы BigQuery мог взаимодействовать с сервисами Vertex AI.
bq mk --connection --location=us \
--connection_type=CLOUD_RESOURCE test_connection
Вы должны увидеть ответ вроде:
Подключение 517325854360.us.test_connection успешно создано
- Создайте подключение к облачному ресурсу:
export SERVICE_ACCOUNT_EMAIL=$(bq show --format=prettyjson --connection us.test_connection | grep "serviceAccountId" | cut -d '"' -f 4)
- Выполните эту команду, чтобы убедиться, что учетная запись службы была успешно создана:
echo $SERVICE_ACCOUNT_EMAIL
Вы должны увидеть свою учетную запись службы:

- Предоставьте учетной записи службы подключения к ресурсам разрешения на уровне проекта, необходимые для взаимодействия с Vertex AI:
gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
--member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
--role='roles/bigquery.connectionUser' \
gcloud projects add-iam-policy-binding $(gcloud config get-value project) \
--member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
--role='roles/aiplatform.user'
Подождите несколько минут, а затем запустите функцию BigQuery AI.SCORE для анализа настроений пользователей:
SELECT
timestamp,
user_id,
content,
AI.SCORE((
'What is the sentiment of the user in this text:', content,
'Use a scale from 1 to 5.'),
connection_id => 'us.test_connection') AS user_sentiment
FROM
`adk_logs.retail_assistant_agent_logs`
WHERE
event_type = 'USER_MESSAGE_RECEIVED'
ORDER BY
user_sentiment DESC;
Функция AI.SCORE присваивает каждому пользовательскому вводу значение тональности от 1 до 5. Вы должны увидеть результаты, подобные представленным ниже: 
9. Уборка
Чтобы избежать постоянных списаний с вашего аккаунта Google Cloud, удалите ресурсы, созданные во время этого семинара.
Удалить набор данных журнала, созданный скриптом:
bq rm -r -f -d $PROJECT_ID:adk_logs
Чтобы удалить каталог bigquery-adk-codelab и его содержимое:
cd ..
rm -rf adk-agent-observability
10. Поздравления
Поздравляем! Вы создали многоагентную систему с помощью Agent Development Kit (ADK) и успешно интегрировали плагин BigQuery Agent Analytics для отслеживания и аудита поведения вашего агента.