1. Einführung
Du liebst es, in Bücher einzutauchen, aber die schiere Menge an Optionen überfordert dich? Stellen Sie sich eine KI-gestützte App vor, die Ihnen nicht nur das perfekte Buch empfiehlt, sondern auch eine kurze Zusammenfassung basierend auf Ihrem bevorzugten Genre anbietet, die Ihnen einen Einblick in den Inhalt des Buches gibt. In diesem Codelab zeige ich Ihnen, wie Sie eine solche Anwendung mit BigQuery, Vertex AI und Cloud Run mit Unterstützung von Gemini erstellen.
Projektübersicht
Unser Anwendungsfall konzentriert sich auf diese vier Hauptkomponenten:
- Buchdatenbank:Der umfangreiche öffentliche BigQuery-Datensatz mit Büchern aus dem Internetarchiv dient als umfassender Buchkatalog.
- KI-Zusammenfassungs-Engine:Google Cloud Functions mit dem Gemini-Pro-Sprachmodell generieren aussagekräftige Zusammenfassungen, die auf Nutzeranfragen zugeschnitten sind.
- BigQuery-Integration:Eine Remote-Funktion in BigQuery, die unsere Cloud-Funktion aufruft, um Buchzusammenfassungen und Themen auf Abruf bereitzustellen.
- Benutzeroberfläche:Eine in Cloud Run gehostete Webanwendung, über die Nutzer die Ergebnisse ansehen 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 generative KI-Anwendungen mit reiner SQL-Programmierung in 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 BigQuery-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
- Ein Browser, z. B. Chrome oder Firefox
- Google Cloud-Projekt mit aktivierter Abrechnung
- Es ist hilfreich, wenn Sie die Cloud Functions-Funktion als Teil des Codelabs Teil 1 bereitgestellt haben: Mit Gemini eine Cloud Functions-Funktion für Java für eine Anwendung mit generativer KI erstellen.
- Bedingt:Wenn Sie derzeit Zugriff auf den Link für kostenlose Google Cloud-Guthaben haben (der Ihnen möglicherweise vom Organisator des Workshops zur Verfügung gestellt wurde), führen Sie die Schritte zur AKTIVIERUNG DES GUTHABENS und PROJEKTERSTELLUNG anhand der Anleitung auf der folgenden Seite aus. Wenn Sie diese Verknüpfung nicht haben, fahren Sie mit den folgenden Schritten für die Projekt- und Abrechnungsvoraussetzungen fort:
Projekt erstellen
Sie können die folgenden Schritte überspringen, wenn Sie bereits ein Rechnungskonto aktiviert und über den Link im bedingten Schritt oben ein Projekt erstellt haben.
- Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
- 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
- Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird und bq vorinstalliert hat:
Klicken Sie in der Cloud Console rechts oben auf „Cloud Shell aktivieren“:
- Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie bereits authentifiziert sind und das Projekt bereits auf Ihre Projekt-ID festgelegt ist. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list
- Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob der gcloud-Befehl Ihr Projekt kennt:
gcloud config list project
- Wenn Ihr Projekt noch nicht eingerichtet 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
- 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
- Rufen Sie die Gemini-Seite auf und klicken Sie auf „Chat starten“.
Weitere erforderliche APIs aktivieren
Wie würden wir das tun? Fragen wir Gemini. Beachten Sie aber Folgendes:
Hinweis: LLMs sind nicht deterministisch. Wenn Sie diese Prompts ausprobieren, kann die Antwort, die Sie erhalten, also von der in meinem Screenshot abweichen.
Klicken Sie in der Google Cloud Console rechts oben neben der Suchleiste auf das Symbol „Gemini öffnen“, um die Gemini-Chatkonsole aufzurufen.
Geben Sie diese Frage in den Bereich „Prompt eingeben“ ein:
How do I enable the BigQuery and Cloud Run apis using gcloud command?
Sie erhalten die folgende Antwort:
Kopieren Sie den Befehl (Sie können dazu 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 mit Bücherdaten untersuchen
Machen Sie sich zuerst mit dem öffentlichen BigQuery-Dataset vertraut, das Informationen zu zahlreichen Büchern im Internetarchiv enthält. Wenn Sie über diesen Link nicht auf das Dataset internetarchivebooks zugreifen können, folgen Sie der Anleitung unten, um das Dataset zu untersuchen, oder der Anleitung:
Sie finden dieses öffentliche Dataset im BigQuery Explorer-Bereich. Sie finden ihn auf der linken Seite, wenn Sie die BigQuery-Konsole aufrufen.
Geben Sie „gdelt-bq“ oder „internetarchivebooks“ in die Suchleiste ein und klicken Sie auf „IN ALLEN PROJEKTEN SUCHEN“. Maximieren Sie das Ergebnis und markieren Sie Bücher im Internetarchiv wie im Bild unten gezeigt:
.
Maximieren Sie das Dataset, klicken Sie auf „gdelt-bq.internetarchivebooks“ und sehen Sie sich dann eine Vorschau der Daten in der Tabelle „1920“ an. Diese Tabelle enthält Bücher aus dem Jahr 1920, die archiviert wurden.
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;
Für unser Codelab verwenden wir die folgenden drei Felder:
- BookMeta_Title (Titel)
- Themen (Themen getrennt durch „;“)
- BookMeta_FullText (Volltext des Buchs)
6. Einfache Java-Cloud Run-Vorlage mit Gemini erstellen
Öffnen Sie den Cloud Shell-Editor, indem Sie rechts oben im Cloud Shell-Terminal auf das Symbol „Editor öffnen“ klicken. Ich bevorzuge es, das Terminal und den Editor parallel in separaten Tabs zu öffnen, damit wir Code in einem und Builds in einem anderen schreiben können.
Wenn der Editor geöffnet ist, prüfen Sie, ob das Gemini-Logo in der unteren rechten Ecke der Editorkonsole aktiv (und nicht vollständig) ist. Achten Sie außerdem darauf, dass Ihr Google Cloud-Projekt links unten 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 das Projekt verweisen soll, und lassen Sie sie aktivieren.
Sobald beide aktiviert sind, klicken Sie links unten auf den Projektnamen und scrollen Sie in der Pop-up-Liste „Cloud Code“ nach unten zu „Neue Anwendung“.
Wählen Sie in dieser Liste „Cloud Run-Anwendung“ aus. Wählen Sie in der sich öffnenden Liste Java aus:
Geben Sie in der Liste den Projektnamen „bookshelf-web“ anstelle von „helloworld“ ein und klicken Sie auf „OK“.
Super! Sie haben Ihre einfache Java Cloud Run-Anwendung mit Gemini per Bootstrapping verknüpft und nicht viel getan, abgesehen von der Aktivierung und Aktivierung von Konfigurationen, stimmten Sie?
Die Projektstruktur sollte so aussehen:
Sie können die Anwendung jetzt bereitstellen. Aber das war nicht der Grund, warum wir das Projekt gestartet haben. Wir müssen noch die Hauptfunktion der Webanwendung hinzufügen, die darin besteht, die Analysedaten aus der BigQuery-Datenbank abzurufen und im Web anzuzeigen.
Dazu können Sie weitere Prompts hinzufügen und Ihren Code mit Gemini schrittweise entwickeln oder die Logik selbst schreiben. Ich werde eine Mischung aus beiden verwenden.
7. Abhängigkeiten hinzufügen, um BigQuery in der Webanwendung zu verwenden
Nachdem die Anwendung gestartet wurde, können wir Änderungen an der Anwendungsquelle und den Eigenschaften vornehmen. Fügen wir zuerst Abhängigkeiten hinzu. Fragen wir Gemini, ob er uns eine Empfehlung geben kann.
Achten Sie im Cloud Code-Editor darauf, dass in der Statusleiste rechts unten „Gemini aktiv“ angezeigt wird und das aktive Google Cloud-Projekt links unten ausgewählt ist.
Rufen Sie im Cloud Code-Editor die Datei pom.xml auf und geben Sie direkt über dem </dependencies>-Tag den folgenden Prompt-Kommentar ein :
<!-- What maven dependency should I include to access BigQuery in the app-->
Ich habe dieses Ergebnis erhalten, wie in der folgenden Abbildung dargestellt:
Ich füge die Abhängigkeit hier ein. Wenn in Ihrem Fall der Vorschlag ein Versions-Tag enthält, können Sie es ignorieren.
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-bigquery</artifactId>
</dependency>
8. Quelle aktualisieren, um die Daten der Leseliste ins Web zu übertragen
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:
- In HelloWorldController.java wurde @Controller in @RestController geändert.
- Der Inhalt der Methode „helloWorld()“ wurde durch den Aufruf von BigQuery ersetzt. Die Ausführung der Abfrage, mit der die Daten abgerufen werden, um den Titel und die Themen des Buchs aufzulisten.
- Anstatt die Indexansichtsvorlage beim Laden zurückzugeben, wird sie aktualisiert, sodass die Antwort als String an das Web zurückgegeben wird.
Wichtiger Hinweis: Vergiss nicht, die folgenden Angaben zu aktualisieren
- Aktualisieren Sie die Datei HelloWorldControllerTests.Java, um den aktuellen mvc.perform(...)-Aufruf zu kommentieren.
Gemini für Codeerläuterungen
Wir haben Ihnen den Code zur Verfügung gestellt und die Änderungen beschrieben, die wir an den Quelldateien vorgenommen haben. Sie hätten auch Gemini verwenden können, um bei Bedarf Codeerläuterungen und/oder Codekommentare zu erhalten. Sie können Folgendes ausprobieren:
- Öffnen Sie die Datei HelloWorldController.java in der IDE und geben Sie im Chatfeld den folgenden Prompt ein: Erklären Sie das. Sehen Sie sich die ausführliche Erklärung von Gemini an. Diese kann von Ihnen jederzeit verwendet werden, um Erläuterungen zum Code zu erhalten.
- Sie können ein bestimmtes Snippet oder eine bestimmte Zeile im Code markieren (z.B. @GetMapping("/")) und dann den folgenden Prompt verwenden: Erklären Sie das. Sie erhalten dann eine detaillierte Erklärung nur für die ausgewählte Codezeile oder das ausgewählte Snippet.
- Sie können auch einige Abfragen 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 Abfrage: Was passiert, wenn die BigQuery-Variable null ist? 4. Mithilfe von Gemini können Sie auch um Codeverbesserungen oder Refaktorierung bitten. Sie können beispielsweise den gesamten Code für die Methode helloWorld() auswählen und die folgende Aufforderung geben: „Wie kann ich diesen Code verbessern oder umstrukturieren?“ Sehen Sie sich die Vorschläge von Gemini an.
9. Erstellen und bereitstellen
Rufen Sie das Cloud Shell-Terminal auf. Achten Sie darauf, dass er im Terminal auf Ihre Projekt-ID verweist.
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 jetzt auf die Schaltfläche „Webvorschau“ und dann auf die Option „Vorschau auf Port 8080“, wie unten dargestellt:
Prüfen Sie, ob die lokal ausgeführte App auf Ihrem Cloud Shell-Computer angezeigt wird.
Fragen wir Gemini, wie diese Webanwendung in Cloud Run bereitgestellt wird. Klicken Sie in der Google Cloud Console auf die Schaltfläche „Gemini öffnen“, um Gemini Chat aufzurufen.
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:
Ersetzen wir die Platzhalter für Dienstnamen und Regionen im gcloud-Befehl, wie im folgenden Snippet gezeigt:
gcloud run deploy bookshelf-web --source . --allow-unauthenticated --region $REGION
Führen Sie diesen Befehl im Cloud Shell-Terminal aus. Sie sollten ein paar Nachfragen sehen, die entsprechenden Antworten auswählen und die Bereitstellung sehen können:
Nach wenigen Minuten wird die App serverlos in Google Cloud bereitgestellt. Klicken Sie auf die in Cloud Run bereitgestellte Anwendung und sehen Sie sich das Ergebnis im Web an:
10. Glückwunsch
Glückwunsch! Wir haben eine Java Cloud Run-Webanwendung erstellt, bereitgestellt und getestet, um mit Gemini Buchanalyse durchzuführen. Als Nächstes fragen Sie Gemini, wie Sie den bereitgestellten Cloud Run-Dienst aus der Google Cloud Console löschen. Folgen Sie dann der Anleitung, um die Ressource zu bereinigen.