Über einen Workflow mit Vertex AI auf Gemini-Modelle zugreifen

Generative KI in Vertex AI (auch als genAI oder Gen AI bezeichnet) bietet Ihnen Zugriff auf die generativen KI-Modelle von Google für mehrere Modalitäten (Text, Code, Bilder, Sprache). Sie können diese Large Language Models (LLMs) testen und optimieren und sie dann für die Verwendung in Ihren KI-gestützten Anwendungen bereitstellen. Weitere Informationen finden Sie in der Übersicht über die Unterstützung generativer KI für Vertex AI.

Vertex AI bietet eine Vielzahl von Foundation Models für generative KI, auf die über eine API zugegriffen werden kann. Dazu gehören auch die in diesem Leitfaden verwendeten Modelle. Weitere Informationen zur Auswahl eines Modells finden Sie unter Google-Modelle.

Jedes Modell wird über einen Publisher-Endpunkt bereitgestellt, der für IhrGoogle Cloud -Projekt spezifisch ist. Daher muss das Foundation Model nicht bereitgestellt werden, es sei denn, Sie müssen es für einen bestimmten Anwendungsfall optimieren. Sie können einen Prompt an den Publisher-Endpunkt senden. Ein Prompt ist eine Anfrage in natürlicher Sprache, die an ein LLM gesendet wird, um eine Antwort auszulösen.

In dieser Anleitung werden Workflows gezeigt, mit denen Antworten von Vertex AI-Modellen generiert werden. Dazu werden Text-Prompts entweder über einen Workflows-Connector oder eine HTTP-POST-Anfrage an die Publisher-Endpunkte gesendet. Weitere Informationen finden Sie in der Übersicht über den Vertex AI API-Connector und unter HTTP-Anfrage stellen.

Sie können jeden Workflow unabhängig voneinander bereitstellen und ausführen.

Workflow bereitstellen, der ein Bild beschreibt

Stellen Sie einen Workflow bereit, der eine Connectormethode (generateContent) verwendet, um eine Anfrage an einen Endpunkt des Modellverlags zu senden. Die Methode unterstützt die Generierung von Inhalten mit multimodalen Eingaben.

Der Workflow enthält einen Text-Prompt und den URI eines Bildes, das in einem Cloud Storage-Bucket öffentlich verfügbar ist. Sie können das Bild ansehen und in der Google Cloud -Konsole die Objektdetails aufrufen.

Der Workflow gibt eine Beschreibung des Bildes aus der vom Modell generierten Antwort zurück.

Weitere Informationen zu den Parametern des HTTP-Anfragetexts, die beim Prompten des LLM verwendet werden, und zu den Elementen des Antworttexts finden Sie in der Gemini API-Referenz.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf.

    Zur Seite "Workflows"

  2. Klicken Sie auf  Erstellen.

  3. Geben Sie einen Namen für den neuen Workflow ein: describe-image.

  4. Wählen Sie in der Liste Region die Option us-central1 (Iowa) aus.

  5. Wählen Sie unter Dienstkonto das zuvor erstellte Dienstkonto aus.

  6. Klicken Sie auf Weiter.

  7. Geben Sie im Workflow-Editor die folgende Definition für Ihren Workflow ein:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "gemini-2.5-flash"
                - 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. Klicken Sie auf Bereitstellen.

gcloud

  1. Erstellen Sie eine Quellcodedatei für Ihren Workflow:

    touch describe-image.yaml
  2. Kopieren Sie den folgenden Workflow in einem Texteditor in Ihre Quellcodedatei:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "gemini-2.5-flash"
                - 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. Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:

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

Workflow ausführen

Bei der Ausführung eines Workflows wird die aktuelle Workflowdefinition ausgeführt, die dem Workflow zugeordnet ist.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf.

    Zur Seite "Workflows"

  2. Wählen Sie auf der Seite Workflows den Workflow describe-image aus, um die zugehörige Detailseite aufzurufen.

  3. Klicken Sie auf der Seite Workflow-Details auf  Ausführen.

  4. Geben Sie für Eingabe Folgendes ein:

    {"image_url":"gs://generativeai-downloads/images/scones.jpg"}
  5. Klicken Sie noch einmal auf Ausführen.

  6. Sehen Sie sich die Ergebnisse des Workflows im Bereich Ausgabe an.

    Die Ausgabe sollte in etwa so aussehen:

    {
      "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. Öffnen Sie ein Terminalfenster.

  2. Führen Sie den Workflow aus:

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

    Die Ausführungsergebnisse sollten in etwa so aussehen:

      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

Workflow bereitstellen, der Länderverläufe generiert

Stellen Sie einen Workflow bereit, der eine Eingabeliste von Ländern parallel durchläuft und eine Connectormethode (generateContent) verwendet, um eine Anfrage an einen Endpunkt des Modellverlags zu senden. Die Methode unterstützt die Generierung von Inhalten mit multimodalen Eingaben.

Der Workflow gibt die vom Modell generierten Länderverläufe zurück und kombiniert sie in einer Karte.

Weitere Informationen zu den Parametern des HTTP-Anfragetexts, die beim Prompten des LLM verwendet werden, und zu den Elementen des Antworttexts finden Sie in der Gemini API-Referenz.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf.

    Zur Seite "Workflows"

  2. Klicken Sie auf  Erstellen.

  3. Geben Sie einen Namen für den neuen Workflow ein: gemini-pro-country-histories.

  4. Wählen Sie in der Liste Region die Option us-central1 (Iowa) aus.

  5. Wählen Sie unter Dienstkonto das zuvor erstellte Dienstkonto aus.

  6. Klicken Sie auf Weiter.

  7. Geben Sie im Workflow-Editor die folgende Definition für Ihren Workflow ein:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "gemini-2.5-flash"
                - 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. Klicken Sie auf Bereitstellen.

gcloud

  1. Erstellen Sie eine Quellcodedatei für Ihren Workflow:

    touch gemini-pro-country-histories.yaml
  2. Kopieren Sie den folgenden Workflow in einem Texteditor in Ihre Quellcodedatei:

    main:
        params: [args]
        steps:
        - init:
            assign:
                - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - location: "us-central1"
                - model: "gemini-2.5-flash"
                - 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. Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:

    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

Workflow ausführen

Bei der Ausführung eines Workflows wird die aktuelle Workflowdefinition ausgeführt, die dem Workflow zugeordnet ist.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf.

    Zur Seite "Workflows"

  2. Wählen Sie auf der Seite Workflows den Workflow gemini-pro-country-histories aus, um die zugehörige Detailseite aufzurufen.

  3. Klicken Sie auf der Seite Workflow-Details auf  Ausführen.

  4. Geben Sie für Eingabe Folgendes ein:

    {"countries":["Argentina", "Bhutan", "Cyprus", "Denmark", "Ethiopia"]}
  5. Klicken Sie noch einmal auf Ausführen.

  6. Sehen Sie sich die Ergebnisse des Workflows im Bereich Ausgabe an.

    Die Ausgabe sollte in etwa so aussehen:

    {
      "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. Öffnen Sie ein Terminalfenster.

  2. Führen Sie den Workflow aus:

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

    Die Ausführungsergebnisse sollten in etwa so aussehen:

      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

Workflow zum Zusammenfassen eines großen Dokuments bereitstellen

Stellen Sie einen Workflow bereit, der ein großes Dokument in kleinere Teile unterteilt und http.post-Anfragen an einen Modellpublisher-Endpunkt parallel sendet, damit das Modell jeden Teil gleichzeitig zusammenfassen kann. Im Workflow werden schließlich alle Teilzusammenfassungen zu einer vollständigen Zusammenfassung kombiniert.

Weitere Informationen zu den Parametern des HTTP-Anfragetexts, die beim Prompten des LLM verwendet werden, und zu den Elementen des Antworttexts finden Sie in der Gemini API-Referenz.

Bei der Workflowdefinition wird davon ausgegangen, dass Sie einen Cloud Storage-Bucket erstellt haben, in den Sie eine Textdatei hochladen können. Weitere Informationen zum Workflows-Connector (googleapis.storage.v1.objects.get), der zum Abrufen von Objekten aus dem Cloud Storage-Bucket verwendet wird, finden Sie in der Connector-Referenz.

Nachdem Sie den Workflow bereitgestellt haben, können Sie ihn ausführen, indem Sie einen entsprechenden Eventarc-Trigger erstellen und dann eine Datei in den Bucket hochladen. Weitere Informationen finden Sie unter Cloud Storage-Ereignisse an Workflows weiterleiten. Beachten Sie, dass zusätzliche APIs aktiviert und zusätzliche Rollen gewährt werden müssen. Dazu gehört auch, dass Ihrem Dienstkonto die Rolle „Storage-Objekt-Nutzer“ (roles/storage.objectUser) zugewiesen wird, die die Verwendung von Cloud Storage-Objekten unterstützt. Weitere Informationen finden Sie im Abschnitt Vorbereiten des Erstellens eines Triggers.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Workflows auf.

    Zur Seite "Workflows"

  2. Klicken Sie auf  Erstellen.

  3. Geben Sie einen Namen für den neuen Workflow ein: gemini-pro-summaries.

  4. Wählen Sie in der Liste Region die Option us-central1 (Iowa) aus.

  5. Wählen Sie unter Dienstkonto das zuvor erstellte Dienstkonto aus.

  6. Klicken Sie auf Weiter.

  7. Geben Sie im Workflow-Editor die folgende Definition für Ihren Workflow ein:

    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-2.5-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. Klicken Sie auf Bereitstellen.

gcloud

  1. Erstellen Sie eine Quellcodedatei für Ihren Workflow:

    touch gemini-pro-summaries.yaml
  2. Kopieren Sie den folgenden Workflow in einem Texteditor in Ihre Quellcodedatei:

    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-2.5-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. Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:

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