1. Introduzione
Panoramica
Vertex AI Search and Conversation (in precedenza noto come Generative AI App Builder) consente agli sviluppatori di sfruttare la potenza dei modelli di base, l'esperienza di ricerca e le tecnologie di AI conversazionale di Google per creare applicazioni di AI generativa di livello enterprise. Questo codelab si concentra sull'utilizzo di Vertex AI Search, dove puoi creare un'app di ricerca di qualità Google sui tuoi dati e incorporare una barra di ricerca nelle tue pagine web o app.
Cloud Run è una piattaforma di computing gestita che ti consente di eseguire container direttamente sull'infrastruttura scalabile di Google. Puoi eseguire il deployment di codice scritto in qualsiasi linguaggio di programmazione su Cloud Run (che può essere inserito in un container) utilizzando l'opzione di deployment basata sul codice sorgente.
In questo codelab creerai un servizio Cloud Run utilizzando il deployment basato sul codice sorgente per recuperare i risultati di ricerca per contenuti non strutturati nei file PDF in un bucket Cloud Storage. Puoi scoprire di più sull'importazione di contenuti non strutturati qui.
Cosa imparerai a fare
- Come creare un'app di ricerca Vertex AI per dati non strutturati come PDF importati da un bucket Cloud Storage
- Come creare un endpoint HTTP utilizzando il deployment basato sul codice sorgente in Cloud Run
- Come creare un service account seguendo il principio del privilegio minimo per il servizio Cloud Run da utilizzare per eseguire query sull'app Vertex AI Search
- Come richiamare il servizio Cloud Run per eseguire query sull'app di ricerca Vertex AI
2. Configurazione e requisiti
Prerequisiti
- Hai eseguito l'accesso alla console Cloud.
- In precedenza hai eseguito il deployment di un servizio Cloud Run. Ad esempio, puoi seguire la guida rapida Eseguire il deployment di un servizio web dal codice sorgente per iniziare.
Attiva Cloud Shell
- Nella console Cloud, fai clic su Attiva Cloud Shell
.

Se è la prima volta che avvii Cloud Shell, viene visualizzata una schermata intermedia che ne descrive le funzionalità. Se è stata visualizzata una schermata intermedia, fai clic su Continua.

Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.

Questa macchina virtuale è caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory persistente di 5 GB ed è in esecuzione in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte del lavoro per questo codelab, se non tutto, può essere svolto con un browser.
Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è autenticato e il progetto è impostato sul tuo ID progetto.
- Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list
Output comando
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- Esegui questo comando in Cloud Shell per verificare che il comando gcloud riconosca il tuo progetto:
gcloud config list project
Output comando
[core] project = <PROJECT_ID>
In caso contrario, puoi impostarlo con questo comando:
gcloud config set project <PROJECT_ID>
Output comando
Updated property [core/project].
3. Abilita API
Prima di poter iniziare a utilizzare Vertex AI Search, devi abilitare diverse API.
Innanzitutto, questo codelab richiede l'utilizzo delle API Vertex AI Search and Conversation, BigQuery e Cloud Storage. Puoi abilitare queste API qui.
In secondo luogo, segui questi passaggi per abilitare l'API Vertex AI Search and Conversation:
- Nella console Google Cloud, vai alla console Vertex AI Search and Conversation.
- Leggi e accetta i Termini di servizio, quindi fai clic su Continua e attiva l'API.
4. Crea un'app di ricerca per dati non strutturati da Cloud Storage
- Nella console Google Cloud, vai alla pagina Search & Conversation. Fai clic su Nuova app.
- Nel riquadro Seleziona il tipo di app, scegli Cerca.
- Assicurati che le funzionalità Enterprise siano abilitate per ricevere risposte estratte testualmente dai tuoi documenti.
- Assicurati che l'opzione Funzionalità LLM avanzate sia abilitata per ricevere il riepilogo della ricerca.
- Nel campo Nome app, inserisci un nome per l'app. L'ID app è riportato sotto il nome dell'app.
- Seleziona globale (Globale) come località per la tua app, poi fai clic su Continua.
- Nel riquadro Datastore, fai clic su Crea nuovo datastore.
- Nel riquadro Seleziona un'origine dati, scegli Cloud Storage.
- Nel riquadro Importa dati da GCS, assicurati che sia selezionata l'opzione Cartella.
- Nel campo gs://, inserisci il seguente valore:
cloud-samples-data/gen-app-builder/search/stanford-cs-224. Questo bucket Cloud Storage contiene file PDF da una cartella Cloud Storage disponibile pubblicamente a scopo di test. - Seleziona Documenti non strutturati, quindi fai clic su Continua.
- Nel riquadro Configura il datastore, seleziona globale (Globale) come località per il datastore.
- Inserisci un nome per il tuo datastore. Utilizzerai questo nome più avanti in questo codelab durante il deployment del servizio Cloud Run. Fai clic su Crea.
- Nel riquadro Datastore, seleziona il nuovo datastore e fai clic su Crea.
- Nella pagina Dati del datastore, fai clic sulla scheda Attività per visualizzare lo stato di importazione dei dati. Il messaggio Importazione completata viene visualizzato nella colonna stato al termine del processo di importazione.
- Fai clic sulla scheda Documenti per visualizzare il numero di documenti importati.
- Nel menu di navigazione, fai clic su Anteprima per eseguire il test dell'app di ricerca.
- Nella barra di ricerca, inserisci
final lab due date, quindi premi Invio per visualizzare i risultati.
5. Crea il servizio Cloud Run
In questa sezione creerai un servizio Cloud Run che accetta una stringa di query per i termini di ricerca. Questo servizio utilizzerà le librerie client Python per l'API Discovery Engine. Per altri runtime supportati, puoi visualizzare l'elenco qui.
Crea il codice sorgente per la funzione
Innanzitutto, crea una directory e passa a questa directory.
mkdir docs-search-service-python && cd $_
Poi, crea un file requirements.txt con i seguenti contenuti:
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
Quindi, crea un file sorgente main.py con i seguenti contenuti:
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)))
Imposta le variabili di ambiente
In questo codice creerai alcune variabili di ambiente per migliorare la leggibilità dei comandi gcloud utilizzati in questo codelab.
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>
Crea un account di servizio
Questo codelab ti mostra come creare un service account per il servizio Cloud Run da utilizzare per accedere all'API Vertex AI Search.
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'
Esegui il deployment del servizio Cloud Run
Ora puoi utilizzare un deployment basato sul codice sorgente per creare automaticamente il container del servizio Cloud Run.
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
e poi puoi salvare l'URL Cloud Run come variabile di ambiente da utilizzare in un secondo momento.
ENDPOINT_URL="$(gcloud run services describe $SERVICE_NAME --region=$SERVICE_REGION --format='value(status.url)')"
6. Chiama il servizio Cloud Run
Ora puoi chiamare il servizio Cloud Run con una stringa di query per chiedere What is the final lab due date?.
curl -H "Authorization: bearer $(gcloud auth print-identity-token)" "$ENDPOINT_URL?searchQuery=what+is+the+final+lab+due+date"
I risultati dovrebbero essere simili all'output di esempio riportato di seguito:
The final lab is due on Tuesday, March 21 at 4:30 PM [1].
7. Complimenti!
Complimenti per aver completato il codelab.
Ti consigliamo di consultare la documentazione su Vertex AI Search e Cloud Run.
Argomenti trattati
- Come creare un'app di ricerca Vertex AI per dati non strutturati come PDF importati da un bucket Cloud Storage
- Come creare un endpoint HTTP utilizzando il deployment basato sul codice sorgente in Cloud Run
- Come creare un service account seguendo il principio del privilegio minimo per il servizio Cloud Run da utilizzare per eseguire query sull'app Vertex AI Search.
- Come richiamare il servizio Cloud Run per eseguire query sull'app di ricerca Vertex AI
8. Libera spazio
Per evitare addebiti involontari (ad esempio, se questa funzione Cloud Functions viene richiamata inavvertitamente più volte rispetto a l'allocazione mensile di richiami di Cloud Functions nel livello senza costi), puoi eliminare la funzione Cloud Functions o il progetto creato nel passaggio 2.
Per eliminare la funzione Cloud Functions, vai alla console Cloud all'indirizzo https://console.cloud.google.com/functions/ ed elimina la funzione imagen_vqa (o $FUNCTION_NAME se hai utilizzato un nome diverso).
Se scegli di eliminare l'intero progetto, puoi andare all'indirizzo https://console.cloud.google.com/cloud-resource-manager, selezionare il progetto creato nel passaggio 2 e scegliere Elimina. Se elimini il progetto, dovrai cambiare progetto in Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list.