Creazione di applicazioni nell'era dell'IA

1. Panoramica

In questo lab utilizzerai i prodotti di IA generativa di Google per creare l'infrastruttura in Google Cloud con l'aiuto di Gemini Cloud Assist, eseguire query sui dati di BigQuery utilizzando il linguaggio naturale per le funzionalità SQL di Data Canvas, scrivere codice nei Jupyter Notebook di Colab Enterprise e in Eclipse Theia (Visual Studio Code) con l'aiuto di Gemini Code Assist e integrare le funzionalità di ricerca e chat basate sull'IA create su Cloud Storage e sulle origini di grounding BigQuery in Vertex AI Agent Builder.

Il nostro obiettivo è creare un sito web di ricette e cucina chiamato AI Recipe Haven. Il sito verrà creato in Python e Streamlit e conterrà due pagine principali. In Cooking Advice verrà ospitato un chatbot che creeremo utilizzando Gemini e un'origine basata su Vertex AI Agent Builder collegata a un gruppo di libri di cucina. Il chatbot offrirà consigli culinari e risponderà a domande in merito. Ricerca di ricette sarà un motore di ricerca alimentato da Gemini, questa volta basato su un database di ricette BigQuery.

Se non riesci a completare il codice in questo esercizio, le soluzioni per tutti i file di codice si trovano nel repository GitHub dell'esercizio nel ramo solution.

Obiettivi

In questo lab imparerai a:

  • Attivare e utilizzare Gemini Cloud Assist
  • Crea un'app di ricerca in Vertex AI Agent Builder per il chatbot di consigli culinari
  • Carica e pulisci i dati in un blocco note Colab Enterprise con l'aiuto di Gemini Code Assist
  • Crea un'app di ricerca in Vertex AI Agent Builder per il generatore di ricette
  • Creare l'applicazione web di base in Python e Streamlit, con un po' di aiuto di Gemini
  • Esegui il deployment dell'applicazione web in Cloud Run
  • Collega la pagina Consigli per la cucina alla nostra app Agent Builder per la ricerca di libri di cucina
  • (Facoltativo) Collega la pagina di ricerca delle ricette all'app Agent Builder per la ricerca di ricette
  • (Facoltativo) Esplora l'applicazione finale

2. Prerequisiti

  1. Se non hai ancora un Account Google, devi crearne uno.
    • Utilizzi un account personale anziché un account di lavoro o della scuola. Gli account di lavoro e della scuola potrebbero avere limitazioni che ti impediscono di attivare le API necessarie per questo lab.

3. Configurazione del progetto

  1. Accedi alla console Google Cloud.
  2. Attiva la fatturazione in Cloud Console.
    • Il completamento di questo lab dovrebbe costare meno di 1 $in risorse Cloud.
    • Per eliminare le risorse ed evitare ulteriori addebiti, puoi seguire i passaggi alla fine di questo lab.
    • I nuovi utenti sono idonei per la prova senza costi di 300$.
    • Parteciperai a un evento virtuale con lab pratici? Potrebbe essere disponibile un credito di 5$.
  3. Crea un nuovo progetto o scegli di riutilizzare un progetto esistente.
  4. Verifica che la fatturazione sia attivata in I miei progetti in Fatturazione Cloud
    • Se nel nuovo progetto è presente Billing is disabled nella colonna Billing account:
      1. Fai clic sui tre puntini nella colonna Actions
      2. Fai clic su Modifica fatturazione.
      3. Seleziona l'account di fatturazione che vuoi utilizzare
    • Se partecipi a un evento dal vivo, l'account probabilmente si chiamerà Account di fatturazione di prova della piattaforma Google Cloud

4. Attivare e utilizzare Gemini Cloud Assist

In questa attività attiveremo e utilizzeremo Gemini Cloud Assist. Quando lavori nella console Google Cloud, Gemini Cloud Assist può offrirti consigli, aiutarti a creare, configurare e monitorare la tua infrastruttura Google Cloud e persino suggerire comandi gcloud e scrivere script Terraform.

  1. Per attivare l'utilizzo di Cloud Assist, fai clic nella casella di ricerca nella parte superiore dell'interfaccia utente della console Cloud e seleziona Ask Gemini o Ask Gemini per la console Cloud.
  2. Scorri fino alla sezione API richieste della pagina e Abilita l'API Gemini for Google Cloud.
  3. Se non vedi immediatamente un'interfaccia di chat, fai clic su Inizia a chattare. Inizia chiedendo a Gemini di spiegare alcuni dei vantaggi dell'utilizzo dell'editor di Cloud Shell. Prenditi qualche minuto per esplorare la risposta generata.
  4. A questo punto, chiedi i vantaggi di Agent Builder e come può contribuire a basare le risposte generative.
  5. Infine, diamo un'occhiata a un confronto. Nella finestra della chat di Gemini della console Google Cloud, fai la seguente domanda:
    What are the major steps to creating a search app grounded in a GCS data source using Vertex AI Agent builder?
    

5. Crea un'app di ricerca in Vertex AI Agent Builder per il chatbot di consigli culinari

Il sito web che stiamo creando avrà una pagina di consigli culinari contenente un chatbot progettato per aiutare gli utenti a trovare risposte a domande relative alla cucina. Sarà basato su Gemini e su una fonte contenente 70 libri di cucina di dominio pubblico. I cookbook fungeranno da fonte attendibile utilizzata da Gemini per rispondere alle domande.

  1. Utilizza la casella di ricerca della console Cloud per andare a Vertex AI. Nella dashboard, fai clic su Abilita tutte le API consigliate. Questa operazione potrebbe richiedere alcuni minuti. Se viene visualizzata una finestra popup che indica che l'API Vertex AI stessa deve essere abilitata, Abilita anche questa. Una volta attivate le API, puoi passare al passaggio successivo.
  2. Utilizza la ricerca per andare ad Agent Builder, quindi fai clic su Continua e attiva l'API.
  3. Come suggerito da Gemini nella nostra precedente richiesta di consigli, la creazione di un'app di ricerca in Agent Builder inizia con la creazione di un'origine dati autorevole. Quando l'utente esegue una ricerca, Gemini comprende la domanda e come comporre risposte intelligenti, ma cercherà le informazioni utilizzate nella risposta nell'origine basata su dati, anziché tratte dalle sue conoscenze innate.Nel menu a sinistra, vai a Data Store e Crea Data Store.
  4. I libri di cucina di dominio pubblico che utilizziamo per la nostra pagina di consigli culinari si trovano attualmente in un bucket Cloud Storage di un progetto esterno. Seleziona il tipo di origine Cloud Storage.
  5. Esamina, ma non modificare, le opzioni predefinite relative al tipo di informazioni che stiamo importando. Lascia il tipo di importazione impostato su Cartella e per il percorso del bucket utilizza: labs.roitraining.com/labs/old-cookbooks, quindi fai clic su Continua.
  6. Assegna un nome al datastore: old-cookbooks. Fai clic su MODIFICA e modifica l'ID in old-cookbooks-id e Crea il datastore.

Vertex AI Agent Builder supporta diversi tipi di app e il Data Store funge da origine attendibile per ciascuna. Le app di ricerca sono ottime per l'uso generale e la ricerca. Le app di chat sono destinate ai flussi generativi nelle applicazioni di chatbot/voicebot basate su Dataflow. Le app di consigli aiutano a creare motori per suggerimenti migliori. Le app Agent servono per creare agenti basati sull'IA generativa. Probabilmente, l'agente sarebbe la scelta migliore per ciò che vogliamo fare, ma dato che il prodotto è attualmente in anteprima, rimarremo con il tipo di app di ricerca.

  1. Utilizza il menu a sinistra per andare ad App e poi fai clic su Crea una nuova app.
  2. Fai clic su Crea nella scheda Cerca il tuo sito web. Assegna un nome all'app cookbook-search. Fai clic su Modifica e imposta l'ID app su cookbook-search-id. Imposta l'azienda su Google e fai clic su Continua.
  3. Controlla il datastore old-cookbooks che hai creato qualche passaggio fa e Crea l'app di ricerca.

Se esamini la scheda Attività, probabilmente noterai che i libri di ricette sono ancora in fase di importazione e indicizzazione. Agent Builder impiegherà più di 5 minuti per indicizzare le migliaia di pagine contenute nei 70 cookbook che gli abbiamo fornito. Mentre è in funzione, carichiamo e puliamo alcuni dati del database delle ricette per il nostro generatore di ricette.

6. Carica e pulisci i dati in un blocco note Colab Enterprise con l'aiuto di Gemini Code Assist

Google Cloud offre due modi principali per lavorare con i notebook Jupyter. Utilizzeremo la più recente offerta di Google, Colab Enterprise. Alcuni di voi potrebbero conoscere il prodotto Colab di Google, comunemente utilizzato da privati e organizzazioni che vogliono fare esperimenti con i notebook Jupyter in un ambiente senza costi. Colab Enterprise è un'offerta commerciale di Google Cloud completamente integrata con gli altri prodotti cloud di Google e che sfrutta appieno le funzionalità di sicurezza e conformità dell'ambiente Google Cloud.

Una delle funzionalità offerte da Colab Enterprise è l'integrazione con Gemini Code Assist di Google. La funzionalità di assistenza alla programmazione può essere utilizzata in diversi editor di codice e può offrire consigli e suggerimenti in linea continui durante la programmazione. Sfrutteremo questo assistente generativo durante la gestione dei dati delle ricette.

  1. Utilizza la ricerca per andare a Colab Enterprise e fai clic su Crea notebook. Se ricevi un'offerta per sperimentare nuove funzionalità di Colab, ignorala. Per avviare il runtime, ovvero la potenza di calcolo alla base del notebook, fai clic su Connetti nell'angolo in alto a destra del nuovo notebook.Connetti
  2. Fai clic su File > Rinomina per rinominare il notebook in Data Wrangling.Rinomina con tre puntini
  3. Fai clic su + Testo per creare una nuova casella di testo e utilizza la Freccia su per spostarla in modo che sia la prima cella della pagina.+ Testo e Freccia su
  4. Modifica la casella di testo e inserisci:
    # Data Wrangling
    
    Import the Pandas library
    
  5. Nel blocco di codice sotto il blocco di testo che hai appena creato, inizia a digitare imp e Gemini Code Assist dovrebbe suggerire il resto dell'importazione in grigio. Premi Tab per accettare il suggerimento.
    import pandas as pd
    
  6. Sotto la casella del codice di importazione, crea un'altra casella di testo e inserisci:
    Create a Pandas DataFrame from: gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv. View the first few records.
    
  7. Crea e modifica un altro blocco di codice. Ancora una volta, inizia a digitare df = ed esamina il codice generato da Gemini Code Assist. Se sopra il suggerimento generato viene visualizzato un elenco a discesa di completamento automatico delle parole chiave Python, premi Esc per visualizzare il codice suggerito grigio chiaro. Premi di nuovo Tab per accettare il suggerimento. Se il tuo suggerimento non conteneva la chiamata alla funzione head(), aggiungila.
    df = pd.read_csv('gs://labs.roitraining.com/labs/recipes/recipe_dataset.csv')
    df.head()
    
  8. Fai clic sulla prima cella di codice in cui hai importato Pandas e utilizza il menu Comandi o la tastiera per eseguire la cella selezionata. Sulla tastiera, Maiusc+Invio eseguirà la cella e sposterà lo stato attivo sulla cella successiva, creandone una se necessario. Attendi l'esecuzione della cella prima di procedere.NOTA: vedrai [ ] appena a sinistra quando una cella non è stata eseguita. Durante l'esecuzione di una cella, viene visualizzata un'animazione in rotazione. Al termine della cella viene visualizzato un numero, ad esempio [13].
  9. Esegui la cella che carica il file CSV nel DataFrame. Attendi il caricamento del file ed esamina le prime cinque righe di dati. Questi sono i dati delle ricette che caricheremo in BigQuery e che alla fine utilizzeremo per basare il nostro generatore di ricette.
  10. Crea un nuovo blocco di codice e inserisci il commento riportato di seguito. Dopo aver digitato il commento, vai alla riga di codice successiva e dovresti ricevere il suggerimento df.columns. Accetta e poi esegui la cella.
    # List the current DataFrame column names
    
    Abbiamo appena dimostrato che hai a disposizione due opzioni per ricevere assistenza da Gemini Code Assist in un notebook Jupyter: celle di testo sopra le celle di codice o commenti all'interno della cella di codice stessa. I commenti all'interno delle celle di codice funzionano bene nei Jupyter Notebook, ma questo approccio funziona anche in qualsiasi altro IDE che supporta l'Assistente codice Gemini di Google.
  11. Facciamo un po' di pulizia delle colonne. Rinomina la colonna Unnamed: 0 in id e link in uri. Utilizza la tecnica di prompt > codice che preferisci per creare il codice, quindi esegui la cella quando il risultato ti soddisfa.
    # Rename the column 'Unnamed: 0' to 'id' and 'link' to 'uri'
    df.rename(columns={'Unnamed: 0': 'id', 'link': 'uri'}, inplace=True)
    
  12. Rimuovi le colonne source e NER e utilizza head() per visualizzare le prime righe. Chiedi di nuovo aiuto a Gemini. Esegui le ultime due righe ed esamina i risultati.
    # Remove the source and NER columns
    df.drop(columns=['source', 'NER'], inplace=True)
    df.head()
    
  13. Vediamo quanti record sono presenti nel nostro set di dati. Anche in questo caso, inizia con la tecnica di richiesta che preferisci e prova a chiedere a Gemini di aiutarti a generare il codice.
    # Count the records in the DataFrame
    df.shape # count() will also work
    
  14. 2,23 milioni di record sono probabilmente più ricette di quante possiamo gestire. Il processo di indicizzazione in Agent Builder probabilmente richiederebbe troppo tempo per il nostro esercizio di oggi. Come compromesso, prendiamo un campione di 150.000 ricette e lavoriamo con quello. Utilizza l'approccio prompt > codice per acquisire il campione e memorizzarlo in un nuovo DataFrame denominato dfs (s per piccolo).
    # Sample out 150,000 records into a DataFrame named dfs
    dfs = df.sample(n=150000)
    
  15. I dati delle nostre origini delle ricette sono pronti per essere caricati in BigQuery. Prima di eseguire il caricamento, vai a BigQuery e prepara un set di dati per contenere la tabella. Nella console Google Cloud, utilizza la casella di ricerca per accedere a BigQuery. Puoi fare clic con il tasto destro del mouse su BigQuery e aprirlo in una nuova scheda del browser.
  16. Se non è già visibile, apri il riquadro Chat AI di Gemini utilizzando il logo di Gemini in alto a destra nella console Cloud. Se ti viene chiesto di attivare di nuovo l'API, premi Attiva o aggiorna la pagina. Esegui il prompt: What is a dataset used for in BigQuery? Dopo aver esplorato la risposta, How can I create a dataset named recipe_data using the Cloud Console? confronta i risultati con i passaggi che seguono.Apri Gemini Cloud Assist
  17. Nel riquadro di BigQuery Explorer, fai clic sul menu con tre puntini Visualizza azioni accanto all'ID progetto. Seleziona quindi Crea set di dati.Esplora azioni di visualizzazione
  18. Fornisci il set di dati e l'ID di recipe_data. Lascia il tipo di località su US e fai clic su Crea set di dati. Se ricevi un messaggio di errore che indica che il set di dati esiste già, passa al passaggio successivo.Con il set di dati creato in BigQuery, torniamo al nostro notebook ed eseguiamo l'inserimento.
  19. Torna al tuo notebook di manipolazione dei dati in Colab Enterprise. In una nuova cella di codice, crea una variabile denominata project_id e utilizzala per contenere l'ID progetto corrente. Guarda in alto a sinistra di queste istruzioni, sotto il pulsante Termina lab, per trovare l'ID progetto corrente. Se vuoi, è disponibile anche nella home page della console Cloud. Assegna il valore alla variabile project_id ed esegui la cella.
    # Create a variable to hold the current project_id
    project_id='YOUR_PROJECT_ID'
    
  20. Utilizza l'approccio prompt > codice per creare un blocco di codice che inserisca il DataFrame dfs in una tabella denominata recipes nel set di dati che abbiamo appena creato recipe_data. Esegui la cella.
    dfs.to_gbq(destination_table='recipe_data.recipes', project_id=project_id, if_exists='replace')
    

7. Crea un'app di ricerca in Vertex AI Agent Builder per il generatore di ricette

Ottimo, ora che abbiamo creato la tabella dei dati delle ricette, usiamola per creare un'origine dati basata su dati concreti per il nostro generatore di ricette. L'approccio che utilizzeremo sarà simile a quello adottato per il nostro chatbot di cucina. Utilizzeremo Vertex AI Agent Builder per creare un datastore, che verrà poi utilizzato come origine attendibile per un'app di ricerca.

Se vuoi, puoi chiedere a Gemini nella console Google Cloud di ricordarti i passaggi per creare un'app di ricerca di Agent Builder oppure puoi seguire i passaggi elencati di seguito.

  1. Utilizza la ricerca per accedere ad Agent Builder. Apri Datastore e Crea datastore. Questa volta, seleziona il tipo BigQuery Data Store.
  2. Nella cella di selezione della tabella, premi Sfoglia e cerca recipes. Seleziona il pulsante di opzione accanto alla tabella. Se vedi ricette di altri progetti qwiklabs-gcp-…, assicurati di selezionare quella che ti appartiene.NOTA: se fai clic su recipes anziché selezionare il pulsante di opzione accanto, si aprirà una nuova scheda nel browser e verrà visualizzata la pagina Panoramica della tabella in BigQuery. Basta chiudere la scheda del browser e selezionare il pulsante di opzione in Agent Builder.
  3. Esamina, ma non modificare le altre opzioni predefinite, quindi fai clic su Continua.
  4. Nella pagina di revisione dello schema, esamina le configurazioni predefinite iniziali, ma non apportare modifiche. Continua
  5. Assegna un nome al datastore recipe-data. Modifica l'ID del datastore e impostalo su recipe-data-id. Crea il datastore.
  6. Vai a App utilizzando il menu di navigazione a sinistra e seleziona Crea una nuova app.
  7. Fai clic su Crea nella scheda Cerca il tuo sito web. Assegna all'app il nome recipe-search e fai clic su MODIFICA per impostare l'ID su recipe-search-id. Imposta il nome dell'azienda su Google e fai clic su Continua.
  8. Questa volta, controlla le origini dati recipe-data. Crea l'app.

L'indicizzazione della nostra tabella di database richiederà un po' di tempo. Nel frattempo, proviamo il nuovo canvas di dati di BigQuery e vediamo se riusciamo a trovare una o due ricette interessanti.

  1. Utilizza la casella di ricerca per accedere a BigQuery. Nella parte superiore di BigQuery Studio, fai clic sulla Freccia giù accanto alla scheda più a destra e seleziona Data Canvas. Imposta la regione su us-central1.Apri il canvas di dati
  2. Fai clic su Cerca i dati. Nella casella di ricerca del riquadro Dati, cerca recipes, premi Enter/Return per eseguire la ricerca e fai clic sul pulsante Aggiungi al riquadro accanto al nome della tabella.
  3. Una rappresentazione visiva della tabella delle ricette verrà caricata nel riquadro dei dati BigQuery. Puoi esplorare lo schema della tabella, visualizzare l'anteprima dei dati al suo interno ed esaminare altri dettagli. Sotto la rappresentazione della tabella, fai clic su Query.
  4. Nel canvas verrà caricata una finestra di dialogo di query di BigQuery più o meno tipica con un'aggiunta: sopra la finestra della query è presente una casella di testo che puoi utilizzare per chiedere aiuto a Gemini. Vediamo se riusciamo a trovare alcune ricette di torte nel nostro esempio. Esegui il seguente prompt (digitando il testo e premendo Enter/Return per attivare la generazione di SQL):
    Please select the title and ingredients for all the recipes with a title that contains the word cake.
    
  5. Esamina il codice SQL generato. Quando il risultato ti soddisfa, Esegui la query.
  6. Non male! Prima di continuare, puoi provare altri prompt e altre query. Quando esegui esperimenti, prova prompt meno specifici per capire cosa funziona e cosa no. Ad esempio, questo prompt:
    Do I have any chili recipes?
    
    (Non dimenticare di eseguire la nuova query) Ha restituito un elenco di ricette di chili, ma ha omesso gli ingredienti finché non l'ho modificato in:
    Do I have any chili recipes?  Please include their title and ingredients.
    
    (Sì, dico per favore quando chiedo. Mia mamma sarebbe così orgogliosa.) Ho notato che una ricetta del chili conteneva funghi, ma chi li vuole nel chili? Ho chiesto a Gemini di aiutarmi a escludere queste ricette.
    Do I have any chili recipes?  Please include their title and ingredients, and ignore any recipes with mushrooms as an ingredient.
    

8. Apri editor di Cloud Shell

  1. Vai a Cloud Shell Editor.
  2. Se il terminale non viene visualizzato nella parte inferiore dello schermo, aprilo:
    • Fai clic sul menu a tre linee Icona del menu di navigazione.
    • Fai clic su Terminale.
    • Fai clic su Nuovo terminaleAprire un nuovo terminale nell'editor di Cloud Shell.
  3. Nel terminale, imposta il progetto con questo comando:
    • Formato:
      gcloud config set project [PROJECT_ID]
      
    • Esempio:
      gcloud config set project lab-project-id-example
      
    • Se non ricordi l'ID progetto:
      • Puoi elencare tutti gli ID progetto con:
        gcloud projects list | awk '/PROJECT_ID/{print $2}'
        
      Impostare l'ID progetto nel terminale dell'editor di Cloud Shell
  4. Se ti viene chiesto di concedere l'autorizzazione, fai clic su Autorizza per continuare. Fai clic per autorizzare Cloud Shell
  5. Dovresti vedere questo messaggio:
    Updated property [core/project].
    
    Se vedi un WARNING e ti viene chiesto Do you want to continue (Y/N)?, è probabile che tu abbia inserito l'ID progetto in modo errato. Premi N, premi Enter e prova a eseguire di nuovo il comando gcloud config set project.

9. Abilita API

Nel terminale, abilita le 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

Se ti viene chiesto di concedere l'autorizzazione, fai clic su Autorizza per continuare. Fai clic per autorizzare Cloud Shell

Il completamento di questo comando potrebbe richiedere alcuni minuti, ma alla fine dovrebbe essere visualizzato un messaggio di operazione riuscita simile a questo:

Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.

10. Creare l'applicazione web di base in Python e Streamlit, con un po' di aiuto di Gemini

Ora che abbiamo indicizzato entrambi i datastore di Vertex AI Agent Builder e le nostre app di ricerca sono quasi pronte, iniziamo a creare la nostra applicazione web.

Durante il nostro lavoro, utilizzeremo Gemini Code Assist. Per ulteriori informazioni sull'utilizzo di Gemini Code Assist in Visual Studio Code, consulta la documentazione qui

  1. Nel terminale dell'editor Cloud Shell, esegui questo comando per clonare il repository dell'app di ricette.
    git clone https://github.com/haggman/recipe-app
    
  2. Esegui questo comando per aprire la cartella dell'applicazione nell'editor di Cloud Shell.
    cloudshell open-workspace recipe-app/
    
  3. Prima di esplorare la cartella clonata e iniziare a lavorare alla nostra applicazione web, dobbiamo accedere a Google Cloud con il plug-in Cloud Code dell'editor e attivare Gemini. Ed è quello che faremo ora. In basso a sinistra nell'editor, fai clic su Cloud Code - Accedi. Se non vedi il link, attendi un minuto e ricontrolla.Cloud Code - Accedi
  4. Nella finestra del terminale viene visualizzato un URL lungo. Apri l'URL nel browser ed esegui i passaggi per concedere a Cloud Code l'accesso al tuo ambiente Google Cloud. Nella finestra di dialogo finale, copia il codice di verifica e incollalo di nuovo nella finestra del terminale in attesa nella scheda del browser di Cloud Shell Editor.
  5. Dopo alcuni istanti, il link Cloud Code in basso a sinistra nell'editor diventerà Cloud Code - No Project. Fai clic sul nuovo collegamento per selezionare un progetto. La tavolozza dei comandi dovrebbe aprirsi nella parte superiore dell'editor. Fai clic su Seleziona un progetto Google Cloud e seleziona il tuo progetto. Dopo alcuni istanti, il link in basso a sinistra nell'editor verrà aggiornato per mostrare l'ID progetto. Ciò indica che Cloud Code è stato collegato correttamente al tuo progetto di lavoro.
  6. Ora che Cloud Code è collegato al tuo progetto, puoi attivare Gemini Code Assist. In basso a destra nell'interfaccia dell'editor, fai clic sul logo Gemini barrato. Il riquadro della chat di Gemini si aprirà a sinistra dell'editor. Fai clic su Seleziona un progetto Google Cloud. Quando si apre la tavolozza dei comandi, seleziona il tuo progetto. Se hai seguito correttamente i passaggi (e Google non ha modificato nulla), ora dovresti vedere una finestra di chat di Gemini attiva.Gemini disabilitato
  7. Ottimo, con le configurazioni del terminale, della chat di Gemini e di Cloud Code, apri la scheda Explorer e prenditi qualche minuto per esplorare i file del progetto corrente.Spazio di esplorazione
  8. In Esplora file, apri il file requirements.txt per modificarlo. Passa al riquadro della chat di Gemini e chiedi:
    From the dependencies specified in the requirements.txt file, what type of application are we building?
    
  9. Quindi, stiamo creando un'applicazione web interattiva utilizzando Python e Streamlit che interagisce con Vertex AI e Discovery Engine. Per il momento, concentriamoci sui componenti dell'applicazione web. Come dice Gemini, Streamlit è un framework per la creazione di applicazioni web basate sui dati in Python. Ora chiedi:
    Does the current project's folder structure seem appropriate for a Streamlit app?
    
    È qui che Gemini tende ad avere problemi. Gemini può accedere al file attualmente aperto nell'editor, ma non può vedere l'intero progetto. Prova a chiedere:
    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
    
    Ricevere una risposta migliore?
  10. Ecco alcune informazioni aggiuntive su Streamlit:
    What can you tell me about Streamlit?
    
    Ottimo, quindi possiamo vedere che Gemini ci offre una bella panoramica, inclusi i pro e i contro.
  11. Se vuoi esplorare i lati negativi, puoi chiedere:
    What are the major downsides or shortcomings?
    
    Tieni presente che non abbiamo dovuto dire "di Streamlit" perché Gemini Chat è una chat di tipo conversazionale (multi-turno). Gemini sa di cosa stiamo parlando perché siamo in una sessione di chat. Se in un secondo momento vuoi cancellare la cronologia chat di Gemini, utilizza l'icona del cestino nella parte superiore della finestra della chat del codice Gemini.

11. Esegui il deployment dell'applicazione web in Cloud Run

Ottimo, abbiamo implementato la struttura di base dell'applicazione, ma funzionerà tutto? Meglio ancora, dove dovremmo ospitarlo in Google Cloud?

  1. Nella finestra della chat di Gemini, chiedi:
    If I containerize this application, what compute technologies in Google Cloud would be best for hosting it?
    
  2. Ricorda che, se non stavi già lavorando nell'IDE, puoi anche utilizzare Google Cloud Assist. Apri la console Google Cloud, quindi apri Gemini Cloud Assist e chiedi:
    If I have a containerized web application, where would be the best place to run it in Google Cloud?
    
    I due set di consigli erano uguali? Sei d'accordo o in disaccordo con alcuni dei consigli? Ricorda che Gemini è un assistente con IA generativa e, come un assistente umano, non sarà sempre d'accordo con tutto ciò che dice. Tuttavia, avere questo strumento sempre a portata di mano mentre lavori in Google Cloud e nel tuo editor di codice può aiutarti a essere molto più efficiente.
  3. Per un'applicazione web containerizzata stateless di breve durata, Cloud Run è un'ottima opzione. Nella finestra della chat di Gemini del tuo editor di codice, prova il prompt:
    What steps would be required to run this application in Cloud Run?
    
  4. Sembra che la prima cosa da fare sia creare un Dockerfile. Utilizzando l'editor, crea un file denominato Dockerfile nella cartella principale del progetto. Assicurati di non inserirlo per errore nella cartella pages. Apri il file per la modifica.
  5. Utilizziamo il riquadro laterale della chat di Gemini per creare il nostro Dockerfile. Utilizza un prompt come quello riportato di seguito. Quando i risultati vengono visualizzati nella chat, utilizza il segno Più accanto all'icona di copia appena sopra il Dockerfile suggerito per inserire il codice suggerito nel 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 non restituisce sempre la stessa risposta allo stesso prompt. La prima volta che ho chiesto a Gemini un Dockerfile, ho ricevuto il file esatto che ti suggerirò di utilizzare. Ho appena ricevuto il seguente suggerimento:
    # 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"]
    
    Questo è un Dockerfile fantastico. Semplificherei un po'. Non abbiamo bisogno della sezione apt-get perché tutto ciò che serve per Python è già presente nella nostra immagine di base. Inoltre, l'utilizzo di un ambiente virtuale in un contenitore Python è uno spreco di spazio, quindi lo rimuoverei. Il comando expose non è strettamente necessario, ma va bene. Inoltre, sta tentando di avviare main.py, che non ho.
  6. Nella cartella recipe-app, crea un file denominato Dockerfile e incolla i seguenti contenuti:
    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 può funzionare tramite la finestra della chat, ma può anche funzionare direttamente nel file di codice utilizzando i commenti, come abbiamo fatto nel notebook di Data Wrangling, e può anche essere richiamato utilizzando Ctrl+i su Windows o Comando+i su Mac. Fai clic in un punto qualsiasi del Dockerfile, attiva Gemini utilizzando il comando appropriato Comando+i / Ctrl+i.
  8. Al prompt, inserisci quanto segue. Esamina e accetta la modifica.
    Please comment the current file.
    
    Che bello, vero? Quante volte hai dovuto lavorare con il codice di qualcun altro, solo per perdere tempo a comprendere le basi del suo lavoro senza commenti prima di poter iniziare a apportare modifiche? Gemini al tuo servizio.
  9. Ora chiedi a Gemini come utilizzare Cloud Run per creare e implementare una nuova immagine denominata recipe-web-app dal Dockerfile nella cartella corrente.
    How could I use gcloud to build a new Cloud Run service named recipe-web-app from the current directory?
    
  10. Creiamo ed eseguiamo il deployment della nostra applicazione. Nella finestra del terminale, esegui il comando gcloud run deploy
    gcloud run deploy recipe-web-app \
        --allow-unauthenticated \
        --source=. \
        --region=us-central1 \
        --port=8501
    
    Se viene visualizzato un messaggio che ti chiede di creare un repository Artifact Registry, premi 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. Se osservi il processo di compilazione, verrà prima compilato il repository Docker di Artifact Registry. Quindi, utilizza Cloud Build per creare l'immagine container dal Dockerfile nella cartella locale. Infine, l'immagine Docker verrà dispiata in un nuovo servizio Cloud Run. Alla fine dello script verrà visualizzato un URL di test Cloud Run da utilizzare.

Apri il link restituito in una nuova scheda del browser. Prenditi un momento per esplorare la struttura e le pagine dell'applicazione. Ottimo, ora dobbiamo collegare la funzionalità di IA generativa.

12. Collega la pagina Consigli per la cucina alla nostra app Agent Builder per la ricerca di libri di cucina

Abbiamo il framework per l'applicazione web in esecuzione, ma dobbiamo collegare le due pagine di lavoro alle nostre due app di ricerca Vertex AI Agent Builder. Iniziamo con i consigli per la cucina.

  1. Lascia aperta la scheda dell'editor di Cloud Shell. Nella console Google Cloud, utilizza la ricerca per andare a Chat in Vertex AI.
  2. Nel riquadro della pagina delle impostazioni a destra, imposta il modello su gemini-1.5-flash-002. Fai scorrere il limite di token di output fino al massimo in modo che il modello possa restituire risposte più lunghe, se necessario. Apri le Impostazioni del filtro di sicurezza. Imposta Incitamento all'odio, Contenuti sessualmente espliciti e Contenuti di molestie su Blocca alcuni. Imposta Contenuti pericolosi su Blocca alcuni e Salva. Stiamo impostando la soglia per i contenuti pericolosi un po' più bassa perché parlare di coltelli e tagli può essere interpretato da Gemini come violenza.
  3. Fai scorrere il pulsante di attivazione/disattivazione per attivare Eseguire messa a terra, quindi fai clic su Personalizza. Imposta l'origine di grounding su Vertex AI Search e utilizza quanto segue per il percorso del datastore. Sostituisci YOUR_PROJECT_ID con l'ID progetto che trovi vicino al pulsante Termina lab in queste istruzioni, quindi Salva le impostazioni di messa a terra
    projects/YOUR_PROJECT_ID/locations/global/collections/default_collection/dataStores/old-cookbooks-id
    
    NOTA: se viene visualizzato un messaggio di errore, significa che non hai modificato l'ID progetto con l'ID progetto effettivo o che potresti aver saltato il passaggio in cui hai modificato l'ID del Data Store di Agent Builder dei vecchi cookbook. Controlla Agent Builder > Data Store > old-cookbooks per trovare l'ID datastore effettivo.
  4. Prova a inviare un paio di messaggi di chat. Ti consiglio di iniziare con quanto segue. Se vuoi, provane altri.
    How can I tell if a tomato is ripe?
    
  5. Il modello funziona, ora facciamo esperimenti con il codice. Fai clic su Cancella conversazione per fare in modo che le nostre conversazioni non vengano incluse nel codice, quindi fai clic su Genera codice.Cancellare la conversazione e ricevere il codice
  6. Nella parte superiore della finestra di codice, premi Apri notebook per consentirci di sperimentare e perfezionare il codice in Colab Enterprise prima di integrarlo nella nostra app.
  7. Prenditi qualche minuto per familiarizzare con il codice. Apportiamo un paio di modifiche per adattarlo alle nostre esigenze. Prima di iniziare, esegui la prima cella di codice per connetterti all'elaborazione e installare l'SDK AI Platform. Al termine dell'esecuzione del blocco ti verrà chiesto di riavviare la sessione. Vai avanti e creale
  8. Passa al codice che abbiamo estratto da Vertex AI Studio. Modifica il nome del metodo multiturn_generate_content in start_chat_session.
  9. Scorri fino alla chiamata al metodo model = GenerativeModel(. Il codice esistente definisce generation_config e safety_settings, ma non li utilizza effettivamente. Modifica la creazione di GenerativeModel in modo che assomigli a:
    model = GenerativeModel(
        "gemini-1.5-flash-002",
        tools=tools,
        generation_config=generation_config,
        safety_settings=safety_settings,
    )
    
  10. Infine, aggiungi una riga finale al metodo, appena sotto chat = model.start_chat(), in modo che la funzione restituisca l'oggetto chat. La funzione completata dovrebbe avere il seguente aspetto.NOTA: NON COPIARE questo codice nel tuo notebook. È qui solo come controllo di conformità.
    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. Scorri fino in fondo alla cella di codice e modifica l'ultima riga che chiama la vecchia funzione in modo che chiami il nome della nuova funzione e memorizzi l'oggetto restituito in una variabile chat. Quando le modifiche ti soddisfano, esegui la cella.
    chat = start_chat_session()
    
  12. Crea una nuova cella di codice e aggiungi il commento # Use chat to invoke Gemini and print out the response. Vai alla riga successiva e digita resp. Gemini dovrebbe completare automaticamente il blocco. Aggiorna il prompt su How can I tell if a tomato is ripe?. Esegui la cella
    response = chat.send_message("How can I tell if a tomato is ripe?")
    print(response)
    
  13. Questa è la risposta, ma la parte che ci interessa è il campo text nidificato. Modifica il blocco di codice in modo da stampare solo quella sezione, ad esempio:
    response = chat.send_message("How can I tell if a tomato is ripe?")
    print(response.candidates[0].content.parts[0].text)
    
  14. Bene, ora che abbiamo il codice della chat funzionante, integriamolo nella nostra applicazione web. Copia tutti i contenuti della cella di codice che crea la funzione start_chat_session (non avremo bisogno della cella di test). Se fai clic sulla cella, puoi fare clic sul menu con tre puntini nell'angolo in alto a destra e copiare da lì.Copia cella
  15. Passa alla scheda dell'editor di Cloud Shell e apri pages\Cooking_Advice.py per la modifica.
  16. Individua il commento:
    #
    # Add the code you copied from your notebook below this message
    #
    
  17. Incolla il codice copiato appena sotto il commento Aggiungi il codice. Ottimo, ora abbiamo la sezione che gestisce il motore di chat tramite una chiamata basata su Gemini. Ora integriamolo in Streamlit.
  18. Individua la sezione di codice commentata direttamente sotto il commento:
    #
    # Here's the code to setup your session variables
    # Uncomment this block when instructed
    #
    
  19. Rimuovi il commento da questa sezione di codice (fino alla sezione Setup done, let's build the page UI successiva) ed esaminala. Crea o recupera le variabili della sessione di chat e della cronologia.
  20. A questo punto, dobbiamo integrare le funzionalità di cronologia e chat nell'interfaccia utente. Scorri il codice fino a trovare il commento riportato di seguito.
    #
    # Here's the code to create the chat interface
    # Uncomment the below code when instructed
    #
    
  21. Rimuovi il commento dal resto del codice sotto il commento ed esaminalo. Se vuoi, evidenziala e chiedi a Gemini di spiegarne la funzionalità.
  22. Ottimo, ora creiamo l'applicazione ed eseguiamo il deployment. Quando l'URL viene visualizzato di nuovo, avvia l'applicazione e prova la pagina di Cooking Advisor. Ad esempio, potresti chiedergli dei pomodori maturi o se conosce un buon modo per preparare i cavolfiori.
    gcloud run deploy recipe-web-app \
        --allow-unauthenticated \
        --source=. \
        --region=us-central1 \
        --port=8501
    

Incredibile, vero Il tuo consulente di cucina personale con IA :-)

13. (Facoltativo) Collega la pagina di ricerca delle ricette all'app Agent Builder per la ricerca di ricette

Quando abbiamo collegato la pagina Consigli per la cucina alla relativa fonte attendibile, lo abbiamo fatto utilizzando direttamente l'API Gemini. Per la ricerca di ricette, connettiamoci direttamente all'app di ricerca di Vertex AI Agent Builder.

  1. Nell'editor di Cloud Shell, apri la pagina pages/Recipe_Search.py per la modifica. Esamina la struttura della pagina.
  2. Nella parte superiore del file, imposta l'ID progetto.
  3. Esamina la funzione search_sample. Questo codice proviene più o meno direttamente dalla documentazione di Discovery Engine qui. Puoi trovare una copia funzionante in questo notebook qui.L'unica modifica che ho apportato è stata restituire response.results anziché solo i risultati. In caso contrario, il tipo di ritorno è un oggetto progettato per sfogliare i risultati, un elemento che non ci serve per la nostra applicazione di base.
  4. Scorri fino alla fine del file e rimuovi il commento dall'intera sezione di seguito Here are the first 5 recipes I found.
  5. Evidenzia l'intera sezione di cui hai rimosso il commento e apri la chat di Gemini Code. Chiedi, Explain the highlighted code. Se non hai selezionato nulla, Gemini può spiegare l'intero file. Se evidenzi una sezione e chiedi a Gemini di spiegarla, commentarla o migliorarla, Gemini lo farà.Prenditi un momento per leggere la spiegazione. A tal proposito, l'utilizzo di un notebook di Colab Enterprise è un ottimo modo per esplorare le API Gemini prima di integrarle nella tua applicazione. È particolarmente utile per esplorare alcune delle API più recenti che potrebbero non essere documentate al meglio.
  6. Nella finestra del terminale dell'editor, esegui build.sh per eseguire il deployment dell'applicazione finale. Attendi il deployment della nuova versione prima di passare al passaggio successivo.

14. (Facoltativo) Esplora l'applicazione finale

Prenditi qualche minuto per esplorare l'applicazione finale.

  1. Nella console Google Cloud, utilizza la ricerca per andare a Cloud Run, quindi fai clic su recipe-web-app.
  2. Individua l'URL di test dell'applicazione (nella parte superiore) e aprilo in una nuova scheda del browser.
  3. Dovresti visualizzare la home page dell'applicazione. Tieni presente il layout e la navigazione di base forniti da Streamlit, con i file Python della cartella pages visualizzati come opzioni di navigazione e Home.py caricato come home page. Vai alla pagina Consigli per la cottura.
  4. Dopo alcuni istanti viene visualizzata l'interfaccia della chat. Ancora una volta, nota il layout di base fornito da Streamlit.
  5. Prova alcune domande sulla cucina e scopri come funziona il bot. Ad esempio:
    Do you have any advice for preparing broccoli?
    
    How about a classic chicken soup recipe?
    
    Tell me about meringue.
    
  6. Ora cerchiamo una o due ricette. Vai alla pagina Ricerca di ricette e prova a eseguire alcune ricerche. Ad esempio:
    Chili con carne
    
    Chili, corn, rice
    
    Lemon Meringue Pie
    
    A dessert containing strawberries
    

15. Complimenti!

Hai creato un'applicazione che utilizza le applicazioni Vertex AI Agent Builder. Lungo il percorso, hai esplorato l'assistenza di Gemini Cloud, l'assistenza per la programmazione di Gemini e le funzionalità di conversione del linguaggio naturale in SQL del canvas di dati di BigQuery. Ottimo lavoro.

Esegui la pulizia

Cloud SQL non dispone di un livello senza costi e ti verrà addebitato un costo se continui a utilizzarlo. Puoi eliminare il tuo progetto Cloud per evitare di incorrere in costi aggiuntivi.

Sebbene non siano previsti addebiti per Cloud Run quando il servizio non è in uso, ti potrebbero comunque essere addebitati i costi di archiviazione dell'immagine container in Artifact Registry. L'eliminazione del progetto Cloud interrompe la fatturazione per tutte le risorse utilizzate al suo interno.

Se vuoi, elimina il progetto:

gcloud projects delete $GOOGLE_CLOUD_PROJECT

Ti consigliamo inoltre di eliminare le risorse non necessarie dal disco CloudShell. Puoi:

  1. Elimina la directory del progetto codelab:
    rm -rf ~/task-app
    
  2. Attenzione. Questa azione non può essere annullata. Se vuoi eliminare tutto su Cloud Shell per liberare spazio, puoi eliminare l'intera home directory. Assicurati che tutto ciò che vuoi conservare sia salvato altrove.
    sudo rm -rf $HOME