1. Wprowadzenie
W ramach tego ćwiczenia w programie przyjrzymy się istniejącemu rozwiązaniu ułatwiającemu szybsze rozpoczęcie pracy (podsumowywaniem AI), które wykorzystuje modele Vertex AI do podsumowywania dokumentów PDF przesłanych do Google Cloud Storage.
Będziemy używać Gemini Code Assist do:
- Naucz się rozpoznawać kod Pythona, który obsługuje funkcję w Cloud Functions, by wyodrębniać tekst z dokumentu PDF, podsumowywać go i zapisywać wyniki w BigQuery.
- Podczas tworzenia nowej funkcji będziemy korzystać z pomocy Gemini Code Assist. Opracujemy aplikację internetową (aplikację w języku Python Flask) i uruchomimy ją lokalnie, aby zweryfikować nasz kod.
- Opcjonalnie możemy też wdrożyć tę aplikację w Cloud Run i ulepszyć jej wygląd (estetykę) za pomocą Material Design.
Co możesz zrobić...
- Wdrożysz rozwiązanie ułatwiające szybsze podsumowywanie AI i aktywujesz przepływ procesu, aby zrozumieć, jak działa.
- Następnie użyj Cloud Shell IDE, aby pobrać istniejący kod rozwiązania ułatwiającego szybsze rozpoczęcie pracy i wykorzystać Gemini Code Assist do zrozumienia kodu.
- Do wygenerowania kodu nowej funkcji będziesz używać Gemini Code Assist Cloud Shell IDE.
Czego się nauczysz...
- Jak działa rozwiązanie do szybkiego uruchamiania podsumowywania za pomocą AI.
- Jak używać Gemini Code Assist do różnych zadań programistycznych, takich jak generowanie kodu, uzupełnianie i podsumowywanie kodu.
Co będzie Ci potrzebne...
- Przeglądarka Chrome
- konto Gmail,
- Projekt Cloud z włączonymi płatnościami
- Usługa Gemini Code Assist została włączona w Twoim projekcie Cloud
Ten moduł jest przeznaczony dla programistów na wszystkich poziomach zaawansowania, w tym początkujących. Chociaż przykładowa aplikacja jest w języku Python, nie musisz znać się na programowaniu, by zrozumieć, co się dzieje. Skupimy się na zapoznania się z możliwościami Gemini Code Assist dla deweloperów.
2. Konfiguracja
W tej sekcji znajdziesz informacje o wszystkim, co jest potrzebne, aby rozpocząć korzystanie z tego modułu.
Włączanie Gemini dla Cloud w projekcie Google Cloud
Teraz włączymy Gemini dla Cloud w naszym projekcie Google Cloud. Wykonaj te czynności:
- Otwórz stronę https://console.cloud.google.com i upewnij się, że wybrany jest projekt Google Cloud, z którym zamierzasz pracować w tym module. Kliknij ikonę Otwórz Gemini widoczną w prawym górnym rogu.
- Po prawej stronie konsoli otworzy się okno czatu Gemini w Cloud. Kliknij przycisk Włącz, jak pokazano poniżej. Jeśli nie widzisz przycisku Włącz, a zamiast niego widzisz interfejs Google Chat, prawdopodobnie usługa Gemini for Cloud została już włączona w projekcie i możesz przejść bezpośrednio do następnego kroku.
- Gdy zostanie włączona, możesz przetestować Gemini dla Cloud, zadając mu jedno lub dwa zapytania. Wyświetlamy kilka przykładowych zapytań, ale możesz użyć np.
What is Cloud Run?
Gemini w Cloud odpowie na Twoje pytanie. Możesz kliknąć ikonę w prawym górnym rogu, aby zamknąć okno czatu Gemini w Cloud.
Włącz Gemini Code Assist w Cloud Shell IDE
Do pozostałej części tych ćwiczeń będziemy używać Cloud Shell IDE – w pełni zarządzanego środowiska programistycznego opartego na Code OSS. Musimy włączyć i skonfigurować funkcję Code Assist w IDE Cloud Shell. Poniżej znajdziesz instrukcje:
- Otwórz stronę ide.cloud.google.com. IDE może pojawić się dopiero po pewnym czasie, dlatego prosimy o cierpliwość.
- Kliknij przycisk Cloud Code – Zaloguj się na dolnym pasku stanu, jak pokazano na ilustracji. Autoryzuj wtyczkę zgodnie z instrukcjami. Jeśli na pasku stanu widzisz komunikat „Cloud Code – no project” (Cloud Code – brak projektu), zaznacz tę pozycję, a następnie wybierz konkretny projekt Google Cloud z listy projektów, z którymi zamierzasz pracować.
- W prawym dolnym rogu kliknij przycisk Gemini, jak pokazano na ekranie, i po raz ostatni wybierz właściwy projekt Google Cloud. Jeśli pojawi się prośba o włączenie interfejsu Cloud AI Companion API, zrób to i przejdź dalej.
- Po wybraniu projektu Google Cloud sprawdź, czy widzisz komunikat o stanie Cloud Code na pasku stanu oraz czy masz włączoną funkcję Code Assist po prawej stronie, na pasku stanu, jak pokazano poniżej:
Możesz już korzystać z Gemini Code Assist.
Opcjonalnie: jeśli nie widzisz Gemini na pasku stanu na dole po prawej, musisz włączyć Gemini in Cloud Code. Zanim to zrobisz, sprawdź, czy usługa Gemini jest włączona w IDE. Aby to zrobić, otwórz Cloud Code Extension → Settings (Rozszerzenie Cloud Code → Ustawienia) i wpisz tekst Gemini, jak pokazano poniżej. Upewnij się, że pole wyboru jest zaznaczone. Załaduj IDE ponownie.Spowoduje to włączenie Gemini w Cloud Code i w Twoim IDE pojawi się ikona Gemini na pasku stanu.
3. Wdrażanie rozwiązania ułatwiającego szybsze rozpoczęcie pracy z podsumowaniem AI
- Przejdź do rozwiązania do podsumowywania dokumentów generatywnej AI.
- Kliknij Wdróż
- Jeśli w Twoim projekcie nie włączono płatności, włącz je.
- Jako region wybierz us-central1.
- Kliknij Wdróż.
- Może to potrwać do 15 minut.
- Nie musisz wprowadzać żadnych zmian, ale możesz zapoznać się z wdrożeniem rozwiązania ułatwiającego szybsze rozpoczęcie pracy, klikając przycisk ZOBACZ TO ROZWIĄZANIE na stronie szczegółów wdrożenia.
4. Czatuj z Gemini
Zaczniemy od tego, jak zacząć korzystać z Gemini. Gemini jest dostępny jako asystent czatu w Cloud Shell IDE w ramach rozszerzenia Cloud Code w VS Code. Aby go wyświetlić, kliknij przycisk Gemini na pasku nawigacyjnym po lewej stronie. Znajdź ikonę Gemini na lewym pasku nawigacyjnym i kliknij ją.
Spowoduje to wyświetlenie panelu Google Chat: GeminiI w Cloud Shell IDE. Możesz w nim porozmawiać z Gemini, aby uzyskać pomoc w Google Cloud.
Użyjmy panelu czatu z Gemini, aby wpisać prompt i wyświetlić odpowiedź z Gemini. Wpisz ten prompt:
What is Cloud Run?
Gemini powinien odpowiedzieć, podając szczegóły dotyczące Cloud Run. Prompty to pytania lub oświadczenia, które opisują potrzebną pomoc. Prompty mogą zawierać kontekst z istniejącego kodu, który analizuje Google Cloud, aby dostarczyć bardziej przydatne lub pełne odpowiedzi. Więcej informacji o tworzeniu promptów w celu generowania dobrych odpowiedzi znajdziesz w artykule Tworzenie lepszych promptów dla Gemini w Google Cloud (w języku angielskim).
Aby zadać pytania dotyczące Google Cloud, wypróbuj te przykładowe prompty lub swoje:
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?
Zwróć uwagę na ikonę kosza u góry – to dobry sposób na zresetowanie kontekstu historii czatu z Asystentem do tworzenia kodu. Pamiętaj też, że interakcja na czacie jest uzależniona od kontekstu w odniesieniu do plików, nad którymi pracujesz w IDE.
5. Pobieranie funkcji w Cloud Functions ułatwiającej szybsze rozpoczęcie pracy w Cloud Code
Zakładając, że jesteś w edytorze Cloud Shell, wykonaj te czynności:
- Kliknij Cloud Code
- Uwaga: w zależności od rozmiaru ekranu może to potrwać jeden lub dwa kroki.
lub
- Kliknij Cloud Functions.
- Jeśli pojawi się taka prośba, zaloguj się lub autoryzuj swoje konto.
- Kliknij funkcję webhooka.
- Kliknij ikonę Pobierz do nowego obszaru roboczego
- Wpisz nazwę webhook-1 jako nazwę obszaru roboczego (powinna być ustawiona jako domyślna) lub podaj inną nazwę i kliknij OK.
- Spowoduje to otwarcie kodu w IDE Cloud Shell.
6. Sprawdź istniejący projekt
Rozwiązanie ułatwiające szybsze rozpoczęcie pracy:
Sprawdź przepływ z funkcji przesyłania plików PDF do Cloud Storage. Funkcja w Cloud Functions, która zostanie wywołana po przesłaniu pliku PDF, jest podana w pliku main.py
.
Kliknij ten plik. Punktem wejścia funkcji w Cloud Functions jest entrypoint
, który na koniec wywołuje funkcję cloud_event_entrypoint
, która wyodrębnia tekst z pliku PDF, a potem wywołuje funkcję summarization_entrypoint
, która za pomocą modeli Vertex AI podsumowuje i zapisuje wyniki odpowiednio w GCS i BigQuery.
Zaznacz cały kod w pliku main.py
lub dowolny fragment kodu. Kliknij Gemini Chat i podaj ten prompt: Explain this
.
Powinno ono zawierać objaśnienie kodu.
7. Wykonaj próbne uruchomienie
Zgodnie z schematem architektury prześlemy do zasobnika <PROJECT_ID>_uploads plik, który umożliwi wywołanie funkcji w Cloud Functions.
Upewnij się, że masz gotowy przykładowy plik PDF, który możesz przesłać i dla którego chcesz utworzyć podsumowanie.
- Otwórz Google Cloud Storage w konsoli Cloud.
- Otwórz zasobnik <PROJECT_ID>_uploads. Kliknij link PRZEŚLIJ PLIKI i prześlij przykładowy plik PDF.
Jeśli nie masz przykładowego pliku PDF, możesz skorzystać z jednego z utworzonych przez nas próbek. W Cloud Shell uruchom to polecenie:
gsutil cp \
gs://arxiv-dataset/arxiv/cmp-lg/pdf/9410/9410009v1.pdf \
gs://<PROJECT_ID>_uploads/
Po przesłaniu pliku funkcja w Cloud Functions webhook
zostanie wywołana i podsumuje tekst znaleziony w dokumencie. Dane wyjściowe zostaną zapisane w zbiorze danych BigQuery o nazwie summary_dataset
i w tabeli summary_table
.
Aby wyświetlić wyniki podsumowania, wykonaj zapytanie na tabeli.
8. Tworzenie klienta aplikacji internetowej
Powyższy proces to ręczny, krok po kroku proces przesyłania pliku PDF, który chcemy podsumować. Może utworzyć internetowy interfejs aplikacji?
Wymagania dla interfejsu internetowego są proste:
- Podstawowy formularz HTML, który pozwala nam wybrać i przesłać plik z podsumowaniem.
- Po pomyślnym przesłaniu plik powinien być zapisany w zasobniku <PROJECT_ID>_uploads, aby reszta funkcji działała bez zmian.
Będziemy używać Pythona i platformy Flask do aplikacji internetowych, aby rozbudować to w ramach pomocy Duet AI.
Możemy zaczynać. Zakładamy, że w IDE Cloud Shell masz otwarty ten sam obszar roboczy.
Zamknij wszystkie pliki i wyświetl ten prompt w oknie Gemini Chat:
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.
W idealnej sytuacji kod powinien wyglądać tak:
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)
Zapisz powyższy kod jako app.py w katalogu głównym obszaru roboczego IDE.
Chcemy, aby aplikacja działała na porcie 8080 i używała adresu hosta 0.0.0.0, więc poproś Gemini o zmodyfikowanie instrukcji app.run.
Napisz prompt:
Modify the app.py to run on port 8080 and host address 0.0.0.0
Twój kod powinien teraz wyglądać tak:
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)
Teraz chcemy też wygenerować plik index.html. Podaj ten prompt w oknie Gemini Chat:
Provide the index.html file
Powinien on zawierać kod dla index.html poniżej.
<!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>
Możemy poprosić Gemini o wskazanie miejsca zapisania pliku index.html
. Napisz prompt:
Since this is using the render_template framework, where should this file be saved?
Powinien uzyskać odpowiedź podobną do tej:
Utwórz w folderze głównym folder o nazwie „template” i zapisz w nim plik index.html.
Chcielibyśmy wprowadzić obsługę wyjątków w pliku app.py na wypadek, gdyby pliku nie można było zapisać w zasobniku Google Cloud Storage. Nie zamykaj pliku app.py i wyświetl poniższy prompt w oknie Gemini Chat.
modify the app.py to have exception handling in the upload() function. The success or failure should be returned to the index page.
Powinno to spowodować dodanie obsługi wyjątków w następujący sposób:
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)
Komunikat o błędzie musi zostać wyświetlony w pliku index.html, więc musimy go również zmienić. Poproś Gemini o skorzystanie z poniższego prompta:
update the index.html to display the error message
Powinien wyświetlić się zaktualizowany plik index.html w przykładzie poniżej:
<!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>
Upewnij się, że w każdym z powyższych kroków zapisujesz zmiany odpowiednio w pliku app.py
i index.html
.
app.py
nie ma prawidłowej nazwy zasobnika, dlatego możemy przekazać tę informację usłudze Gemini i poprosić go o wprowadzenie zmian. Dodatkowo musimy podać identyfikator projektu dla instancji storage.Client()
. Dlatego wpisz w oknie Gemini Chat 2 prompty (zastąp <PROJECT_ID>
identyfikatorem projektu Google Cloud) w oknie Gemini Chat i wprowadź zmiany:
Komunikat 1
My bucket name is gemini-for-devs-demo_uploads, please change the code to use that.
Komunikat 2
My project id is gemini-for-devs-demo, please change the storage.Client() to use that.
Ostateczna wersja pliku app.py
wygląda tak (identyfikator mojego projektu jest widoczny poniżej, ale najlepiej, gdyby był to ten, z którym pracujesz i podany w prompcie powyżej):
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. Uruchamianie aplikacji internetowej lokalnie
Utwórz środowisko Pythona z zależnościami zdefiniowanymi w pliku requirements.txt. Otwórz paletę poleceń w Cloud Shell IDE, jak pokazano poniżej:
Wpisz Python: Create Environment
i wykonaj podane kroki, aby utworzyć środowisko wirtualne przy użyciu (venv), a następnie interpretera Pythona 3.x i pliku requirements.txt
. Spowoduje to utworzenie wymaganego środowiska.
Teraz uruchom terminal, jak pokazano poniżej:
Wpisz w terminalu to polecenie:
python app.py
Aplikacja Flask powinna się uruchomić i powinna wyświetlić się coś takiego:
(.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
Otwórz adres URL http://127.0.0.1:8080. Powinno wyświetlić się strona index.html
.
Prześlij plik z komputera lokalnego – powinien zostać przetworzony.
Aby sprawdzić podsumowanie, przejdź do zbioru danych i tabeli BigQuery, które widzieliśmy wcześniej w module. Możesz też sprawdzić zasobnik Cloud Storage (<PROJECT_ID>_output).
10. (Opcjonalnie) Otwieranie eksploracji – wdrażanie w Cloud Run
- Możesz wdrożyć aplikację w Cloud Run.
- Zapytaj pomoc do Gemini Code Assist, podając ten prompt (może być konieczne wypróbowanie kilku jego odmian):
I don't want to build a container image but deploy directly from source. What is the gcloud command for that?
11. (Opcjonalnie) Otwórz kartę Eksploracja – dodaj style CSS
- Użyj Gemini Code Assist i asystenta w edytorze, aby dodać style CSS do swojej aplikacji, a gdy skończysz, ponownie wdróż aplikację.
- Otwórz plik
index.html
i wpisz ten prompt w Gemini Chat:Can you apply material design styles to this index.html?
- Sprawdź kod i zobacz, czy działa.
12. Gratulacje!
Gratulujemy – udało Ci się z pomocą Gemini Code Assist na przykładowym projekcie zrozumieć, jak może on pomóc w generowaniu, uzupełnianiu i podsumowywaniu kodu, a także w uzyskiwaniu odpowiedzi na pytania dotyczące Google Cloud.