Accedi ai modelli Vertex AI da un flusso di lavoro


L'IA generativa su Vertex AI (nota anche come genAI o IA generativa) consente di accedere ai modelli di IA generativa di Google per molteplici modalità (testo, codice, immagini, voce). Puoi testare e ottimizzare questi modelli linguistici di grandi dimensioni (LLM) e poi eseguirne il deployment per utilizzarli nelle tue applicazioni basate sull'AI. Per maggiori informazioni, consulta la Panoramica di Generative AI su Vertex AI.

Vertex AI offre una varietà di modelli di base di IA generativa accessibili tramite un'API, inclusi i modelli utilizzati nei seguenti esempi:

  • Gemini Pro è progettato per gestire attività in linguaggio naturale, testo e chat di codice in più passaggi e generazione di codice.
  • Gemini Pro Vision supporta i prompt multimodali. Puoi includere testo, immagini e video nelle richieste di prompt e ricevere risposte testuali o in codice.
  • Pathways Language Model 2 (PaLM 2) per il testo è perfezionato per attività linguistiche come classificazione, riepilogo ed estrazione delle entità.

Ogni modello è esposto tramite un endpoint del publisher specifico per il tuo progetto Google Cloud, quindi non è necessario eseguire il deployment del modello di base a meno che tu non debba ottimizzarlo per un caso d'uso specifico. Puoi inviare una richiesta all'endpoint dell'editore. Un prompt è una richiesta in linguaggio naturale inviata a un LLM per generare una risposta.

Questo tutorial illustra quattro flussi di lavoro che generano risposte dai modelli Vertex AI inviando prompt di testo tramite richieste POST HTTP agli endpoint del publisher. Tieni presente che puoi eseguire il deployment ed eseguire ogni flusso di lavoro in modo indipendente l'uno dall'altro.

Obiettivi

In questo tutorial imparerai a:

  1. Abilita le API Vertex AI e Workflows e concedi il ruolo Utente Vertex AI (roles/aiplatform.user) al tuo account di servizio. Questo ruolo consente l'accesso alla maggior parte delle funzionalità di Vertex AI. Per saperne di più sulla configurazione di Vertex AI, consulta Configurazione su Google Cloud.
  2. Esegui il deployment e un flusso di lavoro che richieda a un modello Vertex AI (Gemini Pro Vision) di descrivere un'immagine disponibile pubblicamente tramite Cloud Storage. Per maggiori informazioni, consulta Rendere pubblici i dati.
  3. Esegui il deployment e un flusso di lavoro che mostra un elenco di paesi in parallelo e che richieda a un modello Vertex AI (Gemini Pro) di generare e restituire le cronologie dei paesi. L'utilizzo di rami paralleli consente di ridurre il tempo totale di esecuzione avviando contemporaneamente le chiamate all'LLM e attendendo che siano completate tutte prima di combinare i risultati. Per maggiori informazioni, consulta Eseguire i passaggi del flusso di lavoro in parallelo.
  4. Esegui il deployment di un flusso di lavoro simile a quello precedente; tuttavia, chiedi a un modello Vertex AI (PaLM 2 per il testo) di generare e restituire le cronologie dei paesi. Per scoprire di più su come scegliere un modello, consulta Informazioni del modello.
  5. Esegui il deployment di un flusso di lavoro che può riassumere un documento di grandi dimensioni. Poiché esiste un limite alla finestra di contesto che imposta quanto indietro nel tempo il modello viene visualizzato durante l'addestramento (e per le previsioni), il flusso di lavoro divide il documento in parti più piccole e poi chiede a un modello Vertex AI (Gemini Pro) di riassumere ogni parte in parallelo. Per ulteriori informazioni, consulta Prompt di riassunto e Orizzonte di previsione, finestra di contesto e finestra di previsione.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

Prima di provare gli esempi di questo tutorial, assicurati di aver completato quanto segue.

Console

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Vertex AI and Workflows.

    Abilita le API

  5. Crea un account di servizio:

    1. Nella console Google Cloud, vai alla pagina Crea account di servizio.

      Vai a Crea account di servizio
    2. Seleziona il progetto.
    3. Nel campo Nome account di servizio, inserisci un nome. La console Google Cloud compila il campo ID account di servizio in base a questo nome.

      Nel campo Descrizione account di servizio, inserisci una descrizione. Ad esempio, Service account for quickstart.

    4. Fai clic su Crea e continua.
    5. Concedi il ruolo Vertex AI > Vertex AI User all'account di servizio.

      Per concedere il ruolo, trova l'elenco Seleziona un ruolo e scegli Vertex AI > Vertex AI User.

    6. Fai clic su Continua.
    7. Fai clic su Fine per completare la creazione dell'account di servizio.

  6. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  7. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  8. Abilita le API Vertex AI and Workflows.

    Abilita le API

  9. Crea un account di servizio:

    1. Nella console Google Cloud, vai alla pagina Crea account di servizio.

      Vai a Crea account di servizio
    2. Seleziona il progetto.
    3. Nel campo Nome account di servizio, inserisci un nome. La console Google Cloud compila il campo ID account di servizio in base a questo nome.

      Nel campo Descrizione account di servizio, inserisci una descrizione. Ad esempio, Service account for quickstart.

    4. Fai clic su Crea e continua.
    5. Concedi il ruolo Vertex AI > Vertex AI User all'account di servizio.

      Per concedere il ruolo, trova l'elenco Seleziona un ruolo e scegli Vertex AI > Vertex AI User.

    6. Fai clic su Continua.
    7. Fai clic su Fine per completare la creazione dell'account di servizio.

gcloud

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  4. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Abilita le API Vertex AI and Workflows.

    gcloud services enable aiplatform.googleapis.com workflows.googleapis.com
  7. Configura l'autenticazione:

    1. Crea l'account di servizio:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Sostituisci SERVICE_ACCOUNT_NAME con un nome per l'account di servizio.

    2. Concedi il ruolo IAM roles/aiplatform.user all'account di servizio:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/aiplatform.user

      Sostituisci quanto segue:

      • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio.
      • PROJECT_ID: l'ID progetto in cui hai creato l'account di servizio
  8. Installa Google Cloud CLI.
  9. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  10. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  11. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  12. Abilita le API Vertex AI and Workflows.

    gcloud services enable aiplatform.googleapis.com workflows.googleapis.com
  13. Configura l'autenticazione:

    1. Crea l'account di servizio:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Sostituisci SERVICE_ACCOUNT_NAME con un nome per l'account di servizio.

    2. Concedi il ruolo IAM roles/aiplatform.user all'account di servizio:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/aiplatform.user

      Sostituisci quanto segue:

      • SERVICE_ACCOUNT_NAME: il nome dell'account di servizio.
      • PROJECT_ID: l'ID progetto in cui hai creato l'account di servizio

Esegui il deployment di un flusso di lavoro che descriva un'immagine (Gemini Pro Vision)

Esegui il deployment di un flusso di lavoro che invia una richiesta http.post a un endpoint del publisher Gemini Pro Vision.

Il flusso di lavoro fornisce un prompt di testo e l'URI di un'immagine disponibile pubblicamente in un bucket Cloud Storage. Puoi visualizzare l'immagine e visualizzare i dettagli dell'oggetto nella console Google Cloud.

Il flusso di lavoro restituisce una descrizione dell'immagine dalla risposta generata dal modello.

Per ulteriori informazioni sui parametri del corpo della richiesta HTTP utilizzati quando si richiede l'LLM e gli elementi del corpo della risposta, consulta la documentazione di riferimento dell'API Gemini.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

  2. Fai clic su Crea.

  3. Inserisci un nome per il nuovo flusso di lavoro: describe-image.

  4. Nell'elenco Regione, seleziona us-central1 (Iowa).

  5. Per Account di servizio, seleziona quello creato in precedenza.

  6. Tocca Avanti.

  7. Nell'editor del flusso di lavoro, inserisci la definizione seguente per il flusso di lavoro:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "gemini-1.0-pro-vision"
                - method: "generateContent"
                - llm_api_endpoint: ${"https://" + location + "-aiplatform.googleapis.com" + "/v1/projects/" + project + "/locations/" + location + "/publishers/google/models/" + model + ":" + method}
                - text_combined: ""
        - ask_llm:
            call: http.post
            args:
                url: ${llm_api_endpoint}
                auth:
                    type: OAuth2
                body:
                    contents:
                        role: user
                        parts:
                        - fileData:
                            mimeType: image/jpeg
                            fileUri: ${args.image_url}
                        - text: Describe this picture in detail
                    generation_config:
                        temperature: 0.4
                        max_output_tokens: 2048
                        top_p: 1
                        top_k: 32
            result: llm_response
        - return_result:
            return:
                image_url: ${args.image_url}
                image_description: ${llm_response.body.candidates[0].content.parts[0].text}

    Tieni presente che, a seconda del modello utilizzato, potrebbe essere necessario rimuovere eventuali spazi vuoti non necessari dalla risposta.

  8. Fai clic su Esegui il deployment.

gcloud

  1. Crea un file di codice sorgente per il tuo flusso di lavoro:

    touch describe-image.yaml
    
  2. In un editor di testo, copia il seguente flusso di lavoro nel file di codice sorgente:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "gemini-1.0-pro-vision"
                - method: "generateContent"
                - llm_api_endpoint: ${"https://" + location + "-aiplatform.googleapis.com" + "/v1/projects/" + project + "/locations/" + location + "/publishers/google/models/" + model + ":" + method}
                - text_combined: ""
        - ask_llm:
            call: http.post
            args:
                url: ${llm_api_endpoint}
                auth:
                    type: OAuth2
                body:
                    contents:
                        role: user
                        parts:
                        - fileData:
                            mimeType: image/jpeg
                            fileUri: ${args.image_url}
                        - text: Describe this picture in detail
                    generation_config:
                        temperature: 0.4
                        max_output_tokens: 2048
                        top_p: 1
                        top_k: 32
            result: llm_response
        - return_result:
            return:
                image_url: ${args.image_url}
                image_description: ${llm_response.body.candidates[0].content.parts[0].text}

    Tieni presente che, a seconda del modello utilizzato, potrebbe essere necessario rimuovere eventuali spazi vuoti non necessari dalla risposta.

  3. Esegui il deployment del flusso di lavoro inserendo il seguente comando:

    gcloud workflows deploy describe-image \
        --source=describe-image.yaml \
        --location=us-central1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Esegui il flusso di lavoro

L'esecuzione di un flusso di lavoro esegue l'attuale definizione del flusso di lavoro associata al flusso di lavoro.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

  2. Nella pagina Workflows, seleziona il flusso di lavoro describe-image per andare alla relativa pagina dei dettagli.

  3. Nella pagina Dettagli flusso di lavoro, fai clic su Esegui.

  4. In Input, inserisci quanto segue:

    {"image_url":"gs://generativeai-downloads/images/scones.jpg"}
  5. Fai di nuovo clic su Execute (Esegui).

  6. Visualizza i risultati del flusso di lavoro nel riquadro Output.

    L'output dovrebbe essere simile al seguente:

    {
      "image_description": "There are three pink peony flowers on the right side of the picture[]...]There is a white napkin on the table.",
      "image_url": "gs://generativeai-downloads/images/scones.jpg"
    }

gcloud

  1. Apri un terminale.

  2. Esegui il flusso di lavoro:

    gcloud workflows run describe-image \
        --data='{"image_url":"gs://generativeai-downloads/images/scones.jpg"}'

    I risultati dell'esecuzione dovrebbero essere simili ai seguenti:

      Waiting for execution [258b530e-a093-46d7-a4ff-cbf5392273c0] to complete...done.
      argument: '{"image_url":"gs://generativeai-downloads/images/scones.jpg"}'
      createTime: '2024-02-09T13:59:32.166409938Z'
      duration: 4.174708484s
      endTime: '2024-02-09T13:59:36.341118422Z'
      name: projects/1051295516635/locations/us-central1/workflows/describe-image/executions/258b530e-a093-46d7-a4ff-cbf5392273c0
      result: "{\"image_description\":\"The picture shows a rustic table with a white surface,\
        \ on which there are several scones with blueberries, as well as two cups of coffee\
        [...]
        \ on the table. The background of the table is a dark blue color.\",\"image_url\"\
        :\"gs://generativeai-downloads/images/scones.jpg\"}"
      startTime: '2024-02-09T13:59:32.166409938Z'
      state: SUCCEEDED

Esegui il deployment di un flusso di lavoro che generi le cronologie dei paesi (Gemini Pro)

Esegui il deployment di un flusso di lavoro che si snoda attraverso un elenco di input di paesi in parallel, effettuando una richiesta http.post a un endpoint del publisher Gemini Pro.

Il flusso di lavoro restituisce le cronologie dei paesi generate dal modello, combinandole in una mappa.

Per ulteriori informazioni sui parametri del corpo della richiesta HTTP utilizzati quando si richiede l'LLM e gli elementi del corpo della risposta, consulta la documentazione di riferimento dell'API Gemini.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

  2. Fai clic su Crea.

  3. Inserisci un nome per il nuovo flusso di lavoro: gemini-pro-country-histories.

  4. Nell'elenco Regione, seleziona us-central1 (Iowa).

  5. Per Account di servizio, seleziona quello creato in precedenza.

  6. Tocca Avanti.

  7. Nell'editor del flusso di lavoro, inserisci la definizione seguente per il flusso di lavoro:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "gemini-1.0-pro"
                - method: "generateContent"
                - llm_api_endpoint: ${"https://" + location + "-aiplatform.googleapis.com" + "/v1/projects/" + project + "/locations/" + location + "/publishers/google/models/" + model + ":" + method}
                - histories: {}
        - loop_over_countries:
            parallel:
                shared: [histories]
                for:
                    value: country
                    in: ${args.countries}
                    steps:
                        - ask_llm:
                            call: http.post
                            args:
                                url: ${llm_api_endpoint}
                                auth:
                                    type: OAuth2
                                body:
                                    contents:
                                        role: "USER"
                                        parts:
                                            text: ${"Can you tell me about the history of " + country}
                                    generation_config:
                                        temperature: 0.5
                                        max_output_tokens: 2048
                                        top_p: 0.8
                                        top_k: 40
                            result: llm_response
                        - add_to_histories:
                            assign:
                                - histories[country]: ${llm_response.body.candidates[0].content.parts[0].text}
        - return_result:
            return: ${histories}
  8. Fai clic su Esegui il deployment.

gcloud

  1. Crea un file di codice sorgente per il tuo flusso di lavoro:

    touch gemini-pro-country-histories.yaml
    
  2. In un editor di testo, copia il seguente flusso di lavoro nel file di codice sorgente:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "gemini-1.0-pro"
                - method: "generateContent"
                - llm_api_endpoint: ${"https://" + location + "-aiplatform.googleapis.com" + "/v1/projects/" + project + "/locations/" + location + "/publishers/google/models/" + model + ":" + method}
                - histories: {}
        - loop_over_countries:
            parallel:
                shared: [histories]
                for:
                    value: country
                    in: ${args.countries}
                    steps:
                        - ask_llm:
                            call: http.post
                            args:
                                url: ${llm_api_endpoint}
                                auth:
                                    type: OAuth2
                                body:
                                    contents:
                                        role: "USER"
                                        parts:
                                            text: ${"Can you tell me about the history of " + country}
                                    generation_config:
                                        temperature: 0.5
                                        max_output_tokens: 2048
                                        top_p: 0.8
                                        top_k: 40
                            result: llm_response
                        - add_to_histories:
                            assign:
                                - histories[country]: ${llm_response.body.candidates[0].content.parts[0].text}
        - return_result:
            return: ${histories}
  3. Esegui il deployment del flusso di lavoro inserendo il seguente comando:

    gcloud workflows deploy gemini-pro-country-histories \
        --source=gemini-pro-country-histories.yaml \
        --location=us-central1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Esegui il flusso di lavoro

L'esecuzione di un flusso di lavoro esegue l'attuale definizione del flusso di lavoro associata al flusso di lavoro.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

  2. Nella pagina Flussi di lavoro, seleziona il flusso di lavoro gemini-pro-country-histories per andare alla relativa pagina dei dettagli.

  3. Nella pagina Dettagli flusso di lavoro, fai clic su Esegui.

  4. In Input, inserisci quanto segue:

    {"countries":["Argentina", "Bhutan", "Cyprus", "Denmark", "Ethiopia"]}
  5. Fai di nuovo clic su Execute (Esegui).

  6. Visualizza i risultati del flusso di lavoro nel riquadro Output.

    L'output dovrebbe essere simile al seguente:

    {
      "Argentina": "The history of Argentina is a complex and fascinating one, marked by periods of prosperity and decline, political [...]
      "Bhutan": "The history of Bhutan is a rich and fascinating one, dating back to the 7th century AD. Here is a brief overview: [...]
      "Cyprus": "The history of Cyprus is a long and complex one, spanning over 10,000 years. The island has been ruled by a succession [...]
      "Denmark": "1. **Prehistory and Early History (c. 12,000 BC - 800 AD)**\\n   - The earliest evidence of human habitation in Denmark [...]
      "Ethiopia": "The history of Ethiopia is a long and complex one, stretching back to the earliest human civilizations. The country is [...]
    }

gcloud

  1. Apri un terminale.

  2. Esegui il flusso di lavoro:

    gcloud workflows run gemini-pro-country-histories \
        --data='{"countries":["Argentina", "Bhutan", "Cyprus", "Denmark", "Ethiopia"]}' \
        --location=us-central1

    I risultati dell'esecuzione dovrebbero essere simili ai seguenti:

      Waiting for execution [7ae1ccf1-29b7-4c2c-99ec-7a12ae289391] to complete...done.
      argument: '{"countries":["Argentina","Bhutan","Cyprus","Denmark","Ethiopia"]}'
      createTime: '2024-02-09T16:25:16.742349156Z'
      duration: 12.075968673s
      endTime: '2024-02-09T16:25:28.818317829Z'
      name: projects/1051295516635/locations/us-central1/workflows/gemini-pro-country-histories/executions/7ae1ccf1-29b7-4c2c-99ec-7a12ae289391
      result: "{\"Argentina\":\"The history of Argentina can be traced back to the arrival\
        [...]
        n* 2015: Argentina elects Mauricio Macri as president.\",\"Bhutan\":\"The history\
        [...]
        \ natural beauty, ancient monasteries, and friendly people.\",\"Cyprus\":\"The history\
        [...]
        ,\"Denmark\":\"The history of Denmark can be traced back to the Stone Age, with\
        [...]
        \ a high standard of living.\",\"Ethiopia\":\"The history of Ethiopia is long and\
        [...]
      startTime: '2024-02-09T16:25:16.742349156Z'
      state: SUCCEEDED

Esegui il deployment di un flusso di lavoro che generi cronologie dei paesi (PaLM 2 per il testo)

Potresti non voler utilizzare Gemini Pro come modello. L'esempio seguente utilizza un flusso di lavoro simile a quello precedente; tuttavia, la richiesta http.post viene effettuata a un PaLM 2 per l'endpoint dell'editore di testi.

Per ulteriori informazioni sui parametri del corpo della richiesta HTTP utilizzati quando si richiede l'LLM e gli elementi del corpo della risposta, consulta la documentazione di riferimento PaLM 2 per l'API di testo.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

  2. Fai clic su Crea.

  3. Inserisci un nome per il nuovo flusso di lavoro: text-bison-country-histories.

  4. Nell'elenco Regione, seleziona us-central1 (Iowa).

  5. Per Account di servizio, seleziona quello creato in precedenza.

  6. Tocca Avanti.

  7. Nell'editor del flusso di lavoro, inserisci la definizione seguente per il flusso di lavoro:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "text-bison"
                - method: "predict"
                - llm_api_endpoint: ${"https://" + location + "-aiplatform.googleapis.com" + "/v1/projects/" + project + "/locations/" + location + "/publishers/google/models/" + model + ":" + method}
                - histories: {}
        - loop_over_countries:
            parallel:
                shared: [histories]
                for:
                    value: country
                    in: ${args.countries}
                    steps:
                        - ask_llm:
                            call: http.post
                            args:
                                url: ${llm_api_endpoint}
                                auth:
                                    type: OAuth2
                                body:
                                    instances:
                                        - prompt: '${"Can you tell me about the history of " + country}'
                                    parameters:
                                        temperature: 0.5
                                        maxOutputTokens: 2048
                                        topP: 0.8
                                        topK: 40
                            result: llm_response
                        - add_to_histories:
                            assign:
                                - history: ${llm_response.body.predictions[0].content}
                                # Remove leading whitespace from start of text
                                - history: ${text.substring(history, 1, len(history))}
                                - histories[country]: ${history}
        - return_result:
            return: ${histories}

    Tieni presente che, a seconda del modello utilizzato, potrebbe essere necessario rimuovere eventuali spazi vuoti non necessari dalla risposta.

  8. Fai clic su Esegui il deployment.

gcloud

  1. Crea un file di codice sorgente per il tuo flusso di lavoro:

    touch text-bison-country-histories.yaml
    
  2. In un editor di testo, copia il seguente flusso di lavoro nel file di codice sorgente:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "text-bison"
                - method: "predict"
                - llm_api_endpoint: ${"https://" + location + "-aiplatform.googleapis.com" + "/v1/projects/" + project + "/locations/" + location + "/publishers/google/models/" + model + ":" + method}
                - histories: {}
        - loop_over_countries:
            parallel:
                shared: [histories]
                for:
                    value: country
                    in: ${args.countries}
                    steps:
                        - ask_llm:
                            call: http.post
                            args:
                                url: ${llm_api_endpoint}
                                auth:
                                    type: OAuth2
                                body:
                                    instances:
                                        - prompt: '${"Can you tell me about the history of " + country}'
                                    parameters:
                                        temperature: 0.5
                                        maxOutputTokens: 2048
                                        topP: 0.8
                                        topK: 40
                            result: llm_response
                        - add_to_histories:
                            assign:
                                - history: ${llm_response.body.predictions[0].content}
                                # Remove leading whitespace from start of text
                                - history: ${text.substring(history, 1, len(history))}
                                - histories[country]: ${history}
        - return_result:
            return: ${histories}

    Tieni presente che, a seconda del modello utilizzato, potrebbe essere necessario rimuovere eventuali spazi vuoti non necessari dalla risposta.

  3. Esegui il deployment del flusso di lavoro inserendo il seguente comando:

    gcloud workflows deploy text-bison-country-histories \
        --source=text-bison-country-histories.yaml \
        --location=us-central1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Esegui il deployment di un flusso di lavoro che riassume un documento di grandi dimensioni (Gemini Pro)

Esegui il deployment di un flusso di lavoro che suddivide un documento di grandi dimensioni in parti più piccole, effettuando le richieste http.post a un endpoint del publisher Gemini Pro in parallel, in modo che il modello possa riassumere ogni parte contemporaneamente. Il flusso di lavoro finalmente combina tutti i riassunti parziali in uno completo.

Per ulteriori informazioni sui parametri del corpo della richiesta HTTP utilizzati quando si richiede l'LLM e gli elementi del corpo della risposta, consulta la documentazione di riferimento dell'API Gemini.

La definizione del flusso di lavoro presuppone che tu abbia creato un bucket Cloud Storage in cui puoi caricare un file di testo. Per saperne di più sul connettore Workflows (googleapis.storage.v1.objects.get) utilizzato per recuperare oggetti dal bucket Cloud Storage, consulta la documentazione di riferimento sui connettori.

Dopo aver eseguito il deployment del flusso di lavoro, puoi eseguirlo creando un trigger Eventarc appropriato e caricando un file nel bucket. Per saperne di più, consulta Instradare gli eventi Cloud Storage a Workflows. Tieni presente che è necessario abilitare API aggiuntive ed è necessario concedere ruoli aggiuntivi, inclusa la concessione al tuo account di servizio del ruolo Utente oggetti Storage (roles/storage.objectUser) che supporta l'utilizzo degli oggetti Cloud Storage. Per ulteriori informazioni, consulta la sezione Preparare la creazione di un trigger.

Console

  1. Nella console Google Cloud, vai alla pagina Flussi di lavoro.

    Vai a Workflows

  2. Fai clic su Crea.

  3. Inserisci un nome per il nuovo flusso di lavoro: gemini-pro-summaries.

  4. Nell'elenco Regione, seleziona us-central1 (Iowa).

  5. Per Account di servizio, seleziona quello creato in precedenza.

  6. Tocca Avanti.

  7. Nell'editor del flusso di lavoro, inserisci la definizione seguente per il flusso di lavoro:

    main:
        params: [input]
        steps:
        - assign_file_vars:
            assign:
                - file_size: ${int(input.data.size)}
                - chunk_size: 64000
                - n_chunks: ${int(file_size / chunk_size)}
                - summaries: []
                - all_summaries_concatenated: ""
        - loop_over_chunks:
            parallel:
                shared: [summaries]
                for:
                    value: chunk_idx
                    range: ${[0, n_chunks]}
                    steps:
                        - assign_bounds:
                            assign:
                                - lower_bound: ${chunk_idx * chunk_size}
                                - upper_bound: ${(chunk_idx + 1) * chunk_size}
                                - summaries: ${list.concat(summaries, "")}
                        - dump_file_content:
                            call: http.get
                            args:
                                url: ${"https://storage.googleapis.com/storage/v1/b/" + input.data.bucket + "/o/" + input.data.name + "?alt=media"}
                                auth:
                                    type: OAuth2
                                headers:
                                    Range: ${"bytes=" + lower_bound + "-" + upper_bound}
                            result: file_content
                        - assign_chunk:
                            assign:
                                - chunk: ${file_content.body}
                        - generate_chunk_summary:
                            call: ask_gemini_for_summary
                            args:
                                textToSummarize: ${chunk}
                            result: summary
                        - assign_summary:
                            assign:
                                - summaries[chunk_idx]: ${summary}
        - concat_summaries:
            for:
                value: summary
                in: ${summaries}
                steps:
                    - append_summaries:
                        assign:
                            - all_summaries_concatenated: ${all_summaries_concatenated + "\n" + summary}
        - reduce_summary:
            call: ask_gemini_for_summary
            args:
                textToSummarize: ${all_summaries_concatenated}
            result: final_summary
        - return_result:
            return:
                - summaries: ${summaries}
                - final_summary: ${final_summary}
    
    ask_gemini_for_summary:
        params: [textToSummarize]
        steps:
            - init:
                assign:
                    - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - location: "us-central1"
                    - model: "gemini-pro"
                    - summary: ""
            - call_gemini:
                call: http.post
                args:
                    url: ${"https://" + location + "-aiplatform.googleapis.com" + "/v1/projects/" + project + "/locations/" + location + "/publishers/google/models/" + model + ":generateContent"}
                    auth:
                        type: OAuth2
                    body:
                        contents:
                            role: user
                            parts:
                                - text: '${"Make a summary of the following text:\n\n" + textToSummarize}'
                        generation_config:
                            temperature: 0.2
                            maxOutputTokens: 2000
                            topK: 10
                            topP: 0.9
                result: gemini_response
            # Sometimes, there's no text, for example, due to safety settings
            - check_text_exists:
                switch:
                - condition: ${not("parts" in gemini_response.body.candidates[0].content)}
                  next: return_summary
            - extract_text:
                assign:
                    - summary: ${gemini_response.body.candidates[0].content.parts[0].text}
            - return_summary:
                return: ${summary}
  8. Fai clic su Esegui il deployment.

gcloud

  1. Crea un file di codice sorgente per il tuo flusso di lavoro:

    touch gemini-pro-summaries.yaml
    
  2. In un editor di testo, copia il seguente flusso di lavoro nel file di codice sorgente:

    main:
        params: [input]
        steps:
        - assign_file_vars:
            assign:
                - file_size: ${int(input.data.size)}
                - chunk_size: 64000
                - n_chunks: ${int(file_size / chunk_size)}
                - summaries: []
                - all_summaries_concatenated: ""
        - loop_over_chunks:
            parallel:
                shared: [summaries]
                for:
                    value: chunk_idx
                    range: ${[0, n_chunks]}
                    steps:
                        - assign_bounds:
                            assign:
                                - lower_bound: ${chunk_idx * chunk_size}
                                - upper_bound: ${(chunk_idx + 1) * chunk_size}
                                - summaries: ${list.concat(summaries, "")}
                        - dump_file_content:
                            call: http.get
                            args:
                                url: ${"https://storage.googleapis.com/storage/v1/b/" + input.data.bucket + "/o/" + input.data.name + "?alt=media"}
                                auth:
                                    type: OAuth2
                                headers:
                                    Range: ${"bytes=" + lower_bound + "-" + upper_bound}
                            result: file_content
                        - assign_chunk:
                            assign:
                                - chunk: ${file_content.body}
                        - generate_chunk_summary:
                            call: ask_gemini_for_summary
                            args:
                                textToSummarize: ${chunk}
                            result: summary
                        - assign_summary:
                            assign:
                                - summaries[chunk_idx]: ${summary}
        - concat_summaries:
            for:
                value: summary
                in: ${summaries}
                steps:
                    - append_summaries:
                        assign:
                            - all_summaries_concatenated: ${all_summaries_concatenated + "\n" + summary}
        - reduce_summary:
            call: ask_gemini_for_summary
            args:
                textToSummarize: ${all_summaries_concatenated}
            result: final_summary
        - return_result:
            return:
                - summaries: ${summaries}
                - final_summary: ${final_summary}
    
    ask_gemini_for_summary:
        params: [textToSummarize]
        steps:
            - init:
                assign:
                    - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - location: "us-central1"
                    - model: "gemini-pro"
                    - summary: ""
            - call_gemini:
                call: http.post
                args:
                    url: ${"https://" + location + "-aiplatform.googleapis.com" + "/v1/projects/" + project + "/locations/" + location + "/publishers/google/models/" + model + ":generateContent"}
                    auth:
                        type: OAuth2
                    body:
                        contents:
                            role: user
                            parts:
                                - text: '${"Make a summary of the following text:\n\n" + textToSummarize}'
                        generation_config:
                            temperature: 0.2
                            maxOutputTokens: 2000
                            topK: 10
                            topP: 0.9
                result: gemini_response
            # Sometimes, there's no text, for example, due to safety settings
            - check_text_exists:
                switch:
                - condition: ${not("parts" in gemini_response.body.candidates[0].content)}
                  next: return_summary
            - extract_text:
                assign:
                    - summary: ${gemini_response.body.candidates[0].content.parts[0].text}
            - return_summary:
                return: ${summary}
  3. Esegui il deployment del flusso di lavoro inserendo il seguente comando:

    gcloud workflows deploy gemini-pro-summaries \
        --source=gemini-pro-summaries.yaml \
        --location=us-central1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Console

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

gcloud

Elimina un progetto Google Cloud:

gcloud projects delete PROJECT_ID

Elimina singole risorse

Elimina i flussi di lavoro creati in questo tutorial.

Passaggi successivi