1. Einführung
Übersicht
Mit Vertex AI Search and Conversation (früher „Generative AI App Builder“) können Entwickler mithilfe der Foundation Models, der Suchkompetenz und der Conversational AI-Technologien von Google Generative AI-Anwendungen für Unternehmen erstellen. In diesem Codelab geht es um die Verwendung von Vertex AI Search. Sie können damit eine Suchanwendung in Google-Qualität mit Ihren eigenen Daten erstellen und eine Suchleiste in Ihre Webseiten oder App einbetten.
Cloud Run ist eine verwaltete Computing-Plattform, mit der Sie Container direkt auf der skalierbaren Google-Infrastruktur ausführen können. Mit der Option für die quellbasierte Bereitstellung können Sie in Cloud Run Code in einer beliebigen Programmiersprache bereitstellen, der in einen Container eingefügt werden kann.
In diesem Codelab erstellen Sie mit der quellbasierten Bereitstellung einen Cloud Run-Dienst, um Suchergebnisse für unstrukturierte Inhalte in PDF-Dateien in einem Cloud Storage-Bucket abzurufen. Weitere Informationen zum Aufnehmen unstrukturierter Inhalte
Aufgaben in diesem Lab
- Vertex AI Search-Anwendung für unstrukturierte Daten als PDFs erstellen, die aus einem Cloud Storage-Bucket aufgenommen wurden
- HTTP-Endpunkt mit quellbasierter Bereitstellung in Cloud Run erstellen
- Dienstkonto nach dem Prinzip der geringsten Berechtigung erstellen, damit der Cloud Run-Dienst die Vertex AI Search-Anwendung abfragen kann
- Cloud Run-Dienst aufrufen, um die Vertex AI Search-Anwendung abzufragen
2. Einrichtung und Anforderungen
Voraussetzungen
- Sie sind in der Cloud Console angemeldet.
- Sie haben zuvor einen Cloud Run-Dienst bereitgestellt. Weitere Informationen finden Sie beispielsweise in der Kurzanleitung: Webdienst aus dem Quellcode bereitstellen.
Cloud Shell aktivieren
- Klicken Sie in der Cloud Console auf Cloud Shell aktivieren .
Wenn Sie Cloud Shell zum ersten Mal starten, wird ein Zwischenbildschirm mit einer Beschreibung der Funktion angezeigt. Wenn ein Zwischenbildschirm angezeigt wird, klicken Sie auf Weiter.
Die Bereitstellung und Verbindung mit Cloud Shell dauert nur einen Moment.
Diese virtuelle Maschine verfügt über alle erforderlichen Entwicklertools. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und wird in Google Cloud ausgeführt. Dadurch werden die Netzwerkleistung und die Authentifizierung erheblich verbessert. Viele, wenn nicht sogar alle Arbeiten in diesem Codelab können mit einem Browser erledigt werden.
Sobald Sie mit Cloud Shell verbunden sind, sollten Sie sehen, dass Sie authentifiziert sind und das Projekt auf Ihre Projekt-ID eingestellt ist.
- Führen Sie in Cloud Shell den folgenden Befehl aus, um zu prüfen, ob Sie authentifiziert sind:
gcloud auth list
Befehlsausgabe
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- 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
Befehlsausgabe
[core] project = <PROJECT_ID>
Ist dies nicht der Fall, können Sie die Einstellung mit diesem Befehl vornehmen:
gcloud config set project <PROJECT_ID>
Befehlsausgabe
Updated property [core/project].
3. APIs aktivieren
Bevor Sie Vertex AI Search verwenden können, müssen Sie mehrere APIs aktivieren.
Für dieses Codelab müssen zuerst die Vertex AI Search and Conversation, BigQuery und Cloud Storage APIs verwendet werden. Sie können diese APIs hier aktivieren.
Führen Sie dann die folgenden Schritte aus, um die Vertex AI Search and Conversation API zu aktivieren:
- Rufen Sie in der Google Cloud Console die Vertex AI Search and Conversation Console auf.
- Lesen und akzeptieren Sie die Nutzungsbedingungen, klicken Sie dann auf „Weiter“ und aktivieren Sie die API.
4. Suchanwendung für unstrukturierte Daten aus Cloud Storage erstellen
- Rufen Sie in der Google Cloud Console den Bereich Suchen und Seite „Unterhaltung“ Klicken Sie auf Neue App.
- Wählen Sie im Bereich Anwendungstyp auswählen die Option Suchen aus.
- Um Antworten zu erhalten, die wortwörtlich aus Ihren Dokumenten extrahiert werden, müssen die Unternehmensfunktionen aktiviert sein.
- Die Option Erweiterte LLM-Features muss aktiviert sein, damit die Zusammenfassung der Suche verwendet werden kann.
- Geben Sie in das Feld App-Name einen Namen für die App ein. Ihre App-ID wird unter dem App-Namen angezeigt.
- Wählen Sie als Standort für Ihre App global (Global) aus und klicken Sie dann auf Weiter.
- Klicken Sie im Bereich Datenspeicher auf Neuen Datenspeicher erstellen.
- Wählen Sie im Bereich Datenquelle auswählen die Option Cloud Storage aus.
- Achten Sie darauf, dass im Bereich Daten aus GCS importieren die Option Ordner ausgewählt ist.
- Geben Sie in das Feld gs:// den folgenden Wert ein:
cloud-samples-data/gen-app-builder/search/stanford-cs-224
. Dieser Cloud Storage-Bucket enthält PDF-Dateien aus einem öffentlich verfügbaren Cloud Storage-Ordner zu Testzwecken. - Wählen Sie Unstrukturierte Dokumente aus und klicken Sie dann auf Weiter.
- Wählen Sie im Bereich Datenspeicher konfigurieren als Standort für den Datenspeicher global (Global) aus.
- Geben Sie einen Namen für den Datenspeicher ein. Sie werden diesen Namen später in diesem Codelab verwenden, wenn Sie Ihren Cloud Run-Dienst bereitstellen. Klicken Sie auf Erstellen.
- Wählen Sie im Bereich Datenspeicher den neuen Datenspeicher aus und klicken Sie auf Erstellen.
- Klicken Sie auf der Seite Daten des Datenspeichers auf den Tab Aktivität, um den Status der Datenaufnahme zu sehen. Wenn der Import abgeschlossen ist, wird in der Spalte „Status“ der Eintrag Import abgeschlossen angezeigt.
- Klicken Sie auf den Tab Dokumente, um die Anzahl der importierten Dokumente zu sehen.
- Klicken Sie im Navigationsmenü auf Vorschau, um die Such-App zu testen.
- Geben Sie in der Suchleiste
final lab due date
ein und drücken Sie die Eingabetaste, um die Ergebnisse anzusehen.
5. Cloud Run-Dienst erstellen
In diesem Abschnitt erstellen Sie einen Cloud Run-Dienst, der einen Abfragestring für Ihre Suchbegriffe akzeptiert. Dieser Dienst verwendet die Python-Clientbibliotheken für die Discovery Engine API. Informationen zu anderen unterstützten Laufzeiten finden Sie hier.
Quellcode für die Funktion erstellen
Erstellen Sie zunächst ein Verzeichnis und speichern Sie das Verzeichnis mit cd.
mkdir docs-search-service-python && cd $_
Erstellen Sie dann eine requirements.txt
-Datei mit folgendem Inhalt:
blinker==1.6.3 cachetools==5.3.1 certifi==2023.7.22 charset-normalizer==3.3.0 click==8.1.7 Flask==3.0.0 google-api-core==2.12.0 google-auth==2.23.3 google-cloud-discoveryengine==0.11.2 googleapis-common-protos==1.61.0 grpcio==1.59.0 grpcio-status==1.59.0 idna==3.4 importlib-metadata==6.8.0 itsdangerous==2.1.2 Jinja2==3.1.2 MarkupSafe==2.1.3 numpy==1.26.1 proto-plus==1.22.3 protobuf==4.24.4 pyasn1==0.5.0 pyasn1-modules==0.3.0 requests==2.31.0 rsa==4.9 urllib3==2.0.7 Werkzeug==3.0.1 zipp==3.17.0
Erstellen Sie als Nächstes eine main.py
-Quelldatei mit folgendem Inhalt:
from typing import List import json import os from flask import Flask from flask import request app = Flask(__name__) from google.api_core.client_options import ClientOptions from google.cloud import discoveryengine_v1 as discoveryengine project_id = os.environ.get('PROJECT_ID') location = "global" # Values: "global", "us", "eu" data_store_id = os.environ.get('SEARCH_ENGINE_ID') print(project_id) print(data_store_id) @app.route("/") def search_storage(): search_query = request.args.get("searchQuery") result = search_sample(project_id, location, data_store_id, search_query) return result def search_sample( project_id: str, location: str, data_store_id: str, search_query: str, ) -> str: # For more information, refer to: # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store client_options = ( ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com") if location != "global" else None ) # Create a client client = discoveryengine.SearchServiceClient(client_options=client_options) # The full resource name of the search engine serving config # e.g. projects/{project_id}/locations/{location}/dataStores/{data_store_id}/servingConfigs/{serving_config_id} serving_config = client.serving_config_path( project=project_id, location=location, data_store=data_store_id, serving_config="default_config", ) # Optional: Configuration options for search # Refer to the `ContentSearchSpec` reference for all supported fields: # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest.ContentSearchSpec content_search_spec = discoveryengine.SearchRequest.ContentSearchSpec( # For information about snippets, refer to: # https://cloud.google.com/generative-ai-app-builder/docs/snippets snippet_spec=discoveryengine.SearchRequest.ContentSearchSpec.SnippetSpec( return_snippet=True ), # For information about search summaries, refer to: # https://cloud.google.com/generative-ai-app-builder/docs/get-search-summaries summary_spec=discoveryengine.SearchRequest.ContentSearchSpec.SummarySpec( summary_result_count=5, include_citations=True, ignore_adversarial_query=True, ignore_non_summary_seeking_query=True, ), ) # Refer to the `SearchRequest` reference for all supported fields: # https://cloud.google.com/python/docs/reference/discoveryengine/latest/google.cloud.discoveryengine_v1.types.SearchRequest request = discoveryengine.SearchRequest( serving_config=serving_config, query=search_query, page_size=10, content_search_spec=content_search_spec, query_expansion_spec=discoveryengine.SearchRequest.QueryExpansionSpec( condition=discoveryengine.SearchRequest.QueryExpansionSpec.Condition.AUTO, ), spell_correction_spec=discoveryengine.SearchRequest.SpellCorrectionSpec( mode=discoveryengine.SearchRequest.SpellCorrectionSpec.Mode.AUTO ), ) response = client.search(request) return response.summary.summary_text if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Umgebungsvariablen einrichten
In diesem Code erstellen Sie einige Umgebungsvariablen, um die Lesbarkeit der gcloud
-Befehle in diesem Codelab zu verbessern.
PROJECT_ID=$(gcloud config get-value project) SERVICE_NAME="search-storage-pdfs-python" SERVICE_REGION="us-central1" # update with your data store name SEARCH_ENGINE_ID=<your-data-store-name>
Dienstkonto erstellen
In diesem Codelab erfahren Sie, wie Sie ein Dienstkonto für den Cloud Run-Dienst erstellen, um auf die Vertex AI Search API zuzugreifen.
SERVICE_ACCOUNT="cloud-run-vertex-ai-search" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run Vertex AI Search service account" gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role='roles/discoveryengine.editor'
Cloud Run-Dienst bereitstellen
Jetzt können Sie eine quellbasierte Bereitstellung verwenden, um Ihren Cloud Run-Dienst automatisch in Container zu verlagern.
gcloud run deploy $SERVICE_NAME \ --region=$SERVICE_REGION \ --source=. \ --service-account $SERVICE_ACCOUNT \ --update-env-vars SEARCH_ENGINE_ID=$SEARCH_ENGINE_ID,PROJECT_ID=$PROJECT_ID \ --no-allow-unauthenticated
Dann können Sie die Cloud Run-URL als Umgebungsvariable speichern, um sie später zu verwenden.
ENDPOINT_URL="$(gcloud run services describe $SERVICE_NAME --region=$SERVICE_REGION --format='value(status.url)')"
6. Cloud Run-Dienst aufrufen
Sie können jetzt den Cloud Run-Dienst mit einem Abfragestring aufrufen, um What is the final lab due date?
anzufordern.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" "$ENDPOINT_URL?searchQuery=what+is+the+final+lab+due+date"
Die Ergebnisse sollten in etwa so aussehen:
The final lab is due on Tuesday, March 21 at 4:30 PM [1].
7. Glückwunsch!
Herzlichen Glückwunsch zum Abschluss des Codelabs!
Wir empfehlen, die Dokumentation zu Vertex AI Search und Cloud Run zu lesen.
Behandelte Themen
- Vertex AI Search-Anwendung für unstrukturierte Daten als PDFs erstellen, die aus einem Cloud Storage-Bucket aufgenommen wurden
- HTTP-Endpunkt mit quellbasierter Bereitstellung in Cloud Run erstellen
- Anleitung zum Erstellen eines Dienstkontos nach dem Prinzip der geringsten Berechtigung für den Cloud Run-Dienst, um die Vertex AI Search-Anwendung abzufragen.
- Cloud Run-Dienst aufrufen, um die Vertex AI Search-Anwendung abzufragen
8. Bereinigen
Um versehentliche Gebühren zu vermeiden, z. B. wenn diese Cloud Functions-Funktion versehentlich häufiger aufgerufen wird als Ihre monatliche Zuweisung von Cloud Functions-Aufrufen in der kostenlosen Stufe, können Sie entweder die Cloud Functions-Funktion oder das in Schritt 2 erstellte Projekt löschen.
Rufen Sie zum Löschen der Cloud Functions-Funktion die Cloud Console unter https://console.cloud.google.com/functions/ auf und löschen Sie die Funktion imagen_vqa (oder $FUNCTION_NAME, falls Sie einen anderen Namen verwendet haben).
Wenn Sie das gesamte Projekt löschen möchten, rufen Sie https://console.cloud.google.com/cloud-resource-manager auf, wählen Sie das in Schritt 2 erstellte Projekt aus und klicken Sie auf „Löschen“. Wenn Sie das Projekt löschen, müssen Sie die Projekte in Ihrem Cloud SDK ändern. Sie können die Liste aller verfügbaren Projekte mit dem Befehl gcloud projects list
aufrufen.