Analisi libreria: usa Gemini per creare un'applicazione Cloud Run Java che porta i dati BigQuery sul web

1. Introduzione

Ti piace leggere, ma ti senti sopraffatto dalla quantità di scelte? Immagina di avere un'app basata sull'AI che non solo ti consiglia la lettura perfetta, ma ti offre anche un riepilogo conciso in base al genere che preferisci, dandoti un'idea dell'essenza del libro. In questo codelab, ti guiderò nella creazione di un'applicazione di questo tipo con BigQuery, Vertex AI e Cloud Run, con l'aiuto di Gemini.

Panoramica del progetto

Il nostro caso d'uso si basa su questi quattro componenti chiave:

  • Database di libri:l'ampio set di dati pubblici BigQuery di libri dell'Internet Archive fungerà da catalogo completo di libri.
  • Motore di riepilogo AI: Google Cloud Functions, dotato del modello linguistico Gemini Pro, genererà riepiloghi approfonditi personalizzati in base alle richieste degli utenti.
  • Integrazione BigQuery: una funzione remota all'interno di BigQuery che chiama la nostra funzione Cloud per fornire riassunti e temi dei libri on demand.
  • Interfaccia utente:un'app web ospitata su Cloud Run che offrirà un'applicazione web per consentire agli utenti di visualizzare i risultati.

Abbiamo suddiviso l'intera implementazione del progetto in tre codelab. Questo codelab riguarda il terzo codelab dell'elenco riportato di seguito:

Codelab 1: utilizza Gemini per creare una funzione Java Cloud per un'applicazione Gemini.

Codelab 2: utilizza Gemini per creare applicazioni di IA generativa solo SQL con BigQuery.

Codelab 3: utilizza Gemini per creare un'applicazione web Java Spring Boot che interagisce con BigQuery.

2. Utilizzare Gemini per creare un'applicazione web Spring Boot con BigQuery

Cosa creerai

  • Crea il set di dati e la tabella BigQuery necessari.
  • Applicazione web Java Spring Boot che interagisce con BigQuery per recuperare i dati dei libri e visualizzarli sul web.
  • Questa app viene eseguita il deployment su Cloud Run.
  • Implementerai questi passaggi con l'aiuto di Gemini.

3. Requisiti

Creare il progetto

Puoi saltare i passaggi riportati di seguito se hai già attivato un account di fatturazione e creato un progetto utilizzando il link menzionato nel passaggio condizionale precedente.

  1. Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud.
  2. Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata per un progetto.

Attiva Cloud Shell

  1. Utilizzerai Cloud Shell, un ambiente a riga di comando in esecuzione in Google Cloud precaricato con bq:

Nella console Cloud, fai clic su Attiva Cloud Shell nell'angolo in alto a destra:

6757b2fb50ddcc2d.png

  1. Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo ID progetto. Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
  1. Esegui questo comando in Cloud Shell per verificare che il comando gcloud conosca il tuo progetto
gcloud config list project
  1. Se il progetto non è impostato, utilizza il seguente comando per impostarlo:
gcloud config set project <YOUR_PROJECT_ID>

Consulta la documentazione per i comandi e l'utilizzo di gcloud.

4. Abilitazione di Gemini e delle API necessarie

Abilita Gemini

  1. Vai a Gemini Marketplace per abilitare l'API. Puoi anche utilizzare il seguente comando:

gcloud services enable cloudaicompanion.googleapis.com --project PROJECT_ID

  1. Visita la pagina di Gemini e fai clic su "Inizia a chattare".

Abilita altre API necessarie

Come facciamo? Chiediamolo a Gemini. Ma prima di farlo, ricorda:

Nota: i LLM non sono deterministici. Pertanto, mentre provi questi prompt, la risposta che ricevi potrebbe essere diversa da quelle nel mio screenshot.

Vai alla console di chat Gemini facendo clic sull'icona "Apri Gemini" nell'angolo in alto a destra, accanto alla barra di ricerca nella console Google Cloud.

26e1491322855614.png

Digita questa domanda nella sezione "Inserisci un prompt qui":

How do I enable the BigQuery and Cloud Run apis using gcloud command?

Ricevi la risposta mostrata nell'immagine seguente:

b97a8a9fa9143b3f.png

Copia il comando (puoi utilizzare l'icona di copia nella parte superiore dello snippet di comando) ed eseguilo nel terminale Cloud Shell per abilitare i rispettivi servizi:

  • bigquery.googleapis.com
  • run.googleapis.com

5. Esplora il set di dati pubblico BigQuery per i dati sui libri

Inizia acquisendo familiarità con il set di dati pubblico BigQuery contenente informazioni su numerosi libri dell'Internet Archive. Se non riesci ad accedere al set di dati internetarchivebooks da questo link, segui i passaggi riportati di seguito per esplorare il set di dati o in alternativa consulta questa documentazione:

Puoi trovare questo set di dati pubblico nel riquadro dell'explorer di BigQuery. Puoi trovarlo sul lato sinistro quando accedi alla console BigQuery.

39e2ac03cc99cbac.png

Digita "gdelt-bq" o "internetarchivebooks" nella barra di ricerca e fai clic su CERCA IN TUTTI I PROGETTI. Espandi il risultato e aggiungi una stella ai libri dell'Internet Archive come mostrato nell'immagine di seguito:

68dba68a79cddfc9.png.

Espandi il set di dati, fai clic su gdelt-bq.internetarchivebooks e poi visualizza l'anteprima dei dati nella tabella 1920. Questa tabella include i libri archiviati dell'anno 1920.

Per dare un'occhiata allo schema che utilizzeremo nelle sezioni successive, esegui la seguente query:

select * from  `gdelt-bq.internetarchivebooks.1920` limit 5;

Per il nostro codelab utilizzeremo i seguenti tre campi:

  • BookMeta_Title (title)
  • Temi (separati da ";")
  • BookMeta_FullText (testo integrale del libro)

6. Crea il modello Java Cloud Run di base con Gemini

Apri l'editor di Cloud Shell facendo clic sull'icona Apri editor nell'angolo in alto a destra del terminale Cloud Shell (di solito preferisco aprire il terminale e l'editor in schede separate in parallelo, in modo da poter scrivere codice in una e creare in un'altra).

edd258384bc74f1f.png

Una volta aperto l'editor, assicurati che il logo di Gemini nell'angolo in basso a destra della console dell'editor sia attivo (e non disattivato). Assicurati inoltre che il progetto Google Cloud nell'angolo in basso a sinistra punti al progetto attivo corrente con cui vuoi lavorare. Se sono inattivi, fai clic, autorizza, seleziona il progetto Google Cloud a cui vuoi che puntino e attivali.

Una volta attivati entrambi, fai clic sul nome del progetto nell'angolo in basso a sinistra e nell'elenco popup che si apre con il titolo "Cloud Code", scorri verso il basso fino a "Nuova applicazione".

db998cc557e83f40.png

Nell'elenco, seleziona Applicazione Cloud Run. Dall'elenco visualizzato, seleziona Java:

c7748de85120507b.png

Nell'elenco risultante, digita il nome del progetto "bookshelf-web" anziché helloworld e fai clic su OK.

7c58c764277c571f.png

Evviva! Hai eseguito il bootstrap della tua semplice applicazione Java Cloud Run con Gemini e non hai fatto molto altro oltre alle configurazioni di abilitazione e attivazione, giusto?

Questa è la struttura del progetto che dovresti vedere:

e6be37bbee730bd1.png

Al momento, puoi eseguire il deployment dell'applicazione. Ma non è questo il motivo per cui abbiamo iniziato. Dobbiamo ancora includere la funzionalità principale dell'applicazione web, ovvero recuperare i dati di analisi dal database BigQuery e visualizzarli sul web.

Per farlo, puoi aggiungere altri prompt e sviluppare il codice in modo incrementale con Gemini o scrivere la logica in autonomia. Vado a un mix di entrambi.

7. Aggiungi dipendenze per utilizzare BigQuery nell'app web

Ora che l'applicazione è stata avviata, possiamo apportare modifiche all'origine e alle proprietà dell'applicazione. Innanzitutto, aggiungiamo le dipendenze. Chiediamo a Gemini di consigliarcelo.

Nell'editor di Cloud Code, assicurati che la barra di stato mostri Gemini attivo nell'angolo in basso a destra e che il progetto Google Cloud attivo sia selezionato nell'angolo in basso a sinistra.

Nell'editor di Cloud Code, vai al file pom.xml, appena sopra il tag </dependencies>, digita il seguente commento del prompt :

171d1c40ff8124e8.png

<!-- What maven dependency should I include to access BigQuery in the app-->

Ho ottenuto questo risultato, come mostrato nell'immagine di seguito:

2df51efd655a3557.png

Incollo qui la dipendenza per comodità. Se nel tuo caso il suggerimento viene visualizzato con un tag di versione, puoi ignorarlo.

<dependency>
 <groupId>com.google.cloud</groupId>
 <artifactId>google-cloud-bigquery</artifactId>
</dependency>

8. Aggiornare l'origine per trasferire i dati della libreria sul web

Sostituisci il codice HelloWorldController.java con il seguente:

package cloudcode.helloworld.web;
import java.util.UUID;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import com.google.cloud.bigquery.FieldValueList;


@RestController
public final class HelloWorldController {


  /**
   * Create an endpoint for the landing page
   * @return the BigQuery analytics results string to the web
   */


  @GetMapping("/")
  public String helloWorld() throws Exception {
    /* Connect to bigquery and write a select SQL to fetch Title, Theme and Summary fields from the table `bookshelf.bookshelf_theme` if you have executed the codelab 1 of this series, if not just directly use records from gdelt-bq.internetarchivebooks.1920 table */

 
String query = "SELECT  BookMeta_Title || ' (' || Themes || ') ' as summary  from gdelt-bq.internetarchivebooks.1920 limit 10 ";


    BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
    QueryJobConfiguration queryConfig =
        QueryJobConfiguration.newBuilder(query)
            .setUseLegacySql(false)
            .build();
    // Create a job ID so that we can safely retry.
    JobId jobId = JobId.of(UUID.randomUUID().toString());
    Job queryJob = bigquery.create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
    // Wait for the query to complete.
    queryJob = queryJob.waitFor();
    // Check for errors
    if (queryJob == null) {
      throw new RuntimeException("Job no longer exists");
    } else if (queryJob.getStatus().getError() != null) {
      throw new RuntimeException(queryJob.getStatus().getError().toString());
    }
    // Get the results.
    TableResult result = queryJob.getQueryResults();
    String responseString = "";
    // Print all pages of the results.
    for (FieldValueList row : result.iterateAll()) {
      responseString += row.get("summary").getStringValue() + ".         \n";
      System.out.printf("%s\n", row.get("summary").getStringValue());
    }
    return responseString;
  }
}

Abbiamo apportato le seguenti modifiche ai file di origine:

  1. In HelloWorldController.java, l'annotazione @Controller è stata aggiornata a @RestController.
  2. Ha sostituito i contenuti del metodo helloWorld() per includere la chiamata a BigQuery, l'esecuzione della query che recupera i dati per elencare il titolo e i temi del libro.
  3. Anziché restituire il modello di visualizzazione dell'indice al caricamento, viene aggiornato per restituire la risposta come stringa al web.

Nota importante: ricorda di aggiornare quanto segue

  1. Aggiorna il file HelloWorldControllerTests.Java per commentare l'invocazione mvc.perform(...) corrente.

Gemini per la spiegazione del codice

Ti abbiamo fornito il codice e descritto le modifiche apportate ai file sorgente. Avresti potuto utilizzare Gemini anche per ottenere spiegazioni del codice e/o commenti del codice, se necessario. Ecco alcune cose che puoi provare:

  1. Con il file HelloWorldController.java aperto nell'IDE, vai al riquadro della chat nell'IDE e fornisci il seguente prompt: Explain this. Controlla la spiegazione dettagliata fornita da Gemini. Puoi utilizzarlo in qualsiasi momento per ricevere una spiegazione del codice.
  2. Puoi evidenziare uno snippet o una riga specifici nel codice (ad es. @GetMapping("/")) e poi utilizzare il seguente prompt: Spiega questo. In questo modo, verrà fornita una spiegazione dettagliata solo sulla riga di codice o sullo snippet selezionato.
  3. Puoi anche provare alcune query che richiedono il codice in modo diverso. Ad esempio, puoi selezionare la seguente riga di codice

BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

e poni la seguente query "What will happen if the bigquery variable is null?" (Cosa succederà se la variabile BigQuery è nulla?) 4. Puoi anche chiedere miglioramenti o refactoring del codice con l'aiuto di Gemini. Ad esempio, puoi selezionare l'intero codice per il metodo helloWorld() e dare il seguente prompt: "Come faccio a migliorare o refactoring di questo codice?". Dai un'occhiata ai suggerimenti forniti da Gemini.

9. Creazione e deployment

Vai a Cloud Shell Terminale. Assicurati che punti all'ID progetto nel terminale.

4b3392dd050340a3.png

Vai alla directory del progetto utilizzando il comando cd:

cd bookshelf-web

Esegui i comandi riportati di seguito uno alla volta per assicurarti che l'app venga eseguita localmente.

mvn package

mvn spring-boot:run

Ora, fai clic sul pulsante "Anteprima web" e sull'opzione "Anteprima sulla porta 8080" come mostrato di seguito:

ea9464498b6bd9df.png

Assicurati di poter vedere l'app in esecuzione localmente sulla macchina Cloud Shell.

Ora chiediamo a Gemini come eseguire il deployment di questa applicazione web su Cloud Run. Vai a Gemini Chat facendo clic sul pulsante "Apri Gemini" nella console Google Cloud.

Questo è il mio prompt:

What is the gcloud command to deploy my app to cloud run without having to containerize, only by giving the source file?

Di seguito è riportata la risposta:

6f21c2d59b6dc416.png

Sostituiamo i segnaposto del nome del servizio e della regione nel comando gcloud come mostrato nello snippet seguente:

gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION

Esegui questo comando dal terminale Cloud Shell. Dovresti visualizzare alcune domande di follow-up, selezionare le risposte appropriate e dovresti essere in grado di vedere l'implementazione in corso:

66f5d6e00c16a4db.png

Bastano pochi minuti e l'app viene eseguita il deployment in Google Cloud senza server. Fai clic sull'app di cui è stato eseguito il deployment di Cloud Run e visualizza il risultato sul web:

fd342d8f16e664ab.png

10. Complimenti

Complimenti! Abbiamo creato, eseguito il deployment e testato correttamente un'applicazione web Java Cloud Run per eseguire l'analisi della libreria utilizzando Gemini. Come attività di follow-up, chiedi a Gemini come eliminare il servizio Cloud Run di cui è stato eseguito il deployment dalla console Google Cloud e segui i passaggi indicati per pulire la risorsa.