1. Обзор
В ходе этой лабораторной работы вы будете использовать продукты генеративного искусственного интеллекта Google для построения инфраструктуры в Google Cloud с помощью Gemini Cloud Assist, запрашивать данные BigQuery с использованием естественного языка в функциях SQL Data Canvas, писать код в блокнотах Colab Enterprise Jupyter и Eclipse Theia (Visual Studio Code) с помощью Gemini Code Assist, а также интегрировать функции поиска и чата AI, созданные на базе 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, вам необходимо создать учетную запись Google .
- Используйте личную учетную запись вместо рабочей или учебной учетной записи. Рабочие и учебные учетные записи могут иметь ограничения, не позволяющие вам включить API, необходимые для этой лабораторной работы.
3. Настройка проекта
- Войдите в Google Cloud Console .
- Включите биллинг в Cloud Console.
- Завершение этой лабораторной работы должно стоить менее 1 доллара США в облачных ресурсах.
- Вы можете выполнить действия, описанные в конце этого практического занятия, чтобы удалить ресурсы и избежать дальнейших расходов.
- Новые пользователи имеют право на бесплатную пробную версию стоимостью 300 долларов США .
- Посещаете виртуальное практическое лабораторное мероприятие? Может быть доступен кредит в размере 5 долларов США .
- Создайте новый проект или повторно используйте существующий проект.
- Убедитесь, что оплата включена в разделе «Мои проекты» в Cloud Billing.
- Если в вашем новом проекте в столбце
Billing account
указано,Billing is disabled
:- Нажмите на три точки в столбце «
Actions
. - Нажмите Изменить платеж.
- Выберите платежный аккаунт, который вы хотите использовать.
- Нажмите на три точки в столбце «
- Если вы посещаете живое мероприятие, учетная запись, скорее всего, будет называться Пробная платежная учетная запись Google Cloud Platform.
- Если в вашем новом проекте в столбце
4. Активируйте и используйте 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 объяснить некоторые преимущества использования Cloud Shell Editor. Уделите несколько минут изучению сгенерированного ответа.
- Затем спросите о преимуществах 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?
5. Создайте в Vertex AI Agent Builder приложение поиска для чат-бота с кулинарными советами.
На веб-сайте, который мы создаем, будет страница с кулинарными советами, содержащая чат-бот, призванный помочь пользователям найти ответы на вопросы, связанные с приготовлением пищи. Он будет работать на базе Gemini, основанной на источнике, содержащем 70 общедоступных кулинарных книг. Кулинарные книги станут источником правды, которую Близнецы используют, отвечая на вопросы.
- Используйте поле поиска Cloud Console, чтобы перейти к Vertex AI . На панели мониторинга нажмите «Включить все рекомендуемые API» . Это может занять несколько минут. Если вы увидите всплывающее окно с сообщением о необходимости включения самого Vertex AI API, включите его также. После включения API вы можете перейти к следующему шагу.
- Воспользуйтесь поиском, чтобы перейти к Agent Builder , затем продолжите и активируйте API .
- Как предложили Gemini в нашем предыдущем запросе совета, создание приложения поиска в Agent Builder начинается с создания авторитетного источника данных. Когда пользователь выполняет поиск, Gemini понимает вопрос и то, как составлять разумные ответы, но он будет искать обоснованный источник информации, используемой в этом ответе, а не использовать свои врожденные знания. В меню слева перейдите к «Хранилища данных» и «Создать хранилище данных» .
- Общедоступные кулинарные книги, которые мы используем для обоснования нашей страницы с кулинарными советами, в настоящее время находятся в сегменте Cloud Storage во внешнем проекте. Выберите тип источника Cloud Storage.
- Проверьте, но не меняйте параметры по умолчанию, связанные с типом импортируемой информации. Оставьте тип импорта « Папка» , а в качестве пути к корзине используйте:
labs.roitraining.com/labs/old-cookbooks
, затем «Продолжить» . - Назовите хранилище данных:
old-cookbooks
. Нажмите «РЕДАКТИРОВАТЬ» , измените идентификатор наold-cookbooks-id
и создайте хранилище данных.
Конструктор Vertex AI Agent поддерживает несколько типов приложений, и хранилище данных выступает источником достоверной информации для каждого из них. Поисковые приложения хороши для общего использования и поиска. Приложения чата предназначены для генеративных потоков в приложениях чат-ботов/голосовых роботов, управляемых потоком данных. Приложения для рекомендаций помогают создавать более эффективные системы рекомендаций. Приложения агентов предназначены для создания агентов, управляемых GenAI. В конце концов, агент, вероятно, лучше всего поможет нам в том, что мы хотим сделать, но, поскольку продукт в настоящее время находится на предварительной версии, мы будем придерживаться типа приложения «Поиск».
- В меню слева выберите «Приложения» , затем нажмите «Создать новое приложение» .
- Нажмите «Создать» на карточке «Поиск вашего сайта» . Назовите приложение
cookbook-search
. Нажмите «Изменить» и установите идентификатор приложенияcookbook-search-id
. Установите компаниюGoogle
и нажмите «Продолжить» . - Проверьте хранилище данных старых кулинарных книг, которое вы создали несколько шагов назад, и создайте приложение поиска.
Если вы просмотрите вкладку «Активность» , вы, вероятно, увидите, что кулинарные книги все еще импортируются и индексируются. Agent Builder потребуется более 5 минут, чтобы проиндексировать тысячи страниц, содержащихся в 70 кулинарных книгах, которые мы ему предоставили. Пока он работает, давайте загрузим и очистим некоторые данные базы данных рецептов для нашего генератора рецептов.
6. Загрузите и очистите данные в блокноте Colab Enterprise с помощью Gemini Code Assist.
Google Cloud предлагает несколько основных способов работы с блокнотами Jupyter. Мы собираемся использовать новейшее предложение Google, Colab Enterprise. Некоторые из вас, возможно, знакомы с продуктом Google Colab , который обычно используется отдельными людьми и организациями, которые хотели бы поэкспериментировать с блокнотами Jupyter в бесплатной среде. Colab Enterprise — это коммерческое предложение Google Cloud, которое полностью интегрировано с остальными облачными продуктами Google и в полной мере использует возможности безопасности и соответствия требованиям среды GCP.
Одной из функций, предлагаемых Colab Enterprise, является интеграция с Gemini Code Assist от Google. Code Assist можно использовать в различных редакторах кода и предлагать советы, а также встроенные подсказки во время написания кода. Мы будем использовать этого генеративного помощника, пока будем обрабатывать данные рецептов.
- С помощью поиска перейдите к Colab Enterprise и нажмите «Создать блокнот» . Если вы получите предложение поэкспериментировать с новыми функциями 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].
- Выполните ячейку, которая загружает CSV в DataFrame. Подождите, пока файл загрузится, и проверьте первые пять строк данных. Это данные рецептов, которые мы загрузим в BigQuery и в конечном итоге будем использовать их для заземления нашего генератора рецептов.
- Создайте новый блок кода и введите комментарий ниже. После ввода комментария перейдите к следующей строке кода, и вы должны получить предложение
df.columns
. Примите это и запустите ячейку. Мы только что продемонстрировали, что у вас действительно есть два варианта получения помощи от Gemini Code Assist в блокноте Jupyter: текстовые ячейки над ячейками кода или комментарии внутри самой ячейки кода. Комментарии внутри ячеек кода хорошо работают в блокнотах Jupyter, но этот подход также будет работать в любой другой IDE, поддерживающей Google Gemini Code Assist.# List the current DataFrame column names
- Давайте сделаем небольшую очистку столбца. Переименуйте столбец
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, давайте вернемся к нашему блокноту и выполним вставку. - Вернитесь к записной книжке Data Wrangling в Colab Enterprise. В новой ячейке кода создайте переменную с именем
project_id
и используйте ее для хранения текущего идентификатора проекта. Посмотрите в левом верхнем углу этих инструкций, под кнопкой «Завершить лабораторную работу», и вы найдете текущий идентификатор проекта. Если хотите, он также находится на домашней странице Cloud Console. Присвойте значение переменнойproject_id
и запустите ячейку.# Create a variable to hold the current project_id project_id='YOUR_PROJECT_ID'
- Используйте подход Prompt > code, чтобы создать блок кода, который будет вставлять DataFrame
dfs
в таблицу с именемrecipes
в наборе данных, который мы только что создалиrecipe_data
. Запустите ячейку.dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')
7. Создайте приложение поиска в Vertex AI Agent Builder для генератора рецептов.
Отлично! Теперь, когда наша таблица данных рецептов создана, давайте воспользуемся ею для создания обоснованного источника данных для нашего генератора рецептов. Подход, который мы будем использовать, будет аналогичен тому, который мы использовали для нашего кулинарного чат-бота. Мы будем использовать Vertex AI Agent Builder для создания хранилища данных, а затем использовать его в качестве источника достоверных данных для приложения поиска.
Если хотите, не стесняйтесь попросить Gemini в Google Cloud Console напомнить вам о шагах по созданию поискового приложения Agent Builder, или вы можете выполнить шаги, перечисленные ниже.
- Используйте поиск, чтобы перейти к Agent Builder . Откройте хранилища данных и создайте хранилище данных . На этот раз выберите тип хранилища данных BigQuery.
- В ячейке выбора таблицы нажмите Обзор и выполните поиск
recipes
. Выберите переключатель рядом с вашей таблицей. Если вы видите рецепты из других проектов qwiklabs-gcp-..., обязательно выберите тот, который принадлежит вам. ПРИМЕЧАНИЕ. Если вы нажмете наrecipes
вместо выбора переключателя рядом с ним, в вашем браузере откроется новая вкладка и вы перейдете на страницу обзора таблиц в BigQuery. Просто закройте вкладку браузера и выберите переключатель в Agent Builder. - Проверьте, но не меняйте остальные параметры по умолчанию, затем нажмите «Продолжить» .
- На странице просмотра схемы проверьте исходные конфигурации по умолчанию, но ничего не меняйте. Продолжать
- Назовите хранилище данных
recipe-data
. Отредактируйте идентификатор хранилища данных и установите для негоrecipe-data-id
. Создайте хранилище данных. - Перейдите к «Приложениям» с помощью меню навигации слева и выберите «Создать новое приложение» .
- Нажмите «Создать» на карточке «Поиск вашего сайта» . Назовите приложение
recipe-search
и нажмите «EDIT», чтобы установить идентификаторrecipe-search-id
. Установите название компанииGoogle
и нажмите «Продолжить» . - На этот раз проверьте источники данных рецептов . Создайте приложение.
Индексация нашей таблицы базы данных займет некоторое время. А пока это так, давайте поэкспериментируем с новым Data Canvas от BigQuery и посмотрим, сможем ли мы найти один или два интересных рецепта.
- Используйте поле поиска, чтобы перейти к BigQuery . В верхней части BigQuery Studio нажмите стрелку вниз рядом с самой правой вкладкой и выберите «Холст данных» . Установите регион us-central1 .
- Нажмите «Поиск данных» . В поле поиска на холсте данных найдите
recipes
, нажмитеEnter/Return
для поиска и нажмите кнопку «Добавить на холст» рядом с именем таблицы. - Визуальное представление вашей таблицы рецептов будет загружено на холст 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. Откройте редактор Cloud Shell.
- Перейдите в редактор Cloud Shell.
- Если терминал не отображается в нижней части экрана, откройте его:
- Нажмите на гамбургер-меню
- Нажмите Терминал
- Нажмите «Новый терминал».
- Нажмите на гамбургер-меню
- В терминале настройте свой проект с помощью этой команды:
- Формат:
gcloud config set project [PROJECT_ID]
- Пример:
gcloud config set project lab-project-id-example
- Если вы не можете вспомнить идентификатор своего проекта:
- Вы можете перечислить все идентификаторы ваших проектов с помощью:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- Вы можете перечислить все идентификаторы ваших проектов с помощью:
- Формат:
- Если будет предложено авторизоваться, нажмите «Авторизовать» , чтобы продолжить.
- Вы должны увидеть это сообщение:
Если вы видитеUpdated property [core/project].
WARNING
и вас спрашиваютDo you want to continue (Y/N)?
, то, вероятно, вы неправильно ввели идентификатор проекта. НажмитеN
, нажмитеEnter
и попробуйте еще раз запустить командуgcloud config set project
.
9. Включите API
В терминале включите API:
gcloud services enable \
compute.googleapis.com \
sqladmin.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
networkconnectivity.googleapis.com \
servicenetworking.googleapis.com \
cloudaicompanion.googleapis.com
Если будет предложено авторизоваться, нажмите «Авторизовать» , чтобы продолжить.
Выполнение этой команды может занять несколько минут, но в конечном итоге она должна выдать успешное сообщение, подобное этому:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
10. Создайте ядро веб-приложения Python и Streamlit с небольшой помощью Gemini.
Теперь, когда оба наших хранилища данных Vertex AI Agent Builder проиндексированы, а наши поисковые приложения почти готовы к работе, давайте приступим к созданию нашего веб-приложения.
Во время работы мы будем использовать Gemini Code Assist. Дополнительные сведения об использовании Gemini Code Assist в Visual Studio Code см. в документации здесь.
- В терминале редактора Cloud Shell выполните эту команду, чтобы клонировать репозиторий приложения рецептов.
git clone https://github.com/haggman/recipe-app
- Настройте эту команду, чтобы открыть папку приложения в редакторе Cloud Shell.
cloudshell open-workspace recipe-app/
- Прежде чем мы исследуем клонированную папку и начнем работать над нашим веб-приложением, нам необходимо зарегистрировать плагин Cloud Code редактора в Google Cloud и включить Gemini. Давайте сделаем это сейчас. В левом нижнем углу редактора нажмите Cloud Code — Войти . Если вы не видите ссылку, подождите минуту и проверьте еще раз.
- В окне терминала отобразится длинный URL-адрес. Откройте URL-адрес в браузере и выполните шаги, чтобы предоставить Cloud Code доступ к вашей среде Google Cloud. В последнем диалоговом окне скопируйте код подтверждения и вставьте его обратно в окно терминала ожидания на вкладке браузера редактора Cloud Shell.
- Через несколько секунд ссылка Cloud Code в левом нижнем углу редактора изменится на Cloud Code — No Project . Нажмите новую ссылку, чтобы выбрать проект. Палитра команд должна открыться в верхней части редактора. Нажмите «Выбрать проект Google Cloud» и выберите свой проект. Через несколько секунд ссылка в левом нижнем углу редактора обновится и отобразит идентификатор вашего проекта. Это означает, что Cloud Code успешно прикреплен к вашему рабочему проекту.
- Подключив Cloud Code к вашему проекту, вы можете активировать Gemini Code Assist. В правом нижнем углу интерфейса редактора щелкните перечеркнутый логотип Gemini. Панель Gemini Chat откроется слева от редактора. Нажмите «Выбрать проект Google Cloud» . Когда откроется панель команд, выберите свой проект. Если вы правильно выполнили шаги (и Google ничего не изменил), то теперь вы должны увидеть активное окно чата Gemini.
- Отлично! Когда все настройки нашего терминала, чата 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. Теперь спросите:
Именно здесь у Близнецов обычно возникают проблемы. Gemini может получить доступ к файлу, который вы сейчас открываете в редакторе, но фактически не может видеть весь проект. Попробуйте спросить это:Does the current project's folder structure seem appropriate for a Streamlit app?
Получить лучший ответ?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:
Отлично, мы видим, что Gemini предлагает нам хороший обзор, включая плюсы и минусы.What can you tell me about Streamlit?
- Если вы хотите изучить минусы, вы можете спросить:
Обратите внимание: нам не нужно было говорить «из Streamlit», поскольку чат Gemini является диалоговым (многоходовым). Близнецы знают, о чем мы говорим, потому что мы находимся в чате. Если в какой-то момент вы захотите очистить историю чата Gemini, воспользуйтесь значком корзины в верхней части окна чата с кодом Gemini.What are the major downsides or shortcomings?
11. Разверните веб-приложение в 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 и спросите:
Были ли эти два набора советов одинаковыми? Согласны/не согласны вы с каким-либо советом? Помните, Близнецы — это помощник генеративного ИИ, и, как и помощник-человек, вы не всегда согласны со всем, что говорят. Тем не менее, наличие этого помощника всегда под рукой, пока вы работаете в Google Cloud и в редакторе кода, может сделать вашу работу намного более эффективной.If I have a containerized web application, where would be the best place to run it in Google Cloud?
- Cloud Run будет отличным вариантом для недолговечного контейнерного веб-приложения без сохранения состояния. В окне чата Gemini вашего редактора кода попробуйте ввести подсказку:
What steps would be required to run this application in Cloud Run?
- Похоже, первое, что нам нужно сделать, это создать Dockerfile. Используя редактор, создайте файл с именем
Dockerfile
в корне папки вашего проекта. Убедитесь, что вы случайно не поместили его в папку страниц . Откройте файл для редактирования. - Давайте воспользуемся боковой панелью чата Gemini, чтобы создать наш Dockerfile. Используйте подсказку, подобную приведенной ниже. Когда результаты отобразятся в чате, используйте + рядом со значком копирования чуть выше предложенного файла Dockerfile, чтобы вставить предложенный код в файл Dockerfile.
Близнецы не всегда дают один и тот же ответ на одну и ту же подсказку. Когда я впервые попросил у Gemini файл 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.
Это чертовски Dockerfile. Я бы немного упростил. Нам не нужен раздел apt-get, поскольку все необходимое для Python уже есть в нашем базовом образе. Кроме того, использование виртуальной среды в контейнере Python — это пустая трата места, поэтому я бы удалил это. Команда Exposure не является строго необходимой, но это нормально. Кроме того, он пытается запустить main.py, которого у меня нет.# 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"]
- В папке
recipe-app
создайте файл с именемDockerfile
и вставьте следующее содержимое:FROM python:3.11-slim-bookworm WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt COPY . . CMD ["streamlit", "run", "Home.py"]
- Gemini может работать через окно чата, но он также может работать непосредственно в вашем файле кода с помощью комментариев, как мы использовали в записной книжке Data Wrangling, а также его можно вызвать с помощью Control+i в Windows или Command+i на Mac. Щелкните где-нибудь в
Dockerfile
, активируйте Gemini с помощью соответствующей команды Command+i / Control+i. - В командной строке введите ниже. Изучите и примите изменение.
Как это круто?! Сколько раз вам приходилось работать с чужим кодом только для того, чтобы тратить время на получение базового понимания его работы без комментариев, прежде чем вы сможете даже начать вносить свои изменения. Близнецы, спешите на помощь!Please comment the current file.
- Теперь спросите Gemini, как вы могли бы использовать Cloud Run для создания и развертывания нового образа с именем
recipe-web-app
из файла Dockerfile в текущей папке.How could I use gcloud to build a new Cloud Run service named recipe-web-app from the current directory?
- Давайте создадим и развернем наше приложение. В окне терминала выполните команду
gcloud run deploy
Если вам будет предложено создать хранилище реестра артефактов, нажмитеgcloud run deploy recipe-web-app \ --allow-unauthenticated \ --source=. \ --region=us-central1 \ --port=8501
enter/return
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named cloud-run-source-deploy in region us-central1 will be created. Do you want to continue (Y/n)?
- Если вы наблюдаете за процессом сборки, сначала он создаст репозиторий докера Artifact Registry. Затем он использует Cloud Build для создания образа контейнера из файла Dockerfile в локальной папке. Наконец, образ Docker будет развернут в новом сервисе Cloud Run. В конце скрипта вы получите URL-адрес теста Cloud Run, который можно использовать.
Откройте возвращенную ссылку в новой вкладке браузера. Уделите минутку и изучите структуру и страницы приложения. Отлично, теперь нам нужно подключить нашу генеративную функциональность искусственного интеллекта.
12. Подключите страницу «Кулинарные советы» к нашему приложению Agent Builder для поиска в кулинарной книге.
У нас есть работающая платформа для веб-приложения, но нам нужно подключить две рабочие страницы к нашим двум поисковым приложениям Vertex AI Agent Builder. Начнем с кулинарных советов.
- Оставьте вкладку редактора Cloud Shell открытой. В консоли Google Cloud используйте поиск, чтобы перейти к Чату в Vertex AI.
- На правой панели настроек установите модель Gemini-1.5-flash-002 . Увеличьте лимит выходных токенов до максимума, чтобы модель могла при необходимости возвращать более длинные ответы. Откройте настройки фильтра безопасности . Установите для параметра «Разжигание ненависти», «Содержимое откровенного сексуального характера» и «Содержимое преследования» значение « Блокировать некоторые файлы . Установите для параметра «Опасный контент» значение «Блокировать несколько» и «Сохранить» . Мы установили уровень «Опасный контент» немного ниже, поскольку разговоры о ножах и порезах могут быть ошибочно истолкованы Близнецами как насилие.
- Сдвиньте переключатель, чтобы включить заземление , затем нажмите «Настроить» . Установите в качестве источника заземления поиск Vertex AI , а в качестве пути к хранилищу данных используйте следующее. Измените YOUR_PROJECT_ID на идентификатор проекта, указанный рядом с кнопкой «Завершить лабораторную работу» в этих инструкциях, затем сохраните настройки заземления.
ПРИМЕЧАНИЕ. Если вы получили сообщение об ошибке, это означает, что вы либо не изменили идентификатор проекта на фактический идентификатор проекта, либо, возможно, пропустили шаг, на котором вы изменили идентификатор хранилища данных Agent Builder из старых кулинарных книг. Проверьте свой Agent Builder > Хранилища данных > старые кулинарные книги, чтобы узнать его фактический идентификатор хранилища данных.projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id
- Протестируйте пару сообщений в чате. Возможно, начнем с нижеизложенного. Попробуйте несколько других, если хотите.
How can I tell if a tomato is ripe?
- Модель работает, теперь поэкспериментируем с кодом. Нажмите «Очистить разговор» , чтобы наши разговоры не стали частью кода, затем нажмите «Получить код» .
- В верхней части окна кода нажмите «Открыть блокнот», чтобы мы могли поэкспериментировать и усовершенствовать код в Colab Enterprise, прежде чем интегрировать его в наше приложение.
- Уделите несколько минут ознакомлению с кодом. Давайте внесем пару изменений, чтобы адаптировать его к тому, что мы хотим. Прежде чем мы начнем, запустите первую ячейку кода, чтобы подключиться к вычислительной системе и установить SDK AI Platform. После запуска блока вам будет предложено перезапустить сеанс. Давай, сделай это.
- Перейдите к коду, который мы извлекли из Vertex AI Studio. Измените имя метода multiturn_generate_content на
start_chat_session
. - Прокрутите до
model = GenerativeModel(
вызов метода. Существующий код определяетgeneration_config
иsafety_settings
, но фактически не использует их. Измените созданиеGenerativeModel
так, чтобы оно напоминало:model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, )
- Наконец, добавьте в метод последнюю строку, чуть нижеchat
chat = model.start_chat()
, чтобы функция возвращала объектchat
. Готовая функция должна выглядеть так, как показано ниже. ПРИМЕЧАНИЕ. НЕ КОПИРУЙТЕ этот код в свой блокнот. Это просто проверка здравомыслия.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
- Прокрутите до конца ячейки кода и измените последнюю строку, вызывающую старую функцию, чтобы она вызывала новое имя функции и сохраняла возвращаемый объект в переменной
chat
. Как только вы будете удовлетворены внесенными изменениями, запустите ячейку.chat = start_chat_session()
- Создайте новую ячейку кода и добавьте комментарий
# Use chat to invoke Gemini and print out the response
. Перейдите на следующую строку и введитеresp
, и Gemini автоматически завершит блок за вас. Обновите подсказку доHow can I tell if a tomato is ripe?
. Запустить ячейкуresponse = chat.send_message("How can I tell if a tomato is ripe?") print(response)
- Это хороший ответ, но нам действительно нужно это вложенное
text
поле. Измените кодовый блок, чтобы он печатал только этот раздел, например:response = chat.send_message("How can I tell if a tomato is ripe?") print(response.candidates[0].content.parts[0].text)
- Хорошо, теперь, когда у нас есть работающий код чата, давайте интегрируем его в наше веб-приложение. Скопируйте все содержимое ячейки кода, которая создает функцию
start_chat_session
(тестовая ячейка нам не понадобится). Если щелкнуть ячейку, вы можете щелкнуть меню с тремя точками в правом верхнем углу и скопировать оттуда. - Перейдите на вкладку редактора Cloud Shell и откройте
pages\Cooking_Advice.py
для редактирования. - Найдите комментарий:
# # Add the code you copied from your notebook below this message #
- Вставьте скопированный код чуть ниже комментария «Добавить код» . Отлично, теперь у нас есть раздел, который управляет механизмом чата посредством обоснованного вызова Gemini. Теперь давайте интегрируем его в Streamlit.
- Найдите раздел прокомментированного кода непосредственно под комментарием:
# # Here's the code to setup your session variables # Uncomment this block when instructed #
- Раскомментируйте этот раздел кода (до
Setup done, let's build the page UI
) и изучите его. Он создает или извлекает переменные сеанса чата и истории. - Далее нам нужно интегрировать историю и чат в пользовательский интерфейс. Прокрутите код, пока не найдете комментарий ниже.
# # Here's the code to create the chat interface # Uncomment the below code when instructed #
- Раскомментируйте остальную часть кода под комментарием и найдите время, чтобы изучить его. Если хотите, выделите его и попросите Gemini объяснить его функциональность.
- Отлично, теперь давайте создадим приложение и развернем его. Когда URL-адрес вернется, запустите приложение и попробуйте страницу «Советник по кулинарии». Возможно, спросите его о спелых помидорах, или бот знает хороший способ приготовления брюссельской капусты.
gcloud run deploy recipe-web-app \ --allow-unauthenticated \ --source=. \ --region=us-central1 \ --port=8501
Как это круто! Ваш личный кулинарный советник с искусственным интеллектом :-)
13. (Необязательно) Подключите страницу поиска рецептов к приложению Agent Builder для поиска рецептов.
Когда мы подключили страницу «Кулинарные советы» к ее обоснованному источнику, мы сделали это напрямую, используя API Gemini. Для поиска рецептов давайте напрямую подключимся к поисковому приложению Vertex AI Agent Builder.
- В редакторе Cloud Shell откройте страницу
pages/Recipe_Search.py
для редактирования. Изучите структуру страницы. - В верхней части файла установите идентификатор проекта.
- Изучите функцию
search_sample
. Этот код более или менее взят непосредственно из документации Discovery Engine здесь . Рабочую копию можно найти в этом блокноте здесь . Единственное изменение, которое я сделал, — это возвращатьresponse.results
вместо только результатов. Без этого тип возвращаемого значения представляет собой объект, предназначенный для постраничного просмотра результатов, и это то, что нам не нужно для нашего базового приложения. - Прокрутите файл до самого конца и раскомментируйте весь раздел ниже.
Here are the first 5 recipes I found
. - Выделите весь раздел, который вы только что раскомментировали, и откройте чат Gemini Code. Спросите,
Explain the highlighted code
. Если у вас что-то не выбрано, Gemini может объяснить весь файл. Если вы выделите раздел и попросите Близнецов объяснить, прокомментировать или улучшить его, Близнецы это сделают. Найдите минутку и прочитайте объяснение. Как бы то ни было, использование блокнота Colab Enterprise — это отличный способ изучить API-интерфейсы Gemini, прежде чем интегрировать их в свое приложение. Это особенно полезно при изучении некоторых новых API, которые, возможно, не документированы так хорошо, как могли бы. - В окне терминала редактора запустите
build.sh
, чтобы развернуть окончательное приложение. Подождите, пока новая версия будет развернута, прежде чем переходить к следующему шагу.
14. (Необязательно) Изучите окончательную версию приложения.
Уделите несколько минут изучению окончательного варианта приложения.
- В Cloud Console Google используйте поиск для перемещения в
Cloud Run
, затем нажмите на свой рецепт-Web-App . - Найдите URL -адрес тестирования приложения (вверху) и откройте его на новой вкладке браузера.
- Домашняя страница приложения должна появиться. Обратите внимание на базовый макет и навигация, предоставленные Streamlit, с файлами Python из папки
pages
отображаемых в виде навигационного выбора, иHome.py
загружен в качестве домашней страницы. Перейдите на страницу консультаций по приготовлению пищи . - Через несколько мгновений появится интерфейс чата. Опять же, обратите внимание на красивую макету, предоставленная потоком.
- Попробуйте несколько вопросов, связанных с приготовлением пищи, и посмотрите, как функционирует бот. Что -то вроде:
Do you have any advice for preparing broccoli? How about a classic chicken soup recipe? Tell me about meringue.
- Теперь давайте найдем рецепт или два. Перейдите на страницу поиска рецептов и попробуйте несколько поисков. Что -то вроде:
Chili con carne Chili, corn, rice Lemon Meringue Pie A dessert containing strawberries
15. Поздравляю!
Вы создали приложение, использующее приложения AIG Agent Agent Vertex AI. По пути вы изучили Assist Assist Gemini Cloud, помощь Code Gemini и естественный язык для SQL -функций Canvas BigQuery Data. Фантастическая работа!
Очистить
Cloud SQL не имеет бесплатного уровня и будет взимать плату, если вы продолжите его использовать. Вы можете удалить свой облачный проект, чтобы избежать дополнительных сборов.
В то время как Cloud Run не взимается, когда служба не используется, вы все равно можете быть взимаются за хранение изображения контейнера в реестре артефактов. Удаление вашего облачного проекта прекращает выставление счетов за все ресурсы, используемые в этом проекте.
Если хотите, удалите проект:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Вы также можете удалить ненужные ресурсы с вашего облачного диска. Ты можешь:
- Удалить каталог проектов CodeLab:
rm -rf ~/task-app
- Предупреждение! Это следующее действие не может быть отменено! Если вы хотите удалить все на своем облачном оболочке, чтобы освободить место, вы можете удалить весь свой домашний каталог . Будьте осторожны с тем, что все, что вы хотите сохранить, сохраняется где -то еще.
sudo rm -rf $HOME