1. Introduzione
Panoramica
Vertex AI Search and Conversation (precedentemente noto come Generative AI App Builder) consente agli sviluppatori di sfruttare la potenza dei modelli di base di Google, delle competenze di ricerca e delle tecnologie di IA conversazionale per creare applicazioni di IA generativa di livello enterprise. Questo codelab è incentrato sull'utilizzo di Vertex AI Search, che consente di creare un'app di ricerca di qualità Google basata sui tuoi dati e incorporare una barra di ricerca nelle pagine web o nell'app.
Cloud Run è una piattaforma di computing gestita che consente di eseguire i 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 basato sull'origine.
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 in file PDF in un bucket Cloud Storage. Scopri di più sull'importazione di contenuti non strutturati qui.
Cosa imparerai a fare
- Creare un'app Vertex AI Search per dati non strutturati come PDF importati da un bucket Cloud Storage
- Creare un endpoint HTTP utilizzando il deployment basato sull'origine in Cloud Run
- Come creare un account di servizio 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 Vertex AI Search
2. Configurazione e requisiti
Prerequisiti
- Hai eseguito l'accesso alla console Cloud.
- Hai già eseguito il deployment di un servizio Cloud Run. Ad esempio, per iniziare, puoi seguire la guida rapida al deployment di un servizio web dal codice sorgente.
Attiva Cloud Shell
- Dalla console Cloud, fai clic su Attiva Cloud Shell .
Se è la prima volta che avvii Cloud Shell, ti verrà mostrata una schermata intermedia che descrive di cosa si tratta. Se ti è stata presentata una schermata intermedia, fai clic su Continua.
Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.
Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, del lavoro in questo codelab può essere svolto con un browser.
Una volta stabilita la connessione a Cloud Shell, dovresti vedere che hai eseguito l'autenticazione e che 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 confermare che il comando gcloud è a conoscenza del 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.
Quindi, 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 sezione Ricerca e Pagina Conversazione. Fai clic su Nuova app.
- Nel riquadro Seleziona il tipo di app, scegli Cerca.
- Assicurati che l'opzione Funzionalità aziendali sia attivata per ricevere risposte estratte testualmente dai tuoi documenti.
- Assicurati che l'opzione Funzionalità LLM avanzate sia attivata per ricevere il riepilogo della ricerca.
- Nel campo Nome app, inserisci un nome per l'app. Il tuo ID app viene visualizzato sotto il nome dell'app.
- Seleziona globale (globale) come località dell'app, quindi 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 tuo datastore, seleziona globale (globale) come località del datastore.
- Inserisci un nome per il datastore. Utilizzerai questo nome più avanti in questo codelab quando esegui il deployment del tuo 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 dell'importazione dati. Importazione completata viene visualizzata 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 testare l'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 tuoi 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
Per prima cosa, crea una directory e accedi a quella directory.
mkdir docs-search-service-python && cd $_
Quindi, 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
A questo punto, crea un file di origine 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)))
Configura 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>
Creare un account di servizio
Questo codelab mostra come creare un account di servizio 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 sull'origine per containerizzare automaticamente il tuo 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 salvare l'URL di Cloud Run come variabile di ambiente da utilizzare in seguito.
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 tuo 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 seguente:
The final lab is due on Tuesday, March 21 at 4:30 PM [1].
7. Complimenti!
Complimenti per aver completato il codelab.
Consigliamo di consultare la documentazione su Vertex AI Search e Cloud Run.
Argomenti trattati
- Creare un'app Vertex AI Search per dati non strutturati come PDF importati da un bucket Cloud Storage
- Creare un endpoint HTTP utilizzando il deployment basato sull'origine in Cloud Run
- Come creare un account di servizio 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 Vertex AI Search
8. Esegui la pulizia
Per evitare addebiti involontari, ad esempio se questa funzione Cloud Functions viene richiamata inavvertitamente più volte rispetto all'allocazione mensile dei richiami della funzione Cloud Functions nel livello senza costi, puoi eliminare la funzione Cloud Functions o eliminare il progetto che hai creato nel passaggio 2.
Per eliminare la funzione Cloud Functions, vai alla console Cloud della funzione Cloud Functions all'indirizzo https://console.cloud.google.com/functions/ ed elimina la funzione imagen_vqa (o $FUNCTION_NAME nel caso in cui tu abbia 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 che hai creato nel passaggio 2 e scegliere Elimina. Se elimini il progetto, dovrai modificarli in Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list
.