Использование Gemini Code Assist для изучения и улучшения решения для быстрого запуска AI-суммирования

1. Введение

В этом практическом занятии мы рассмотрим существующее решение для быстрого старта, AI Summarization, которое использует модели искусственного интеллекта Vertex для составления кратких обзоров PDF-документов, загруженных в Google Cloud Storage.

Затем мы воспользуемся программой Gemini Code Assist для выполнения следующих действий:

  • Разберитесь в коде Python, который лежит в основе облачной функции, выполняющей работу по извлечению текста из PDF-документа, его суммированию и записи результатов в BigQuery.
  • В процессе разработки мы будем использовать Gemini Code Assist для создания нового функционала. Мы разработаем веб-приложение (приложение на Python Flask) и запустим его локально для проверки кода.
  • В качестве альтернативы мы можем рассмотреть возможность развертывания этого приложения в Cloud Run и улучшить дизайн (эстетику) веб-приложения с помощью Material Design.

Что вы будете делать...

  • Вам предстоит развернуть решение AI Summarization Jump Start Solution и запустить процесс, чтобы понять, как оно работает.
  • Затем вы воспользуетесь средой разработки Cloud Shell IDE для загрузки существующего кода решения Jump Start Solution и программой Gemini Code Assist для анализа этого кода.
  • Для генерации кода, отвечающего за новую функциональность, вы будете использовать интегрированную среду разработки Gemini Code Assist Cloud Shell.

Что вы узнаете...

  • Как работает решение для быстрого запуска программы автоматического суммирования с использованием ИИ.
  • Как использовать Gemini Code Assist для решения различных задач разработчиков, таких как генерация кода, автозавершение кода и составление краткого описания кода.

Что вам понадобится...

  • Веб-браузер Chrome
  • Аккаунт Gmail
  • Облачный проект с включенной функцией выставления счетов.
  • Функция Gemini Code Assist включена для вашего облачного проекта.

Эта лабораторная работа предназначена для разработчиков всех уровней, включая начинающих. Хотя пример приложения написан на языке Python, вам не нужно быть знакомым с программированием на Python, чтобы понять, что происходит. Мы сосредоточимся на ознакомлении разработчиков с возможностями Gemini Code Assist.

2. Настройка

В этом разделе описано все, что вам нужно сделать, чтобы начать работу над этой лабораторной работой.

Включение Gemini для облака в проекте Google Cloud

Теперь мы включим Gemini for Cloud в нашем проекте Google Cloud. Следуйте приведенным ниже инструкциям:

  1. Перейдите по ссылке https://console.cloud.google.com и убедитесь, что вы выбрали проект Google Cloud, с которым планируете работать в рамках этой лабораторной работы. Нажмите на значок Open Gemini, который вы видите в правом верхнем углу.

28f084ec1e159938.png

  1. Окно чата Gemini for Cloud откроется в правой части консоли. Нажмите кнопку «Включить», как показано ниже. Если вы не видите кнопку «Включить» , а вместо этого видите интерфейс чата, скорее всего, вы уже включили Gemini for Cloud для проекта, и можете сразу перейти к следующему шагу.

e8df9adc4ea43a37.png

  1. После включения вы можете протестировать Gemini for Cloud, задав ему один или два запроса. Показаны несколько примеров запросов, но вы можете попробовать что-то вроде « What is Cloud Run?

9859ea86a8310cb.png

Gemini for Cloud ответит на ваш вопрос. Вы можете нажать на кнопку. f68286b2b2ea5c0a.png Значок в правом верхнем углу позволяет закрыть окно чата Gemini for Cloud.

Включите функцию Gemini Code Assist в IDE Cloud Shell.

Для выполнения оставшейся части практического задания мы будем использовать Cloud Shell IDE — полностью управляемую среду разработки на основе Code OSS . Нам необходимо включить и настроить Code Assist в Cloud Shell IDE, шаги для этого описаны ниже:

  1. Перейдите по адресу ide.cloud.google.com . Возможно, потребуется некоторое время для отображения IDE, поэтому, пожалуйста, наберитесь терпения.
  2. Нажмите на кнопку « Cloud Code — Войти» в нижней строке состояния, как показано на рисунке. Авторизуйте плагин в соответствии с инструкциями. Если в строке состояния отображается «Cloud Code — нет проекта» , выберите этот пункт, а затем выберите конкретный проект Google Cloud из списка проектов, с которыми вы планируете работать.

6f5ce865fc7a3ef5.png

  1. Нажмите на кнопку Gemini в правом нижнем углу, как показано на рисунке, и еще раз выберите правильный проект Google Cloud. Если вас попросят включить API Cloud AI Companion , сделайте это и продолжите.
  2. После выбора проекта Google Cloud убедитесь, что он отображается в сообщении о состоянии Cloud Code в строке состояния, а также что функция Code Assist включена справа в строке состояния, как показано ниже:

709e6c8248ac7d88.png

Gemini Code Assist готов к использованию!

Необязательно: если вы не видите значок Gemini в строке состояния в правом нижнем углу, вам необходимо включить Gemini в Cloud Code. Перед этим убедитесь, что Gemini включен в IDE, перейдя в раздел «Расширения Cloud Code» → «Настройки» и введя текст Gemini, как показано ниже. Убедитесь, что флажок установлен. Перезагрузите IDE. Это включит Gemini в Cloud Code, и значок Gemini в строке состояния появится в вашей IDE.

228c9c9c6b956c8e.png

3. Внедрите решение для быстрого запуска процесса суммирования информации с помощью ИИ.

  1. Перейдите к решению для создания генеративных ИИ-сумматоров документов.
  2. Нажмите «Развернуть».
  • Если в вашем проекте не включена функция выставления счетов, включите её.
  • Выберите регион us-central1 .
  • Нажмите «Развернуть».
  • Это может занять до 15 минут.
  • Вам не нужно вносить никаких изменений, но вы можете ознакомиться с вариантами развертывания решения Jump Start Solution, нажав кнопку «ИЗУЧИТЬ ЭТО РЕШЕНИЕ» на странице с подробными сведениями о развертывании решения.

4. Пообщайтесь с Близнецами

Начнём с того, как общаться с Gemini. Gemini доступен в качестве помощника в чате в среде разработки Cloud Shell IDE как часть расширения Cloud Code для VS Code. Вы можете вызвать его, нажав на кнопку Gemini в левой панели навигации. Найдите значок Gemini. a489f98a34898727.png в левой панели навигации нажмите на нее.

Это откроет панель «Чат: GeminiI» в среде разработки Cloud Shell IDE, и вы сможете пообщаться с Gemini, чтобы получить помощь по Google Cloud.

14ad103efaa0ddaa.png

Давайте воспользуемся панелью чата Gemini, чтобы ввести запрос и посмотреть ответ от Gemini. Введите следующий запрос:

What is Cloud Run? 

Gemini должен ответить с подробной информацией о Cloud Run. Подсказки — это вопросы или утверждения, описывающие необходимую вам помощь. Подсказки могут включать контекст из существующего кода, который Google Cloud анализирует для предоставления более полезных или полных ответов. Для получения дополнительной информации о написании подсказок для получения качественных ответов см. раздел «Написание более эффективных подсказок для Gemini в Google Cloud» .

Попробуйте ответить на следующие примеры вопросов или задайте свои собственные вопросы о Google Cloud:

  • What is the difference between Cloud Run and Cloud Functions?
  • What services are available on Google Cloud to run containerized workloads?
  • What are the best practices to optimize costs while working with Google Cloud Storage?

Обратите внимание на значок корзины вверху — это способ сбросить контекст истории чата Code Assist. Также учтите, что это взаимодействие в чате зависит от файла (или файлов), над которыми вы работаете в IDE.

5. Загрузите облачную функцию Jump Start Solution в Cloud Code.

Предполагая, что вы находитесь в редакторе Cloud Shell, выполните следующие действия:

  • Нажмите «Облачный код» c0231861cba4b5d2.png
  • Примечание: В зависимости от размера вашего экрана, может потребоваться один или два шага.

4bf4e654a1749030.png или a0baa1d1c1c30151.png

  • Нажмите «Облачные функции».
  • При появлении запроса войдите в свою учетную запись или авторизуйте ее.
  • Воспользуйтесь функцией веб-перехватчика.
  • Нажмите на значок «Загрузить в новое рабочее пространство». 21c63666e951f7b4.png
  • 196780f852e1a99e.png
  • В качестве имени рабочей области используйте webhook-1 (это должно быть имя по умолчанию) или любое другое имя и нажмите ОК.
  • Это откроет код в среде разработки Cloud Shell IDE.

6. Проанализируйте существующий проект.

Ниже представлено решение для быстрого запуска двигателя:

ddf9ee7ff5346f23.png

Проанализируйте последовательность действий при загрузке PDF-файла в облачное хранилище. Функция облачного хранилища, которая будет вызываться при загрузке PDF-файла, приведена в файле main.py

Щелкните по этому файлу. Точкой входа для облачной функции является функция entrypoint , которая в конечном итоге вызывает функцию cloud_event_entrypoint , извлекающую текст из PDF-файла, а затем функцию summarization_entrypoint , которая использует модели Vertex AI для суммирования и записи результатов в GCS и BigQuery соответственно.

Выделите весь код в файле main.py или любой конкретный фрагмент кода. Нажмите на кнопку «Чат Gemini» и введите следующее сообщение: Explain this .

Это должно дать вам объяснение коду.

7. Выполните тестовый запуск.

Согласно архитектурной схеме, мы собираемся загрузить файл в хранилище <PROJECT_ID>_uploads , чтобы затем была вызвана облачная функция.

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

  • Перейдите в раздел Google Cloud Storage в консоли Cloud Console.
  • Перейдите в раздел <PROJECT_ID>_uploads . Нажмите на ссылку UPLOAD FILES и загрузите образец PDF-файла.

Если у вас нет образца PDF-файла, вы можете использовать один из созданных нами образцов. В Cloud Shell выполните следующую команду:

gsutil cp \
    gs://arxiv-dataset/arxiv/cmp-lg/pdf/9410/9410009v1.pdf \
    gs://<PROJECT_ID>_uploads/

После успешной загрузки файла будет вызвана функция облачного webhook , которая выполнит суммирование текста, найденного в документе. Результаты будут записаны в набор данных BigQuery с именем summary_dataset и в таблицу summary_table .

Для просмотра результатов сводки выполните запрос к таблице.

f2ed627e3e96d84e.png

8. Создайте веб-приложение-клиент для этого приложения.

Описанный выше процесс представляет собой пошаговую ручную загрузку PDF-файла, который мы хотим обобщить. А как насчет создания веб-интерфейса для этого приложения?

Требования к веб-интерфейсу просты:

  1. Простая HTML-форма, позволяющая выбрать и загрузить файл, который необходимо кратко описать.
  2. После успешной загрузки файл должен быть записан в хранилище <PROJECT_ID>_uploads , чтобы остальная функциональность работала как обычно.

Для создания этого решения в рамках проекта Duet AI мы будем использовать Python и фреймворк Flask для веб-приложений.

Давайте начнём. Предположим, что у вас по-прежнему открыто то же рабочее пространство в среде разработки Cloud Shell IDE.

Закройте все файлы и введите следующее сообщение в окне чата Gemini:

Write a Python Flask application that has a couple of routes:
The root route / should serve the index.html page using the render_template framework. The /upload route should accept a file being uploaded and write that file to a Cloud Storage bucket.

В идеале это должно привести к следующему результату:

from flask import Flask, render_template, request, redirect, url_for
from google.cloud import storage

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    filename = file.filename
    bucket = storage.Client().bucket('your-bucket-name')
    blob = bucket.blob(filename)
    blob.upload_from_string(
        file.read(),
        content_type=file.content_type
    )
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

Сохраните приведенный выше код как app.py в корневой папке рабочей области IDE.

Мы хотим, чтобы приложение работало на порту 8080 и использовало адрес хоста 0.0.0.0, поэтому давайте попросим Gemini изменить оператор app.run .

Дайте следующий ответ:

Modify the app.py to run on port 8080 and host address 0.0.0.0

Теперь ваш код должен выглядеть примерно так:

from flask import Flask, render_template, request, redirect, url_for
from google.cloud import storage

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    file = request.files['file']
    filename = file.filename
    bucket = storage.Client().bucket('your-bucket-name')
    blob = bucket.blob(filename)
    blob.upload_from_string(
        file.read(),
        content_type=file.content_type
    )
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)

Далее нам нужно сгенерировать и файл index.html . Введите следующую команду в окне чата Gemini:

Provide the index.html file

В результате вы получите код для файла index.html, как показано ниже.

<!DOCTYPE html>
<html>
<head>
  <title>File Upload</title>
</head>
<body>
  <h1>File Upload</h1>
  <form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
  </form>
</body>
</html>

Мы можем попросить Gemini указать нам, куда сохранить файл index.html . Введите следующую подсказку:

Since this is using the render_template framework, where should this file be saved?

В результате должен получиться ответ, похожий на следующий:

c666ee4af5039728.png

Создайте в корневой папке папку с именем templates и сохраните в ней файл index.html.

Нам нужна обработка исключений в файле app.py на случай, если файл не удастся сохранить в хранилище Google Cloud Storage. Оставьте файл app.py открытым и введите следующее сообщение в окне чата Gemini.

modify the app.py to have exception handling in the upload() function. The success or failure should be returned to the index page.

Теперь следует добавить обработку исключений, как показано ниже:

from flask import Flask, render_template, request, redirect, url_for
from google.cloud import storage

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    try:
        file = request.files['file']
        filename = file.filename
        bucket = storage.Client().bucket('your-bucket-name')
        blob = bucket.blob(filename)
        blob.upload_from_string(
            file.read(),
            content_type=file.content_type
        )
        return redirect(url_for('index'))
    except Exception as e:
        return render_template('index.html', error=str(e))

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)

Поскольку нам нужно отобразить сообщение об ошибке в файле index.html, нам также необходимо внести в него изменения. Давайте попросим Gemini сделать это с помощью приведенной ниже команды:

update the index.html to display the error message

В результате должен получиться обновленный файл index.html, как показано ниже:

<!DOCTYPE html>
<html>
<head>
  <title>File Upload</title>
</head>
<body>
  <h1>File Upload</h1>
  {% if error %}
    <p style="color: red;">{{ error }}</p>
  {% endif %}
  <form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
  </form>
</body>
</html>

Убедитесь, что на каждом из описанных выше шагов вы сохраняете изменения в файлах app.py и index.html соответственно.

В файле app.py указано неверное имя корзины, поэтому мы можем передать эту информацию Gemini и попросить внести изменения. Кроме того, нам необходимо указать идентификатор проекта для экземпляра storage.Client() . Поэтому введите следующие два запроса (замените <PROJECT_ID> на идентификатор вашего проекта Google Cloud) в окне чата Gemini и внесите изменения:

Задание 1

My bucket name is gemini-for-devs-demo_uploads, please change the code to use that.

Задание 2

My project id is gemini-for-devs-demo, please change the storage.Client() to use that.

Итоговый файл app.py выглядит следующим образом (ниже указан идентификатор моего проекта, но в идеале он должен совпадать с тем, с которым вы работаете и который указали в запросе выше):

from flask import Flask, render_template, request, redirect, url_for
from google.cloud import storage

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/upload', methods=['POST'])
def upload():
    try:
        file = request.files['file']
        filename = file.filename
        bucket = storage.Client(project='gcp-experiments-349209').bucket('gcp-experiments-349209_uploads')
        blob = bucket.blob(filename)
        blob.upload_from_string(
            file.read(),
            content_type=file.content_type
        )
        return redirect(url_for('index'))
    except Exception as e:
        return render_template('index.html', error=str(e))

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=8080)

9. Запустите веб-приложение локально.

Создайте среду Python с зависимостями, определенными в файле requirements.txt . Перейдите в палитру команд в среде разработки Cloud Shell, как показано ниже:

55dffeed9fe6e9c0.png

Введите в Python: Create Environment , а затем выполните шаги по созданию виртуальной среды (venv), затем выберите интерпретатор Python 3.x и файл requirements.txt . Это создаст необходимую среду.

Запустите терминал, как показано ниже:

6ede24cb97a4e9c5.png

Введите следующую команду в терминале:

python app.py

Приложение Flask должно запуститься, и вы должны увидеть что-то подобное:

(.venv) romin@cloudshell:~/webhook-2 (gcp-experiments-349209)$ python app.py 
 * Serving Flask app 'app'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:8080
 * Running on http://10.88.0.3:8080
Press CTRL+C to quit
 * Restarting with watchdog (inotify)
 * Debugger is active!
 * Debugger PIN: 989-296-833

Перейдите по адресу http://127.0.0.1:8080 , и вы увидите страницу index.html

Загрузите файл со своего локального компьютера, и он должен быть успешно обработан.

Вы можете проверить сводку, перейдя к набору данных и таблице BigQuery, которые мы рассматривали ранее в лабораторной работе. В качестве альтернативы вы можете проверить содержимое сегмента Cloud Storage ( <PROJECT_ID>_output ).

10. (Необязательно) Откройте раздел «Исследование» — Разверните в облаке.

  • Вы можете развернуть приложение в Cloud Run.
  • Обратитесь в службу поддержки Gemini Code Assist, используя следующую подсказку (возможно, потребуется попробовать несколько вариантов приведенной выше подсказки):
I don't want to build a container image but deploy directly from source. What is the gcloud command for that?

11. (Необязательно) Откройте раздел «Исследование» — добавьте стили CSS.

  • Используйте Gemini Code Assist и встроенный в редактор помощник, чтобы добавить стили CSS в ваше приложение, а затем повторно разверните приложение после завершения!
  • Откройте файл index.html и введите в чате Gemini следующий вопрос: Can you apply material design styles to this index.html?
  • Проверьте код и посмотрите, работает ли он.

12. Поздравляем!

Поздравляем! Вы успешно поработали с Gemini Code Assist над тестовым проектом, чтобы понять, как он может помочь в генерации кода, автозаполнении кода, составлении сводных таблиц кода и помочь вам получить ответы на вопросы о Google Cloud.

13. Справочные документы