Accedi ai modelli Vertex AI da un flusso di lavoro


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

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

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

Ogni modello viene 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 ottenere una risposta.

Questo tutorial illustra i flussi di lavoro che generano risposte dai modelli Vertex AI inviando prompt di testo agli endpoint dell'editore utilizzando un connettore Workflows o una richiesta POST HTTP. Per ulteriori informazioni, consulta la panoramica del connettore API Vertex AI e Effettuare una richiesta HTTP.

Tieni presente che puoi eseguire il deployment di ogni flusso di lavoro ed eseguirlo indipendentemente 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 di accedere alla maggior parte delle funzionalità di Vertex AI. Per ulteriori informazioni sulla configurazione di Vertex AI, consulta Configurazione su Google Cloud.
  2. Eseguire il deployment ed eseguire 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, vedi Rendere pubblici i dati.
  3. Esegui il deployment ed esegui un flusso di lavoro che si ripete in un elenco di paesi in parallelo e richiede a un modello Vertex AI (Gemini Pro) di generare e restituire le cronologie dei paesi. L'utilizzo dei rami paralleli consente di ridurre il tempo di esecuzione totale avviando contemporaneamente le chiamate all'LLM e attendendo il completamento di 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, richiedi a un modello Vertex AI (PaLM 2 per il testo) di generare e restituire le cronologie dei paesi. Per ulteriori informazioni su come scegliere un modello, consulta Informazioni sul modello.
  5. Esegui il deployment di un flusso di lavoro in grado di riassumere un documento di grandi dimensioni. Poiché esiste un limite alla finestra di contesto che imposta quanto indietro dovrebbe tornare il modello durante l'addestramento (e per le previsioni), il flusso di lavoro divide il documento in parti più piccole e poi richiede a un modello Vertex AI (Gemini Pro) di riassumere ogni parte in parallelo. Per saperne di più, consulta Prompt di riassunto e Orizzonte di previsione, finestra di contesto e finestra di previsione.

Costi

In questo documento, utilizzi 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 potrebbero essere idonei per una prova gratuita.

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 in 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  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. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

      In the Service account description field, enter a description. For example, Service account for quickstart.

    4. Click Create and continue.
    5. Grant the Vertex AI > Vertex AI User role to the service account.

      To grant the role, find the Select a role list, then select Vertex AI > Vertex AI User.

    6. Click Continue.
    7. Click Done to finish creating the service account.

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  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. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

      In the Service account description field, enter a description. For example, Service account for quickstart.

    4. Click Create and continue.
    5. Grant the Vertex AI > Vertex AI User role to the service account.

      To grant the role, find the Select a role list, then select Vertex AI > Vertex AI User.

    6. Click Continue.
    7. Click Done to finish creating the service account.

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. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  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. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant the roles/aiplatform.user IAM role to the service account:

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

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
  8. Installa Google Cloud CLI.
  9. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  10. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  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. Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. Grant the roles/aiplatform.user IAM role to the service account:

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

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account

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

Eseguire il deployment di un flusso di lavoro che utilizza un metodo del connettore (generateContent) per effettuare una richiesta a un endpoint del publisher Gemini Pro Vision. Questo metodo supporta la generazione di contenuti tramite input multimodali.

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, nella console Google Cloud, puoi visualizzare i dettagli dell'oggetto.

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 viene visualizzata una richiesta per l'LLM e sugli 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 Flussi di lavoro

  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. In Account di servizio, seleziona l'account di servizio che hai creato in precedenza.

  6. Fai clic su Avanti.

  7. Nell'editor del flusso di lavoro, inserisci la seguente definizione per il tuo 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"
                - text_combined: ""
        - ask_llm:
            call: googleapis.aiplatform.v1.projects.locations.endpoints.generateContent
            args:
                model: ${"projects/" + project + "/locations/" + location + "/publishers/google/models/" + model}
                region: ${location}
                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.candidates[0].content.parts[0].text}
  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 del 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"
                - text_combined: ""
        - ask_llm:
            call: googleapis.aiplatform.v1.projects.locations.endpoints.generateContent
            args:
                model: ${"projects/" + project + "/locations/" + location + "/publishers/google/models/" + model}
                region: ${location}
                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.candidates[0].content.parts[0].text}
  3. Esegui il deployment del flusso di lavoro inserendo il comando seguente:

    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 la definizione attuale del flusso di lavoro associata al flusso di lavoro.

Console

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

    Vai a Flussi di lavoro

  2. Nella pagina Flussi di lavoro, seleziona il flusso di lavoro describe-image per accedere 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 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 genera cronologie dei paesi (Gemini Pro)

Esegui il deployment di un flusso di lavoro che si ripete in un elenco di input di paesi in parallel e utilizza un metodo di connettore (generateContent) per effettuare una richiesta a un endpoint dell'editore Gemini Pro. Questo metodo supporta la generazione di contenuti tramite input multimodali.

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 viene visualizzata una richiesta per l'LLM e sugli 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 Flussi di lavoro

  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. In Account di servizio, seleziona l'account di servizio che hai creato in precedenza.

  6. Fai clic su Avanti.

  7. Nell'editor del flusso di lavoro, inserisci la seguente definizione per il tuo 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"
                - histories: {}
        - loop_over_countries:
            parallel:
                shared: [histories]
                for:
                    value: country
                    in: ${args.countries}
                    steps:
                        - ask_llm:
                            call: googleapis.aiplatform.v1.projects.locations.endpoints.generateContent
                            args:
                                model: ${"projects/" + project + "/locations/" + location + "/publishers/google/models/" + model}
                                region: ${location}
                                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.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 del codice sorgente:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "gemini-1.0-pro"
                - histories: {}
        - loop_over_countries:
            parallel:
                shared: [histories]
                for:
                    value: country
                    in: ${args.countries}
                    steps:
                        - ask_llm:
                            call: googleapis.aiplatform.v1.projects.locations.endpoints.generateContent
                            args:
                                model: ${"projects/" + project + "/locations/" + location + "/publishers/google/models/" + model}
                                region: ${location}
                                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.candidates[0].content.parts[0].text}
        - return_result:
            return: ${histories}
  3. Esegui il deployment del flusso di lavoro inserendo il comando seguente:

    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 la definizione attuale del flusso di lavoro associata al flusso di lavoro.

Console

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

    Vai a Flussi di lavoro

  2. Nella pagina Flussi di lavoro, seleziona il flusso di lavoro gemini-pro-country-histories per accedere 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 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)

È possibile che non voglia usare Gemini Pro come modello. L'esempio seguente utilizza un flusso di lavoro simile a quello precedente, ma utilizza un metodo del connettore (predict) per effettuare una richiesta a PaLM 2 per l'endpoint del publisher di testo. Il metodo esegue una previsione online.

Per ulteriori informazioni sui parametri del corpo della richiesta HTTP utilizzati per inviare prompt all'LLM e agli elementi del corpo della risposta, consulta il riferimento per l'API PaLM 2 per il testo.

Console

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

    Vai a Flussi di lavoro

  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. In Account di servizio, seleziona l'account di servizio che hai creato in precedenza.

  6. Fai clic su Avanti.

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

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "text-bison"
                - histories: {}
        - loop_over_countries:
            parallel:
                shared: [histories]
                for:
                    value: country
                    in: ${args.countries}
                    steps:
                        - ask_llm:
                            call: googleapis.aiplatform.v1.projects.locations.endpoints.predict
                            args:
                                endpoint: ${"projects/" + project + "/locations/" + location + "/publishers/google/models/" + model }
                                region: ${location}
                                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.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 gli 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 del codice sorgente:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "text-bison"
                - histories: {}
        - loop_over_countries:
            parallel:
                shared: [histories]
                for:
                    value: country
                    in: ${args.countries}
                    steps:
                        - ask_llm:
                            call: googleapis.aiplatform.v1.projects.locations.endpoints.predict
                            args:
                                endpoint: ${"projects/" + project + "/locations/" + location + "/publishers/google/models/" + model }
                                region: ${location}
                                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.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 gli spazi vuoti non necessari dalla risposta.

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

    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 divide un documento di grandi dimensioni in parti più piccole, inviando richieste http.post a un endpoint dell'editore Gemini Pro in parallel, in modo che il modello possa riassumere ogni parte contemporaneamente. Infine, il flusso di lavoro combina tutti i riepiloghi parziali in uno completo.

Per ulteriori informazioni sui parametri del corpo della richiesta HTTP utilizzati quando viene visualizzata una richiesta per l'LLM e sugli 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 caricare un file di testo. Per ulteriori informazioni 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 ulteriori informazioni, consulta Instradare gli eventi di Cloud Storage a Workflows. Tieni presente che devono essere abilitate API aggiuntive e devono essere concessi ruoli aggiuntivi, inclusa la concessione al tuo account di servizio del ruolo Utente oggetti Storage (roles/storage.objectUser) che supporta l'utilizzo di oggetti Cloud Storage. Per maggiori informazioni, consulta la sezione Prepararsi alla creazione di un trigger.

Console

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

    Vai a Flussi di lavoro

  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. In Account di servizio, seleziona l'account di servizio che hai creato in precedenza.

  6. Fai clic su Avanti.

  7. Nell'editor del flusso di lavoro, inserisci la seguente definizione per il tuo 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 del 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 comando seguente:

    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