빠른 시작: 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 키 대신 ID 및 액세스 관리를 사용하여 액세스를 관리한다는 점에 유의하세요.

  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

자바

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에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Manage NuGet Packages...(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."
      }
    ]
  }
}'

모델이 응답을 반환합니다. 응답은 여러 섹션으로 생성되고, 안전을 위해 각 섹션이 개별적으로 평가됩니다.

다음 단계