1. Введение
В этой кодовой лаборатории мы рассмотрим существующее решение для быстрого старта — AI Summarization, которое использует модели Vertex AI для обобщения PDF-документов, загруженных в Google Cloud Storage.
Затем мы воспользуемся Gemini Code Assist, чтобы:
- Изучите код Python, который обеспечивает работу облачной функции, которая выполняет работу по извлечению текста из PDF-документа, его обобщению и записи результатов в BigQuery.
- На протяжении всего процесса мы будем пользоваться помощью Gemini Code Assist, чтобы помочь в написании новых функций. Мы разработаем веб-приложение (приложение Python Flask) и запустим его локально для проверки нашего кода.
- При желании мы также можем рассмотреть возможность развертывания этого приложения в Cloud Run и улучшить дизайн (эстетику) веб-приложения с помощью Material Design.
Что ты сделаешь...
- Вы развернете решение для быстрого запуска AI-суммирования и запустите поток процесса, чтобы понять, как оно работает.
- Затем вы будете использовать Cloud Shell IDE, чтобы загрузить существующий код для решения Jump Start, и использовать Gemini Code Assist для понимания кода.
- Вы будете использовать Gemini Code Assist Cloud Shell IDE для создания кода для новой функциональности.
Чему вы научитесь...
- Как работает решение для быстрого запуска AI-суммирования.
- Как использовать Gemini Code Assist для решения некоторых задач разработчика, таких как генерация кода, завершение кода и обобщение кода.
Что вам понадобится...
- Веб-браузер Chrome
- Учетная запись Gmail
- Облачный проект с включенной оплатой
- Gemini Code Assist включен для вашего облачного проекта
Эта лабораторная работа ориентирована на разработчиков всех уровней, включая новичков. Хотя пример приложения написан на языке Python, вам не обязательно быть знакомым с программированием на Python, чтобы понять, что происходит. Наше внимание будет сосредоточено на ознакомлении с возможностями Gemini Code Assist для разработчиков.
2. Настройка
В этом разделе описано все, что вам нужно сделать, чтобы начать работу с этой лабораторной работой.
Включите Gemini для облака в проекте Google Cloud
Теперь мы включим Gemini for Cloud в нашем проекте Google Cloud. Следуйте инструкциям ниже:
- Посетите https://console.cloud.google.com и убедитесь, что вы выбрали проект Google Cloud, с которым планируете работать для этой лабораторной работы. Нажмите на значок Open Gemini, который вы видите в правом верхнем углу.
- Окно чата Gemini for Cloud откроется в правой части консоли. Нажмите кнопку «Включить», как показано ниже. Если вы не видите кнопку «Включить» и вместо этого видите интерфейс чата, вполне вероятно, что вы уже включили Gemini for Cloud для проекта и можете сразу перейти к следующему шагу.
- Как только он будет включен, вы сможете протестировать Gemini for Cloud, задав ему один или два запроса. Показаны несколько примеров запросов, но вы можете попробовать что-то вроде
What is Cloud Run?
Gemini for Cloud ответит на ваш вопрос. Вы можете нажать на в правом верхнем углу, чтобы закрыть окно чата Gemini for Cloud.
Включите Gemini Code Assist в Cloud Shell IDE
Для остальной части лаборатории кода мы будем использовать Cloud Shell IDE, полностью управляемую среду разработки на основе Code OSS . Нам нужно включить и настроить Code Assist в Cloud Shell IDE, шаги приведены ниже:
- Посетите ide.cloud.google.com . Для появления IDE может потребоваться некоторое время, поэтому наберитесь терпения.
- Нажмите кнопку Cloud Code — Войти в нижней строке состояния, как показано на рисунке. Авторизуйте плагин согласно инструкциям. Если в строке состояния вы видите «Cloud Code — нет проекта» , выберите его, а затем выберите конкретный проект Google Cloud из списка проектов, с которыми вы планируете работать.
- Нажмите кнопку «Близнецы» в правом нижнем углу, как показано, и в последний раз выберите правильный проект Google Cloud. Если вас попросят включить Cloud AI Companion API , сделайте это и продолжайте.
- Выбрав проект Google Cloud, убедитесь, что вы видите это в сообщении о состоянии Cloud Code в строке состояния и что у вас также включен Code Assist справа в строке состояния, как показано ниже:
Gemini Code Assist готов к использованию!
Необязательно: если вы не видите Gemini в строке состояния справа внизу, вам необходимо включить Gemini в Cloud Code. Прежде чем сделать это, убедитесь, что Gemini включен в IDE, перейдя в «Расширение Cloud Code» → «Настройки» , а затем введите текст Gemini , как показано ниже. Убедитесь, что флажок установлен. Вам следует перезагрузить вашу IDE. Это активирует Gemini в Cloud Code, и значок Gemini в строке состояния появится в вашей IDE.
3. Развертывание решения для быстрого запуска ИИ-суммирования
- Перейти к решению для обобщения документов Generative AI
- Нажмите «Развернуть».
- Если в вашем проекте не включена оплата, включите ее.
- Выберите us-central1 в качестве региона.
- Нажмите «Развернуть».
- Это может занять до 15 минут.
- Вам не нужно вносить какие-либо изменения, но вы можете изучить развертывание решения Jump Start, нажав кнопку ИЗУЧИТЬ ЭТО РЕШЕНИЕ на странице сведений о развертывании решения.
4. Общайтесь с Близнецами
Мы начнем с того, что научимся общаться с Близнецами. Gemini доступен в качестве помощника по чату в Cloud Shell IDE как часть расширения Cloud Code в VS Code. Вы можете вызвать его, нажав кнопку «Близнецы» на левой панели навигации. Найдите значок Близнецов. на левой панели инструментов навигации и щелкните по нему.
Откроется панель «Чат: GeminiI» в Cloud Shell IDE, и вы сможете пообщаться с Gemini, чтобы получить помощь в Google Cloud.
Давайте воспользуемся панелью чата 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, выполните следующие действия:
- Нажмите «Облачный код».
- Примечание. В зависимости от размера экрана это может занять один или два шага.
или
- Нажмите «Облачные функции».
- При появлении запроса войдите в систему или авторизуйте свою учетную запись.
- Нажмите функцию веб-перехватчика.
- Нажмите значок «Загрузить в новую рабочую область».
- Используйте webhook-1 в качестве имени рабочей области (должно быть по умолчанию) или любое другое имя и нажмите «ОК».
- Это откроет код в Cloud Shell IDE.
6. Обзор существующего проекта
Это решение для быстрого запуска показано ниже:
Просмотрите последовательность действий при использовании функции «Загрузить PDF» в облачное хранилище. Облачная функция, которая будет вызываться при загрузке PDF-файла, указана в файле main.py
Нажмите на этот файл. Точкой входа для облачной функции является функция entrypoint
, которая в конечном итоге вызывает функцию cloud_event_entrypoint
, которая извлекает текст из PDF-файла, а затем вызывает summarization_entrypoint
, которая использует модели Vertex AI для суммирования и записи результатов в GCS и BigQuery соответственно.
Выделите весь код в файле main.py
или любой конкретный фрагмент кода. Нажмите «Чат Близнецов» и введите следующую подсказку: Explain this
.
Это должно дать вам объяснение кода.
7. Выполните пробный запуск
Согласно диаграмме архитектуры, мы собираемся загрузить файл в корзину <PROJECT_ID>_uploads для вызова облачной функции.
Убедитесь, что у вас есть готовый образец PDF-файла, который вы можете загрузить и для которого вам нужно краткое изложение.
- Перейдите в Google Cloud Storage в облачной консоли.
- Перейдите в корзину <PROJECT_ID>_uploads . Нажмите ссылку «ЗАГРУЗИТЬ ФАЙЛЫ» и загрузите образец 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
.
Запросите таблицу, чтобы увидеть результаты сводки.
8. Создайте клиент веб-приложения для приложения.
Описанный выше процесс представляет собой ручной пошаговый процесс загрузки PDF-файла, который мы хотим обобщить. Как насчет создания веб-интерфейса приложения?
Требования к веб-интерфейсу просты:
- Базовая HTML-форма, которая позволяет нам выбрать и загрузить файл, который необходимо обобщить.
- Файл при успешной загрузке должен быть записан в корзину <PROJECT_ID>_uploads , чтобы остальные функции работали как есть.
Мы будем использовать Python и платформу Flask для веб-приложений, чтобы реализовать это вместе с Duet AI.
Давайте начнем. Мы предполагаем, что у вас по-прежнему открыто то же рабочее пространство в 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?
Он должен дать ответ, аналогичный следующему:
Создайте папку с именем 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, нам также необходимо изменить его. Давайте попросим Близнецов сделать это с помощью приведенной ниже подсказки:
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 с зависимостями, определенными в файле require.txt . Перейдите в палитру команд в Cloud Shell IDE, как показано ниже:
Введите Python: Create Environment
, а затем выполните шаги по созданию виртуальной среды, используя (venv), затем интерпретатор Python 3.x и файл requirements.txt
. Это создаст необходимую среду.
Запустите терминал сейчас, как показано ниже:
Дайте следующую команду в терминале:
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
Посетите URL-адрес http://127.0.0.1:8080 , и он должен отобразить страницу index.html
Загрузите файл со своего локального компьютера, и он должен быть успешно обработан.
Вы можете проверить обобщение, перейдя к набору данных и таблице BigQuery, которые мы видели ранее в лабораторной работе. Альтернативно вы можете проверить корзину Cloud Storage ( <PROJECT_ID>_output ).
10. (Необязательно) Открытое исследование — развертывание в Cloud Run
- Вы можете развернуть приложение в 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.