Bookshelf Analytics: Mit Gemini eine Java Cloud Run-Anwendung erstellen, die BigQuery-Daten im Web bringt

1. Einführung

Lesen Sie gern, sind aber von der schieren Menge an Auswahlmöglichkeiten überfordert? Stellen Sie sich vor, Sie hätten eine KI-basierte App, die Ihnen nicht nur das perfekte Buch empfiehlt, sondern auch eine kurze Zusammenfassung basierend auf Ihrem bevorzugten Genre bietet, damit Sie einen Einblick in das Buch erhalten. In diesem Codelab zeige ich Ihnen, wie Sie eine solche Anwendung mit BigQuery, Vertex AI und Cloud Run erstellen, unterstützt von Gemini.

Projektübersicht

Unser Anwendungsfall konzentriert sich auf diese vier Hauptkomponenten:

  • Buchdatenbank:Das umfangreiche öffentliche BigQuery-Dataset mit Internetarchivbüchern dient als umfassender Buchkatalog.
  • KI-Zusammenfassungsmodul:Google Cloud Functions, ausgestattet mit dem Gemini Pro-Sprachmodell, generiert aussagekräftige Zusammenfassungen, die auf Nutzeranfragen zugeschnitten sind.
  • BigQuery-Integration:Eine Remote-Funktion in BigQuery, die unsere Cloud Functions-Funktion aufruft, um bedarfsgesteuerte Buchzusammenfassungen und ‑themen zu liefern.
  • Benutzeroberfläche:Eine in Cloud Run gehostete Webanwendung, über die Nutzer die Ergebnisse aufrufen können.

Wir haben die gesamte Projektimplementierung in drei Codelabs unterteilt. Dieses Codelab deckt Codelab 3 in der folgenden Liste ab:

Codelab 1:Mit Gemini eine Java-Cloud-Funktion für eine Gemini-Anwendung erstellen

Codelab 2:Mit Gemini SQL-basierte generative KI-Anwendungen mit BigQuery erstellen.

Codelab 3:Mit Gemini eine Java Spring Boot-Webanwendung erstellen, die mit BigQuery interagiert.

2. Mit Gemini eine Spring Boot-Webanwendung mit BigQuery erstellen

Aufgaben

  • Erstellen Sie das erforderliche BigQuery-Dataset und die erforderliche Tabelle.
  • Java Spring Boot-Webanwendung, die mit BigQuery interagiert, um Buchdaten abzurufen und im Web anzuzeigen.
  • Diese App wird in Cloud Run bereitgestellt.
  • Sie führen diese Schritte mithilfe von Gemini aus.

3. Voraussetzungen

Projekt erstellen

Sie können die folgenden Schritte überspringen, wenn Sie bereits ein Rechnungskonto aktiviert und ein Projekt über den Link erstellt haben, der im bedingten Schritt oben erwähnt wird.

  1. Wählen Sie in der Google Cloud Console auf der Seite zur Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.

Cloud Shell aktivieren

  1. Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird und in der bq vorinstalliert ist:

Klicken Sie in der Cloud Console rechts oben auf „Cloud Shell aktivieren“:

6757b2fb50ddcc2d.png

  1. Sobald die Verbindung mit der Cloud Shell hergestellt ist, sehen Sie, dass Sie bereits authentifiziert sind und für das Projekt schon Ihre Projekt-ID eingestellt ist. Führen Sie in der Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list
  1. Führen Sie den folgenden Befehl in Cloud Shell aus, um zu bestätigen, dass der gcloud-Befehl Ihr Projekt kennt.
gcloud config list project
  1. Wenn Ihr Projekt nicht festgelegt ist, verwenden Sie den folgenden Befehl, um es festzulegen:
gcloud config set project <YOUR_PROJECT_ID>

Informationen zu gcloud-Befehlen und deren Verwendung finden Sie in der Dokumentation.

4. Gemini und erforderliche APIs aktivieren

Gemini aktivieren

  1. Rufen Sie den Gemini Marketplace auf, um die API zu aktivieren. Sie können auch den folgenden Befehl verwenden:

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

  1. Rufen Sie die Gemini-Seite auf und klicken Sie auf „Chat starten“.

Andere erforderliche APIs aktivieren

Wie würden wir das tun? Fragen wir Gemini. Denken Sie aber daran:

Hinweis: LLMs sind nicht deterministisch. Die Antwort, die Sie erhalten, kann sich also von den Antworten in meinem Screenshot unterscheiden.

Rufen Sie die Gemini-Chatkonsole auf, indem Sie in der Google Cloud Console rechts oben neben der Suchleiste auf das Symbol „Gemini öffnen“ klicken.

26e1491322855614.png

Geben Sie diese Frage in den Bereich „Geben Sie hier einen Prompt ein“ ein:

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

Sie erhalten die Antwort, die im folgenden Bild zu sehen ist:

b97a8a9fa9143b3f.png

Kopieren Sie den Befehl (Sie können das Kopiersymbol oben im Befehls-Snippet verwenden) und führen Sie ihn im Cloud Shell-Terminal aus, um die entsprechenden Dienste zu aktivieren:

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

5. Öffentliches BigQuery-Dataset für Buchdaten untersuchen

Machen Sie sich zuerst mit dem öffentlichen BigQuery-Dataset vertraut, das Informationen zu zahlreichen Internet Archive-Büchern enthält. Wenn Sie über diesen Link nicht zum Dataset internetarchivebooks gelangen, können Sie das Dataset auch über die folgenden Schritte aufrufen oder dieser Dokumentation folgen:

Sie finden dieses öffentliche Dataset im Bereich „BigQuery Explorer“. Sie finden sie auf der linken Seite, wenn Sie die BigQuery-Konsole aufrufen.

39e2ac03cc99cbac.png

Geben Sie „gdelt-bq“ oder „internetarchivebooks“ in die Suchleiste ein und klicken Sie auf „ALLE PROJEKTE DURCHSUCHEN“. Erweitern Sie das Ergebnis und markieren Sie Internet Archive-Bücher mit einem Stern, wie im Bild unten dargestellt:

68dba68a79cddfc9.png.

Maximieren Sie das Dataset, klicken Sie auf „gdelt-bq.internetarchivebooks“ und sehen Sie sich dann die Daten in der Tabelle „1920“ an. Diese Tabelle enthält archivierte Bücher aus dem Jahr 1920.

Führen Sie die folgende Abfrage aus, um sich das Schema anzusehen, das wir in den folgenden Abschnitten verwenden werden:

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

In diesem Codelab verwenden wir die folgenden drei Felder:

  • BookMeta_Title (title)
  • Themen (durch „;'“ getrennt)
  • BookMeta_FullText (Volltext des Buchs)

6. Mit Gemini die einfache Java Cloud Run-Vorlage erstellen

Öffnen Sie den Cloud Shell-Editor, indem Sie rechts oben im Cloud Shell-Terminal auf das Symbol „Editor öffnen“ klicken. Ich öffne das Terminal und den Editor normalerweise parallel auf separaten Tabs, damit ich in einem Code schreiben und im anderen erstellen kann.

edd258384bc74f1f.png

Wenn Sie den Editor geöffnet haben, muss das Gemini-Logo unten rechts in der Editorkonsole aktiv sein (und nicht durchgestrichen). Achten Sie außerdem darauf, dass Ihr Google Cloud-Projekt in der unteren linken Ecke auf das aktuelle aktive Projekt verweist, mit dem Sie arbeiten möchten. Wenn sie inaktiv sind, klicken Sie darauf, autorisieren Sie sie, wählen Sie das Google Cloud-Projekt aus, auf das sie verweisen sollen, und aktivieren Sie sie.

Wenn beide aktiviert sind, klicken Sie unten links auf den Projektnamen und scrollen Sie in der Pop-up-Liste mit dem Titel „Cloud Code“ nach unten zu „Neue Anwendung“.

db998cc557e83f40.png

Wählen Sie in dieser Liste „Cloud Run-Anwendung“ aus. Wählen Sie in der Liste, die eingeblendet wird, „Java“ aus:

c7748de85120507b.png

Geben Sie in der angezeigten Liste anstelle von „helloworld“ den Projektnamen „bookshelf-web“ ein und klicken Sie auf „OK“.

7c58c764277c571f.png

Super! Sie haben Ihre einfache Java Cloud Run-Anwendung mit Gemini erstellt und außer Aktivierungs- und Aktivierungskonfigurationen nicht viel getan, oder?

So sollte die Projektstruktur aussehen:

e6be37bbee730bd1.png

Jetzt können Sie die Anwendung bereitstellen. Aber das ist nicht der Grund, warum wir damit angefangen haben. Wir müssen jedoch noch die Hauptfunktion der Webanwendung einfügen, nämlich die Analysedaten aus der BigQuery-Datenbank abzurufen und im Web anzuzeigen.

Dazu können Sie weitere Prompts hinzufügen und den Code mit Gemini schrittweise entwickeln lassen oder die Logik selbst schreiben. Ich werde eine Mischung aus beidem verwenden.

7. Abhängigkeiten hinzufügen, um BigQuery in der Web-App zu verwenden

Nachdem die Anwendung gebootstrapped wurde, können wir Änderungen an der Anwendungsquelle und den Eigenschaften vornehmen. Fügen wir zuerst Abhängigkeiten hinzu. Bitten wir Gemini um eine Empfehlung.

Prüfen Sie im Cloud Code-Editor, ob in der Statusleiste unten rechts „Gemini aktiv“ angezeigt wird und unten links das aktive Google Cloud-Projekt ausgewählt ist.

Rufen Sie im Cloud Code-Editor die Datei „pom.xml“ auf. Geben Sie direkt über dem Tag </dependencies> den folgenden Prompt-Kommentar ein :

171d1c40ff8124e8.png

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

Ich habe dieses Ergebnis erhalten, wie im Bild unten zu sehen ist:

2df51efd655a3557.png

Die Abhängigkeit wird hier zur besseren Übersicht eingefügt. Wenn der Vorschlag in Ihrem Fall mit einem Versionstag angezeigt wird, können Sie ihn ignorieren.

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

8. Quelle aktualisieren, um die Bücherregaldaten im Web zu erhalten

Ersetzen Sie den Code in HelloWorldController.java durch Folgendes:

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;
  }
}

Wir haben die folgenden Änderungen an den Quelldateien vorgenommen:

  1. In HelloWorldController.java wurde @Controller in @RestController geändert.
  2. Der Inhalt der Methode „helloWorld()“ wurde ersetzt, um den Aufruf von BigQuery und die Ausführung der Abfrage einzuschließen, mit der die Daten zum Auflisten des Titels und der Themen des Buchs abgerufen werden.
  3. Anstatt das Indexansicht-Template beim Laden zurückzugeben, wird es aktualisiert, um die Antwort als String an das Web zurückzugeben.

Wichtiger Hinweis: Aktualisieren Sie die folgenden Informationen.

  1. Aktualisieren Sie die Datei HelloWorldControllerTests.Java, um den aktuellen mvc.perform(...)-Aufruf auszukommentieren.

Gemini für die Codeerklärung

Wir haben Ihnen den Code zur Verfügung gestellt und die Änderungen beschrieben, die wir an den Quelldateien vorgenommen haben. Sie hätten Gemini auch verwenden können, um bei Bedarf Codeerklärungen und/oder Codekommentare zu erhalten. Hier sind einige Dinge, die Sie ausprobieren können:

  1. Öffnen Sie die Datei HelloWorldController.java in der IDE, rufen Sie den Chatbereich in der IDE auf und geben Sie den folgenden Prompt ein: Explain this (Erkläre das). Sehen Sie sich die detaillierte Erklärung an, die Gemini liefert. Sie können diese Funktion jederzeit nutzen, um sich den Code erklären zu lassen.
  2. Sie können ein bestimmtes Snippet oder eine bestimmte Zeile im Code hervorheben (z.B. @GetMapping("/")) und dann den folgenden Prompt verwenden: Erkläre das. Sie erhalten dann eine detaillierte Erklärung nur für die ausgewählte Codezeile oder das ausgewählte Snippet.
  3. Sie können auch einige Anfragen ausprobieren, die den Code auf andere Weise abfragen. Sie können beispielsweise die folgende Codezeile auswählen:

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

und stellen Sie die folgende Frage: „Was passiert, wenn die BigQuery-Variable null ist?“ 4. Sie können Gemini auch um Codeverbesserungen oder Refactoring bitten. Sie können beispielsweise den gesamten Code für die Methode helloWorld() auswählen und den folgenden Prompt eingeben: „Wie kann ich diesen Code verbessern oder umgestalten?“. Sehen Sie sich die Vorschläge von Gemini an.

9. Erstellen und bereitstellen

Rufen Sie das Terminal in Cloud Shell auf. Achten Sie darauf, dass im Terminal auf Ihre Projekt-ID verwiesen wird.

4b3392dd050340a3.png

Wechseln Sie mit dem Befehl „cd“ in das Projektverzeichnis:

cd bookshelf-web

Führen Sie die folgenden Befehle nacheinander aus, um sicherzustellen, dass Ihre App lokal ausgeführt wird.

mvn package

mvn spring-boot:run

Klicken Sie nun auf die Schaltfläche „Webvorschau“ und dann auf die Option „Vorschau auf Port 8080“ (siehe unten):

ea9464498b6bd9df.png

Prüfen Sie, ob Sie die App sehen können, die lokal auf Ihrem Cloud Shell-Computer ausgeführt wird.

Fragen wir Gemini, wie wir diese Webanwendung in Cloud Run bereitstellen können. Rufen Sie Gemini Chat auf, indem Sie in der Google Cloud Console auf die Schaltfläche „Gemini öffnen“ klicken.

Das ist mein Prompt:

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

Hier ist die Antwort:

6f21c2d59b6dc416.png

Ersetzen wir die Platzhalter für den Dienstnamen und die Region im gcloud-Befehl, wie im Snippet unten gezeigt:

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

Führen Sie diesen Befehl im Cloud Shell-Terminal aus. Sie sollten einige Folgefragen sehen. Wählen Sie die entsprechenden Antworten aus. Die Bereitstellung sollte dann in Bearbeitung sein:

66f5d6e00c16a4db.png

Das dauert einige Minuten und die App wird serverlos in Google Cloud bereitgestellt. Klicken Sie auf die in Cloud Run bereitgestellte App und sehen Sie sich das Ergebnis im Web an:

fd342d8f16e664ab.png

10. Glückwunsch

Glückwunsch! Wir haben erfolgreich eine Java Cloud Run-Webanwendung erstellt, bereitgestellt und getestet, um mit Gemini Bücherregalanalysen durchzuführen. Fragen Sie Gemini als Folgeaufgabe, wie Sie den bereitgestellten Cloud Run-Dienst aus der Google Cloud Console löschen können, und folgen Sie den Schritten, die Gemini Ihnen nennt, um die Ressource zu bereinigen.