1. Обзор
В ходе этой лабораторной работы вы будете использовать продукты генеративного искусственного интеллекта Google для создания инфраструктуры в Google Cloud с помощью Gemini Cloud Assist, выполнять запросы к данным BigQuery с использованием естественного языка к функциям SQL Data Canvas, писать код в блокнотах Colab Enterprise Jupyter и в Eclipse Theia ( Visual Studio Code) с помощью Gemini Code Assist, а также интегрировать функции искусственного поиска и чата, созданные на базе Cloud Storage и базовых источников BigQuery, в Vertex AI Agent Builder.
Наша цель — создать сайт рецептов и кулинарии под названием AI Recipe Haven. Сайт будет построен на Python и Streamlit и будет содержать две основные страницы. Cooking Advice будет размещать чат-бота, который мы создадим с использованием Gemini и обоснованного источника Vertex AI Agent Builder, привязанного к группе кулинарных книг, и он будет предлагать кулинарные советы и отвечать на вопросы, связанные с приготовлением пищи. Recipe Search — это поисковая система, поддерживаемая 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 Console
- Нажмите кнопку «Начать лабораторию». Если вам нужно оплатить лабораторную работу, откроется всплывающее окно, в котором вы сможете выбрать способ оплаты. Слева находится панель, заполненная временными учетными данными, которые вы должны использовать для этой лабораторной работы.
- Скопируйте имя пользователя и нажмите «Открыть консоль Google». Лаборатория запускает ресурсы, а затем открывает другую вкладку, на которой отображается страница входа.
Совет: Открывайте вкладки в отдельных окнах рядом.
Если вы видите страницу «Выберите учетную запись», нажмите «Использовать другую учетную запись».
- На странице входа вставьте имя пользователя, скопированное с панели «Сведения о подключении». Затем скопируйте и вставьте пароль.
Важно: необходимо использовать учетные данные с панели «Сведения о соединении». Не используйте свои учетные данные Qwiklabs. Если у вас есть собственная учетная запись Google Cloud, не используйте ее для этой лабораторной работы (во избежание дополнительных расходов). 4. Пролистывайте последующие страницы:
- Примите условия.
- Не добавляйте параметры восстановления или двухфакторную аутентификацию (потому что это временная учетная запись).
- Не подписывайтесь на бесплатные пробные версии.
Через несколько секунд на этой вкладке откроется Cloud Console.
Примечание. Вы можете просмотреть меню со списком продуктов и сервисов Google Cloud, щелкнув меню навигации в левом верхнем углу.
3. Задача 0. Проверьте кластер рабочих станций.
В дальнейшем в этой лабораторной работе вы будете использовать Google Cloud Workstation для выполнения некоторых работ по разработке. Процесс запуска этой лабораторной работы должен был начать создание кластера вашей рабочей станции. Прежде чем двигаться дальше, давайте убедимся, что кластер собирается.
- В Google Cloud Console используйте поле поиска, чтобы перейти к Cloud Workstations .
- Используйте левое навигационное меню для просмотра управления кластером .
- Если у вас есть обновляемый кластер, все в порядке и можно переходить к задаче 1. Если вы не видите ни одного кластера ни в каком состоянии, обновите страницу. Если вы по-прежнему не видите кластер Обновление (построение), то завершите лабораторную работу с помощью кнопки в левом верхнем углу данной инструкции и перезапустите лабораторную работу.
4. Задача 1. Активируйте и используйте Gemini Cloud Assist
В этой задаче мы активируем и будем использовать Gemini Cloud Assist. При работе в Google Cloud Console Gemini Cloud Assist может давать советы, помогать вам в создании, настройке и мониторинге вашей инфраструктуры Google Cloud, а также может даже предлагать команды gcloud
и писать сценарии Terraform.
- Чтобы активировать Cloud Assist для использования, щелкните поле поиска в верхней части пользовательского интерфейса Cloud Console и выберите «Спросить Gemini» (или формулировка может быть «Спросить Gemini для облачной консоли »).
- Прокрутите страницу до раздела «Требуемый API» и включите Gemini для Google Cloud API.
- Если вы не видите интерфейс чата сразу, нажмите «Начать чат» . Начните с того, что попросите Gemini объяснить некоторые преимущества использования облачных рабочих станций. Уделите несколько минут изучению сгенерированного ответа.
- Затем спросите о преимуществах Agent Builder и о том, как он может помочь в формировании генеративных ответов.
- Наконец, давайте посмотрим на сравнение. В окне чата Gemini Google Cloud Console задайте следующий вопрос:
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 общедоступных кулинарных книг. Кулинарные книги станут источником правды, которую Близнецы используют, отвечая на вопросы.
- Используйте поле поиска Cloud Console, чтобы перейти к Vertex AI . На панели мониторинга нажмите «Включить все рекомендуемые API» . Если вы увидите всплывающее окно с сообщением о необходимости включения самого Vertex AI API, включите его также.
- Используйте поиск, чтобы перейти к 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 поддерживает несколько типов приложений, и хранилище данных выступает источником достоверной информации для каждого из них. Поисковые приложения хороши для общего использования и поиска. Приложения чата предназначены для генеративных потоков в приложениях чат-ботов/голосовых роботов, управляемых потоком данных. Рекомендательные приложения помогают создавать более эффективные системы рекомендаций. Приложения агентов предназначены для создания агентов, управляемых GenAI. В конце концов, агент, вероятно, лучше всего поможет нам в том, что мы хотим сделать, но, поскольку продукт в настоящее время тестируется, мы будем придерживаться типа приложения «Поиск». 7. В меню слева выберите «Приложения» и нажмите «Создать приложение» . 8. Выберите тип приложения «Поиск». Изучите, но не меняйте различные параметры. Назовите приложение: cookbook-search
. Отредактируйте и установите идентификатор приложения cookbook-search-id
. Установите компанию Google
и продолжите . 9. Проверьте хранилище данных old-cookbooks
которое вы создали несколько шагов назад, и создайте приложение поиска.
Если вы просмотрите вкладку «Активность» , вы, вероятно, увидите, что кулинарные книги все еще импортируются и индексируются. Agent Builder потребуется более 5 минут, чтобы проиндексировать тысячи страниц, содержащихся в 70 кулинарных книгах, которые мы ему предоставили. Пока он работает, давайте загрузим и очистим некоторые данные базы данных рецептов для нашего генератора рецептов.
6. Задача 3. Загрузите и очистите данные в блокноте Colab Enterprise с помощью Gemini Code Assist.
Google Cloud предлагает несколько основных способов работы с ноутбуками Jupiter. Мы собираемся использовать новейшее предложение Google, Colab Enterprise. Некоторые из вас, возможно, знакомы с продуктом Google Colab , который обычно используется отдельными людьми и организациями, которые хотели бы поэкспериментировать с ноутбуками Jupiter в бесплатной среде. Colab Enterprise — это коммерческое предложение Google Cloud, которое полностью интегрировано с остальными облачными продуктами Google и в полной мере использует возможности безопасности и соответствия требованиям среды GCP.
Одной из функций, предлагаемых Colab Enterprise, является интеграция с Gemini Code Assist от Google. Code Assist можно использовать в различных редакторах кода и предлагать советы, а также встроенные подсказки во время написания кода. Мы будем использовать этого генеративного помощника, пока будем обрабатывать данные рецептов.
- Используйте поиск, чтобы перейти к Colab Enterprise и создать блокнот . Если вы получите предложение поэкспериментировать с новыми функциями Colab, отклоните его. Чтобы запустить среду выполнения и вычислительную мощность ноутбука, нажмите «Подключиться» в правом верхнем углу нового ноутбука.
- Используйте меню из трех точек рядом с текущим именем записной книжки на панели «Корпоративные файлы Colab», чтобы переименовать ее в
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 поверх сгенерированного предложения, нажмите Esc, чтобы увидеть светло-серый предлагаемый код. Снова вкладка, чтобы принять предложение. Если ваше предложение не содержало вызов функции 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, поддерживающей Google Gemini Code Assist.
- Давайте сделаем небольшую очистку столбца. Переименуйте столбец
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()
для просмотра первых нескольких строк. Опять же, попросите Близнецов помочь. Запустите последние две строки и проверьте результаты.
# 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 для малого).
# Sample out 150,000 records into a DataFrame named dfs
dfs = df.sample(n=150000)
- Исходные данные наших рецептов готовы к загрузке в BigQuery. Прежде чем приступить к загрузке, давайте перейдем к BigQuery и подготовим набор данных для хранения нашей таблицы. В Google Cloud Console используйте поле поиска, чтобы перейти к BigQuery . Вы можете щелкнуть BigQuery правой кнопкой мыши и открыть его в новой вкладке браузера.
- Если он еще не виден, откройте панель Gemini AI Chat, используя логотип Gemini в правом верхнем углу облачной консоли. Если вас попросят снова включить API, нажмите «Включить» или обновите страницу. Запустите подсказку:
What is a dataset used for in BigQuery?
Изучив ответ, спросите:How can I create a dataset named recipe_data using the Cloud Console?
Сравните результаты со следующими несколькими шагами.
- На панели BigQuery Explorer щелкните меню «Просмотреть действия» в виде трех точек рядом с идентификатором вашего проекта. Затем выберите Создать набор данных .
- Укажите набор данных и идентификатор
recipe_data
. Оставьте тип местоположения США и создайте набор данных . Если вы получите сообщение об ошибке о том, что набор данных уже существует, просто продолжайте.
Имея набор данных, созданный в BigQuery, давайте вернемся к нашему блокноту и выполним вставку. 19. Вернитесь к записной книжке Data Wrangling в Colab Enterprise. В новой ячейке кода создайте переменную с именем project_id
и используйте ее для хранения текущего идентификатора проекта. Посмотрите в левом верхнем углу этих инструкций, под кнопкой «Завершить лабораторную работу», и вы найдете текущий идентификатор проекта. Если хотите, он также находится на домашней странице Cloud Console. Присвойте значение переменной project_id
и запустите ячейку.
# Create a variable to hold the current project_id
project_id='YOUR_PROJECT_ID'
- Используйте подход «подсказка > код», чтобы создать блок кода, который будет вставлять
dfs
DataFrame в таблицу с именем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 Console напомнить вам о шагах по созданию поискового приложения Agent Builder, или вы можете выполнить шаги, перечисленные ниже.
- Используйте поиск, чтобы перейти к Agent Builder . Откройте хранилища данных и создайте хранилище данных . На этот раз выберите тип хранилища данных 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. На этот раз проверьте источники данных рецептов . Создайте приложение.
Индексация нашей таблицы базы данных займет некоторое время. А пока это так, давайте поэкспериментируем с новым Data Canvas от BigQuery и посмотрим, сможем ли мы найти один или два интересных рецепта. 9. С помощью поля поиска перейдите к BigQuery . В верхней части BigQuery Studio нажмите стрелку вниз рядом с самой правой вкладкой и выберите «Холст данных» . Установите регион us-central1 .
- В поле поиска на холсте данных найдите
recipes
и нажмите «Добавить на холст» в таблицу. - Визуальное представление вашей таблицы рецептов будет загружено на холст BigQuery Data. Вы можете изучить схему таблицы, просмотреть данные в таблице и изучить другие детали. Под табличным представлением нажмите Запрос .
- На холсте загрузится более или менее типичное диалоговое окно запроса 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; облачная среда разработки, в нашем случае, с предварительно загруженной Eclipse Theia (код Visual Studio с открытым исходным кодом). Автоматизированный сценарий в этом упражнении создал для нас кластер и конфигурацию Cloud Workstation, но нам все равно нужно создать саму Cloud Workstation. Если вам нужна дополнительная информация об облачных рабочих станциях и их использовании, обратитесь в Gemini Cloud Assist :-)
- Используйте поиск, чтобы перейти к Cloud Workstations , затем Create Workstation . Назовите рабочую станцию
dev-env
и используйте конфигурацию my-config . Создайте рабочую станцию. - Через несколько минут вы увидите новую рабочую станцию в списке «Мои рабочие станции». Запустите
dev-env
и, как только он заработает, запустите среду разработки. - Редактор рабочей станции откроется на новой вкладке браузера, и через несколько секунд вы увидите знакомый интерфейс Theia (Visual Studio Code). В левой части интерфейса разверните вкладку «Управление версиями» и нажмите «Клонировать репозиторий» .
- В качестве URL-адреса репозитория введите
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 Chat откроется слева от редактора. Нажмите «Выбрать проект 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 может получить доступ к файлу, который вы сейчас открываете в редакторе, но фактически не может видеть весь проект. Попробуйте спросить это:
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.
9. Задача 6. Развертывание веб-приложения в Cloud Run
Отлично, у нас есть основная структура приложения, но будет ли все это работать? А еще лучше, где нам разместить его в Google Cloud?
- В окне чата Близнецов спросите:
If I containerize this application, what compute technologies
in Google Cloud would be best for hosting it?
- Помните: если вы еще не работали в своей IDE, вы также можете использовать Google Cloud Assist. Откройте Google Cloud Console, затем откройте Gemini Cloud Assist и спросите:
If I have a containerized web application, where would be the
best place to run it in Google Cloud?
Были ли эти два набора советов одинаковыми? Согласны/не согласны вы с каким-либо советом? Помните, Близнецы — это помощник генеративного ИИ, и, как и помощник-человек, вы не всегда согласны со всем, что он говорит. Тем не менее, наличие этого помощника всегда под рукой, пока вы работаете в Google Cloud и в редакторе кода, может сделать вашу работу намного более эффективной.
- Cloud Run будет отличным вариантом для недолговечного контейнерного веб-приложения без сохранения состояния. В окне чата Gemini вашего редактора кода попробуйте ввести подсказку:
What steps would be required to run this application in
Cloud Run?
- Похоже, первое, что нам нужно сделать, это создать Dockerfile. Используя редактор, создайте файл с именем
Dockerfile
в корне папки вашего проекта. Убедитесь, что вы случайно не поместили его в папку страниц. Откройте файл для редактирования. - Давайте воспользуемся боковой панелью чата 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 файл 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:
ОТ Python: 3.11-slim-bookworm
РАБОЧИЙ ПАРАМЕТР/приложение
КОПИРУЙТЕ файл require.txt. RUN pip install –no-cache-dir –upgrade pip &&
pip install –no-cache-dir -r требования.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 для создания реестра докеров в реестре артефактов?
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 с именем рецепт-веб-приложение из одноимённого образа из репозитория реестра артефактов, который мы только что создали?
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
проекты/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:
модель = GenerativeModel( "gemini-1.5-flash-002", инструменты = инструменты, поколение_конфигурация = поколение_конфигурация, безопасность_настройки = безопасность_настройки, )
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") инструменты = [ Tool.from_retrieval( retrival=grounding.Retrival( 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", инструменты=инструменты, поколение_конфигурации=поколение_конфигурации, Safety_settings=safety_settings, )chat = model.start_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.
чат = 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!