クイックスタート: Vertex AI Gemini API を使用してテキストを生成する

このクイックスタートでは、次のマルチモーダル リクエストを Vertex AI Gemini API に送信し、レスポンスを表示します。

  • テキスト プロンプト
  • プロンプトと画像
  • プロンプトと動画ファイル(音声トラック付き)

このクイックスタートは、ローカル環境のプログラミング言語 SDK または REST API を使用して完了できます。

前提条件

このクイックスタートを完了するには、次の操作が必要です。

  • Google Cloud プロジェクトを設定して Vertex AI API を有効にする
  • ローカルマシンで:
    • Google Cloud CLI をインストール、初期化、認証する
    • 言語の SDK をインストールする

Google Cloud プロジェクトの設定

Google Cloud プロジェクトを設定し、Vertex AI API を有効にします。

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Vertex AI API.

    Enable the API

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Vertex AI API.

    Enable the API

Google Cloud CLI を設定する

ローカルマシンで Google Cloud CLI を設定して認証します。Google AI Studio の Gemini API に精通している場合は、Vertex AI Gemini API では API キーではなく、Identity and Access Management を使用してアクセスを管理することに注意してください。

  1. Google Cloud CLI をインストールして初期化します。

  2. すでに gcloud CLI をインストールしている場合は、このコマンドを実行して gcloud コンポーネントが更新されていることを確認します。

    gcloud components update
  3. gcloud CLI で認証するには、次のコマンドを実行してローカルのアプリケーションのデフォルト認証情報(ADC)ファイルを生成します。コマンドで起動されたウェブフローを使用して、ユーザー認証情報を提供します。

    gcloud auth application-default login

    詳細については、アプリケーションのデフォルト認証情報を設定するをご覧ください。

プログラミング言語の SDK を設定する

ローカルマシンで、次のいずれかのタブをクリックして、プログラミング言語の SDK をインストールします。

Python

次のコマンドを実行して、Vertex AI SDK for Python をインストールして更新します。

pip3 install --upgrade "google-cloud-aiplatform>=1.64"

Node.js

次のコマンドを実行して、Node.js 用の aiplatform SDK をインストールまたは更新します。

npm install @google-cloud/vertexai

Java

google-cloud-vertexai を依存関係として追加するには、環境に適したコードを追加します。

BOM ありの Maven

pom.xml に次の HTML を追加します。

<dependencyManagement>
<dependencies>
  <dependency>
    <artifactId>libraries-bom</artifactId>
    <groupId>com.google.cloud</groupId>
    <scope>import</scope>
    <type>pom</type>
    <version>26.34.0</version>
  </dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-vertexai</artifactId>
</dependency>
</dependencies>

BOM なしの Maven

pom.xml に次のように追加します。

<dependency>
  <groupId>com.google.cloud</groupId>
  <artifactId>google-cloud-vertexai</artifactId>
  <version>0.4.0</version>
</dependency>

BOM なしの Gradle

build.gradle に次の行を追加します。

implementation 'com.google.cloud:google-cloud-vertexai:0.4.0'

Go

利用可能な Vertex AI API Go パッケージを確認して、プロジェクトのニーズに最適なパッケージを判断します。

  • 推奨cloud.google.com/go/vertexai

    vertexai は人の手で作成されたパッケージで、一般的な機能へのアクセスを提供します。

    Vertex AI API を使ってアプリを構築するほとんどのデベロッパーの方に、足がかりとしておすすめのパッケージです。このパッケージにまだ含まれていない機能を利用するには、自動生成された aiplatform パッケージを使用してください。

    このパッケージをインストールするには、次のコマンドを実行します。

    go get cloud.google.com/go/vertexai
  • cloud.google.com/go/aiplatform

    aiplatform は自動生成されたパッケージです。

    このパッケージは、人の手によって作成された vertexai パッケージではまだ提供されていない Vertex AI API 機能を使用する必要があるプロジェクトを対象としています。

    このパッケージをインストールするには、次のコマンドを実行します。

    go get cloud.google.com/go/aiplatform

C#

NuGet から Google.Cloud.AIPlatform.V1 パッケージをインストールします。プロジェクトにパッケージを追加する方法を選択します。たとえば、Visual Studio でプロジェクトを右クリックし、[NuGet パッケージの管理...] を選択します。

REST

  1. 次のように入力して、環境変数を構成します。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

    MODEL_ID="gemini-1.5-flash-002"
    PROJECT_ID="PROJECT_ID"
  2. Google Cloud CLI を使用して、次のコマンドを実行してエンドポイントをプロビジョニングします。

    gcloud beta services identity create --service=aiplatform.googleapis.com --project=${PROJECT_ID}

Vertex AI Gemini API にプロンプトを送信する

次のコードを使用して、Vertex AI Gemini API にプロンプトを送信します。このサンプルは、花専門店の有効な名前のリストを返します。

コードは、コマンドラインから、IDE を使用して、またはアプリケーションにコードを組み込んで実行できます。

Python

プロンプト リクエストを送信するには、Python ファイル(.py)を作成し、次のコードをファイルにコピーします。PROJECT_ID の値を Google Cloud プロジェクトの ID に設定します。値を更新したら、コードを実行します。

import vertexai
from vertexai.generative_models import GenerativeModel

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

response = model.generate_content(
    "What's a good name for a flower shop that specializes in selling bouquets of dried flowers?"
)

print(response.text)
# Example response:
# **Emphasizing the Dried Aspect:**
# * Everlasting Blooms
# * Dried & Delightful
# * The Petal Preserve
# ...

Node.js

プロンプト リクエストを送信するには、Node.js ファイル(.js)を作成し、次のコードをファイルにコピーします。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。値を更新したら、コードを実行します。

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function generate_from_text_input(projectId = 'PROJECT_ID') {
  const vertexAI = new VertexAI({project: projectId, location: 'us-central1'});

  const generativeModel = vertexAI.getGenerativeModel({
    model: 'gemini-1.5-flash-001',
  });

  const prompt =
    "What's a good name for a flower shop that specializes in selling bouquets of dried flowers?";

  const resp = await generativeModel.generateContent(prompt);
  const contentResponse = await resp.response;
  console.log(JSON.stringify(contentResponse));
}

Java

プロンプト リクエストを送信するには、Java ファイル(.java)を作成し、次のコードをファイルにコピーします。your-google-cloud-project-id を Google Cloud プロジェクト ID に設定します。値を更新したら、コードを実行します。

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.ResponseHandler;
import java.io.IOException;

public class TextInput {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";
    String textPrompt =
        "What's a good name for a flower shop that specializes in selling bouquets of"
            + " dried flowers?";

    String output = textInput(projectId, location, modelName, textPrompt);
    System.out.println(output);
  }

  // Passes the provided text input to the Gemini model and returns the text-only response.
  // For the specified textPrompt, the model returns a list of possible store names.
  public static String textInput(
      String projectId, String location, String modelName, String textPrompt) throws IOException {
    // Initialize client that will be used to send requests. This client only needs
    // to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      GenerateContentResponse response = model.generateContent(textPrompt);
      String output = ResponseHandler.getText(response);
      return output;
    }
  }
}

Go

プロンプト リクエストを送信するには、Go ファイル(.go)を作成し、次のコードをファイルにコピーします。projectID は、Google Cloud プロジェクトの ID に置き換えます。値を更新したら、コードを実行します。

import (
	"context"
	"encoding/json"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
)

func generateContentFromText(w io.Writer, projectID string) error {
	location := "us-central1"
	modelName := "gemini-1.5-flash-001"

	ctx := context.Background()
	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("error creating client: %w", err)
	}
	gemini := client.GenerativeModel(modelName)
	prompt := genai.Text(
		"What's a good name for a flower shop that specializes in selling bouquets of dried flowers?")

	resp, err := gemini.GenerateContent(ctx, prompt)
	if err != nil {
		return fmt.Errorf("error generating content: %w", err)
	}
	// See the JSON response in
	// https://pkg.go.dev/cloud.google.com/go/vertexai/genai#GenerateContentResponse.
	rb, err := json.MarshalIndent(resp, "", "  ")
	if err != nil {
		return fmt.Errorf("json.MarshalIndent: %w", err)
	}
	fmt.Fprintln(w, string(rb))
	return nil
}

C#

プロンプト リクエストを送信するには、C# ファイル(.cs)を作成し、次のコードをファイルにコピーします。your-project-id を Google Cloud プロジェクト ID に設定します。値を更新したら、コードを実行します。


using Google.Cloud.AIPlatform.V1;
using System;
using System.Threading.Tasks;

public class TextInputSample
{
    public async Task<string> TextInput(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001")
    {

        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();
        string prompt = @"What's a good name for a flower shop that specializes in selling bouquets of dried flowers?";

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = prompt }
                    }
                }
            }
        };

        GenerateContentResponse response = await predictionServiceClient.GenerateContentAsync(generateContentRequest);

        string responseText = response.Candidates[0].Content.Parts[0].Text;
        Console.WriteLine(responseText);

        return responseText;
    }
}

REST

このプロンプト リクエストを送信するには、コマンドラインから curl コマンドを実行するか、アプリに REST 呼び出しを含めます。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/${MODEL_ID}:generateContent -d \
$'{
  "contents": {
    "role": "user",
    "parts": [
      {
        "text": "What\'s a good name for a flower shop that specializes in selling bouquets of dried flowers?"
      }
    ]
  }
}'

モデルによりレスポンスが返されます。 レスポンスはセクション内で生成され、各セクションの安全性が個別に評価されます。

プロンプトと画像を Vertex AI Gemini API に送信する

次のコードを使用して、テキストと画像を含むプロンプトを Vertex AI Gemini API に送信します。このサンプルは、指定された画像Java サンプルの画像)の説明を返します。

Python

プロンプト リクエストを送信するには、Python ファイル(.py)を作成し、次のコードをファイルにコピーします。PROJECT_ID の値を Google Cloud プロジェクトの ID に設定します。値を更新したら、コードを実行します。

import vertexai

from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

response = model.generate_content(
    [
        Part.from_uri(
            "gs://cloud-samples-data/generative-ai/image/scones.jpg",
            mime_type="image/jpeg",
        ),
        "What is shown in this image?",
    ]
)

print(response.text)
# That's a lovely overhead shot of a rustic-style breakfast or brunch spread.
# Here's what's in the image:
# * **Blueberry scones:** Several freshly baked blueberry scones are arranged on parchment paper.
# They look crumbly and delicious.
# ...

Node.js

プロンプト リクエストを送信するには、Node.js ファイル(.js)を作成し、次のコードをファイルにコピーします。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。値を更新したら、コードを実行します。

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function createNonStreamingMultipartContent(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.5-flash-001',
  image = 'gs://generativeai-downloads/images/scones.jpg',
  mimeType = 'image/jpeg'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

  // Instantiate the model
  const generativeVisionModel = vertexAI.getGenerativeModel({
    model: model,
  });

  // For images, the SDK supports both Google Cloud Storage URI and base64 strings
  const filePart = {
    fileData: {
      fileUri: image,
      mimeType: mimeType,
    },
  };

  const textPart = {
    text: 'what is shown in this image?',
  };

  const request = {
    contents: [{role: 'user', parts: [filePart, textPart]}],
  };

  console.log('Prompt Text:');
  console.log(request.contents[0].parts[1].text);

  console.log('Non-Streaming Response Text:');

  // Generate a response
  const response = await generativeVisionModel.generateContent(request);

  // Select the text from the response
  const fullTextResponse =
    response.response.candidates[0].content.parts[0].text;

  console.log(fullTextResponse);
}

Java

プロンプト リクエストを送信するには、Java ファイル(.java)を作成し、次のコードをファイルにコピーします。your-google-cloud-project-id を Google Cloud プロジェクト ID に設定します。値を更新したら、コードを実行します。

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;
import java.io.IOException;

public class Quickstart {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    String output = quickstart(projectId, location, modelName);
    System.out.println(output);
  }

  // Analyzes the provided Multimodal input.
  public static String quickstart(String projectId, String location, String modelName)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs
    // to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      String imageUri = "gs://generativeai-downloads/images/scones.jpg";

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(ContentMaker.fromMultiModalData(
          PartMaker.fromMimeTypeAndData("image/png", imageUri),
          "What's in this photo"
      ));

      return response.toString();
    }
  }
}

Go

プロンプト リクエストを送信するには、Go ファイル(.go)を作成し、次のコードをファイルにコピーします。projectID は、Google Cloud プロジェクトの ID に置き換えます。値を更新したら、コードを実行します。

import (
	"context"
	"encoding/json"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
)

func tryGemini(w io.Writer, projectID string, location string, modelName string) error {
	// location := "us-central1"
	// modelName := "gemini-1.5-flash-001"

	ctx := context.Background()
	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("error creating client: %w", err)
	}
	gemini := client.GenerativeModel(modelName)

	img := genai.FileData{
		MIMEType: "image/jpeg",
		FileURI:  "gs://generativeai-downloads/images/scones.jpg",
	}
	prompt := genai.Text("What is in this image?")

	resp, err := gemini.GenerateContent(ctx, img, prompt)
	if err != nil {
		return fmt.Errorf("error generating content: %w", err)
	}
	rb, err := json.MarshalIndent(resp, "", "  ")
	if err != nil {
		return fmt.Errorf("json.MarshalIndent: %w", err)
	}
	fmt.Fprintln(w, string(rb))
	return nil
}

C#

プロンプト リクエストを送信するには、C# ファイル(.cs)を作成し、次のコードをファイルにコピーします。your-project-id を Google Cloud プロジェクト ID に設定します。値を更新したら、コードを実行します。


using Google.Api.Gax.Grpc;
using Google.Cloud.AIPlatform.V1;
using System.Text;
using System.Threading.Tasks;

public class GeminiQuickstart
{
    public async Task<string> GenerateContent(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001"
    )
    {
        // Create client
        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

        // Initialize content request
        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            GenerationConfig = new GenerationConfig
            {
                Temperature = 0.4f,
                TopP = 1,
                TopK = 32,
                MaxOutputTokens = 2048
            },
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = "What's in this photo?" },
                        new Part { FileData = new() { MimeType = "image/png", FileUri = "gs://generativeai-downloads/images/scones.jpg" } }
                    }
                }
            }
        };

        // Make the request, returning a streaming response
        using PredictionServiceClient.StreamGenerateContentStream response = predictionServiceClient.StreamGenerateContent(generateContentRequest);

        StringBuilder fullText = new();

        // Read streaming responses from server until complete
        AsyncResponseStream<GenerateContentResponse> responseStream = response.GetResponseStream();
        await foreach (GenerateContentResponse responseItem in responseStream)
        {
            fullText.Append(responseItem.Candidates[0].Content.Parts[0].Text);
        }

        return fullText.ToString();
    }
}

REST

このプロンプト リクエストは IDE から送信できます。また、必要に応じて REST 呼び出しをアプリケーションに埋め込むこともできます。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/${MODEL_ID}:generateContent -d \
$'{
  "contents": {
    "role": "user",
    "parts": [
      {
      "fileData": {
        "mimeType": "image/jpeg",
        "fileUri": "gs://generativeai-downloads/images/scones.jpg"
        }
      },
      {
        "text": "Describe this picture."
      }
    ]
  }
}'

モデルによりレスポンスが返されます。 レスポンスはセクション内で生成され、各セクションの安全性が個別に評価されます。

Vertex AI Gemini API にプロンプトと動画を送信する

次のコードを使用して、テキスト、音声、動画を含むプロンプトを Vertex AI Gemini API に送信します。このサンプルは、音声トラックの重要な部分を含む、指定された動画の説明を返します。

このプロンプト リクエストは、コマンドライン、IDE、またはアプリケーションに REST 呼び出しを含めることで送信できます。

Python

プロンプト リクエストを送信するには、Python ファイル(.py)を作成し、次のコードをファイルにコピーします。PROJECT_ID の値を Google Cloud プロジェクトの ID に設定します。値を更新したら、コードを実行します。


import vertexai
from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"

vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

prompt = """
Provide a description of the video.
The description should also contain anything important which people say in the video.
"""

video_file = Part.from_uri(
    uri="gs://cloud-samples-data/generative-ai/video/pixel8.mp4",
    mime_type="video/mp4",
)

contents = [video_file, prompt]

response = model.generate_content(contents)
print(response.text)
# Example response:
# Here is a description of the video.
# ... Then, the scene changes to a woman named Saeko Shimada..
# She says, "Tokyo has many faces. The city at night is totally different
# from what you see during the day."
# ...

Node.js

プロンプト リクエストを送信するには、Node.js ファイル(.js)を作成し、次のコードをファイルにコピーします。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。値を更新したら、コードを実行します。

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function analyze_video_with_audio(projectId = 'PROJECT_ID') {
  const vertexAI = new VertexAI({project: projectId, location: 'us-central1'});

  const generativeModel = vertexAI.getGenerativeModel({
    model: 'gemini-1.5-flash-001',
  });

  const filePart = {
    file_data: {
      file_uri: 'gs://cloud-samples-data/generative-ai/video/pixel8.mp4',
      mime_type: 'video/mp4',
    },
  };
  const textPart = {
    text: `
    Provide a description of the video.
    The description should also contain anything important which people say in the video.`,
  };

  const request = {
    contents: [{role: 'user', parts: [filePart, textPart]}],
  };

  const resp = await generativeModel.generateContent(request);
  const contentResponse = await resp.response;
  console.log(JSON.stringify(contentResponse));
}

Java

プロンプト リクエストを送信するには、Java ファイル(.java)を作成し、次のコードをファイルにコピーします。your-google-cloud-project-id を Google Cloud プロジェクト ID に設定します。値を更新したら、コードを実行します。


import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;
import com.google.cloud.vertexai.generativeai.ResponseHandler;
import java.io.IOException;

public class VideoInputWithAudio {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    videoAudioInput(projectId, location, modelName);
  }

  // Analyzes the given video input, including its audio track.
  public static String videoAudioInput(String projectId, String location, String modelName)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs
    // to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      String videoUri = "gs://cloud-samples-data/generative-ai/video/pixel8.mp4";

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "Provide a description of the video.\n The description should also "
                  + "contain anything important which people say in the video.",
              PartMaker.fromMimeTypeAndData("video/mp4", videoUri)
          ));

      String output = ResponseHandler.getText(response);
      System.out.println(output);

      return output;
    }
  }
}

Go

プロンプト リクエストを送信するには、Go ファイル(.go)を作成し、次のコードをファイルにコピーします。projectID は、Google Cloud プロジェクトの ID に置き換えます。値を更新したら、コードを実行します。

import (
	"context"
	"errors"
	"fmt"
	"io"
	"mime"
	"path/filepath"

	"cloud.google.com/go/vertexai/genai"
)

// generateMultimodalContent shows how to send video and text prompts to a model, writing the response to
// the provided io.Writer.
func generateMultimodalContent(w io.Writer, projectID, location, modelName string) error {
	// location := "us-central1"
	// modelName := "gemini-1.5-flash-001"
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("unable to create client: %w", err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)

	// Given a video file URL, prepare video file as genai.Part
	part := genai.FileData{
		MIMEType: mime.TypeByExtension(filepath.Ext("pixel8.mp4")),
		FileURI:  "gs://cloud-samples-data/generative-ai/video/pixel8.mp4",
	}

	res, err := model.GenerateContent(ctx, part, genai.Text(`
			Provide a description of the video.
			The description should also contain anything important which people say in the video.
	`))
	if err != nil {
		return fmt.Errorf("unable to generate contents: %w", err)
	}

	if len(res.Candidates) == 0 ||
		len(res.Candidates[0].Content.Parts) == 0 {
		return errors.New("empty response from model")
	}

	fmt.Fprintf(w, "generated response: %s\n", res.Candidates[0].Content.Parts[0])
	return nil
}

C#

プロンプト リクエストを送信するには、C# ファイル(.cs)を作成し、次のコードをファイルにコピーします。your-project-id を Google Cloud プロジェクト ID に設定します。値を更新したら、コードを実行します。


using Google.Cloud.AIPlatform.V1;
using System;
using System.Threading.Tasks;

public class VideoInputWithAudio
{
    public async Task<string> DescribeVideo(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001")
    {

        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

        string prompt = @"Provide a description of the video.
The description should also contain anything important which people say in the video.";

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = prompt },
                        new Part { FileData = new() { MimeType = "video/mp4", FileUri = "gs://cloud-samples-data/generative-ai/video/pixel8.mp4" }}
                    }
                }
            }
        };

        GenerateContentResponse response = await predictionServiceClient.GenerateContentAsync(generateContentRequest);

        string responseText = response.Candidates[0].Content.Parts[0].Text;
        Console.WriteLine(responseText);

        return responseText;
    }
}

REST

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/${MODEL_ID}:generateContent -d \
$'{
  "contents": {
    "role": "user",
    "parts": [
      {
      "fileData": {
        "mimeType": "video/mp4",
        "fileUri": "gs://cloud-samples-data/generative-ai/video/pixel8.mp4"
        }
      },
      {
        "text": "Provide a description of the video. The description should also contain anything important which people say in the video."
      }
    ]
  }
}'

モデルによりレスポンスが返されます。 レスポンスはセクション内で生成され、各セクションの安全性が個別に評価されます。

次のステップ