1. Обзор
Эпоха «читающих чат-ботов» подходит к концу. Мы вступаем в эпоху агентного зрения.
В этом практическом занятии мы будем реализовывать детерминированное проектирование ИИ — практику создания систем искусственного интеллекта, которые не делают предположений. Стандартные модели ИИ часто «галлюцинируют» (делают предположения), когда их просят подсчитать количество предметов на сложном изображении. В цепочке поставок предположение опасно. Если ИИ предполагает, что у вас 12 предметов, когда на самом деле их 15, это приводит к дорогостоящим ошибкам.
Мы создадим автономного агента для управления цепочкой поставок, используя новый цикл «Думай, действуй, наблюдай» в Gemini 3 Flash . Он не просто смотрит, он исследует.
Детерминированная архитектура
Начнём с «слепой» и «амнезичной» системы. Вы будете вручную «пробуждать» её чувства одно за другим:

- «Глаза» (Агент зрения) : Мы активируем Gemini 3 Flash с выполнением кода . Вместо предсказания токенов для угадывания числа, модель пишет код на Python (OpenCV) для детерминированного подсчета пикселей.
- Память (агент поставщика) : Мы используем AlloyDB AI с алгоритмом ScaNN (масштабируемый метод ближайших соседей). Это позволяет агенту за миллисекунды находить точного поставщика детали среди миллионов вариантов.
- Протокол "рукопожатие" (A2A) : Мы обеспечиваем связь между агентами с использованием стандартизированного файла agent_card.json, что позволяет агенту Vision автономно заказывать товары у агента-поставщика.
Что вы построите
- Агент обработки изображений , выполняющий «визуальные вычисления» над видеопотоками с камер.
- Агент поставщика, использующий AlloyDB ScaNN для высокоскоростного векторного поиска.
- Интерфейс диспетчерской вышки с обновлениями WebSocket в реальном времени для визуализации автономного цикла.
Что вы узнаете
- Как включить Agentic Vision с помощью gemini-3-flash-preview, используя API Gemini.
- Как реализовать векторный поиск с использованием оператора <=> (косинусное расстояние) в AlloyDB.
- Как связать Cloud Shell с AlloyDB с помощью прокси-сервера аутентификации.
Требования
- Браузер, например Chrome или Firefox.
- Проект Google Cloud с включенной функцией выставления счетов.
- Ключ API Gemini (бесплатный уровень доступен в Google AI Studio ) для Vision Agent.
2. Прежде чем начать
Создать проект
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
- Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud. Нажмите «Активировать Cloud Shell» в верхней части консоли Google Cloud.

- После подключения к Cloud Shell необходимо проверить, прошли ли вы аутентификацию и установлен ли идентификатор вашего проекта, используя следующую команду:
gcloud auth list
Вот и все!
Теперь вы готовы к настройке в один клик. В следующем разделе вы узнаете:
- Автоматическое открытие Cloud Shell
- Клонируйте репозиторий
- Мы проведем вас через весь процесс настройки с помощью интерактивного руководства.
3. Настройка в один клик в Cloud Shell
Мы упростили настройку, превратив её в пошаговое руководство по Cloud Shell . Всё автоматизировано: выделение инфраструктуры, настройка AlloyDB, конфигурация прокси-сервера аутентификации и заполнение базы данных данными.
Руководство по запуску Cloud Shell
⚠️ ВАЖНО — Перед нажатием: После нажатия кнопки ниже появится диалоговое окно безопасности с вопросом «Открыть в Cloud Shell» . Оно появляется ДО клонирования репозитория.
Вы должны:
- ✅ Поставьте галочку: " Доверять репозиторию "
- ✅ Нажмите « Подтвердить »
Без этого репозиторий не будет клонирован.
Готовы? Нажмите, чтобы открыть проект с пошаговой инструкцией:
Что произойдет дальше:
- Cloud Shell открывается с предварительно клонированным репозиторием.
- Справа появляется панель с пошаговыми инструкциями.
- Вас проведут через следующие этапы:
- Получение ключа API Gemini (доступен бесплатный тариф)
- Настройка проекта GCP в терминале
- Выполняется настройка (проверяются API, включаются при необходимости, выполняется инициализация AlloyDB: ~15 минут)
- Внесение двух ключевых изменений в код (включение зрения и памяти).
- Создание карты агента (протокол A2A)
- Запуск всех служб
Учебное пособие интерактивное — каждый шаг пронумерован, и вы можете отслеживать свой прогресс.
Альтернативный вариант: Ручная настройка
Если вы предпочитаете ручное управление:
- Откройте Cloud Shell и убедитесь, что ваш проект настроен.
gcloud config get-value project
- При необходимости настройте свой проект.
gcloud config set project YOUR_PROJECT_ID
- Клонируйте репозиторий
git clone https://github.com/MohitBhimrajka/visual-commerce-gemini-3-alloydb.git
cd visual-commerce-gemini-3-alloydb
- Запуск настройки
sh setup.sh
Следуйте инструкциям на экране из скрипта настройки.
Что дальше: В этом руководстве вы пройдете оставшиеся шаги. После завершения перейдите к разделу 4 , чтобы понять, что происходило «под капотом».
4. За кулисами: прокси-сервер аутентификации и заполнение базы данных.
Проблема : AlloyDB находится внутри частной виртуальной частной сети (VPC). Cloud Shell находится за её пределами. Прямое подключение невозможно.
Решение: Прокси-сервер аутентификации AlloyDB создает защищенный туннель с аутентификацией IAM от 127.0.0.1:5432 в Cloud Shell к вашему экземпляру AlloyDB. Если для вашего экземпляра включен публичный IP-адрес, прокси-сервер использует его; в противном случае он подключается через частный IP-адрес VPC.
Что сделал скрипт setup.sh?
- Автоматически определен ваш экземпляр AlloyDB (кластер, регион, проект).
- Создан файл .env со всеми учетными данными (GEMINI_API_KEY, DB_PASS, сведения об AlloyDB).
- Загрузили и запустили прокси-сервер аутентификации (с параметром –public-ip , если применимо).
- В базу данных внесены данные из 8 образцов складских запасов + индекс ScaNN.
Ваш файл .env готов. При последующих запусках учетные данные будут загружаться автоматически.
Проверьте, всё ли работает.
Убедитесь, что вы по-прежнему находитесь в корневом каталоге репозитория.
pwd # Should end with: visual-commerce-gemini-3-alloydb
Проверьте, запущен ли прокси-сервер аутентификации.
ps aux | grep alloydb-auth-proxy
Что было создано
- Инвентарная таблица с 8 элементами и 768-мерными векторными представлениями.
- Индекс ScaNN (idx_inventory_scann) для быстрого векторного поиска
5. Шаг 1: Память (агент-поставщик)
Агент поставщика запоминает миллионы деталей, используя AlloyDB ScaNN . Мы запускаем его как A2A-сервер, а затем корректируем векторный запрос.
Аудит: Амнезиак
Если вы сейчас отправите запрос к агенту поставщика (используя SQL-запрос-заполнитель), он вернет первую найденную строку, а не ближайшее совпадение. У него нет понятия о сходстве. Он страдает амнезией.
Запустите агента поставщика.
Сервер A2A (main.py) делегирует управление скрипту agent_executor.py, который обеспечивает связь протокола с бизнес-логикой в скрипте inventory.py .
pkill -f uvicorn #Kill all uvicorn processes
Шаг 1: Перейдите в каталог агентов.
cd agents/supplier-agent
Шаг 2: Установка зависимостей
pip install -r requirements.txt
Шаг 3: Запустите сервер агента.
uvicorn main:app --host 0.0.0.0 --port 8082 > /dev/null 2>&1 &
Команда `> /dev/null 2>&1 &` запускает сервер в фоновом режиме и подавляет вывод, чтобы он не прерывал работу терминала.
Шаг 4: Убедитесь, что агент запущен (подождите 2-3 секунды после запуска).
curl http://localhost:8082/.well-known/agent-card.json
Ожидаемый результат: JSON с конфигурацией агента (должен возвращаться без ошибок).
Реальные семантические вложения
В процессе настройки база данных была заполнена реальными семантическими векторами, сгенерированными с помощью модели text-embedding-005 из SDK Google Gen AI. Это обеспечивает точное сопоставление по сходству, а не использование случайных векторов. Процесс заполнения занимает около 10 секунд для 13 примеров элементов с использованием параллельной генерации векторов для создания осмысленных 768-мерных векторов, отражающих семантическое значение каждой части.
AlloyDB Detour: Почему ScaNN?
Решение: Реализация оператора <=>
В комплекте с агентом поставляется запрос-заполнитель. Нам необходимо включить векторный поиск ScaNN.
Шаг 1: Откройте файл инвентаризации.
cd agents/supplier-agent
Шаг 2: Найдите задачу TODO в файле inventory.py.
Найдите функцию find_supplier() в строках 47-60. Вы увидите:
# ============================================================
# CODELAB STEP 1: Implement ScaNN Vector Search
# ============================================================
# TODO: Replace this placeholder query with ScaNN vector search
sql = "SELECT part_name, supplier_name FROM inventory LIMIT 1;"
cursor.execute(sql)
Шаг 3: Замените SQL-заполнитель на векторный поиск ScaNN.
Удалите эти две строки:
sql = "SELECT part_name, supplier_name FROM inventory LIMIT 1;"
cursor.execute(sql)
И замените их на:
sql = """
SELECT part_name, supplier_name
FROM inventory
ORDER BY part_embedding <=> %s::vector
LIMIT 1;
"""
cursor.execute(sql, (embedding_vector,))
Что это делает:
- <=> — это оператор косинусного расстояния в PostgreSQL.
- ORDER BY part_embedding <=> %s::vector находит ближайшее совпадение (наименьшее расстояние = ближайшее семантическое значение)
- %s::vector преобразует ваш массив вложений в векторный тип PostgreSQL.
- LIMIT 1 возвращает только наиболее близкое совпадение.
- Индекс ScaNN автоматически ускоряет выполнение этого запроса!
Шаг 4: Сохраните файл (Ctrl+S или Cmd+S)
Теперь агент будет использовать семантический поиск вместо возврата случайных результатов!
Проверка
Проверка обнаружения A2A и инвентаризации:
curl http://localhost:8082/.well-known/agent-card.json

python3 -c "
from inventory import find_supplier
import json
vec = [0.1]*768
r = find_supplier(vec)
if r:
result = {'part': r[0], 'supplier': r[1]}
if len(r) > 2:
result['distance'] = float(r[2]) if r[2] else None
print(json.dumps(result))
else:
print('No result found')
"
Ожидалось: файл agent-card.json возвращает карточку агента. Приведенный фрагмент кода на Python возвращает информацию о детали и поставщике из исходных данных.
6. Шаг 2: Глаза (Видящий Агент)
Пока база данных доступна, давайте пробудим зрение с помощью Gemini 3 Flash . Vision Agent выполняет «визуальные вычисления» посредством выполнения кода. Сервер A2A (main.py) делегирует задачу agent_executor.py, который вызывает agent.py для анализа Gemini.
Аудит: Галлюцинация
Если задать стандартной мультимодальной модели вопрос: «Сколько квадратов на этом беспорядочном изображении?», она обработает изображение как статический снимок и сделает предположение.
- Модель говорит: «Я вижу около 12 коробок».
- В действительности: всего 15 коробок.
- Результат: Сбой в цепочке поставок.
Решение: Пробуждение цикла «Думай-Действуй-Наблюдай»
Мы включаем выполнение кода и ThinkingConfig , чтобы модель писала код на Python (OpenCV) для детерминированного подсчета.
- Откройте файл agents/vision-agent/agent.py.
- Найдите раздел GenerateContentConfig.
- Раскомментируйте блок thinking_config=types.ThinkingConfig(...) и tools=[types.Tool(code_execution=...)].
- Клиент уже настроен на использование вашего GEMINI_API_KEY из среды выполнения.
Файл: agents/vision-agent/agent.py
config = types.GenerateContentConfig(
temperature=0,
# CODELAB STEP 1: Uncomment to enable reasoning
thinking_config=types.ThinkingConfig(
thinking_level="LOW", # Valid: "MINIMAL", "LOW", "MEDIUM", "HIGH"
include_thoughts=False # Set to True for debugging
),
# CODELAB STEP 2: Uncomment to enable code execution
tools=[types.Tool(code_execution=types.ToolCodeExecution)]
)
Почему thinking_level="LOW"?
Для решения данной конкретной задачи (подсчет элементов посредством выполнения кода) параметр "LOW" обеспечивает достаточный объем вычислительных ресурсов для:
- Спланируйте структуру скрипта на Python.
- Выберите подходящий метод обработки изображений.
- Убедитесь, что количество совпадает с числом ограничивающих прямоугольников.
Использование параметра "HIGH" увеличит задержку в 2-3 раза и стоимость без повышения точности для детерминированных задач. Используйте "HIGH" только для сложных многоэтапных рассуждений (например, "Проанализируйте сбой в цепочке поставок и порекомендуйте 3 альтернативных поставщика с обоснованием").
Оптимизация соотношения затрат и производительности — ключевой навык для разработки ИИ-приложений: необходимо соотносить глубину рассуждений со сложностью задачи.
Запустите агента Vision
🔄 Проверка пути: Если вы все еще находитесь в папке agents/supplier-agent/, сначала вернитесь в корневую папку репозитория с помощью команды cd ../..
Шаг 1: Перейдите в каталог агентов Vision.
cd agents/vision-agent
Шаг 2: Установка зависимостей
pip install -r requirements.txt
Шаг 3: Запустите сервер агента Vision.
uvicorn main:app --host 0.0.0.0 --port 8081 > /dev/null 2>&1 &
Команда `> /dev/null 2>&1 &` запускает сервер в фоновом режиме и подавляет вывод, чтобы он не прерывал работу терминала.
Проверка
Проверка обнаружения A2A:
curl http://localhost:8081/.well-known/agent-card.json
Ожидается: JSON с именем агента и его навыками. Фактический подсчет обнаруженных объектов вы проверите с помощью пользовательского интерфейса диспетчерской вышки на шаге 8.

7. Шаг 3: Рукопожатие (Карточка агента A2A)
Наш агент видит проблему (Vision) и знает поставщика (Memory). Протокол A2A обеспечивает динамическое обнаружение — интерфейс обучается взаимодействию с каждым агентом, считывая его карточку.
A2A против традиционных REST API
Аспект | Традиционный ОТДЫХ | Протокол A2A |
Обнаружение конечных точек | Закодированные URL-адреса в конфигурации | Динамическое управление через /.well-known/agent-card.json |
Описание возможностей | Документация API (для пользователей) | Навыки (машинночитаемые) |
Интеграция | Ручной код для каждой услуги | Семантическое сопоставление: "Мне нужен поиск по инвентарю" → обнаруживает навык |
Добавлен новый агент. | Обновите конфигурации всех клиентов. | Настройка не требуется — автоматическое обнаружение |
Практическое преимущество: В традиционной микросервисной архитектуре, если добавить третьего «агента логистики», потребуется обновить код диспетчерской вышки, добавив его URL-адрес и контракт API. С A2A диспетчерская вышка обнаруживает его автоматически и понимает его возможности благодаря описаниям навыков на естественном языке.
Именно поэтому A2A обеспечивает возможность подключения и использования агентов по принципу Plug-and-Play — архитектурный шаблон для автономных систем.
Решение: Создайте карточку агента.
Нам необходимо определить, что может делать агент поставщика.
- Скопируйте файл agents/supplier-agent/agent_card_skeleton.json в файл agents/supplier-agent/agent_card.json.
- Отредактируйте файл, заменив заполнители:
До (скелет):
{
"name": "___FILL: agent-name ___",
"description": "___FILL: what-this-agent-does ___"
}
После (ваших правок):
{
"name": "Acme Supplier Agent",
"description": "Autonomous fulfillment for industrial parts via AlloyDB ScaNN.",
"version": "1.0.0",
"skills": [{
"id": "search_inventory",
"name": "Search Inventory",
"description": "Searches the warehouse database for semantic matches using AlloyDB ScaNN vector search.",
"tags": ["inventory", "search", "alloydb"],
"examples": ["Find stock for Industrial Widget X-9", "Who supplies ball bearings?"]
}]
}
- Перезапустите агент поставщика , чтобы он загрузил новую карту:
Шаг 1: Остановите работающее устройство.
pkill -f "uvicorn main:app.*8082"
Шаг 2: Перейдите в каталог агентов.
cd agents/supplier-agent
Шаг 3: Запустите агента снова.
uvicorn main:app --host 0.0.0.0 --port 8082 > /dev/null 2>&1 &
Команда `> /dev/null 2>&1 &` запускает сервер в фоновом режиме и подавляет вывод, чтобы он не прерывал работу терминала.
Шаг 4: Проверьте новую карту агента (подождите 2-3 секунды после начала).
curl http://localhost:8082/.well-known/agent-card.json
Ожидаемый результат: JSON с заполненными вами именем, описанием и навыками.

8. Шаг 4: Диспетчерская вышка
Запустите интерфейс Control Tower с помощью FastAPI + WebSockets. Он обнаруживает агентов через A2A и управляет полным циклом с обновлениями в реальном времени.
Запустить все службы
Самый простой способ запустить все сервисы:
Убедитесь, что вы находитесь в корневом каталоге репозитория.
pwd # Should end with: visual-commerce-gemini-3-alloydb
Затем,
sh run.sh
Эта единственная команда запускает:
- Прокси-сервер аутентификации AlloyDB (если не запущен)
- Агент Vision на порту 8081
- Представитель поставщика в порту 8082
- Диспетчерская вышка в порту 8080
Подождите примерно 10 секунд, пока все службы инициализируются.
Проверьте систему
Получите доступ к диспетчерской вышке:
- Нажмите кнопку «Предварительный просмотр веб-страницы» (значок глаза 👁️) на панели инструментов Cloud Shell.
- Выберите " Предварительный просмотр на порту 8080 "
- Панель управления диспетчерской вышки откроется в новой вкладке.
Запустите демоверсию:
- В правом верхнем углу: состояние подключения (зеленая точка «Live»), переключение между режимами DEMO/AUTO и элементы управления звуком.
- В центре : Основное рабочее поле с загрузкой изображений и визуализацией анализа.
- Боковые панели (появляются во время анализа): временная шкала рабочего процесса (слева), отслеживание прогресса и просмотр кода (справа).
Вариант 1: Быстрый старт (рекомендуется)
- На главной странице вы увидите раздел « Быстрый старт » с примерами изображений.
- Щелкните по любому изображению-образцу , чтобы автоматически начать анализ.
- Посмотрите, как работает автономный процесс (примерно 30-45 секунд).
Вариант 2: Загрузите свой собственный файл.
- Перетащите изображение склада/полки (PNG, JPG, до 10 МБ) или выберите нужный файл, нажав на него.
- Нажмите « Запустить автономный рабочий процесс ».
- Ознакомьтесь с четырехэтапным конвейером обработки данных.
Что происходит:
- Обнаружение агентов: в модальных окнах протокола A2A отображаются карточки агентов Vision и агентов-поставщиков с указанием их навыков и конечных точек.
- Анализ изображений: Gemini 3 Flash генерирует и выполняет код на Python (OpenCV) для подсчета элементов. Индикатор выполнения показывает подшаги. На обнаруженные элементы накладываются ограничивающие рамки. Значок результата показывает «✓ Код проверен» или «~ Предполагаемое значение».
- Поиск поставщика: анимация векторного поиска AlloyDB ScaNN. Отображается поисковый запрос (например, «промышленные металлические коробки»). В карточке результатов отображается найденная деталь, поставщик и оценка достоверности.
- Заказ оформлен: Чек с идентификатором заказа, количеством и подробной информацией.
Совет: Оставьте режим DEMO включенным (в правом верхнем углу), чтобы приостанавливать работу на каждом этапе для презентаций. В режиме AUTO рабочий процесс выполняется непрерывно.

Что только что произошло?
Диспетчерская вышка использовала протокол A2A для обнаружения обоих агентов через файл /.well-known/agent-card.json, организовала анализ изображений (Gemini 3 Flash с выполнением кода), выполнила векторный поиск (AlloyDB ScaNN) и разместила автономный заказ — всё с обновлениями WebSocket в реальном времени. Каждый агент предоставляет свои возможности через стандарт A2A, что позволяет создавать конфигурации по принципу «подключи и работай» без использования пользовательских SDK. Подробнее: Протокол A2A
Поиск неисправностей
Ошибки, связанные с путями:
- Сообщение " Нет такого файла или каталога " при выполнении команд означает, что вы находитесь не в корневом каталоге репозитория.
# Check where you are
pwd
# If you're lost, navigate to home and back to repo
cd
cd visual-commerce-gemini-3-alloydb
Ошибки сервиса:
- " Адрес уже используется ": Процессы из предыдущих запусков все еще активны.
# Kill all services and restart
pkill -f uvicorn
sh run.sh # Or manually restart individual agents
- Службы не запускаются : проверьте, не заняты ли порты:
# Check which processes are using the ports
lsof -i :8080 # Control Tower
lsof -i :8081 # Vision Agent
lsof -i :8082 # Supplier Agent
- Сообщение "Соединение с AlloyDB отклонено": Убедитесь, что прокси-сервер аутентификации запущен:
ps aux | grep alloydb-auth-proxy
Проблемы с подключением к AlloyDB:
Если вы видите сообщение "Подключение к серверу по адресу 127.0.0.1, порт 5432 не удался":
Если вы видите сообщение "Подключение к серверу по адресу 127.0.0.1, порт 5432 не удался":
- Проверка прокси-сервера аутентификации: ps aux | grep alloydb-auth-proxy
- Проверка включения публичного IP-адреса: gcloud alloydb instances describe INSTANCE_NAME –cluster=CLUSTER_NAME –region=us-central1 –format="value(ipAddress)"
- Для локальной разработки (без использования Cloud Shell):
- Проблема : Cloud Shell работает автоматически, но локальным компьютерам необходимы авторизованные сети.
- Решение : Повторно запустите sh setup.sh и выберите вариант 1 (authorize 0.0.0.0/0) при появлении соответствующего запроса.
- Примечание по безопасности : Даже при использовании адреса 0.0.0.0/0 для установления соединения требуется:
- Действительные учетные данные GCP (учетные данные приложения по умолчанию)
- пароль базы данных
- Шифрование mTLS (за это отвечает Auth Proxy)
9. Уборка
Во избежание дополнительных расходов удалите все ресурсы с помощью автоматического скрипта очистки:
# From repo root
sh cleanup.sh
Это безопасно удаляет:
- Кластер AlloyDB (основной фактор, влияющий на стоимость)
- Сервисы Cloud Run (если развернуты)
- Связанные сервисные счета
Перед удалением скрипт запросит подтверждение.
10. Список литературы и дополнительные материалы
Все технические утверждения в этом практическом занятии проверены на основе официальной документации Google Cloud и Google AI.
Официальная документация
Gemini 3 Flash:
- API выполнения кода: https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/code-execution-api
- Руководство для разработчиков: https://ai.google.dev/gemini-api/docs/gemini-3
- Документация по модели: https://docs.cloud.google.com/vertex-ai/generative-ai/docs/models/gemini/3-flash
- Модель карты: https://deepmind.google/models/gemini/flash/
AlloyDB AI & ScaNN:
- Результаты тестов производительности ScaNN: https://cloud.google.com/blog/products/databases/how-scann-for-alloydb-vector-search-compares-to-pgvector-hnsw
- Понимание индекса ScaNN: https://cloud.google.com/blog/products/databases/understanding-the-scann-index-in-alloydb
- Подробный анализ AlloyDB AI: https://cloud.google.com/blog/products/databases/alloydb-ais-scann-index-improves-search-on-all-kinds-of-data
- Рекомендации по оптимизации производительности: https://docs.cloud.google.com/alloydb/docs/ai/best-practices-tuning-scann
- Документация AlloyDB: https://cloud.google.com/alloydb/docs
Информация о ценах:
- Цены на API Gemini: https://ai.google.dev/gemini-api/docs/pricing
- Цены на AlloyDB: https://cloud.google.com/alloydb/pricing
- Цены на Vertex AI: https://cloud.google.com/vertex-ai/pricing
Подтвержденные заявления о производительности
Особенность | Требовать | Источник |
ScaNN против HNSW (отфильтровано) | В 10 раз быстрее | Блог Google Cloud (проверено) |
ScaNN против HNSW (стандарт) | В 4 раза быстрее | Блог Google Cloud (проверено) |
Объем памяти, занимаемый ScaNN | в 3-4 раза меньше | Блог Google Cloud (проверено) |
Время построения индекса ScaNN | В 8 раз быстрее | Блог Google Cloud (проверено) |
Таймаут выполнения кода | максимум 30 секунд | Документация Google Cloud (проверено) |
Ввод-вывод файлов выполнения кода | Не поддерживается | Документация Google Cloud (проверено) |
Поведение при температуре = 0 | Детерминированный результат | Подтверждено сообществом |
Дополнительные ресурсы
Протокол взаимодействия между агентами (A2A):
- A2A стандартизирует обнаружение агентов и обмен информацией.
- Карты агентов размещены по адресу
/.well-known/agent-card.json - Формирующийся стандарт для взаимодействия автономных агентов
Исследование ScaNN:
- На основе 12 лет исследований Google.
- Обеспечивает работу Google Search и YouTube в масштабах миллиарда пользователей.
- Дата выхода в широкую продажу: октябрь 2024 года.
- Первый векторный индекс PostgreSQL, подходящий для векторов объемом от миллионов до миллиардов.
11. Режим испытаний: Повышайте уровень своих агентских навыков.
Вы создали работающую автономную цепочку поставок. Готовы двигаться дальше? Эти задачи позволят применить изученные вами методы к решению новых проблем.
Задача 1: Поиск на основе изображений (мультимодальные встраивания)
Текущий алгоритм: Агент Vision подсчитывает количество элементов → генерирует текстовый запрос → Агент Supplier встраивает текст → выполняет поиск в AlloyDB
Задача: Полностью обойтись без текста — отправить обрезанное изображение напрямую агенту поставщика.
Подсказки:
- Выполнение кода Vision Agent позволяет вырезать отдельные элементы из изображения на полке.
- Модель multimodalembedding@001 от Vertex AI может напрямую встраивать изображения.
- Измените файл inventory.py, чтобы он принимал байты изображения вместо текста.
- Обновите описание навыка A2A, указав: «Принимает: изображения/jpeg или текст».
Почему это важно: Визуальный поиск более точен для деталей со сложным внешним видом (цветовые вариации, повреждения, различия в упаковке).
Задача 2: Наблюдаемость — Доверие через прозрачность
Текущее состояние: Система работает, но заглянуть "под капот" невозможно.
Задача: Проанализировать журналы запросов AlloyDB, чтобы доказать, что векторный поиск выполняется.
Шаги:
- Функция анализа запросов включена по умолчанию в AlloyDB. Для проверки выполните:
gcloud alloydb instances describe INSTANCE_NAME \
--cluster=CLUSTER_NAME \
--region=us-central1 \
--format="value(queryInsightsConfig.queryPlansPerMinute)"
- Выполните поиск поставщика через пользовательский интерфейс.
- Посмотреть фактический выполненный SQL-запрос:
gcloud logging read \
'resource.type="alloydb.googleapis.com/Instance" AND textPayload:"ORDER BY part_embedding"' \
--limit 5 \
--format=json
Ожидаемый результат: Вы увидите точный запрос ORDER BY part_embedding <=> $1::vector LIMIT 1 с указанием времени выполнения.
Почему это важно: Наблюдаемость укрепляет доверие. Когда заинтересованные стороны спрашивают: «Как этот агент принимает решения?», вы можете показать им план выполнения запроса, а не только результат.
Задача 3: Составление многоагентной структуры
Задача: Добавить третьего агента (агента по логистике), который будет рассчитывать стоимость доставки на основе местоположения склада и веса товара.
Архитектура:
- Результаты работы Vision Agent: количество элементов
- Выходные данные агента поставщика: местоположение поставщика
- Входные данные для логистического агента (НОВИНКА): пункт назначения, вес → выходные данные: стоимость доставки + расчетное время прибытия
Подсказка: Протокол A2A делает это тривиальным — создайте новую карточку агента с навыком calculate_shipping. Центр управления обнаружит её автоматически.
Изучаемый шаблон: это ядро агентно-ориентированной архитектуры — сложных систем, построенных из небольших, компонуемых специалистов.
12. Заключение
Вы успешно перешли от генеративного ИИ к агентному ИИ .
Что мы построили:
- Наша цель: мы заменили «угадывание» выполнением кода (прошивка Gemini 3 через API-ключ).
- Память: Мы заменили "медленный поиск" на AlloyDB ScaNN (через GCP).
- Действие: Мы заменили "интеграцию API" протоколом A2A .
Преимущества гибридной архитектуры:
В этом практическом занятии был продемонстрирован гибридный подход:
- Vision Agent: Использует API Gemini (ключ API) — доступен простой бесплатный тариф, не требуется оплата через GCP.
- Агент поставщика: использует GCP (Vertex AI + AlloyDB) — решение корпоративного уровня, готовое к соблюдению нормативных требований.
Это архитектура автономной экономики. Код остаётся за вами.
Следующие шаги