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

1. Introduzione

Ti piace leggere libri, ma sei sopraffatto dall'enorme quantità di scelta? Immagina di avere un'app basata sull'IA che non solo consiglia la lettura perfetta, ma offre anche un riepilogo conciso in base al genere scelto, 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: il vasto set di dati pubblico BigQuery dei libri di archivio internet fungerà da catalogo completo dei libri.
  • Motore di sintesi dell'IA:Cloud Functions di Google, dotato del modello linguistico Gemini-Pro, genera riepiloghi utili personalizzati in base alle richieste degli utenti.
  • Integrazione di BigQuery:una funzione remota in 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 e questo codelab riguarda il codelab 3 nell'elenco seguente:

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

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

Codelab 3:usa 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 e i contenuti dei libri sul web.
  • Questa app viene eseguita 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 indicato 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 controllare se la fatturazione è abilitata per un progetto.

Attivare Cloud Shell

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

In Cloud Console, 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 il seguente 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 le API necessarie in corso...

Abilita Gemini

  1. Vai al marketplace Gemini 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 possiamo farlo? Chiediamolo a Gemini, d'accordo? Tuttavia, prima di procedere, ricordati che:

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

Vai alla console della chat con 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?

Riceverai la risposta mostrata nell'immagine seguente:

b97a8a9fa9143b3f.png

Copialo (puoi utilizzare l'icona di copia nella parte superiore dello snippet di comando) ed eseguilo nel terminal Cloud Shell per attivare i rispettivi servizi:

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

5. Esplorare il set di dati pubblico BigQuery per i dati dei libri

Inizia ad acquisire familiarità con il set di dati pubblico di BigQuery, che contiene informazioni su numerosi archivio di internet. Se non riesci ad accedere al set di dati internetarchivebooks da questo link, segui i passaggi riportati di seguito per esplorarlo oppure consulta questa documentazione:

Puoi trovare questo set di dati pubblico nel riquadro di esplorazione di BigQuery. Puoi trovarlo a sinistra 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 i libri dell'archivio internet come mostrato nell'immagine di seguito:

68dba68a79cddfc9.png.

Espandi il set di dati, fai clic su gdelt-bq.internetArchivebooks, quindi 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 (titolo)
  • Temi (separati da ";'")
  • BookMeta_FullText (testo completo del libro)

6. Crea il modello di base Cloud Run Java 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 per poter scrivere codice in uno e compilare in un altro).

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 annullato). Assicurati inoltre che il progetto Google Cloud nell'angolo in basso a sinistra indirizzi al progetto attivo corrente con cui vuoi lavorare. Se sono inattivi, fai clic su di essi, autorizzali, seleziona il progetto Google Cloud a cui vuoi che puntino e attivali.

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

db998cc557e83f40.png

In questo elenco, seleziona l'applicazione Cloud Run. Nell'elenco visualizzato, seleziona Java:

c7748de85120507b.png

Nell'elenco visualizzato, digita il nome del progetto "bookmen-web" invece di 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 a parte l'abilitazione e l'attivazione delle configurazioni, d'accordo?

Questa è la struttura del progetto che dovresti vedere:

e6be37bbee730bd1.png

Ora puoi eseguire il deployment dell'applicazione. Ma non è per questo che 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 autonomamente. Opterò per una combinazione di entrambi.

7. Aggiungi le dipendenze per utilizzare BigQuery nell'app web

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

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

In Cloud Code Editor, vai al file pom.xml, proprio sopra il tag </dependencies>, digita il seguente commento prompt :

171d1c40ff8124e8.png

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

Ho ottenuto il risultato mostrato nell'immagine di seguito:

2df51efd655a3557.png

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

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

8. Aggiorna l'origine per trasferire i dati della raccolta 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 è stato aggiornato @Controller in @RestController.
  2. È stato sostituito il contenuto 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. Invece di restituire il modello di visualizzazione dell'indice al caricamento, viene aggiornato per restituire la risposta come stringa al web.

Nota importante: ricordati di aggiornare quanto segue

  1. Aggiorna il file HelloWorldControllerTests.Java per commentare la chiamata attuale mvc.perform(...).

Gemini per la spiegazione del codice

Ti abbiamo fornito il codice e descritto le modifiche che abbiamo apportato ai file sorgente. Avresti potuto utilizzare Gemini anche per ottenere spiegazioni e/o commenti sul 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: Spiega. Consulta la spiegazione dettagliata fornita da Gemini. Puoi utilizzarlo in qualsiasi momento per avere 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. Verrà fornita una spiegazione dettagliata solo sulla riga di codice o sullo snippet selezionato.
  3. Puoi anche provare alcune query che richiedono informazioni sul codice in modo diverso. Ad esempio, puoi selezionare la seguente riga di codice

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

e fai la seguente query "Cosa succede se la variabile bigquery è null?" 4. Puoi anche chiedere miglioramenti o refactoring del codice con l'aiuto di Gemini. Ad esempio, puoi selezionare l'intero codice del metodo helloWorld() e dare il seguente prompt: "Come faccio a migliorare o rifare il refactoring di questo codice?". Dai un'occhiata ai suggerimenti forniti da Gemini.

9. Creazione e deployment

Vai a Terminale di Cloud Shell. Assicurati che indirizzi 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 sia in esecuzione localmente.

mvn package

mvn spring-boot:run

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

ea9464498b6bd9df.png

Assicurati di poter vedere l'app in esecuzione localmente sulla tua 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

Dopo pochi minuti, l'app viene dispiattata in Google Cloud in modalità serverless. Fai clic sull'app Cloud Run di cui è stato eseguito il deployment e visualizza il risultato sul web:

fd342d8f16e664ab.png

10. Complimenti

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