1. Обзор
В этой лабораторной работе вы будете использовать продукты генеративного ИИ от Google для создания инфраструктуры в Google Cloud с помощью Gemini Cloud Assist, выполнять запросы к данным BigQuery, используя возможности преобразования естественного языка в SQL от Data Canvas, писать код в блокнотах Jupyter Colab Enterprise и в Eclipse Theia (Visual Studio Code) с помощью Gemini Code Assist, а также интегрировать функции поиска и чата на основе ИИ, созданные на базе Cloud Storage и BigQuery, в Vertex AI Agent Builder.
Наша цель — создать веб-сайт с рецептами и кулинарными материалами под названием AI Recipe Haven. Сайт будет разработан на Python и Streamlit и будет содержать две основные страницы. На странице «Советы по приготовлению пищи» будет размещен чат-бот, который мы создадим с помощью Gemini и Vertex AI Agent Builder, основанный на наборе кулинарных книг, и он будет предлагать советы по приготовлению пищи и отвечать на вопросы, связанные с кулинарией. Страница «Поиск рецептов» будет поисковой системой, использующей данные из Gemini, на этот раз основанной на базе данных рецептов BigQuery.
Если у вас возникнут трудности с каким-либо кодом в этом упражнении, решения для всех файлов кода находятся в репозитории GitHub, посвященном упражнению, в ветке решений .
Цели
В этой лабораторной работе вы научитесь выполнять следующие задачи:
- Активируйте и используйте Gemini Cloud Assist.
- Создайте поисковое приложение в Vertex AI Agent Builder для чат-бота, предоставляющего советы по приготовлению пищи.
- Загрузка и очистка данных в блокноте Colab Enterprise с помощью Gemini Code Assist.
- Создайте приложение поиска в Vertex AI Agent Builder для генератора рецептов.
- Создайте основу веб-приложения на Python и Streamlit с небольшой помощью Gemini.
- Разверните веб-приложение в Cloud Run.
- Подключите страницу с советами по приготовлению пищи к нашему приложению Agent Builder для поиска кулинарных книг.
- (Необязательно) Подключите страницу поиска рецептов к приложению Agent Builder для поиска рецептов.
- (Необязательно) Ознакомьтесь с финальной версией приложения.
2. Настройка и требования
Перед тем как нажать кнопку «Начать лабораторию»
Ознакомьтесь с этими инструкциями. Лабораторные работы ограничены по времени, и вы не можете их приостановить. Таймер, который запускается при нажатии кнопки «Начать лабораторную работу», показывает, как долго вам будут доступны ресурсы Google Cloud.
Этот практический лабораторный практикум Qwiklabs позволяет вам самостоятельно выполнить задания в реальной облачной среде, а не в симуляционной или демонстрационной среде. Для этого вам предоставляются новые временные учетные данные, которые вы используете для входа в Google Cloud на протяжении всего лабораторного практикума.
Что вам нужно
Для выполнения этой лабораторной работы вам потребуется:
- Наличие стандартного интернет-браузера (рекомендуется браузер Chrome).
- Пора завершить лабораторную работу.
Примечание: Если у вас уже есть личный аккаунт или проект в Google Cloud, не используйте его для этой лабораторной работы.
Примечание: Если вы используете Pixelbook, откройте окно в режиме инкогнито, чтобы запустить эту лабораторную работу.
Как запустить свою лабораторию и войти в консоль Google Cloud
- Нажмите кнопку «Начать лабораторную работу». Если вам нужно оплатить лабораторную работу, откроется всплывающее окно, где вы сможете выбрать способ оплаты. Слева находится панель с временными учетными данными, которые необходимо использовать для этой лабораторной работы.

- Скопируйте имя пользователя, а затем нажмите «Открыть Google Console». Программа запустит ресурсы, а затем откроет новую вкладку со страницей входа в систему.

Совет: открывайте вкладки в отдельных окнах, расположенных рядом.
Если вы видите страницу «Выберите учетную запись», нажмите «Использовать другую учетную запись».

- На странице входа в систему вставьте имя пользователя, скопированное из панели «Сведения о подключении». Затем скопируйте и вставьте пароль.
Важно: Необходимо использовать учетные данные из панели «Подробности подключения». Не используйте свои учетные данные Qwiklabs. Если у вас есть собственная учетная запись Google Cloud, не используйте ее для этой лабораторной работы (это позволит избежать дополнительных расходов). 4. Перейдите по следующим страницам:
- Примите условия и положения.
- Не добавляйте параметры восстановления или двухфакторную аутентификацию (поскольку это временная учетная запись).
- Не регистрируйтесь для получения бесплатных пробных версий.
Через несколько мгновений в этой вкладке откроется облачная консоль.
Примечание: Чтобы просмотреть меню со списком продуктов и сервисов Google Cloud, нажмите на кнопку «Навигация» в левом верхнем углу.

3. Задание 0. Проверьте кластер рабочих станций.
В последующей части этой лабораторной работы вы будете использовать Google Cloud Workstation для выполнения некоторых задач разработки. Процесс запуска этой лабораторной работы должен был начать создание кластера на вашей рабочей станции. Прежде чем продолжить, давайте убедимся, что кластер создается.
- В консоли Google Cloud воспользуйтесь полем поиска, чтобы перейти к разделу «Облачные рабочие станции» .
- Для просмотра раздела «Управление кластером» используйте навигационное меню в левой части экрана.
- Если кластер находится в состоянии «Обновление», значит, все в порядке, и вы можете перейти к Заданию 1. Если вы не видите кластеров ни в каком состоянии, обновите страницу. Если вы по-прежнему не видите кластер в состоянии «Обновление (построение)», завершите эту лабораторную работу, используя кнопку в верхнем левом углу этих инструкций, и перезапустите ее.
4. Задание 1. Активируйте и используйте Gemini Cloud Assist.
В этом задании мы активируем и будем использовать Gemini Cloud Assist. Работая в консоли Google Cloud, Gemini Cloud Assist может давать советы, помогать в создании, настройке и мониторинге вашей инфраструктуры Google Cloud, а также предлагать команды gcloud и писать скрипты Terraform.
- Чтобы активировать Cloud Assist, щелкните в поле поиска в верхней части интерфейса Cloud Console и выберите «Спросить Gemini» (или формулировка может быть «Спросить Gemini для Cloud Console »).
- Прокрутите страницу до раздела «Необходимый API» и включите Gemini для Google Cloud API.
- Если вы сразу не видите интерфейс чата, нажмите «Начать чат» . Начните с того, что попросите Gemini объяснить некоторые преимущества использования облачных рабочих станций. Уделите несколько минут изучению полученного ответа.
- Далее, спросите о преимуществах Agent Builder и о том, как он может помочь в формировании генеративных ответов.
- Наконец, давайте сравним результаты. В окне чата Gemini в консоли Google Cloud задайте следующий вопрос:
What are the major steps to creating a search app grounded in a
GCS data source using Vertex AI Agent builder?
- Теперь в обычном режиме (не в режиме инкогнито) перейдите на общедоступный сайт Gemini (ссылка здесь), войдите в систему, если необходимо, и задайте тот же вопрос. Ответы одинаковые или хотя бы похожие? Какие конкретные шаги? Какой из вариантов заметно лучше? В любом случае, запомните ответы, когда мы будем переходить к следующим шагам.
Примечание: Если вы попытаетесь выполнить описанный выше шаг, используя временную учетную запись Qwiklabs, ваша учетная запись будет заблокирована. Если ваша рабочая учетная запись также заблокирована, поскольку ваша организация не разрешает использование веб-приложения Gemini, просто пропустите этот шаг и перейдите к следующему. Это не повлияет на вашу возможность выполнить это упражнение.
5. Задание 2. Создайте поисковое приложение в Vertex AI Agent Builder для чат-бота, предоставляющего советы по приготовлению пищи.
На создаваемом нами веб-сайте будет страница с советами по приготовлению пищи, содержащая чат-бот, разработанный для помощи пользователям в поиске ответов на вопросы, связанные с кулинарией. Он будет работать на платформе Gemini, основанной на базе данных, содержащей 70 общедоступных кулинарных книг. Эти книги будут служить источником достоверной информации, которую Gemini использует при ответе на вопросы.
- Воспользуйтесь поисковой строкой в Cloud Console, чтобы перейти к Vertex AI . На панели управления нажмите « Включить все рекомендуемые API» . Если появится всплывающее окно о необходимости включения самого API Vertex AI, включите его также.
- Воспользуйтесь поиском, чтобы перейти к Agent Builder, затем нажмите «Продолжить» и «Активировать API» .
- Как уже предлагала компания Gemini в нашем предыдущем совете, создание поискового приложения в Agent Builder начинается с создания авторитетного источника данных. Когда пользователь выполняет поиск, Gemini понимает вопрос и как составить грамотные ответы, но она будет обращаться к достоверному источнику информации, используемой в ответе, а не полагаться на свои собственные знания.
В меню слева перейдите в раздел «Хранилища данных» и выберите «Создать хранилище данных». 4. Используемые нами для создания страницы с советами по приготовлению пищи книги рецептов, находящиеся в общественном доступе, в настоящее время хранятся в хранилище Cloud Storage во внешнем проекте. Выберите тип источника Cloud Storage. 5. Изучите, но не изменяйте параметры по умолчанию, связанные с типом импортируемой информации. Оставьте тип импорта «Папка», а путь к хранилищу используйте: labs.roitraining.com/labs/old-cookbooks , затем нажмите «Продолжить ». 6. Назовите хранилище данных: old-cookbooks . Отредактируйте и измените идентификатор на old-cookbooks-id и создайте хранилище данных.
Vertex AI Agent Builder поддерживает несколько типов приложений, и хранилище данных выступает источником достоверной информации для каждого из них. Приложения для поиска подходят для общего использования и поиска. Приложения для чата предназначены для генеративных потоков в приложениях чат-ботов/голосовых ботов, управляемых Dataflow. Приложения для рекомендаций помогают создавать более эффективные системы рекомендаций. А приложения-агенты предназначены для создания агентов, управляемых GenAI. В конечном итоге, приложение-агент, вероятно, лучше всего подойдет для наших целей, но, поскольку продукт в настоящее время находится в режиме предварительного просмотра, мы будем использовать тип приложения «Поиск». 7. Используйте меню слева, чтобы перейти к разделу «Приложения» , затем нажмите «Создать приложение» . 8. Выберите тип приложения «Поиск». Изучите, но не изменяйте различные параметры. Назовите приложение: cookbook-search . Отредактируйте и установите идентификатор приложения на cookbook-search-id . Укажите компанию Google и продолжите . 9. Проверьте хранилище данных old-cookbooks которое вы создали несколько шагов назад, и создайте приложение «Поиск».
Если вы посмотрите вкладку «Действия» , то, скорее всего, увидите, что книги рецептов все еще импортируются и индексируются. Индексирование тысяч страниц, содержащихся в 70 предоставленных нами книгах рецептов, займет у Agent Builder более 5 минут. Пока это происходит, давайте загрузим и очистим некоторые данные базы данных рецептов для нашего генератора рецептов.
6. Задание 3. Загрузка и очистка данных в блокноте Colab Enterprise с помощью Gemini Code Assist.
Google Cloud предлагает несколько основных способов работы с блокнотами Jupiter. Мы будем использовать новейшее предложение Google — Colab Enterprise. Некоторые из вас, возможно, знакомы с продуктом Google Colab , который широко используется частными лицами и организациями, желающими поэкспериментировать с блокнотами Jupiter в бесплатной среде. Colab Enterprise — это коммерческое предложение Google Cloud, полностью интегрированное с остальными облачными продуктами Google и в полной мере использующее возможности безопасности и соответствия требованиям среды GCP.
Одна из функций Colab Enterprise — интеграция с Google Gemini Code Assist. Code Assist можно использовать в различных редакторах кода, и он может предлагать советы, а также подсказки непосредственно в коде. Мы будем использовать этого генеративного помощника при обработке данных для наших рецептов.
- Воспользуйтесь поиском, чтобы перейти к Colab Enterprise и создать записную книжку . Если вам предложат поэкспериментировать с новыми функциями Colab, отклоните это предложение. Чтобы запустить среду выполнения и вычислительные мощности, лежащие в основе записной книжки, нажмите «Подключить» в правом верхнем углу вашей новой записной книжки.

- Используйте меню с тремя точками рядом с названием текущего блокнота на панели «Файлы Colab Enterprise», чтобы переименовать его
Data Wrangling.

- Создайте новое текстовое поле типа "+" и с помощью стрелки вверх переместите его так, чтобы оно стало первой ячейкой на странице.

- Отредактируйте текстовое поле и введите:
# Data Wrangling
Import the Pandas library
- В блоке кода под только что созданным текстовым блоком начните вводить imp, и Gemini Code Assist предложит остальную часть импорта серым цветом. Нажмите Tab , чтобы принять предложение.
import pandas as pd
- Ниже поля для импортного кода создайте еще одно текстовое поле и введите:
Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records.
- Создайте и отредактируйте еще один блок кода. Снова начните набирать df и изучите сгенерированный Gemini Code Assistant код. Если вы видите выпадающий список ключевых слов Python поверх сгенерированного предложения, нажмите Escape, чтобы увидеть предложенный код светло-серого цвета. Снова нажмите Tab, чтобы принять предложение. Если ваше предложение не содержало вызов функции head(), добавьте его.
df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
df.head()
- Щелкните в первой ячейке кода, куда вы импортировали Pandas, и используйте меню «Команды» или клавиатуру, чтобы запустить выбранную ячейку. На клавиатуре сочетание клавиш Shift+Enter запустит ячейку и переместит фокус на следующую ячейку, создав ее при необходимости. Дождитесь завершения выполнения ячейки, прежде чем переходить к следующей.
Примечание: Если ячейка еще не выполнена, слева от нее вы увидите [ ]. Во время выполнения ячейки будет отображаться вращающаяся анимация. После завершения работы ячейки появится число, например [13]. 9. Выполните ячейку, которая загружает CSV-файл в DataFrame. Дождитесь загрузки файла и изучите первые пять строк данных. Это данные рецепта, которые мы загрузим в BigQuery и в конечном итоге будем использовать для создания генератора рецептов. 10. Создайте новый блок кода и введите следующий комментарий. После ввода комментария перейдите к следующей строке кода, и вы должны получить подсказку df.columns . Примите ее, затем запустите ячейку.
# List the current DataFrame column names
Мы только что продемонстрировали, что у вас есть два варианта получения справки от Gemini Code Assist в блокноте Jupyter: текстовые ячейки над ячейками с кодом или комментарии внутри самой ячейки с кодом. Комментарии внутри ячеек с кодом хорошо работают в блокнотах Jupyter, но этот подход также будет работать в любой другой IDE, поддерживающей Gemini Code Assist от Google.
- Давайте немного наведём порядок в столбцах. Переименуйте столбец
Unnamed: 0вidиlinkсuri. Используйте любой из предложенных способов ввода кода через командную строку, а затем запустите ячейку, когда будете удовлетворены результатом.
# Rename the column 'Unnamed: 0' to 'id' and 'link' to 'uri'
df.rename(columns={'Unnamed: 0': 'id', 'link': 'uri'}, inplace=True)
- Удалите столбцы
sourceиNERи используйтеhead()для просмотра первых нескольких строк. Снова обратитесь за помощью к Gemini. Выполните последние две строки и изучите результаты.
# Remove the source and NER columns
df.drop(columns=['source', 'NER'], inplace=True)
df.head()
- Давайте посмотрим, сколько записей в нашем наборе данных. Снова начнем с выбранного вами метода запроса и посмотрим, сможете ли вы попросить Gemini помочь вам сгенерировать код.
# Count the records in the DataFrame
df.shape # count() will also work
- 2,23 миллиона записей — это, вероятно, больше рецептов, чем у нас есть времени. Процесс индексирования в Agent Builder, скорее всего, займет слишком много времени для нашего сегодняшнего упражнения. В качестве компромисса давайте выберем 150 000 рецептов и будем работать с ними. Используйте подход с приглашением командной строки и кодом, чтобы взять выборку и сохранить ее в новом DataFrame с именем
dfs(s означает small).
# Sample out 150,000 records into a DataFrame named dfs
dfs = df.sample(n=150000)
- Исходные данные о рецептах готовы к загрузке в BigQuery. Прежде чем приступить к загрузке, давайте перейдем в BigQuery и подготовим набор данных для нашей таблицы. В консоли Google Cloud используйте поле поиска, чтобы перейти к BigQuery . Вы также можете щелкнуть правой кнопкой мыши по BigQuery и открыть его в новой вкладке браузера.
- Если панель чата Gemini AI еще не видна, откройте ее, используя логотип Gemini в правом верхнем углу Cloud Console. Если вас попросят снова включить API, нажмите «Включить» или обновите страницу. Выполните запрос:
What is a dataset used for in BigQuery?После изучения ответа задайте вопрос:How can I create a dataset named recipe_data using the Cloud Console?Сравните результаты с результатами следующих нескольких шагов.

- В панели BigQuery Explorer щелкните меню действий просмотра с тремя точками рядом с идентификатором вашего проекта. Затем выберите «Создать набор данных» .

- Укажите набор данных и его ID
recipe_data. Тип местоположения оставьте US и выберите Create Dataset . Если вы получите ошибку о том, что набор данных уже существует, просто перейдите к следующему шагу.
После создания набора данных в BigQuery, давайте вернемся к нашему блокноту и выполним вставку. 19. Вернитесь к блокноту «Обработка данных» в Colab Enterprise. В новой ячейке кода создайте переменную с именем project_id и используйте ее для хранения текущего идентификатора проекта. Посмотрите в верхнем левом углу этих инструкций, под кнопкой «Завершить лабораторную работу», и вы найдете текущий идентификатор проекта. При желании его также можно найти на главной странице Cloud Console. Присвойте значение переменной project_id и запустите ячейку.
# Create a variable to hold the current project_id
project_id='YOUR_PROJECT_ID'
- Используйте подход «подсказка > код», чтобы создать блок кода, который вставит DataFrame
dfsв таблицу с именемrecipesв только что созданном наборе данныхrecipe_data. Запустите ячейку.
dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')
7. Задание 4. Создайте приложение поиска в Vertex AI Agent Builder для генератора рецептов.
Отлично, создав таблицу с данными о рецептах, давайте используем её для построения надёжного источника данных для нашего генератора рецептов. Мы будем использовать подход, аналогичный тому, что мы применяли для нашего кулинарного чат-бота. Мы воспользуемся Vertex AI Agent Builder для создания хранилища данных, а затем будем использовать его в качестве источника достоверной информации для поискового приложения.
При желании вы можете попросить Gemini в консоли Google Cloud напомнить вам о шагах по созданию поискового приложения Agent Builder, или же вы можете следовать инструкциям, приведенным ниже.
- Воспользуйтесь поиском, чтобы перейти к Agent Builder . Откройте Data Stores и Create Data Store . На этот раз выберите тип хранилища данных BigQuery.
- В ячейке выбора таблицы нажмите «Обзор» и найдите
recipes. Выберите переключатель рядом с вашей таблицей. Если вы видите рецепты из других проектов qwiklabs-gcp-..., обязательно выберите тот, который принадлежит вам.
Примечание: Если вы щелкнете по recipes вместо выбора переключателя рядом с ними, откроется новая вкладка в вашем браузере, и вы перейдете на страницу обзора таблиц в BigQuery. Просто закройте вкладку браузера и выберите переключатель в Agent Builder. 3. Изучите, но не изменяйте остальные параметры по умолчанию, затем продолжите . 4. На странице обзора схемы изучите начальные конфигурации по умолчанию, но ничего не меняйте. Продолжите. 5. Назовите хранилище данных recipe-data . Измените идентификатор хранилища данных и установите его на recipe-data-id . Создайте хранилище данных. 6. Перейдите в раздел «Приложения» с помощью навигационного меню слева и выберите «Создать приложение» . 7. Снова выберите приложение «Поиск». Назовите приложение recipe-search и установите идентификатор recipe-search-id . Установите название компании на Google и продолжите . 8. На этот раз проверьте источники данных recipe-data . Создайте приложение.
Индексирование нашей таблицы базы данных займет некоторое время. Пока это происходит, давайте поэкспериментируем с новым инструментом Data Canvas в BigQuery и посмотрим, сможем ли мы найти пару интересных рецептов. 9. Используйте поле поиска, чтобы перейти к BigQuery . В верхней части BigQuery Studio щелкните стрелку вниз рядом с самой правой вкладкой и выберите Data Canvas . Установите регион на us-central1 .

- В поле поиска на холсте данных найдите
recipesи добавьте на холст свою таблицу. - Визуальное представление вашей таблицы рецептов будет загружено в рабочую область данных BigQuery. Вы можете изучить схему таблицы, предварительно просмотреть данные в таблице и изучить другие детали. Под представлением таблицы нажмите кнопку «Запрос» .
- На холсте загрузится более или менее типичное диалоговое окно запроса BigQuery с одним дополнением: над окном запроса находится текстовое поле, которое можно использовать для запроса справки у Gemini. Давайте посмотрим, сможем ли мы найти какие-нибудь рецепты тортов в нашем примере. Запустите следующую команду (набрав текст и нажав Enter/Return для запуска генерации SQL-запроса):
Please select the title and ingredients for all the recipes with a title that contains the word cake.
- Просмотрите сгенерированный SQL-запрос. Когда вы будете удовлетворены результатом, выполните запрос.
- Неплохо! Не стесняйтесь поэкспериментировать с другими подсказками и вопросами, прежде чем двигаться дальше. Во время экспериментов пробуйте менее конкретные подсказки, чтобы понять, что работает, а что нет. Например, вот эта подсказка:
Do I have any chili recipes?
(Не забудьте выполнить новый запрос) Возвращался список рецептов чили, но ингредиенты отсутствовали, пока я не изменил его следующим образом:
Do I have any chili recipes? Please include their title and ingredients.
(Да, я говорю «пожалуйста», когда меня об этом спрашивают. Моя мама бы очень мной гордилась.)
Я заметила, что в одном из рецептов чили есть грибы, а кому они нужны в чили? Я попросила Близнецов помочь мне исключить эти рецепты.
Do I have any chili recipes? Please include their title and ingredients, and ignore any recipes with mushrooms as an ingredient.
8. Задание 5. Создайте основу веб-приложения на Python и Streamlit с небольшой помощью Gemini.
После того, как оба наших хранилища данных Vertex AI Agent Builder проиндексированы, а наши поисковые приложения почти готовы к запуску, давайте приступим к созданию нашего веб-приложения.
В процессе работы мы будем использовать Gemini Code Assist. Более подробную информацию об использовании Gemini Code Assist в Visual Studio Code см. в документации здесь.
Мы будем разрабатывать приложения на Google Cloud Workstation; в нашем случае это облачная среда разработки, предварительно установленная с Eclipse Theia (Visual Studio Code с открытым исходным кодом). Автоматизированный скрипт в этом упражнении уже создал для нас кластер и конфигурацию Cloud Workstation, но нам еще нужно создать саму Cloud Workstation. Если вам нужна дополнительная информация о Cloud Workstation и их использовании, обратитесь в Gemini Cloud Assist :-)
- Воспользуйтесь поиском, чтобы перейти к разделу «Облачные рабочие станции» , затем выберите «Создать рабочую станцию» . Назовите рабочую станцию
dev-envи используйте конфигурацию my-config . Создайте рабочую станцию. - Через несколько минут вы увидите свою новую рабочую станцию в списке «Мои рабочие станции». Запустите
dev-env, и как только она запустится, запустите среду разработки. - Редактор рабочей станции откроется в новой вкладке браузера, и через несколько мгновений вы увидите знакомый интерфейс Theia (Visual Studio Code). В левой части интерфейса разверните вкладку «Управление версиями» и нажмите «Клонировать репозиторий» .

- Чтобы перейти к репозиторию, введите
https://github.com/haggman/recipe-app. Клонируйте репозиторий в свою папкуuser, затем откройте клонированный репозиторий для редактирования. - Прежде чем мы изучим клонированную папку и начнем работу над нашим веб-приложением, нам необходимо подключить плагин Cloud Code для редактора к Google Cloud и включить Gemini. Давайте сделаем это сейчас. В левом нижнем углу редактора нажмите Cloud Code — Войти . Если вы не видите ссылку, подождите минуту и проверьте еще раз.

- В окне терминала отобразится длинный URL-адрес. Откройте этот URL-адрес в браузере и выполните шаги для предоставления Cloud Code доступа к вашей среде Google Cloud. Убедитесь, что при аутентификации вы используете свою временную
student-...учетную запись, а не личную учетную запись Google Cloud. В последнем диалоговом окне скопируйте код подтверждения и вставьте его обратно в окно терминала на вкладке браузера Cloud Workstation. - Через несколько мгновений ссылка Cloud Code в левом нижнем углу редактора изменится на Cloud Code - No Project . Щелкните по новой ссылке, чтобы выбрать проект. В верхней части редактора должна открыться панель команд. Щелкните «Выбрать проект Google Cloud» и выберите свой проект qwiklabs-gcp-... Через несколько мгновений ссылка в левом нижнем углу редактора обновится, отображая идентификатор вашего проекта. Это означает, что Cloud Code успешно подключен к вашему рабочему проекту.
- Теперь, когда Cloud Code подключен к вашему проекту, вы можете активировать Gemini Code Assist. В правом нижнем углу интерфейса редактора нажмите на перечеркнутый логотип Gemini. Слева от редактора откроется панель чата Gemini. Нажмите «Выбрать проект Google Cloud» . Когда откроется панель команд, выберите свой проект qwiklabs-gcp-... Если вы все сделали правильно (и Google ничего не изменил), то теперь вы должны увидеть активное окно чата Gemini.

- Наконец, давайте настроим окно терминала редактора. Используйте меню-гамбургер > Вид > Терминал , чтобы открыть окно терминала. Выполните команду
gcloud init. Снова воспользуйтесь ссылкой, чтобы разрешить терминалу Cloud Shell работать с вашим проектомqwiklabs-gcp-...Когда появится запрос, выберите числовой вариант вашего проектаqwiklabs-gcp-... - Отлично, теперь, когда терминал, чат Gemini и настройки Cloud Code настроены, откройте вкладку «Проводник» и уделите несколько минут изучению файлов текущего проекта.

- В Проводнике откройте файл
requirements.txtдля редактирования. Переключитесь на панель чата Gemini и задайте вопрос:
From the dependencies specified in the requirements.txt file, what type of application are we building?
- Итак, мы создаём интерактивное веб-приложение на Python с использованием Streamlit, которое взаимодействует с Vertex AI и Discovery Engine, отлично. А теперь давайте сосредоточимся на компонентах веб-приложения. Как говорит Gemini, Streamlit — это фреймворк для создания веб-приложений, управляемых данными, на Python. Теперь спросите:
Does the current project's folder structure seem appropriate for a Streamlit app?s
Именно здесь у Gemini часто возникают проблемы. Gemini может получить доступ к файлу, открытому в данный момент в редакторе, но он не может увидеть весь проект целиком. Попробуйте задать такой вопрос:
Given the below, does the current project's file and folder structure seem appropriate for a Streamlit app?
- build.sh
- Home.py
- requirements.txt
- pages
-- Cooking_Advice.py
-- Recipe_Search.py
Нашли более подходящий ответ?
- Давайте получим больше информации о Streamlit:
What can you tell me about Streamlit?
Отлично, значит, Gemini предлагает нам хороший обзор, включая плюсы и минусы.
- Если вы хотите узнать о недостатках, вы можете спросить:
What are the major downsides or shortcomings?
Обратите внимание, нам не нужно было говорить «из Streamlit», потому что чат Gemini — это диалог (многоходный). Gemini понимает, о чём мы говорили, потому что мы находимся в чате. Если в какой-то момент вы захотите очистить историю чата Gemini, воспользуйтесь значком корзины в верхней части окна чата Gemini.
9. Задание 6: Разверните веб-приложение в Cloud Run
Отлично, основная структура нашего приложения уже создана, но будет ли всё это работать? А ещё лучше, где нам лучше разместить его в Google Cloud?
- В окне чата Gemini задайте вопрос:
If I containerize this application, what compute technologies
in Google Cloud would be best for hosting it?
- Помните, что если вы ещё не работали в своей IDE, вы также можете использовать Google Cloud Assist. Откройте консоль Google Cloud, затем откройте Gemini Cloud Assist и задайте вопрос:
If I have a containerized web application, where would be the
best place to run it in Google Cloud?
Были ли эти два набора рекомендаций одинаковыми? Согласны ли вы с какими-либо из рекомендаций или нет? Помните, что Gemini — это генеративный ИИ-помощник, и, как и в случае с человеком-помощником, вы не всегда будете соглашаться со всем, что он говорит. Тем не менее, наличие такого помощника всегда рядом с вами во время работы в Google Cloud и в редакторе кода может значительно повысить вашу эффективность.
- Для веб-приложения в контейнере, работающего без сохранения состояния и имеющего короткий срок жизни, Cloud Run станет отличным вариантом. В окне чата Gemini вашего редактора кода попробуйте ввести следующую команду:
What steps would be required to run this application in
Cloud Run?
- Похоже, первое, что нам нужно сделать, это создать Dockerfile. Используя редактор, создайте файл с именем
Dockerfileв корневой папке вашего проекта. Убедитесь, что вы случайно не поместили его в папку pages. Откройте файл для редактирования. - Давайте воспользуемся боковой панелью чата Gemini, чтобы создать наш
Dockerfile. Используйте подсказку, подобную той, что приведена ниже. Когда результаты отобразятся в чате, используйте кнопку «+» рядом со значком копирования над предложенным Dockerfile, чтобы вставить предложенный код в Dockerfile.
Create a Dockerfile for the application in the current folder.
The dependencies are defined in requirements.txt and I want you
to use the Python 3 slim bookworm base image.
Gemini не всегда возвращает один и тот же ответ на один и тот же запрос. В первый раз, когда я запросил у Gemini Dockerfile, я получил именно тот файл, который я собираюсь вам предложить. Только что я получил предложение:
```docker
# Base image
FROM python:3-bookworm-slim
# Set working directory
WORKDIR /app
# Install dependencies
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
gcc \
python3-dev \
&& rm -rf /var/lib/apt/lists/*
# Install pip and virtualenv
RUN pip install --upgrade pip virtualenv
# Create virtual environment
RUN python3 -m venv venv
# Activate virtual environment
WORKDIR /app/venv/bin
RUN . activate
# Install Streamlit and libraries from requirements.txt
RUN pip install -r requirements.txt
# Copy application files
COPY . /app
# Expose port 8501 for Streamlit
EXPOSE 8501
# Start Streamlit app
CMD ["streamlit", "run", "main.py"]
That's a heck of a Dockerfile. I'd simplify it a bit. We don't need the apt-get section as anything needed for Python is already in our base image. Also, using a virtual environment in a Python container is a waste of space, so I'd remove that. The expose command isn't strictly necessary, but it's fine. Also, it's trying to start main.py which I don't have.
6. Tweak the Dockerfile so it resembles the following:
FROM python:3.11-slim-bookworm
WORKDIR /app
Скопируйте requirements.txt. Запустите pip install –no-cache-dir –upgrade pip &&
pip install –no-cache-dir -r requirements.txt
КОПИЯ . .
CMD ["streamlit", "run", "Home.py"]
7. We need a place in Google cloud where we can store our container image. Let's get a little help from Gemini. In the Google Cloud Console Gemini Cloud Assist ask:
Где в Google Cloud лучше всего хранить образы Docker?
8. If one of the answers you received is the Google Container Registry, then I guess Gemini hasn't gotten word that GCR is deprecated. Again, just like human assistants, you may get out of date or simply wrong answers (hallucinations). Always make sure to consider your choices carefully, even when Gemini is recommending something.
Let's go with Artifact Registry. Ask Gemini Cloud Assist how to create a docker registry in Artifact Registry named cooking-images.
Как с помощью gcloud создать реестр Docker в Artifact Registry?
9. Now ask Gemini how you could use Cloud Build to build a new image named `recipe-web-app` from the Dockerfile in the current folder.
Как я могу использовать gcloud для создания нового сервиса Cloud Run с именем recipe-web-app из образа с тем же именем из репозитория Artifact Registry, который мы только что создали?
10. To save you a little time, I've created a script that will create the Artifact Registry repo (if needed), use Cloud Build to build and push the image to the repo, and finally to deploy the application to Cloud Run. In your code editor use the **Explorer** view to open `build.sh` and explore the file.
11. Gemini can operate via the chat window, but it can also work directly in your code file using comments, like we used in the Data Wrangling notebook, and it also may be invoked using Control+i on Windows or Command+i on Mac. Click somewhere in the build.sh script file, activate Gemini using the appropriate Command+i / Control+i command.
<img src="img/61ac2c9a245a3695.png" alt="61ac2c9a245a3695.png" width="624.00" />
12. At the prompt enter the below. Examine and **Accept** the change.
Пожалуйста, оставьте комментарий к текущему файлу.
How cool is that?! How many times have you had to work with someone elses code, only to have to waste time gaining a base understanding of their commentless work before you can even start making your changes. Gemini to the rescue!
13. Let's build and deploy our application. In the terminal window execute the `build.sh` file.
.build.sh
14. If you watch the build process, first it will build the Artifact Registry docker repo. Then, it uses Cloud Build to create the container image from the Dockerfile in the local folder (since we didn't supply a `cloudbuild.yaml`). Lastly, the docker image will be deployed into a new Cloud Run service. At the end of the script you'll get a Cloud Run test URL to use.
Open the returned link in a new tab of your browser. Take a moment and explore the application's structure and pages. Nice, now we need a hook in our generative AI functionality.
## Task 7: Connect the Cooking Advice page to our cookbook-search Agent Builder app
We have the framework for the web application running, but we need to connect the two work pages to our two Vertex AI Agent Builder search apps. Let's start with Cooking Advice.
1. In the Google Cloud console use search to navigate to **Chat** in Vertex AI.
2. In the right hand settings page pane set the model to **gemini-1.5-flash-002**. Slide the output token limit up to the max so the model can return longer answers if needed. Open the **Safety Filter Settings**. Set Hate speech, Sexually explicit content, and Harassment content to **Block some**. Set Dangerous content to **Block few** and **Save**. We're setting Dangerous Content a bit lower because talking about knives and cutting can be misinterpreted by Gemini as violence.
3. Slide on the toggle to enable **Grounding** then click **Customize**. Set the grounding source to **Vertex AI search** and for the datastore path use the following. Change YOUR_PROJECT_ID to the project ID found up near the End Lab button in these instructions, then **Save** the grounding settings
projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id
**Note:** If you get an error then you either didn't change the project ID to your actual project ID, or you may have missed the step where you changed the old-cookbooks Agent Builder Data Store ID. Check your Agent Builder > Data Stores > old-cookbooks for its actual Data store ID.
4. Test a couple of chat messages. Perhaps start with the below. Try a few others if you like.
Как определить, созрел ли помидор?
5. The model works, now let's experiment with the code. Click **Clear Conversation** so our conversations don't become part of the code then click **Get Code**.
<img src="img/dce8ad7ee006cca1.png" alt="dce8ad7ee006cca1.png" width="624.00" />
6. At the top of the code window, press Open Notebook so we can experiment and perfect the code in Colab Enterprise before integrating it into our app.
7. Take a few minutes to familiarize yourself with the code. Let's make a couple of changes to adapt it to what we want. Before we start, run the first code cell to connect to the compute and install the AI Platform SDK. After the block runs you will be prompted to restart the session. Go ahead and do that.
8. Move to the code we pulled out of Vertex AI Studio. Change the name of the method *multiturn_generate_content* to `start_chat_session`.
9. Scroll to the `model = GenerativeModel(` method call. The existing code defines the `generation_config` and `safety_settings` but doesn't actually use them. Modify the creation of the `GenerativeModel` so it resembles:
model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, )
10. Lastly, add a final line to the method, just below `chat = model.start_chat()`, so the function returns the `chat` object. The finished function should look like the below.
**Note:** DO NOT COPY this code into your notebook. It is simply here as a sanity check.
def start_chat_session(): vertexai.init(project="qwiklabs-gcp-02-9a7298ceaaec", location="us-central1") tools = [ Tool.from_retrieval( retrieval=grounding.Retrieval( source=grounding.VertexAISearch(datastore="projects/qwiklabs-gcp-02-9a7298ceaaec/locations/global/collections/default_collection/dataStores/old-cookbooks-id"), ) ), ] model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, ) chat = model.start_chat() return chat
11. Scroll to the bottom of the code cell and change the final line calling the old function so it calls the new function name and stores the returned object in a variable `chat`. Once you are satisfied with your changes, run the cell.
chat = start_chat_session()
12. Create a new code cell and add the comment `# Use chat to invoke Gemini and print out the response`. Move to the next line and type resp and Gemini should auto complete the block for you. Update the prompt to `How can I tell if a tomato is ripe?`. Run the cell
response = chat.send_message("Как узнать, созрел ли помидор?") print(response)
13. That's the response alright, but the part we really want is that nested text field. Modify the codeblock to print just that section, like:
response = chat.send_message("Как узнать, созрел ли помидор?") print(response.candidates[0].content.parts[0].text)
14. Good, now that we have working chat code, let's integrate it into our web application. Copy all the contents of the code cell that creates the `start_chat_session` function (we won't need the test cell). If you click into the cell you can click the triple dot menu in the upper right corner and copy from there
<img src="img/17bf8d947393d4b.png" alt="17bf8d947393d4b.png" width="326.00" />
15. Switch to your Cloud Workstation editor and open pages\Cooking_Advice.py for editing.
16. Locate the comment:
Добавьте скопированный из блокнота код ниже этого сообщения.
17. Paste your copied code just below the above comment. Nice, now we have the section which drives the chat engine via a grounded call to Gemini. Now let's integrate it into Streamlit.
18. Locate section of commented code directly below the comment:
Вот код для настройки переменных сессии.
Раскомментируйте этот блок, когда получите указание.
19. Uncomment this section of code (Up till the next `Setup done, let's build the page UI` section) and explore it. It creates or retrieves the chat and history session variables.
20. Next, we need to integrate the history and chat functionality into the UI. Scroll in the code until you locate the below comment.
Вот код для создания интерфейса чата.
Раскомментируйте приведенный ниже код, когда вам будет указано это сделать.
21. Uncomment the rest of the code below the comment and take a moment to explore it. If you like, highlight it and get Gemini to explain its functionality.
22. Excellent, now let's build the application and deploy it. When the URL comes back, launch the application and give the Cooking Advisor page a try. Perhaps ask it about ripe tomatoes, or the bot knows a good way to prepare brussels sprouts.
.build.sh
How cool is that! Your own personal AI cooking advisor :-)
## Task 8: (Optional) Connect the Recipe Search page to the recipe-search Agent Builder app
When we connected the Cooking Advice page to its grounded source, we did so using the Gemini API directly. For Recipe Search, let's connect to the Vertex AI Agent Builder search app directly.
1. In your Cloud Workstation editor, open the `pages/Recipe_Search.py` page for editing. Investigate the structure of the page.
2. Towards the top of the file, set your project ID.
3. Examine the `search_sample` function. This code more or less comes directly from the Discovery Engine documentation [here](https://cloud.google.com/generative-ai-app-builder/docs/preview-search-results#genappbuilder_search-python). You can find a working copy in this notebook [here](https://github.com/GoogleCloudPlatform/generative-ai/blob/main/search/create_datastore_and_search.ipynb).
4. The only change I made was to return the `response.results` instead of just the results. Without this, the return type is an object designed to page through results, and that's something we don't need for our basic application.
5. Scroll to the very end of the file and uncomment the entire section below `Here are the first 5 recipes I found`.
6. Highlight the whole section you just uncommented and open Gemini Code chat. Ask, `Explain the highlighted code`. If you don't have something selected, Gemini can explain the whole file. If you highlight a section and ask Gemini to explain, or comment, or improve it, Gemini will.
Take a moment and read through the explanation. For what it's worth, using a Colab Enterprise notebook is a great way to explore the Gemini APIs before you integrate them into your application. It's especially helpful at exploring some of the newer APIs which may not be documented as well as they could be.
7. At your editor terminal window, run `build.sh` to deploy the final application. Wait until the new version is deployed before moving to the next step.
## Task 9: (Optional) Explore the final application
Take a few minutes to explore the final application.
1. In the Google Cloud console, use search to navigate to **Cloud Run**, then click into your **recipe-web-app**.
2. Locate the application test URL (towards the top) and open it in a new browser tab.
3. The application home page should appear. Note the basic layout and navigation provided by Streamlit, with the python files from the `pages` folder displayed as navigational choices, and the `Home.py` loaded as the home page. Navigate to the **Cooking Advice** page.
4. After a few moments the chat interface will appear. Again, note the nice core layout provided by Streamlit.
5. Try a few cooking related questions and see how the bot functions. Something like:
У вас есть какие-нибудь советы по приготовлению брокколи?
Как насчёт классического рецепта куриного супа?
Расскажите мне о безе.
6. Now let's find a recipe or two. Navigate to the Recipe Search page and try a few searches. Something like:
Чили кон карне
перец чили, кукуруза, рис
Лимонный меренговый пирог
Десерт с клубникой
## Congratulations!
You have created an application leveraging Vertex AI Agent Builder applications. Along the way you've explored Gemini Cloud Assist, Gemini Code Assist, and the natural language to SQL features of BigQuery's Data Canvas. Fantastic job!