1. Przegląd
W tym laboratorium użyjesz generatywnej AI od Google do tworzenia infrastruktury w Google Cloud z pomocą Gemini Cloud Assist, wysyłania zapytań do danych BigQuery za pomocą funkcji obszaru roboczego danych do konwersji języka naturalnego na SQL, pisania kodu w notebookach Colab Enterprise Jupyter i w Eclipse Theia (Visual Studio Code) z pomocą Gemini Code Assist oraz integrowania funkcji wyszukiwania i funkcji czatu opartych na AI, które korzystają ze źródeł w Cloud Storage i BigQuery, w Kreatorze agentów Vertex AI.
Naszym celem jest stworzenie witryny z przepisami i poradami kulinarnymi o nazwie AI Recipe Haven. Witryna zostanie utworzona w języku Python i przy użyciu biblioteki Streamlit. Będzie zawierać 2 główne strony. Usługa Cooking Advice będzie hostować chatbota, którego utworzymy za pomocą Gemini i kreatora agentów Vertex AI. Będzie on oparty na źródle powiązanym z grupą książek kucharskich i będzie oferować porady kulinarne oraz odpowiadać na pytania związane z gotowaniem. Wyszukiwarka przepisów będzie wyszukiwarką opartą na Gemini, tym razem korzystającą z bazy danych przepisów BigQuery.
Jeśli utkniesz na którymś z fragmentów kodu w tym ćwiczeniu, rozwiązania wszystkich plików kodu znajdziesz w repozytorium GitHub ćwiczenia w gałęzi solution.
Cele
Z tego modułu nauczysz się, jak:
- Aktywowanie i korzystanie z Gemini Cloud Assist
- Tworzenie aplikacji do wyszukiwania w Kreatorze agentów Vertex AI na potrzeby czatbota z poradami kulinarnymi
- Wczytywanie i czyszczenie danych w notatniku Colab Enterprise z pomocą Gemini Code Assist
- Tworzenie aplikacji do wyszukiwania w Kreatorze agentów Vertex AI na potrzeby generatora przepisów
- Stwórz podstawową aplikację internetową w Pythonie i Streamlit z pomocą Gemini
- Wdrażanie aplikacji internetowej w Cloud Run
- Połącz stronę z poradami dotyczącymi gotowania z naszą aplikacją Kreator agentów do wyszukiwania przepisów
- (Opcjonalnie) Połącz stronę wyszukiwania przepisów z aplikacją do tworzenia agentów wyszukiwania przepisów
- (Opcjonalnie) Sprawdź gotową aplikację
2. Wymagania wstępne
- Jeśli nie masz jeszcze konta Google, musisz je utworzyć.
- Używaj konta osobistego zamiast konta służbowego lub szkolnego. Konta służbowe i szkolne mogą mieć ograniczenia, które uniemożliwiają włączenie interfejsów API potrzebnych do tego ćwiczenia.
3. Konfigurowanie projektu
- Zaloguj się w konsoli Google Cloud.
- Włącz płatności w konsoli Google Cloud.
- Pod względem opłat za zasoby chmury ukończenie tego modułu powinno kosztować mniej niż 1 USD.
- Jeśli chcesz uniknąć dalszych opłat, wykonaj czynności opisane na końcu tego modułu, aby usunąć zasoby.
- Nowi użytkownicy mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
- Bierzesz udział w wirtualnym wydarzeniu z ćwiczeniami praktycznymi? Możesz otrzymać 5 USD do wykorzystania.
- Utwórz nowy projekt lub użyj już istniejącego.
- Sprawdź, czy płatności są włączone w sekcji Moje projekty w Rozliczeniach usługi Google Cloud
- Jeśli w kolumnie
Billing accountprzy nowym projekcie widnieje symbolBilling is disabled:- Kliknij 3 kropki w kolumnie
Actions. - Kliknij Zmień płatności.
- Wybierz konto rozliczeniowe, którego chcesz używać.
- Kliknij 3 kropki w kolumnie
- Jeśli uczestniczysz w wydarzeniu na żywo, konto prawdopodobnie będzie się nazywać Próbne konto rozliczeniowe Google Cloud Platform.
- Jeśli w kolumnie
4. Aktywowanie i korzystanie z Gemini Cloud Assist
W tym zadaniu aktywujemy i użyjemy Gemini Cloud Assist. Podczas pracy w konsoli Google Cloud usługa Gemini Cloud Assist może udzielać porad, pomagać w budowaniu, konfigurowaniu i monitorowaniu infrastruktury w chmurze Google Cloud, a nawet sugerować polecenia gcloud i pisać skrypty Terraform.
- Aby aktywować Cloud Assist, kliknij pole wyszukiwania u góry interfejsu konsoli Cloud i wybierz Zapytaj Gemini lub Zapytaj Gemini o konsolę Cloud.
- Przewiń do sekcji Wymagany interfejs API i włącz interfejs Gemini for Google Cloud API.
- Jeśli interfejs czatu nie pojawi się od razu, kliknij Rozpocznij rozmowę. Zacznij od poproszenia Gemini o wyjaśnienie niektórych zalet korzystania z edytora Cloud Shell. Poświęć kilka minut na zapoznanie się z wygenerowaną odpowiedzią.
- Następnie zapytaj o korzyści wynikające z używania Kreatora agentów i o to, jak może on pomóc w uzyskiwaniu bardziej konkretnych odpowiedzi generatywnych.
- Na koniec przyjrzyjmy się porównaniu. W oknie czatu Gemini w konsoli Google Cloud zadaj to pytanie:
What are the major steps to creating a search app grounded in a GCS data source using Vertex AI Agent builder?
5. Tworzenie aplikacji do wyszukiwania w Kreatorze agentów Vertex AI na potrzeby czatbota z poradami kulinarnymi
Tworzona przez nas witryna będzie zawierać stronę z poradami dotyczącymi gotowania, na której znajdzie się chatbot zaprojektowany tak, aby pomagać użytkownikom w znajdowaniu odpowiedzi na pytania związane z gotowaniem. Będzie korzystać z Gemini, które będzie oparte na źródle zawierającym 70 książek kucharskich z domeny publicznej. Książki kucharskie będą źródłem informacji, z którego Gemini będzie korzystać podczas odpowiadania na pytania.
- W polu wyszukiwania konsoli Cloud wpisz Vertex AI. W panelu kliknij Włącz wszystkie zalecane interfejsy API. Może to potrwać kilka minut. Jeśli pojawi się wyskakujące okienko z informacją, że sam interfejs Vertex AI API wymaga włączenia, włącz go. Gdy interfejsy API zostaną włączone, możesz przejść do następnego kroku.
- Użyj wyszukiwarki, aby przejść do Agent Builder, a następnie kliknij Continue and Activate the API (Przejdź dalej i aktywuj API).
- Jak sugerowaliśmy w naszych wcześniejszych poradach, tworzenie aplikacji do wyszukiwania w Agent Builder zaczyna się od utworzenia wiarygodnego źródła danych. Gdy użytkownik wyszukuje, Gemini rozumie pytanie i wie, jak tworzyć inteligentne odpowiedzi, ale informacje wykorzystywane w odpowiedzi będzie pobierać ze źródła, a nie z własnej wiedzy.W menu po lewej stronie kliknij Magazyny danych i Utwórz magazyn danych.
- Książki kucharskie z domeny publicznej, których używamy do tworzenia strony z poradami kulinarnymi, znajdują się obecnie w zasobniku Cloud Storage w projekcie zewnętrznym. Wybierz typ źródła Cloud Storage.
- Sprawdź domyślne opcje związane z rodzajem importowanych informacji, ale ich nie zmieniaj. Pozostaw typ importu ustawiony na Folder, a jako ścieżkę do zasobnika użyj:
labs.roitraining.com/labs/old-cookbooks, a następnie kliknij Dalej. - Nazwij magazyn danych:
old-cookbooks. Kliknij EDYTUJ i zmień identyfikator naold-cookbooks-id, a następnie kliknij Utwórz magazyn danych.
Kreator agentów Vertex AI obsługuje kilka typów aplikacji, a magazyn danych jest źródłem informacji dla każdego z nich. Aplikacje do wyszukiwania sprawdzają się w przypadku ogólnego użytku i wyszukiwania. Aplikacje do obsługi czatu są przeznaczone do przepływów generatywnych w aplikacjach do obsługi czatu lub botów głosowych opartych na Dataflow. Aplikacje rekomendacyjne pomagają tworzyć lepsze systemy rekomendacji. Aplikacje agentów służą do tworzenia agentów opartych na generatywnej AI. W przyszłości Agent prawdopodobnie będzie dla nas najlepszym rozwiązaniem, ale ponieważ jest to obecnie wersja podglądowa, pozostaniemy przy typie aplikacji wyszukiwarki.
- W menu po lewej stronie kliknij Aplikacje, a następnie Utwórz nową aplikację.
- Na karcie Wyszukaj swoją witrynę kliknij Utwórz. Nazwij aplikację
cookbook-search. Kliknij Edytuj i ustaw identyfikator aplikacji nacookbook-search-id. Ustaw firmę naGooglei kliknij Dalej. - Zaznacz utworzony kilka kroków wcześniej magazyn danych old-cookbooks i kliknij Utwórz, aby utworzyć aplikację do wyszukiwania.
Jeśli sprawdzisz kartę Aktywność, prawdopodobnie zobaczysz, że książki kucharskie są nadal importowane i indeksowane. Zindeksowanie tysięcy stron zawartych w 70 książkach kucharskich, które udostępniliśmy narzędziu Agent Builder, zajmie ponad 5 minut. W tym czasie wczytajmy i oczyśćmy dane z bazy przepisów na potrzeby naszego generatora przepisów.
6. Wczytywanie i czyszczenie danych w notatniku Colab Enterprise z pomocą Gemini Code Assist
Google Cloud oferuje kilka głównych sposobów pracy z notatnikami Jupyter. Będziemy korzystać z najnowszej usługi Google – Colab Enterprise. Niektórzy z Was mogą znać usługę Colab od Google, która jest powszechnie używana przez osoby i organizacje, które chcą eksperymentować z notatnikami Jupyter w bezpłatnym środowisku. Colab Enterprise to komercyjna oferta Google Cloud, która jest w pełni zintegrowana z pozostałymi usługami chmurowymi Google i w pełni wykorzystuje funkcje zabezpieczeń i zgodności z regulacjami środowiska GCP.
Jedną z funkcji Colab Enterprise jest integracja z Gemini Code Assist od Google. Asystent kodu może być używany w wielu różnych edytorach kodu i oferować porady oraz płynne sugestie wstawiane podczas pisania kodu. Będziemy korzystać z tego asystenta generatywnego podczas porządkowania danych o przepisach.
- Użyj wyszukiwarki, aby przejść do Colab Enterprise, i kliknij Utwórz notatnik. Jeśli pojawi się oferta przetestowania nowych funkcji Colab, odrzuć ją. Aby uruchomić środowisko wykonawcze, czyli moc obliczeniową notatnika, kliknij Połącz w prawym górnym rogu nowego notatnika.

- Kliknij Plik > Zmień nazwę, aby zmienić nazwę notatnika na
Data Wrangling.
- Kliknij + Tekst, aby utworzyć nowe pole tekstowe, a następnie użyj strzałki w górę, aby przenieść je na pierwsze miejsce na stronie.

- Edytuj pole tekstowe i wpisz:
# Data Wrangling Import the Pandas library - W bloku kodu pod utworzonym blokiem tekstu zacznij pisać
imp. Gemini Code Assist powinien zasugerować resztę importu na szaro. Aby zaakceptować sugestię, naciśnij Tab.import pandas as pd - Pod polem kodu importu utwórz kolejne pole tekstowe i wpisz w nim:
Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records. - Utwórz i edytuj kolejny blok kodu. Ponownie zacznij pisać
df =i sprawdź kod wygenerowany przez Gemini Code Assist. Jeśli nad wygenerowaną sugestią zobaczysz listę słów kluczowych w Pythonie, naciśnij klawisz Escape, aby wyświetlić sugerowany kod w jasnoszarym kolorze. Ponownie naciśnij Tab, aby zaakceptować sugestię. Jeśli sugestia nie zawiera wywołania funkcjihead(), dodaj je.df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv') df.head() - Kliknij pierwszą komórkę z kodem, w której zaimportowano bibliotekę Pandas, i użyj menu Polecenia lub klawiatury, aby uruchomić wybraną komórkę. Na klawiaturze naciśnięcie Shift+Enter spowoduje uruchomienie komórki i przeniesienie zaznaczenia do następnej komórki, a w razie potrzeby utworzenie nowej. Zanim przejdziesz dalej, poczekaj, aż komórka zostanie wykonana.UWAGA: gdy komórka nie została wykonana, po lewej stronie zobaczysz [ ]. Podczas wykonywania komórki zobaczysz obracającą się animację. Gdy komórka zakończy działanie, pojawi się liczba, np. [13].
- Wykonaj komórkę, która wczytuje plik CSV do obiektu DataFrame. Poczekaj, aż plik się wczyta, i sprawdź pierwsze 5 wierszy danych. Są to dane o przepisach, które wczytamy do BigQuery i których ostatecznie użyjemy do trenowania naszego generatora przepisów.
- Utwórz nowy blok kodu i wpisz poniższy komentarz. Po wpisaniu komentarza przejdź do następnego wiersza kodu. Powinna pojawić się sugestia
df.columns. Zaakceptuj go, a potem uruchom komórkę. Pokazaliśmy właśnie, że w notatniku Jupyter masz 2 możliwości uzyskania pomocy od Gemini Code Assist: w komórkach tekstowych nad komórkami kodu lub w komentarzach w samej komórce kodu. Komentarze w komórkach kodu działają dobrze w notebookach Jupyter, ale to podejście sprawdzi się też w każdym innym środowisku IDE obsługującym Gemini Code Assist od Google.# List the current DataFrame column names - Posprzątajmy trochę w kolumnach. Zmień nazwę kolumny
Unnamed: 0naid, a kolumnylinknauri. Użyj wybranej techniki promptu > kodu, aby utworzyć kod, a następnie uruchom komórkę, gdy będziesz zadowolony(-a) z wyniku.# Rename the column 'Unnamed: 0' to 'id' and 'link' to 'uri' df.rename(columns={'Unnamed: 0': 'id', 'link': 'uri'}, inplace=True) - Usuń kolumny
sourceiNER, a potem użyjhead(), aby wyświetlić kilka pierwszych wierszy. Ponownie poproś o pomoc Gemini. Uruchom 2 ostatnie wiersze i sprawdź wyniki.# Remove the source and NER columns df.drop(columns=['source', 'NER'], inplace=True) df.head() - Sprawdźmy, ile rekordów znajduje się w naszym zbiorze danych. Zacznij od wybranej techniki promptowania i sprawdź, czy Gemini pomoże Ci wygenerować kod.
# Count the records in the DataFrame df.shape # count() will also work - 2,23 miliona rekordów to prawdopodobnie więcej przepisów, niż mamy czasu na wypróbowanie. Proces indeksowania w Kreatorze agentów prawdopodobnie zajmie zbyt dużo czasu, abyśmy mogli go dziś przeprowadzić. W ramach kompromisu wybierzmy 150 tys. przepisów i na nich pracujmy. Użyj podejścia „prompt > code”, aby pobrać próbkę i zapisać ją w nowej ramce danych o nazwie
dfs(s – mała).# Sample out 150,000 records into a DataFrame named dfs dfs = df.sample(n=150000) - Dane źródłowe dotyczące przepisów są gotowe do wczytania do BigQuery. Zanim to zrobimy, przejdźmy do BigQuery i przygotujmy zbiór danych, w którym będzie przechowywana nasza tabela. W konsoli Google Cloud użyj pola wyszukiwania, aby przejść do BigQuery. Możesz kliknąć prawym przyciskiem myszy BigQuery i otworzyć je w nowej karcie przeglądarki.
- Jeśli nie jest jeszcze widoczny, otwórz panel czatu z funkcjami AI od Gemini, klikając logo Gemini w prawym górnym rogu konsoli Cloud. Jeśli pojawi się prośba o ponowne włączenie interfejsu API, kliknij Włącz lub odśwież stronę. Uruchom prompt:
What is a dataset used for in BigQuery?Po zapoznaniu się z odpowiedziąHow can I create a dataset named recipe_data using the Cloud Console?porównaj wyniki z kilkoma poniższymi krokami.
- W panelu Eksplorator BigQuery kliknij menu z 3 kropkami Wyświetl działania obok identyfikatora projektu. Następnie kliknij Utwórz zbiór danych.

- Nadaj zbiorowi danych identyfikator
recipe_data. Pozostaw typ lokalizacji US i kliknij Utwórz zbiór danych. Jeśli pojawi się błąd informujący, że zbiór danych już istnieje, po prostu przejdź dalej.Po utworzeniu zbioru danych w BigQuery wróćmy do notatnika i wstawmy dane. - Wróć do notatnika Data Wrangling w Colab Enterprise. W nowej komórce z kodem utwórz zmienną o nazwie
project_idi użyj jej do przechowywania identyfikatora bieżącego projektu. W lewym górnym rogu tych instrukcji, pod przyciskiem Zakończ moduł, znajdziesz bieżący identyfikator projektu. Możesz też wyświetlić go na stronie głównej Cloud Console. Przypisz wartość do zmiennejproject_idi uruchom komórkę.# Create a variable to hold the current project_id project_id='YOUR_PROJECT_ID' - Użyj podejścia prompt > code, aby utworzyć blok kodu, który wstawia ramkę danych
dfsdo tabeli o nazwierecipesw utworzonym przez nas zbiorze danychrecipe_data. Uruchom komórkę.dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')
7. Tworzenie aplikacji do wyszukiwania w Kreatorze agentów Vertex AI na potrzeby generatora przepisów
Świetnie. Utworzyliśmy tabelę z danymi o przepisach. Użyjmy jej teraz do utworzenia źródła danych opartego na wiedzy dla naszego generatora przepisów. Zastosujemy podobne podejście jak w przypadku naszego czatbota do gotowania. Za pomocą Kreatora agentów Vertex AI utworzymy magazyn danych, a następnie użyjemy go jako źródła informacji w aplikacji do wyszukiwania.
Możesz poprosić Gemini w konsoli Google Cloud o przypomnienie kroków tworzenia aplikacji wyszukiwania w Kreatorze agentów lub wykonać czynności podane poniżej.
- Użyj wyszukiwarki, aby przejść do Kreatora agentów. Otwórz Magazyny danych i Utwórz magazyn danych. Tym razem wybierz typ magazynu danych BigQuery.
- W komórce wyboru tabeli kliknij Przeglądaj i wyszukaj
recipes. Kliknij przycisk obok tabeli. Jeśli widzisz przepisy z innych projektów qwiklabs-gcp-..., wybierz ten, który należy do Ciebie.UWAGA: jeśli kliknieszrecipeszamiast zaznaczyć przycisk opcji obok niego, otworzy się nowa karta w przeglądarce i zostanie wyświetlona strona Przegląd tabeli w BigQuery. Wystarczy zamknąć kartę przeglądarki i wybrać opcję w Agent Builderze. - Sprawdź pozostałe opcje domyślne, ale ich nie zmieniaj, a potem kliknij Dalej.
- Na stronie sprawdzania schematu przejrzyj początkowe konfiguracje domyślne, ale niczego nie zmieniaj. Dalej
- Nazwij magazyn danych
recipe-data. Edytuj identyfikator magazynu danych i ustaw go narecipe-data-id. Utwórz magazyn danych. - W menu nawigacyjnym po lewej stronie kliknij Aplikacje, a potem Utwórz nową aplikację.
- Na karcie Wyszukaj swoją witrynę kliknij Utwórz. Nadaj aplikacji nazwę
recipe-searchi kliknij EDYTUJ, aby ustawić identyfikator narecipe-search-id. Ustaw nazwę firmy naGooglei kliknij Dalej. - Tym razem sprawdź źródła danych recipe-data. Utwórz aplikację.
Indeksowanie tabeli bazy danych zajmie trochę czasu. W tym czasie poeksperymentujmy z nowym obszarem roboczym danych BigQuery i sprawdźmy, czy znajdziemy ciekawe przepisy.
- W polu wyszukiwania wpisz BigQuery. U góry BigQuery Studio kliknij strzałkę w dół obok skrajnej karty po prawej stronie i wybierz Obszar roboczy danych. Ustaw region na us-central1.

- Kliknij Wyszukaj dane. W polu wyszukiwania obszaru roboczego danych wyszukaj
recipes, naciśnijEnter/Return, aby wyszukać, a następnie kliknij przycisk Dodaj do obszaru roboczego obok nazwy tabeli. - Wizualizacja tabeli z przepisami zostanie wczytana do obszaru roboczego danych BigQuery. Możesz przeanalizować schemat tabeli, wyświetlić podgląd danych w tabeli i sprawdzić inne szczegóły. Pod tabelą kliknij Zapytanie.
- W obszarze roboczym pojawi się mniej więcej typowe okno zapytania BigQuery z jednym dodatkiem: nad oknem zapytania znajduje się pole tekstowe, w którym możesz poprosić Gemini o pomoc. Sprawdźmy, czy w naszym przykładzie znajdziemy przepisy na ciasta. Uruchom ten prompt (wpisz tekst i naciśnij
Enter/Return, aby wygenerować kod SQL):Please select the title and ingredients for all the recipes with a title that contains the word cake. - Sprawdź wygenerowany kod SQL. Gdy efekt będzie zadowalający, uruchom zapytanie.
- Nie najgorzej! Zanim przejdziesz dalej, możesz wypróbować kilka innych promptów i zapytań. Eksperymentuj z mniej konkretnymi promptami, aby sprawdzić, co działa, a co nie. Na przykład ten prompt:
(Nie zapomnij uruchomić nowego zapytania) Zwróciło listę przepisów na chili, ale pominęło składniki, dopóki nie zmodyfikowałem go w ten sposób:Do I have any chili recipes? (Tak, proszę, gdy proszę. Moja mama byłaby ze mnie dumna). Zauważyłem, że jeden przepis na chili zawierał grzyby, a kto by chciał grzyby w chili? Poprosiłem(-am) Gemini o pomoc w wykluczeniu tych przepisów.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. Otwórz edytor Cloud Shell
- Otwórz edytor Cloud Shell.
- Jeśli terminal nie pojawi się u dołu ekranu, otwórz go:
- Kliknij menu
. - Kliknij Terminal.
- Kliknij Nowy terminal
.
- Kliknij menu
- W terminalu ustaw projekt za pomocą tego polecenia:
- Format:
gcloud config set project [PROJECT_ID] - Przykład:
gcloud config set project lab-project-id-example - Jeśli nie pamiętasz identyfikatora projektu:
- Aby wyświetlić listę wszystkich identyfikatorów projektów, użyj tego polecenia:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- Aby wyświetlić listę wszystkich identyfikatorów projektów, użyj tego polecenia:
- Format:
- Jeśli pojawi się prośba o autoryzację, kliknij Autoryzuj, aby przejść dalej.

- Powinien wyświetlić się ten komunikat:
Jeśli widzisz symbolUpdated property [core/project].
WARNINGi pojawia się pytanieDo you want to continue (Y/N)?, prawdopodobnie identyfikator projektu został wpisany nieprawidłowo. NaciśnijN, a następnieEnteri spróbuj ponownie uruchomić poleceniegcloud config set project.
9. Włącz interfejsy API
W terminalu włącz interfejsy 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
Jeśli pojawi się prośba o autoryzację, kliknij Autoryzuj, aby przejść dalej. 
Wykonanie tego polecenia może potrwać kilka minut, ale powinno ostatecznie wyświetlić komunikat o sukcesie podobny do tego:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
10. Stwórz podstawową aplikację internetową w Pythonie i Streamlit z pomocą Gemini
Gdy oba nasze magazyny danych Kreatora agentów Vertex AI są już zaindeksowane, a aplikacje wyszukiwarki są prawie gotowe do wdrożenia, możemy zacząć tworzyć aplikację internetową.
Podczas pracy będziemy korzystać z Gemini Code Assist. Więcej informacji o korzystaniu z Gemini Code Assist w Visual Studio Code znajdziesz w dokumentacji tutaj.
- W terminalu edytora Cloud Shell uruchom to polecenie, aby sklonować repozytorium aplikacji z przepisami.
git clone https://github.com/haggman/recipe-app - Uruchom to polecenie, aby otworzyć folder aplikacji w edytorze Cloud Shell.
cloudshell open-workspace recipe-app/ - Zanim zaczniemy przeglądać sklonowany folder i pracować nad aplikacją internetową, musimy zalogować się w Google Cloud za pomocą wtyczki Cloud Code edytora i włączyć Gemini. Zróbmy to teraz. W lewym dolnym rogu edytora kliknij Cloud Code – zaloguj się. Jeśli nie widzisz linku, poczekaj minutę i sprawdź ponownie.

- W oknie terminala wyświetli się długi adres URL. Otwórz adres URL w przeglądarce i wykonaj czynności, aby przyznać Cloud Code dostęp do środowiska Google Cloud. W ostatnim oknie kliknij Kopiuj, aby skopiować kod weryfikacyjny, a następnie wklej go z powrotem do okna terminala na karcie przeglądarki edytora Cloud Shell.
- Po chwili link Cloud Code w lewym dolnym rogu edytora zmieni się na Cloud Code – brak projektu. Kliknij nowy link, aby wybrać projekt. U góry edytora powinna się otworzyć paleta poleceń. Kliknij Wybierz projekt Google Cloud i wybierz swój projekt. Po chwili link w lewym dolnym rogu edytora zostanie zaktualizowany i będzie zawierać identyfikator projektu. Oznacza to, że Cloud Code został prawidłowo dołączony do projektu roboczego.
- Po połączeniu Cloud Code z projektem możesz aktywować Gemini Code Assist. W prawym dolnym rogu interfejsu edytora kliknij przekreślone logo Gemini. Po lewej stronie edytora otworzy się panel Gemini Chat. Kliknij Wybierz projekt Google Cloud. Gdy otworzy się paleta poleceń, wybierz projekt. Jeśli wykonasz te czynności prawidłowo (i Google niczego nie zmieni), powinna się teraz wyświetlić aktywne okno czatu z Gemini.

- Świetnie. Po skonfigurowaniu terminala, rozmowy z Gemini i Cloud Code otwórz kartę Eksplorator i poświęć kilka minut na zapoznanie się z plikami w bieżącym projekcie.

- W Eksploratorze otwórz plik
requirements.txtdo edycji. Przejdź do panelu czatu Gemini i zapytaj:From the dependencies specified in the requirements.txt file, what type of application are we building? - Tworzymy więc interaktywną aplikację internetową w Pythonie i Streamlit, która wchodzi w interakcje z Vertex AI i Discovery Engine. Na razie skupmy się na komponentach aplikacji internetowej. Jak mówi Gemini, Streamlit to platforma do tworzenia aplikacji internetowych opartych na danych w Pythonie. Teraz zadaj sobie pytanie:
W tym przypadku Gemini może mieć problemy. Gemini ma dostęp do pliku, który jest obecnie otwarty w edytorze, ale nie widzi całego projektu. Spróbuj zapytać:Does the current project's folder structure seem appropriate for a Streamlit app? Chcesz uzyskać lepszą odpowiedź?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 - Dowiedzmy się więcej o Streamlit:
Świetnie, Gemini oferuje nam więc przydatne podsumowanie, w tym zalety i wady.What can you tell me about Streamlit? - Jeśli chcesz poznać wady, możesz zadać pytanie:
Zwróć uwagę, że nie musieliśmy dodawać „w Streamlit”, ponieważ rozmowa z Gemini jest konwersacyjna (wieloetapowa). Gemini wie, o czym rozmawiamy, ponieważ jesteśmy w sesji czatu. Jeśli w dowolnym momencie chcesz wyczyścić historię rozmów z Gemini, użyj ikony kosza u góry okna czatu z kodem Gemini.What are the major downsides or shortcomings?
11. Wdrażanie aplikacji internetowej w Cloud Run
Świetnie, mamy już podstawową strukturę aplikacji, ale czy wszystko będzie działać? A może lepiej, gdzie powinniśmy hostować go w Google Cloud?
- W oknie czatu z Gemini zapytaj:
If I containerize this application, what compute technologies in Google Cloud would be best for hosting it? - Pamiętaj, że jeśli nie pracujesz jeszcze w IDE, możesz też poprosić o pomoc Asystenta Google Cloud. Otwórz konsolę Google Cloud, a następnie Gemini Cloud Assist i zadaj pytanie:
Czy obie porady były takie same? Czy zgadzasz się z którąś z tych porad? Pamiętaj, że Gemini to asystent AI oparty na generatywnej AI i podobnie jak w przypadku asystenta będącego człowiekiem, nie zawsze musisz się zgadzać ze wszystkim, co mówi. Jednak obecność takiego pomocnika podczas pracy w Google Cloud i edytorze kodu może znacznie zwiększyć Twoją wydajność.If I have a containerized web application, where would be the best place to run it in Google Cloud? - W przypadku bezstanowej, krótkotrwałej skonteneryzowanej aplikacji internetowej Cloud Run będzie doskonałym rozwiązaniem. W oknie rozmowy z Gemini w edytorze kodu wypróbuj prompta:
What steps would be required to run this application in Cloud Run? - Wygląda na to, że najpierw musimy utworzyć plik Dockerfile. W edytorze utwórz plik o nazwie
Dockerfilew katalogu głównym folderu projektu. Uważaj, aby nie umieścić go przypadkowo w folderze pages. Otwórz plik do edycji. - Użyjmy panelu bocznego rozmowy z Gemini, aby utworzyć plik Dockerfile. Użyj promptu podobnego do tego poniżej. Gdy wyniki zostaną wyświetlone na czacie, użyj znaku + obok ikony kopiowania tuż nad sugerowanym plikiem Dockerfile, aby wstawić sugerowany kod do pliku Dockerfile.
Gemini nie zawsze zwraca tę samą odpowiedź na ten sam prompt. Gdy po raz pierwszy poprosiłem Gemini o plik Dockerfile, otrzymałem dokładnie ten plik, który zamierzam Ci zaproponować. Właśnie otrzymałem(-am) sugestię: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. To jest niezły plik Dockerfile. Uprościłbym to trochę. Nie potrzebujemy sekcji apt-get, ponieważ wszystko, co jest potrzebne do Pythona, znajduje się już w naszym obrazie podstawowym. Używanie środowiska wirtualnego w kontenerze Pythona to też marnowanie miejsca, więc je usuń. Polecenie expose nie jest bezwzględnie konieczne, ale jest w porządku. Próbuje też uruchomić plik main.py, którego nie mam.# 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"] - W folderze
recipe-apputwórz plik o nazwieDockerfilei wklej do niego tę treść:FROM python:3.11-slim-bookworm WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir --upgrade pip && \ pip install --no-cache-dir -r requirements.txt COPY . . CMD ["streamlit", "run", "Home.py"] - Gemini może działać w oknie czatu, ale może też pracować bezpośrednio w pliku z kodem, używając komentarzy, tak jak w przypadku notatnika Data Wrangling. Można go też wywołać za pomocą kombinacji klawiszy Ctrl+i w systemie Windows lub Command+i na Macu. Kliknij w dowolnym miejscu w
Dockerfilei aktywuj Gemini za pomocą odpowiedniego polecenia Command+i / Ctrl+i. - W wierszu poleceń wpisz poniższe polecenie. Sprawdź zmianę i ją zaakceptuj.
Ale super! Ile razy zdarzyło Ci się pracować z kodem innej osoby i tracić czas na zrozumienie jej pracy bez komentarzy, zanim w ogóle mogłeś zacząć wprowadzać zmiany? Gemini na ratunek!Please comment the current file. - Teraz zapytaj Gemini, jak możesz użyć Cloud Run do utworzenia i wdrożenia nowego obrazu o nazwie
recipe-web-appz pliku Dockerfile w bieżącym folderze.How could I use gcloud to build a new Cloud Run service named recipe-web-app from the current directory? - Skompilujmy i wdróżmy aplikację. W oknie terminala wykonaj polecenie
gcloud run deploy. Jeśli pojawi się prompt z prośbą o utworzenie repozytorium Artifact Registry, naciśnijgcloud run deploy recipe-web-app \ --allow-unauthenticated \ --source=. \ --region=us-central1 \ --port=8501enter/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)?
- Jeśli obejrzysz proces kompilacji, najpierw zostanie utworzone repozytorium Dockera w Artifact Registry. Następnie używa Cloud Build do utworzenia obrazu kontenera z pliku Dockerfile w folderze lokalnym. Na koniec obraz Dockera zostanie wdrożony w nowej usłudze Cloud Run. Na końcu skryptu otrzymasz adres URL testu Cloud Run, którego możesz użyć.
Otwórz zwrócony link w nowej karcie przeglądarki. Poświęć chwilę na zapoznanie się ze strukturą i stronami aplikacji. Świetnie, teraz musimy dodać funkcję generatywnej AI.
12. Połącz stronę z poradami dotyczącymi gotowania z naszą aplikacją Kreator agentów do wyszukiwania przepisów
Mamy już działającą strukturę aplikacji internetowej, ale musimy połączyć 2 strony robocze z 2 aplikacjami wyszukiwania w kreatorze agentów Vertex AI. Zacznijmy od porad dotyczących gotowania.
- Pozostaw otwartą kartę edytora Cloud Shell. W konsoli Google Cloud użyj wyszukiwarki, aby przejść do czatu w Vertex AI.
- W panelu ustawień po prawej stronie ustaw model na gemini-1.5-flash-002. Przesuń suwak limitu tokenów wyjściowych do maksymalnej wartości, aby model mógł w razie potrzeby zwracać dłuższe odpowiedzi. Otwórz Ustawienia filtra zabezpieczeń. Ustaw opcję Wypowiedzi szerzące nienawiść, Treści o charakterze jednoznacznie seksualnym i Nękanie na Blokuj niektóre. Ustaw opcję Niebezpieczne treści na Blokuj niewiele i kliknij Zapisz. Ustawiamy poziom „Niebezpieczne treści” nieco niżej, ponieważ rozmowa o nożach i cięciu może zostać błędnie zinterpretowana przez Gemini jako przemoc.
- Przesuń suwak, aby włączyć uzasadnienie, a następnie kliknij Dostosuj. Ustaw źródło grounding na Vertex AI Search, a w przypadku ścieżki magazynu danych użyj poniższego kodu. Zmień ID_TWOJEGO_PROJEKTU na identyfikator projektu, który znajdziesz w tych instrukcjach w pobliżu przycisku Zakończ moduł, a następnie zapisz ustawienia podstawowe.
UWAGA: jeśli pojawi się błąd, oznacza to, że nie zmieniono identyfikatora projektu na rzeczywisty identyfikator projektu lub pominięto krok, w którym zmieniono identyfikator starego magazynu danych Agent Builder. Sprawdź identyfikator magazynu danych w sekcji Agent Builder > Data Stores > old-cookbooks (Kreator agentów > Magazyny danych > old-cookbooks).projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id - Przetestuj kilka wiadomości na czacie. Możesz zacząć od poniższych informacji. Jeśli chcesz, wypróbuj kilka innych.
How can I tell if a tomato is ripe? - Model działa, więc teraz poeksperymentujmy z kodem. Kliknij Clear Conversation (Wyczyść rozmowę), aby nasze rozmowy nie stały się częścią kodu, a następnie kliknij Get Code (Pobierz kod).

- U góry okna kodu kliknij Otwórz notatnik, abyśmy mogli eksperymentować z kodem i dopracowywać go w Colab Enterprise przed zintegrowaniem go z naszą aplikacją.
- Poświęć kilka minut na zapoznanie się z kodem. Wprowadźmy kilka zmian, aby dostosować go do naszych potrzeb. Zanim zaczniemy, uruchom pierwszą komórkę kodu, aby połączyć się z zasobami obliczeniowymi i zainstalować pakiet AI Platform SDK. Po uruchomieniu bloku pojawi się prośba o ponowne uruchomienie sesji. Zrób to.
- Przejdź do kodu wyodrębnionego z Vertex AI Studio. Zmień nazwę metody multiturn_generate_content na
start_chat_session. - Przewiń do wywołania metody
model = GenerativeModel(. Istniejący kod definiuje elementygeneration_configisafety_settings, ale w rzeczywistości ich nie używa. Zmodyfikuj tworzenieGenerativeModel, aby przypominało:model = GenerativeModel( "gemini-1.5-flash-002", tools=tools, generation_config=generation_config, safety_settings=safety_settings, ) - Na koniec dodaj do metody ostatni wiersz, tuż pod
chat = model.start_chat(), aby funkcja zwracała obiektchat. Gotowa funkcja powinna wyglądać tak, jak poniżej.UWAGA: NIE KOPIUJ tego kodu do notatnika. Jest to po prostu test zdrowego rozsądku.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 - Przewiń w dół komórkę z kodem i zmień ostatni wiersz wywołujący starą funkcję, aby wywoływał nową funkcję i przechowywał zwrócony obiekt w zmiennej
chat. Gdy zmiany będą Ci odpowiadać, uruchom komórkę.chat = start_chat_session() - Utwórz nową komórkę z kodem i dodaj komentarz
# Use chat to invoke Gemini and print out the response. Przejdź do następnego wiersza i wpiszresp. Gemini powinien automatycznie uzupełnić blok. Zaktualizuj prompta doHow can I tell if a tomato is ripe?. Uruchom komórkęresponse = chat.send_message("How can I tell if a tomato is ripe?") print(response) - To jest odpowiedź, ale tak naprawdę interesuje nas zagnieżdżone pole
text. Zmodyfikuj blok kodu, aby wydrukować tylko tę sekcję, np.:response = chat.send_message("How can I tell if a tomato is ripe?") print(response.candidates[0].content.parts[0].text) - Świetnie. Mamy już działający kod czatu, więc zintegrujmy go z aplikacją internetową. Skopiuj całą zawartość komórki kodu, która tworzy funkcję
start_chat_session(komórka testowa nie będzie potrzebna). Jeśli klikniesz komórkę, możesz kliknąć menu z 3 kropkami w prawym górnym rogu i skopiować dane
- Przejdź na kartę edytora Cloud Shell i otwórz plik
pages\Cooking_Advice.py, aby go edytować. - Znajdź komentarz:
# # Add the code you copied from your notebook below this message # - Wklej skopiowany kod tuż pod komentarzem Add the code (Dodaj kod). Świetnie, mamy już sekcję, która steruje silnikiem czatu za pomocą wywołania Gemini opartego na danych. Teraz zintegrujmy go ze Streamlit.
- Znajdź sekcję zakomentowanego kodu bezpośrednio pod komentarzem:
# # Here's the code to setup your session variables # Uncomment this block when instructed # - Usuń znacznik komentarza z tej sekcji kodu (do następnej sekcji
Setup done, let's build the page UI) i zapoznaj się z nią. Tworzy lub pobiera zmienne sesji czatu i historii. - Następnie musimy zintegrować historię i funkcję czatu z interfejsem. Przewiń kod, aż znajdziesz poniższy komentarz.
# # Here's the code to create the chat interface # Uncomment the below code when instructed # - Usuń znaczniki komentarza z pozostałej części kodu poniżej komentarza i poświęć chwilę na jego przejrzenie. Jeśli chcesz, zaznacz go i poproś Gemini o wyjaśnienie jego działania.
- Świetnie. Teraz skompilujmy i wdróżmy aplikację. Gdy adres URL wróci, uruchom aplikację i wypróbuj stronę Doradcy kulinarnego. Możesz na przykład zapytać o dojrzałe pomidory lub o dobry sposób na przygotowanie brukselki.
gcloud run deploy recipe-web-app \ --allow-unauthenticated \ --source=. \ --region=us-central1 \ --port=8501
Fajnie, prawda? Twój osobisty doradca kulinarny oparty na AI :-)
13. (Opcjonalnie) Połącz stronę wyszukiwania przepisów z aplikacją do tworzenia agentów wyszukiwania przepisów
Gdy połączyliśmy stronę z poradami dotyczącymi gotowania z jej źródłem, zrobiliśmy to bezpośrednio za pomocą Gemini API. W przypadku wyszukiwania przepisów połączmy się bezpośrednio z aplikacją wyszukiwarki Kreatora agentów Vertex AI.
- W edytorze Cloud Shell otwórz stronę
pages/Recipe_Search.py, aby ją edytować. Sprawdź strukturę strony. - Ustaw identyfikator projektu u góry pliku.
- Sprawdź funkcję
search_sample. Ten kod pochodzi w większości bezpośrednio z dokumentacji Discovery Engine tutaj. Działającą kopię znajdziesz w tym notatniku tutaj.Jedyna zmiana, jaką wprowadziłem, to zwracanieresponse.resultszamiast samych wyników. Bez tego typem zwracanych danych jest obiekt przeznaczony do stronicowania wyników, a tego nie potrzebujemy w naszej podstawowej aplikacji. - Przewiń plik na sam dół i odkomentuj całą sekcję poniżej
Here are the first 5 recipes I found. - Zaznacz cały odkomentowany fragment i otwórz czat Gemini Code. Zapytaj:
Explain the highlighted code. Jeśli nic nie wybierzesz, Gemini może wyjaśnić cały plik. Jeśli zaznaczysz fragment i poprosisz Gemini o wyjaśnienie, skomentowanie lub ulepszenie go, Gemini to zrobi.Poświęć chwilę na przeczytanie wyjaśnienia. Korzystanie z notatnika Colab Enterprise to świetny sposób na poznanie interfejsów Gemini API przed zintegrowaniem ich z aplikacją. Jest to szczególnie przydatne w przypadku nowszych interfejsów API, które mogą nie być udokumentowane w wystarczającym stopniu. - W oknie terminala edytora uruchom polecenie
build.sh, aby wdrożyć gotową aplikację. Zanim przejdziesz do następnego kroku, poczekaj na wdrożenie nowej wersji.
14. (Opcjonalnie) Sprawdź gotową aplikację
Poświęć kilka minut na zapoznanie się z gotową aplikacją.
- W konsoli Google Cloud użyj wyszukiwarki, aby przejść do
Cloud Run, a następnie kliknij recipe-web-app. - Znajdź adres URL testu aplikacji (u góry) i otwórz go w nowej karcie przeglądarki.
- Powinna się pojawić strona główna aplikacji. Zwróć uwagę na podstawowy układ i nawigację zapewniane przez Streamlit. Pliki Pythona z folderu
pagessą wyświetlane jako opcje nawigacji, a plikHome.pyjest wczytywany jako strona główna. Otwórz stronę Porady dotyczące gotowania. - Po chwili pojawi się interfejs czatu. Zwróć uwagę na przejrzysty układ podstawowy zapewniany przez Streamlit.
- Zadaj kilka pytań związanych z gotowaniem i sprawdź, jak działa bot. Na przykład:
Do you have any advice for preparing broccoli? How about a classic chicken soup recipe? Tell me about meringue. - Znajdźmy teraz przepis lub dwa. Otwórz stronę wyszukiwania przepisów i wypróbuj kilka wyszukiwań. Na przykład:
Chili con carne Chili, corn, rice Lemon Meringue Pie A dessert containing strawberries
15. Gratulacje!
Masz utworzoną aplikację korzystającą z aplikacji Kreatora agentów Vertex AI. Poznałeś(-aś) Gemini Cloud Assist, Gemini Code Assist i funkcje języka naturalnego do SQL w obszarze danych BigQuery. Świetna robota!
Czyszczenie danych
Cloud SQL nie ma bezpłatnego poziomu i jeśli będziesz z niego korzystać, będziemy naliczać opłaty. Aby uniknąć dodatkowych opłat, możesz usunąć projekt w chmurze.
Cloud Run nie nalicza opłat, gdy usługa nie jest używana, ale może zostać pobrana należność za przechowywanie obrazu kontenera w Artifact Registry. Usunięcie projektu w chmurze spowoduje zaprzestanie naliczania opłat za wszelkie zasoby wykorzystywane w ramach tego projektu.
Jeśli chcesz, usuń projekt:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Możesz też usunąć niepotrzebne zasoby z dysku Cloud Shell. Możesz:
- Usuń katalog projektu ćwiczeń z programowania:
rm -rf ~/task-app - Ostrzeżenie! Tej czynności nie można cofnąć. Jeśli chcesz usunąć wszystko z Cloud Shell, aby zwolnić miejsce, możesz usunąć cały katalog domowy. Upewnij się, że wszystko, co chcesz zachować, jest zapisane w innym miejscu.
sudo rm -rf $HOME