Создание приложений в эпоху искусственного интеллекта

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. Предварительные требования

  1. Если у вас еще нет учетной записи Google, вам необходимо ее создать .
    • Используйте личный аккаунт вместо рабочего или учебного. Рабочие и учебные аккаунты могут иметь ограничения, которые не позволят вам включить API, необходимые для этой лабораторной работы.

3. Настройка проекта

  1. Войдите в консоль Google Cloud .
  2. Включите выставление счетов в облачной консоли.
    • Выполнение этой лабораторной работы должно обойтись менее чем в 1 доллар США в виде облачных ресурсов.
    • В конце этой лабораторной работы вы можете выполнить действия по удалению ресурсов, чтобы избежать дальнейших списаний средств.
    • Новые пользователи могут воспользоваться бесплатной пробной версией стоимостью 300 долларов США .
    • Участвуете в виртуальном практическом лабораторном занятии? Возможно, вам будет предоставлен кредит в размере 5 долларов США .
  3. Создайте новый проект или выберите вариант повторного использования существующего проекта.
  4. Подтвердите, что выставление счетов включено в разделе «Мои проекты» в Cloud Billing.
    • Если в столбце Billing account Billing is disabled :
      1. Нажмите на три точки в столбце Actions .
      2. Нажмите «Изменить оплату».
      3. Выберите платежный аккаунт, который вы хотите использовать.
    • Если вы участвуете в мероприятии в режиме реального времени, учетная запись, скорее всего, будет называться Google Cloud Platform Trial Billing Account.

4. Активируйте и используйте Gemini Cloud Assist.

В этом задании мы активируем и будем использовать Gemini Cloud Assist. Работая в консоли Google Cloud, Gemini Cloud Assist может давать советы, помогать в создании, настройке и мониторинге вашей инфраструктуры Google Cloud, а также предлагать команды gcloud и писать скрипты Terraform.

  1. Чтобы активировать Cloud Assist, щелкните поле поиска в верхней части интерфейса Cloud Console и выберите Ask Gemini или Ask Gemini for Cloud console .
  2. Прокрутите страницу до раздела «Необходимый API» и включите Gemini для Google Cloud API.
  3. Если вы сразу не видите интерфейс чата, нажмите «Начать чат» . Начните с того, что попросите Gemini объяснить некоторые преимущества использования Cloud Shell Editor. Уделите несколько минут изучению полученного ответа.
  4. Далее, спросите о преимуществах Agent Builder и о том, как он может помочь в формировании генеративных ответов.
  5. Наконец, давайте сравним результаты. В окне чата Gemini в консоли Google Cloud задайте следующий вопрос:
    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 общедоступных кулинарных книг. Эти книги будут служить источником достоверной информации, которую Gemini использует при ответе на вопросы.

  1. Воспользуйтесь поисковой строкой в ​​Cloud Console, чтобы перейти к Vertex AI . На панели управления нажмите «Включить все рекомендуемые API» . Это может занять несколько минут. Если появится всплывающее окно о необходимости включения самого API Vertex AI, пожалуйста, включите его также. После включения API вы можете перейти к следующему шагу.
  2. Воспользуйтесь поиском, чтобы перейти к Agent Builder, затем нажмите «Продолжить» и «Активировать API» .
  3. Как уже предлагала компания 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 поддерживает несколько типов приложений, и хранилище данных выступает источником достоверной информации для каждого из них. Приложения для поиска подходят для общего использования и поиска. Приложения для чата предназначены для генеративных потоков в приложениях чат-ботов/голосовых ботов, управляемых потоками данных. Приложения для рекомендаций помогают создавать более эффективные системы рекомендаций. А приложения-агенты предназначены для создания агентов, управляемых генеративным искусственным интеллектом. В конечном итоге, приложения-агенты, вероятно, лучше всего подойдут для наших целей, но, поскольку продукт в настоящее время находится на стадии предварительного просмотра, мы будем использовать тип приложения «Поиск».

  1. Воспользуйтесь меню слева, чтобы перейти к разделу «Приложения» , затем нажмите «Создать новое приложение» .
  2. Нажмите «Создать» на карточке «Поиск вашего веб-сайта» . Назовите приложение cookbook-search . Нажмите «Редактировать» и укажите идентификатор приложения cookbook-search-id . Укажите компанию Google и нажмите «Продолжить» .
  3. Проверьте хранилище данных старых кулинарных книг, которое вы создали несколько шагов назад, и создайте приложение поиска.

Если вы посмотрите вкладку «Действия» , то, скорее всего, увидите, что книги рецептов все еще импортируются и индексируются. Индексирование тысяч страниц, содержащихся в 70 предоставленных нами книгах рецептов, займет у Agent Builder более 5 минут. Пока это происходит, давайте загрузим и очистим некоторые данные базы данных рецептов для нашего генератора рецептов.

6. Загрузка и очистка данных в блокноте Colab Enterprise с помощью Gemini Code Assist.

Google Cloud предлагает несколько основных способов работы с блокнотами Jupyter. Мы будем использовать новейшее предложение Google — Colab Enterprise. Некоторые из вас, возможно, знакомы с продуктом Google Colab , который широко используется частными лицами и организациями, желающими поэкспериментировать с блокнотами Jupyter в бесплатной среде. Colab Enterprise — это коммерческое предложение Google Cloud, полностью интегрированное с остальными облачными продуктами Google и в полной мере использующее возможности безопасности и соответствия требованиям среды GCP.

Одна из функций Colab Enterprise — интеграция с Google Gemini Code Assist. Code Assist можно использовать в различных редакторах кода, и он может предлагать советы, а также подсказки непосредственно в коде. Мы будем использовать этого генеративного помощника при обработке данных для наших рецептов.

  1. Воспользуйтесь поиском, чтобы перейти к Colab Enterprise , и нажмите «Создать блокнот» . Если вам предложат поэкспериментировать с новыми функциями Colab, отклоните это предложение. Чтобы запустить среду выполнения и вычислительные мощности, лежащие в основе блокнота, нажмите «Подключить» в правом верхнем углу нового блокнота. Соединять
  2. Чтобы переименовать блокнот в Data Wrangling , нажмите «Файл» > «Переименовать» . Переименование с тремя точками
  3. Нажмите кнопку «+ Текст» , чтобы создать новое текстовое поле, и используйте стрелку вверх, чтобы переместить его так, чтобы оно стало первой ячейкой на странице. + Текст и стрелка вверх
  4. Отредактируйте текстовое поле и введите:
    # Data Wrangling
    
    Import the Pandas library
    
  5. В блоке кода под только что созданным текстовым блоком начните вводить imp , и Gemini Code Assist предложит остальную часть импорта серым цветом. Нажмите Tab , чтобы принять предложение.
    import pandas as pd
    
  6. Ниже поля для импортного кода создайте еще одно текстовое поле и введите:
    Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records.
    
  7. Создайте и отредактируйте еще один блок кода. Снова начните вводить df = и изучите сгенерированный Gemini Code Assistant код. Если вы видите выпадающий список ключевых слов Python поверх сгенерированного предложения, нажмите Escape, чтобы увидеть предложенный код светло-серого цвета. Снова нажмите Tab , чтобы принять предложение. Если ваше предложение не содержало вызов функции head() , добавьте его.
    df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
    df.head()
    
  8. Щелкните в первой ячейке кода, куда вы импортировали 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.
  11. Давайте немного наведём порядок в столбцах. Переименуйте столбец 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)
    
  12. Удалите столбцы source и NER и используйте head() для просмотра первых нескольких строк. Снова обратитесь за помощью к Gemini. Выполните последние две строки и изучите результаты.
    # Remove the source and NER columns
    df.drop(columns=['source', 'NER'], inplace=True)
    df.head()
    
  13. Давайте посмотрим, сколько записей в нашем наборе данных. Снова начнем с выбранного вами метода запроса и посмотрим, сможете ли вы попросить Gemini помочь вам сгенерировать код.
    # Count the records in the DataFrame
    df.shape # count() will also work
    
  14. 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)
    
  15. Исходные данные о рецептах готовы к загрузке в BigQuery. Прежде чем приступить к загрузке, давайте перейдем в BigQuery и подготовим набор данных для нашей таблицы. В консоли Google Cloud используйте поле поиска, чтобы перейти к BigQuery . Вы также можете щелкнуть правой кнопкой мыши по BigQuery и открыть его в новой вкладке браузера.
  16. Если панель чата Gemini AI еще не видна, откройте ее, используя логотип Gemini в правом верхнем углу консоли Cloud. Если вас попросят снова включить API, нажмите «Включить» или обновите страницу. Выполните запрос: What is a dataset used for in BigQuery? После изучения ответа спросите: How can I create a dataset named recipe_data using the Cloud Console? Сравните результаты с результатами следующих нескольких шагов. Open Gemini Cloud Assist
  17. В панели BigQuery Explorer щелкните меню действий просмотра с тремя точками рядом с идентификатором вашего проекта. Затем выберите «Создать набор данных» . Изучить Просмотреть действия
  18. Укажите набор данных и его ID recipe_data . Оставьте тип местоположения US и нажмите «Создать набор данных» . Если вы получите ошибку о том, что набор данных уже существует, просто перейдите к следующему шагу. После создания набора данных в BigQuery, вернёмся в наш блокнот и выполним вставку.
  19. Вернитесь к своему блокноту «Обработка данных» в Colab Enterprise. В новой ячейке кода создайте переменную с именем project_id и используйте ее для хранения текущего идентификатора проекта. В верхнем левом углу этих инструкций, под кнопкой «Завершить лабораторную работу», вы найдете текущий идентификатор проекта. При желании его также можно найти на главной странице Cloud Console. Присвойте значение переменной project_id и запустите ячейку.
    # Create a variable to hold the current project_id
    project_id='YOUR_PROJECT_ID'
    
  20. Используйте подход «подсказка > код», чтобы создать блок кода, который вставит 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 напомнить вам о шагах по созданию поискового приложения Agent Builder, или же вы можете следовать инструкциям, приведенным ниже.

  1. Воспользуйтесь поиском, чтобы перейти к Agent Builder . Откройте Data Stores и Create Data Store . На этот раз выберите тип хранилища данных BigQuery.
  2. В ячейке выбора таблицы нажмите «Обзор» и найдите recipes . Выберите переключатель рядом с вашей таблицей. Если вы видите рецепты из других проектов qwiklabs-gcp-..., обязательно выберите тот, который принадлежит вам. ПРИМЕЧАНИЕ: Если вы щелкнете по recipes вместо выбора переключателя рядом с ними, откроется новая вкладка в вашем браузере, и вы перейдете на страницу обзора таблицы в BigQuery. Просто закройте вкладку браузера и выберите переключатель в Agent Builder.
  3. Проверьте, но не изменяйте остальные параметры по умолчанию, затем нажмите «Продолжить» .
  4. На странице проверки схемы изучите исходные настройки по умолчанию, но ничего не меняйте. Продолжить
  5. Назовите хранилище данных recipe-data . Измените идентификатор хранилища данных и установите его значение на recipe-data-id . Создайте хранилище данных.
  6. Перейдите в раздел «Приложения» с помощью навигационного меню слева и выберите «Создать новое приложение» .
  7. Нажмите «Создать» на карточке «Поиск вашего веб-сайта» . Назовите приложение recipe-search и нажмите «РЕДАКТИРОВАТЬ» , чтобы установить ID на recipe-search-id . Укажите название компании как Google и продолжите .
  8. На этот раз проверьте источники данных рецептов . Создайте приложение.

Индексирование нашей таблицы в базе данных займет некоторое время. Пока это происходит, давайте поэкспериментируем с новым инструментом Data Canvas в BigQuery и посмотрим, сможем ли мы найти пару интересных рецептов.

  1. Воспользуйтесь полем поиска, чтобы перейти к BigQuery . В верхней части окна BigQuery Studio щелкните стрелку вниз рядом с самой правой вкладкой и выберите «Холст данных» . Установите регион на us-central1 . Откройте холст данных
  2. Нажмите «Поиск данных» . В поле поиска на холсте «Данные» найдите recipes , нажмите Enter/Return для выполнения поиска и нажмите кнопку «Добавить на холст» рядом с названием вашей таблицы.
  3. Визуальное представление вашей таблицы рецептов будет загружено в рабочую область данных BigQuery. Вы можете изучить схему таблицы, предварительно просмотреть данные в таблице и изучить другие детали. Под представлением таблицы нажмите кнопку «Запрос» .
  4. На холсте загрузится более или менее типичное диалоговое окно запроса BigQuery с одним дополнением: над окном запроса находится текстовое поле, которое можно использовать для запроса справки у Gemini. Давайте посмотрим, сможем ли мы найти какие-нибудь рецепты тортов в нашем примере. Запустите следующую команду (введя текст и нажав Enter/Return для запуска генерации SQL-запроса):
    Please select the title and ingredients for all the recipes with a title that contains the word cake.
    
  5. Просмотрите сгенерированный SQL-запрос. Когда вы будете удовлетворены результатом, выполните запрос.
  6. Неплохо! Не стесняйтесь поэкспериментировать с другими подсказками и вопросами, прежде чем двигаться дальше. Во время экспериментов пробуйте менее конкретные подсказки, чтобы понять, что работает, а что нет. Например, вот эта подсказка:
    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

  1. Перейдите в редактор Cloud Shell.
  2. Если терминал не отображается в нижней части экрана, откройте его:
    • Нажмите на значок гамбургера. значок меню "гамбургер"
    • Нажмите «Терминал»
    • Нажмите «Новый терминал» Откройте новый терминал в редакторе Cloud Shell.
  3. В терминале настройте свой проект с помощью этой команды:
    • Формат:
      gcloud config set project [PROJECT_ID]
      
    • Пример:
      gcloud config set project lab-project-id-example
      
    • Если вы не помните идентификатор своего проекта:
      • Вы можете вывести список всех идентификаторов ваших проектов с помощью:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      Установите идентификатор проекта в терминале редактора Cloud Shell.
  4. Если появится запрос на авторизацию, нажмите «Авторизовать» , чтобы продолжить. Нажмите, чтобы авторизовать Cloud Shell.
  5. Вы должны увидеть следующее сообщение:
    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

Если появится запрос на авторизацию, нажмите «Авторизовать» , чтобы продолжить. Нажмите, чтобы авторизовать Cloud Shell.

Выполнение этой команды может занять несколько минут, но в итоге должно отобразиться сообщение об успешном завершении, похожее на это:

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 см. в документации здесь.

  1. В терминале Cloud Shell Editor выполните эту команду, чтобы клонировать репозиторий приложения рецептов.
    git clone https://github.com/haggman/recipe-app
    
  2. Выполните эту команду, чтобы открыть папку приложения в редакторе Cloud Shell.
    cloudshell open-workspace recipe-app/
    
  3. Прежде чем мы изучим клонированную папку и начнем работу над нашим веб-приложением, нам необходимо подключить плагин Cloud Code для редактора к Google Cloud и включить Gemini. Давайте сделаем это сейчас. В левом нижнем углу редактора нажмите Cloud Code — Войти . Если вы не видите ссылку, подождите минуту и ​​проверьте еще раз. Cloud Code - Вход
  4. В окне терминала отобразится длинный URL-адрес. Откройте этот URL в браузере и выполните шаги для предоставления Cloud Code доступа к вашей среде Google Cloud. В последнем диалоговом окне скопируйте код подтверждения и вставьте его обратно в окно терминала во вкладке браузера Cloud Shell Editor.
  5. Через несколько мгновений ссылка Cloud Code в левом нижнем углу редактора изменится на Cloud Code - No Project . Щелкните по новой ссылке, чтобы выбрать проект. В верхней части редактора должна открыться панель команд. Щелкните «Выбрать проект Google Cloud» и выберите свой проект. Через несколько мгновений ссылка в левом нижнем углу редактора обновится, отображая идентификатор вашего проекта. Это означает, что Cloud Code успешно подключен к вашему рабочему проекту.
  6. Теперь, когда Cloud Code подключен к вашему проекту, вы можете активировать Gemini Code Assist. В правом нижнем углу интерфейса редактора нажмите на перечеркнутый логотип Gemini. Слева от редактора откроется панель чата Gemini. Нажмите «Выбрать проект Google Cloud» . Когда откроется панель команд, выберите свой проект. Если вы все сделали правильно (и Google ничего не изменил), то теперь вы должны увидеть активное окно чата Gemini. Близнецы с ограниченными возможностями
  7. Отлично, теперь, когда терминал, чат Gemini и настройки Cloud Code настроены, откройте вкладку «Проводник» и уделите несколько минут изучению файлов текущего проекта. Исследователь
  8. В Проводнике откройте файл requirements.txt для редактирования. Переключитесь на панель чата Gemini и задайте вопрос:
    From the dependencies specified in the requirements.txt file, what type of application are we building?
    
  9. Итак, мы создаём интерактивное веб-приложение на Python с использованием Streamlit, которое взаимодействует с Vertex AI и Discovery Engine, отлично. А теперь давайте сосредоточимся на компонентах веб-приложения. Как говорит Gemini, Streamlit — это фреймворк для создания веб-приложений, управляемых данными, на Python. Теперь спросите:
    Does the current project's folder structure seem appropriate for a Streamlit app?
    
    Именно здесь у 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
    
    Нашли более подходящий ответ?
  10. Давайте получим больше информации о Streamlit:
    What can you tell me about Streamlit?
    
    Отлично, значит, Gemini предлагает нам хороший обзор, включая плюсы и минусы.
  11. Если вы хотите узнать о недостатках, вы можете спросить:
    What are the major downsides or shortcomings?
    
    Обратите внимание, нам не нужно было говорить «из Streamlit», потому что чат Gemini — это диалог (многоходный). Gemini понимает, о чём мы говорили, потому что мы находимся в чате. Если в какой-то момент вы захотите очистить историю чата Gemini, воспользуйтесь значком корзины в верхней части окна чата Gemini.

11. Разверните веб-приложение в Cloud Run.

Отлично, основная структура нашего приложения уже создана, но будет ли всё это работать? А ещё лучше, где нам лучше разместить его в Google Cloud?

  1. В окне чата Gemini задайте вопрос:
    If I containerize this application, what compute technologies in Google Cloud would be best for hosting it?
    
  2. Помните, что если вы еще не работали в своей 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 и в редакторе кода может значительно повысить вашу эффективность.
  3. Для веб-приложения в контейнере, работающего без сохранения состояния и имеющего короткий срок жизни, Cloud Run станет отличным вариантом. В окне чата Gemini вашего редактора кода попробуйте ввести следующую команду:
    What steps would be required to run this application in Cloud Run?
    
  4. Похоже, первое, что нам нужно сделать, это создать Dockerfile. Используя редактор, создайте файл с именем Dockerfile в корневой папке вашего проекта. Убедитесь, что вы случайно не поместили его в папку pages . Откройте файл для редактирования.
  5. Давайте воспользуемся боковой панелью чата 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, я получил именно тот файл, который я собираюсь вам предложить. Только что я получил предложение:
    # 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"]
    
    Это ужасный Dockerfile. Я бы немного его упростил. Нам не нужен раздел apt-get, так как всё необходимое для Python уже есть в нашем базовом образе. Кроме того, использование виртуального окружения в контейнере Python — это пустая трата места, поэтому я бы его удалил. Команда expose не является строго необходимой, но допустима. Также она пытается запустить main.py, которого у меня нет.
  6. В папке 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"]
    
  7. Gemini может работать через окно чата, а также непосредственно в вашем файле кода, используя комментарии, как мы использовали в блокноте по обработке данных. Кроме того, его можно вызвать с помощью комбинации клавиш Control+i в Windows или Command+i на Mac. Щелкните где-нибудь в Dockerfile и активируйте Gemini, используя соответствующую команду Command+i / Control+i.
  8. В ответ на запрос введите указанную ниже информацию. Проверьте и подтвердите изменения.
    Please comment the current file.
    
    Как это круто?! Сколько раз вам приходилось работать с чужим кодом, тратя время на то, чтобы разобраться в его бессмысленном коде, прежде чем вы сможете внести свои изменения? Близнецы приходят на помощь!
  9. Теперь спросите у 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?
    
  10. Давайте соберем и развернем наше приложение. В окне терминала выполните команду 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)?
    
  11. Если вы посмотрите на процесс сборки, то увидите, что сначала будет создан репозиторий Docker для Artifact Registry. Затем с помощью Cloud Build будет создан образ контейнера из Dockerfile в локальной папке. Наконец, образ Docker будет развернут в новой службе Cloud Run. В конце выполнения скрипта вы получите тестовый URL-адрес Cloud Run для использования.

Откройте полученную ссылку в новой вкладке браузера. Уделите немного времени изучению структуры и страниц приложения. Отлично, теперь нам нужно подключить функциональность генеративного ИИ.

12. Свяжите страницу с советами по приготовлению пищи с нашим приложением Agent Builder для поиска кулинарных книг.

У нас уже есть работающая платформа для веб-приложения, но нам нужно связать две рабочие страницы с двумя нашими поисковыми приложениями Vertex AI Agent Builder. Давайте начнем с раздела «Советы по приготовлению пищи».

  1. Оставьте открытой вкладку «Редактор Cloud Shell». В консоли Google Cloud воспользуйтесь поиском, чтобы перейти к разделу «Чат» в Vertex AI.
  2. В правой панели настроек установите модель gemini-1.5-flash-002 . Увеличьте лимит выходных токенов до максимума, чтобы модель могла возвращать более длинные ответы при необходимости. Откройте настройки фильтра безопасности . Установите для контента, содержащего разжигание ненависти, контент сексуального характера и контент, содержащий домогательства, значение « Блокировать некоторые» . Установите для опасного контента значение «Блокировать несколько» и сохраните изменения . Мы устанавливаем значение для опасного контента немного ниже, потому что разговоры о ножах и порезах могут быть неверно истолкованы Gemini как насилие.
  3. Переключите тумблер, чтобы включить заземление, затем нажмите «Настроить» . Установите источник заземления на поиск Vertex AI , а в качестве пути к хранилищу данных используйте следующее. Измените YOUR_PROJECT_ID на идентификатор проекта, указанный рядом с кнопкой «Завершить лабораторную работу» в этих инструкциях, затем сохраните настройки заземления.
    projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id
    
    ПРИМЕЧАНИЕ: Если вы получили ошибку, значит, вы либо не изменили идентификатор проекта на свой фактический идентификатор проекта, либо пропустили шаг, на котором изменяли идентификатор хранилища данных Agent Builder для старых книг рецептов. Проверьте Agent Builder > Хранилища данных > старые книги рецептов, чтобы узнать фактический идентификатор хранилища данных.
  4. Протестируйте пару сообщений в чате. Возможно, начните с приведенных ниже. При желании попробуйте и другие.
    How can I tell if a tomato is ripe?
    
  5. Модель работает, теперь давайте поэкспериментируем с кодом. Нажмите «Очистить беседу» , чтобы наши разговоры не стали частью кода, затем нажмите «Получить код» . Очистка диалога и получение кода
  6. В верхней части окна с кодом нажмите «Открыть блокнот» , чтобы мы могли поэкспериментировать и доработать код в Colab Enterprise перед его интеграцией в наше приложение.
  7. Уделите несколько минут, чтобы ознакомиться с кодом. Давайте внесем пару изменений, чтобы адаптировать его под наши нужды. Прежде чем начать, запустите первую ячейку кода, чтобы подключиться к вычислительным ресурсам и установить SDK платформы ИИ. После выполнения блока вам будет предложено перезапустить сессию. Сделайте это.
  8. Перейдите к коду, который мы извлекли из Vertex AI Studio. Измените имя метода multiturn_generate_content на start_chat_session .
  9. Прокрутите до вызова метода model = GenerativeModel( . Существующий код определяет параметры generation_config и safety_settings , но фактически их не использует. Измените создание объекта GenerativeModel так, чтобы оно выглядело следующим образом:
    model = GenerativeModel(
        "gemini-1.5-flash-002",
        tools=tools,
        generation_config=generation_config,
        safety_settings=safety_settings,
    )
    
  10. Наконец, добавьте последнюю строку в метод, сразу после 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
    
  11. Прокрутите ячейку с кодом до конца и измените последнюю строку, вызывающую старую функцию, так, чтобы она вызывала новую функцию с тем же именем и сохраняла возвращаемый объект в переменной chat . После того, как вы будете удовлетворены внесенными изменениями, запустите ячейку.
    chat = start_chat_session()
    
  12. Создайте новую ячейку с кодом и добавьте комментарий # 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)
    
  13. Это хороший ответ, но нам на самом деле нужно именно это вложенное text поле. Измените блок кода так, чтобы он выводил только этот фрагмент, например:
    response = chat.send_message("How can I tell if a tomato is ripe?")
    print(response.candidates[0].content.parts[0].text)
    
  14. Отлично, теперь, когда у нас есть работающий код чата, давайте интегрируем его в наше веб-приложение. Скопируйте всё содержимое ячейки кода, которая создаёт функцию start_chat_session (ячейка test нам не понадобится). Если вы щёлкнете по этой ячейке, вы сможете нажать на меню с тремя точками в правом верхнем углу и скопировать оттуда. Копия ячейки
  15. Перейдите во вкладку «Редактор Cloud Shell» и откройте pages\Cooking_Advice.py для редактирования.
  16. Найдите комментарий:
    #
    # Add the code you copied from your notebook below this message
    #
    
  17. Вставьте скопированный код чуть ниже комментария «Добавьте код» . Отлично, теперь у нас есть раздел, который управляет чат-движком через привязку к Gemini. Теперь давайте интегрируем его в Streamlit.
  18. Найдите фрагмент закомментированного кода непосредственно под комментарием:
    #
    # Here's the code to setup your session variables
    # Uncomment this block when instructed
    #
    
  19. Раскомментируйте этот фрагмент кода (До следующего Setup done, let's build the page UI ») и изучите его. Он создает или извлекает переменные сессии чата и истории.
  20. Далее нам необходимо интегрировать функциональность истории и чата в пользовательский интерфейс. Прокрутите код до комментария, приведенного ниже.
    #
    # Here's the code to create the chat interface
    # Uncomment the below code when instructed
    #
    
  21. Раскомментируйте остальную часть кода ниже комментария и уделите немного времени его изучению. При желании выделите его и попросите Gemini объяснить его функциональность.
  22. Отлично, теперь давайте создадим и развернем приложение. Когда URL-адрес вернется, запустите приложение и попробуйте страницу «Советы по приготовлению пищи». Возможно, спросите о спелых помидорах, или бот знает хороший способ приготовления брюссельской капусты.
    gcloud run deploy recipe-web-app \
        --allow-unauthenticated \
        --source=. \
        --region=us-central1 \
        --port=8501
    

Как здорово! Ваш личный кулинарный советник с искусственным интеллектом :-)

13. (Необязательно) Подключите страницу поиска рецептов к приложению Agent Builder для поиска рецептов.

При подключении страницы с советами по приготовлению пищи к её исходному коду мы использовали для этого API Gemini. Для поиска рецептов давайте подключимся напрямую к приложению поиска Vertex AI Agent Builder.

  1. В редакторе Cloud Shell откройте для редактирования страницу pages/Recipe_Search.py . Изучите структуру страницы.
  2. В верхней части файла укажите идентификатор вашего проекта.
  3. Изучите функцию search_sample . Этот код в значительной степени взят непосредственно из документации Discovery Engine, доступной здесь . Рабочий вариант можно найти в этом блокноте здесь . Единственное изменение, которое я внес, — это возврат response.results вместо просто результатов. Без этого возвращаемый тип представляет собой объект, предназначенный для постраничного просмотра результатов, а это нам не нужно для нашего базового приложения.
  4. Прокрутите файл до самого конца и раскомментируйте весь раздел ниже. Here are the first 5 recipes I found .
  5. Выделите весь раскомментированный вами раздел и откройте чат Gemini Code. Спросите: Explain the highlighted code . Если вы ничего не выделили, Gemini сможет объяснить весь файл. Если вы выделите раздел и попросите Gemini объяснить, прокомментировать или улучшить его, Gemini это сделает. Уделите немного времени и прочтите объяснение. Стоит отметить, что использование блокнота Colab Enterprise — отличный способ изучить API Gemini, прежде чем интегрировать их в ваше приложение. Это особенно полезно для изучения некоторых новых API, которые могут быть недостаточно хорошо документированы.
  6. В окне терминала редактора запустите build.sh , чтобы развернуть готовое приложение. Дождитесь завершения развертывания новой версии, прежде чем переходить к следующему шагу.

14. (Необязательно) Ознакомьтесь с окончательным вариантом приложения.

Уделите несколько минут изучению финальной версии приложения.

  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 cooking related questions and see how the bot functions. Something like:
    Do you have any advice for preparing broccoli?
    
    How about a classic chicken soup recipe?
    
    Tell me about meringue.
    
  6. Now let's find a recipe or two. Navigate to the Recipe Search page and try a few searches. Something like:
    Chili con carne
    
    Chili, corn, rice
    
    Lemon Meringue Pie
    
    A dessert containing strawberries
    

15. 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!

Уборка

Cloud SQL does not have a free tier and will charge you if you continue to use it. You can delete your Cloud project to avoid incurring additional charges.

While Cloud Run does not charge when the service is not in use, you might still be charged for storing the container image in Artifact Registry. Deleting your Cloud project stops billing for all the resources used within that project.

If you would like, delete the project:

gcloud projects delete $GOOGLE_CLOUD_PROJECT

You may also wish to delete unnecessary resources from your cloudshell disk. You can:

  1. Delete the codelab project directory:
    rm -rf ~/task-app
    
  2. Warning! This next action is can't be undone! If you would like to delete everything on your Cloud Shell to free up space, you can delete your whole home directory . Be careful that everything you want to keep is saved somewhere else.
    sudo rm -rf $HOME