Building Applications in the AI Era

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

  1. 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

  1. Zaloguj się w konsoli Google Cloud.
  2. Włącz płatności w konsoli Google Cloud.
  3. Utwórz nowy projekt lub użyj już istniejącego.
  4. Sprawdź, czy płatności są włączone w sekcji Moje projekty w Rozliczeniach usługi Google Cloud
    • Jeśli w kolumnie Billing account przy nowym projekcie widnieje symbol Billing is disabled:
      1. Kliknij 3 kropki w kolumnie Actions.
      2. Kliknij Zmień płatności.
      3. Wybierz konto rozliczeniowe, którego chcesz używać.
    • Jeśli uczestniczysz w wydarzeniu na żywo, konto prawdopodobnie będzie się nazywać Próbne konto rozliczeniowe Google Cloud Platform.

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.

  1. Aby aktywować Cloud Assist, kliknij pole wyszukiwania u góry interfejsu konsoli Cloud i wybierz Zapytaj Gemini lub Zapytaj Gemini o konsolę Cloud.
  2. Przewiń do sekcji Wymagany interfejs API i włącz interfejs Gemini for Google Cloud API.
  3. 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ą.
  4. 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.
  5. 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.

  1. 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.
  2. Użyj wyszukiwarki, aby przejść do Agent Builder, a następnie kliknij Continue and Activate the API (Przejdź dalej i aktywuj API).
  3. 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 danychUtwórz magazyn danych.
  4. 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.
  5. 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.
  6. Nazwij magazyn danych: old-cookbooks. Kliknij EDYTUJ i zmień identyfikator na old-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.

  1. W menu po lewej stronie kliknij Aplikacje, a następnie Utwórz nową aplikację.
  2. Na karcie Wyszukaj swoją witrynę kliknij Utwórz. Nazwij aplikację cookbook-search. Kliknij Edytuj i ustaw identyfikator aplikacji na cookbook-search-id. Ustaw firmę na Google i kliknij Dalej.
  3. 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.

  1. 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.Connect
  2. Kliknij Plik > Zmień nazwę, aby zmienić nazwę notatnika na Data Wrangling.Zmiana nazwy za pomocą menu z 3 kropkami
  3. 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.+ Tekst i strzałka w górę
  4. Edytuj pole tekstowe i wpisz:
    # Data Wrangling
    
    Import the Pandas library
    
  5. 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
    
  6. 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.
    
  7. 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 funkcji head(), dodaj je.
    df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
    df.head()
    
  8. 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].
  9. 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.
  10. 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ę.
    # List the current DataFrame column names
    
    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.
  11. Posprzątajmy trochę w kolumnach. Zmień nazwę kolumny Unnamed: 0 na id, a kolumny link na uri. 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)
    
  12. Usuń kolumny sourceNER, a potem użyj head(), 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()
    
  13. 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
    
  14. 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)
    
  15. 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.
  16. 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.Otwieranie Gemini Cloud Assist
  17. W panelu Eksplorator BigQuery kliknij menu z 3 kropkami Wyświetl działania obok identyfikatora projektu. Następnie kliknij Utwórz zbiór danych.Przeglądanie działań związanych z wyświetleniem
  18. 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.
  19. Wróć do notatnika Data Wrangling w Colab Enterprise. W nowej komórce z kodem utwórz zmienną o nazwie project_id i 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 zmiennej project_id i uruchom komórkę.
    # Create a variable to hold the current project_id
    project_id='YOUR_PROJECT_ID'
    
  20. Użyj podejścia prompt > code, aby utworzyć blok kodu, który wstawia ramkę danych dfs do tabeli o nazwie recipes w utworzonym przez nas zbiorze danych recipe_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.

  1. 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.
  2. 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 klikniesz recipes zamiast 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.
  3. Sprawdź pozostałe opcje domyślne, ale ich nie zmieniaj, a potem kliknij Dalej.
  4. Na stronie sprawdzania schematu przejrzyj początkowe konfiguracje domyślne, ale niczego nie zmieniaj. Dalej
  5. Nazwij magazyn danych recipe-data. Edytuj identyfikator magazynu danych i ustaw go na recipe-data-id. Utwórz magazyn danych.
  6. W menu nawigacyjnym po lewej stronie kliknij Aplikacje, a potem Utwórz nową aplikację.
  7. Na karcie Wyszukaj swoją witrynę kliknij Utwórz. Nadaj aplikacji nazwę recipe-search i kliknij EDYTUJ, aby ustawić identyfikator na recipe-search-id. Ustaw nazwę firmy na Google i kliknij Dalej.
  8. 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.

  1. 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.Otwieranie obszaru roboczego danych
  2. Kliknij Wyszukaj dane. W polu wyszukiwania obszaru roboczego danych wyszukaj recipes, naciśnij Enter/Return, aby wyszukać, a następnie kliknij przycisk Dodaj do obszaru roboczego obok nazwy tabeli.
  3. 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.
  4. 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.
    
  5. Sprawdź wygenerowany kod SQL. Gdy efekt będzie zadowalający, uruchom zapytanie.
  6. 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:
    Do I have any chili recipes?
    
    (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?  Please include their title and ingredients.
    
    (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, and ignore any recipes with mushrooms as an ingredient.
    

8. Otwórz edytor Cloud Shell

  1. Otwórz edytor Cloud Shell.
  2. Jeśli terminal nie pojawi się u dołu ekranu, otwórz go:
    • Kliknij menu Ikona menu z 3 kreskami.
    • Kliknij Terminal.
    • Kliknij Nowy terminalOtwieranie nowego terminala w edytorze Cloud Shell.
  3. 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}'
        
      Ustawianie identyfikatora projektu w terminalu edytora Cloud Shell
  4. Jeśli pojawi się prośba o autoryzację, kliknij Autoryzuj, aby przejść dalej. Kliknij, aby uwierzytelnić się w Cloud Shell
  5. Powinien wyświetlić się ten komunikat:
    Updated property [core/project].
    
    Jeśli widzisz symbol WARNING i pojawia się pytanie Do you want to continue (Y/N)?, prawdopodobnie identyfikator projektu został wpisany nieprawidłowo. Naciśnij N, a następnie Enter i spróbuj ponownie uruchomić polecenie gcloud 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. Kliknij, aby uwierzytelnić się w Cloud Shell

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.

  1. W terminalu edytora Cloud Shell uruchom to polecenie, aby sklonować repozytorium aplikacji z przepisami.
    git clone https://github.com/haggman/recipe-app
    
  2. Uruchom to polecenie, aby otworzyć folder aplikacji w edytorze Cloud Shell.
    cloudshell open-workspace recipe-app/
    
  3. 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.Cloud Code – logowanie
  4. 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.
  5. 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.
  6. 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.Wyłączono Gemini
  7. Ś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.Eksplorator
  8. W Eksploratorze otwórz plik requirements.txt do edycji. Przejdź do panelu czatu Gemini i zapytaj:
    From the dependencies specified in the requirements.txt file, what type of application are we building?
    
  9. 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:
    Does the current project's folder structure seem appropriate for a Streamlit app?
    
    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ć:
    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
    
    Chcesz uzyskać lepszą odpowiedź?
  10. Dowiedzmy się więcej o Streamlit:
    What can you tell me about Streamlit?
    
    Świetnie, Gemini oferuje nam więc przydatne podsumowanie, w tym zalety i wady.
  11. Jeśli chcesz poznać wady, możesz zadać pytanie:
    What are the major downsides or shortcomings?
    
    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.

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?

  1. W oknie czatu z Gemini zapytaj:
    If I containerize this application, what compute technologies in Google Cloud would be best for hosting it?
    
  2. 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:
    If I have a containerized web application, where would be the best place to run it in Google Cloud?
    
    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ść.
  3. 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?
    
  4. Wygląda na to, że najpierw musimy utworzyć plik Dockerfile. W edytorze utwórz plik o nazwie Dockerfile w katalogu głównym folderu projektu. Uważaj, aby nie umieścić go przypadkowo w folderze pages. Otwórz plik do edycji.
  5. 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.
    Create a Dockerfile for the application in the current folder. The dependencies are defined in requirements.txt and I want you to use the Python 3 slim bookworm base image.
    
    Gemini 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ę:
    # 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"]
    
    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.
  6. W folderze recipe-app utwórz plik o nazwie Dockerfile i 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"]
    
  7. 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 Dockerfile i aktywuj Gemini za pomocą odpowiedniego polecenia Command+i / Ctrl+i.
  8. W wierszu poleceń wpisz poniższe polecenie. Sprawdź zmianę i ją zaakceptuj.
    Please comment the current file.
    
    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!
  9. Teraz zapytaj Gemini, jak możesz użyć Cloud Run do utworzenia i wdrożenia nowego obrazu o nazwie recipe-web-app z 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?
    
  10. Skompilujmy i wdróżmy aplikację. W oknie terminala wykonaj polecenie gcloud run deploy.
    gcloud run deploy recipe-web-app \
        --allow-unauthenticated \
        --source=. \
        --region=us-central1 \
        --port=8501
    
    Jeśli pojawi się prompt z prośbą o utworzenie repozytorium Artifact Registry, naciśnij enter/return.
    Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository
    named cloud-run-source-deploy in region us-central1 will be created.
    
    Do you want to continue (Y/n)?
    
  11. 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.

  1. Pozostaw otwartą kartę edytora Cloud Shell. W konsoli Google Cloud użyj wyszukiwarki, aby przejść do czatu w Vertex AI.
  2. 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.
  3. 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.
    projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id
    
    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).
  4. 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?
    
  5. 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).Wyczyść rozmowę i uzyskaj kod
  6. 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ą.
  7. 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.
  8. Przejdź do kodu wyodrębnionego z Vertex AI Studio. Zmień nazwę metody multiturn_generate_content na start_chat_session.
  9. Przewiń do wywołania metody model = GenerativeModel(. Istniejący kod definiuje elementy generation_configsafety_settings, ale w rzeczywistości ich nie używa. Zmodyfikuj tworzenie GenerativeModel, aby przypominało:
    model = GenerativeModel(
        "gemini-1.5-flash-002",
        tools=tools,
        generation_config=generation_config,
        safety_settings=safety_settings,
    )
    
  10. Na koniec dodaj do metody ostatni wiersz, tuż pod chat = model.start_chat(), aby funkcja zwracała obiekt chat. 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
    
  11. 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()
    
  12. 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 wpisz resp. Gemini powinien automatycznie uzupełnić blok. Zaktualizuj prompta do How 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)
    
  13. 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)
    
  14. Ś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ć daneKopiowanie komórki
  15. Przejdź na kartę edytora Cloud Shell i otwórz plik pages\Cooking_Advice.py, aby go edytować.
  16. Znajdź komentarz:
    #
    # Add the code you copied from your notebook below this message
    #
    
  17. 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.
  18. Znajdź sekcję zakomentowanego kodu bezpośrednio pod komentarzem:
    #
    # Here's the code to setup your session variables
    # Uncomment this block when instructed
    #
    
  19. 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.
  20. 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
    #
    
  21. 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.
  22. Ś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.

  1. W edytorze Cloud Shell otwórz stronę pages/Recipe_Search.py, aby ją edytować. Sprawdź strukturę strony.
  2. Ustaw identyfikator projektu u góry pliku.
  3. 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 zwracanie response.results zamiast samych wyników. Bez tego typem zwracanych danych jest obiekt przeznaczony do stronicowania wyników, a tego nie potrzebujemy w naszej podstawowej aplikacji.
  4. Przewiń plik na sam dół i odkomentuj całą sekcję poniżej Here are the first 5 recipes I found.
  5. 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.
  6. 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ą.

  1. W konsoli Google Cloud użyj wyszukiwarki, aby przejść do Cloud Run, a następnie kliknij recipe-web-app.
  2. Znajdź adres URL testu aplikacji (u góry) i otwórz go w nowej karcie przeglądarki.
  3. Powinna się pojawić strona główna aplikacji. Zwróć uwagę na podstawowy układ i nawigację zapewniane przez Streamlit. Pliki Pythona z folderu pages są wyświetlane jako opcje nawigacji, a plik Home.py jest wczytywany jako strona główna. Otwórz stronę Porady dotyczące gotowania.
  4. Po chwili pojawi się interfejs czatu. Zwróć uwagę na przejrzysty układ podstawowy zapewniany przez Streamlit.
  5. 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.
    
  6. 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:

  1. Usuń katalog projektu ćwiczeń z programowania:
    rm -rf ~/task-app
    
  2. 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