멀티모달 프롬프트 요청 전송

Gemini 모델 계열에는 멀티모달 프롬프트 요청에 사용할 수 있는 모델이 포함됩니다. 멀티모달이란 프롬프트에서 두 개 이상의 형식 또는 입력 유형을 사용할 수 있는 것입니다. 멀티모달이 아닌 모델은 텍스트에서만 프롬프트를 허용합니다. 형식에는 텍스트, 오디오, 동영상 등이 포함될 수 있습니다.

Gemini API를 사용하여 멀티모달 솔루션을 구현하는 방법에는 Python, Node.js, Java, Go SDK, Google Cloud 콘솔, REST API 등 여러 가지가 있습니다. 이 문서의 뒷부분에 나오는 코드 샘플은 이러한 옵션을 사용하여 멀티모달 솔루션을 만드는 방법을 보여줍니다.

Gemini 멀티모달 모델은 다음과 같습니다.

다음 표는 프롬프트 요청에서 각 멀티모달 Gemini API가 작동하는 형식을 보여줍니다.

모델 텍스트 코드 이미지 오디오 동영상 동영상/오디오 PDF
Gemini 1.0 Pro
Gemini 1.0 Pro Vision
Gemini 1.5 Pro(미리보기)

Google Cloud 콘솔에서 멀티모달 모델을 살펴보려면 Model Garden에서 gemini-1.0-pro-vision 또는 gemini-1.5-pro 모델 카드를 선택합니다.

Model Garden으로 이동


Gemini 모델에서 지원되는 언어 목록은 모델 정보 언어 지원을 참조하세요. 멀티모달 프롬프트를 설계하는 방법에 대한 자세한 내용은 멀티모달 프롬프트 설계를 참조하세요. 모바일 및 웹 앱에서 Gemini를 직접 사용할 수 있는 방법을 찾는 경우에는 Android, Swift, 웹을 위한 Google AI SDK를 참조하세요.

멀티모달 모델 차이점

Gemini 멀티모달 모델 간의 차이점은 다음 표에 나와 있습니다. 이 정보를 사용하여 가장 적합한 모델을 결정할 수 있습니다.

텍스트

Gemini 멀티모달 모델의 텍스트 형식과 관련한 몇 가지 차이점은 다음과 같습니다.

모델 텍스트 형식 세부정보
Gemini 1.0 Pro Vision 최대 토큰 수는 16,384개이며, 페이지당 단어 수를 250단어라고 가정하면 약 128페이지 분량의 책입니다. 이 최댓값에는 입력 및 출력 토큰이 모두 포함됩니다. 출력 토큰의 최대 개수는 2,048개입니다.
Gemini 1.5 Pro(미리보기) 컨텍스트 길이는 토큰 100만 개이며, 이는 약 4,000페이지 분량의 책에 해당합니다. 따라서 모델이 책, 여러 PDF, 사용자 설명서와 같은 긴 형식의 텍스트를 출력할 수 있습니다.

코드

코드로 작업할 때 Gemini 멀티모달 모델의 몇 가지 차이점은 다음과 같습니다.

모델 코드 형식 세부정보
Gemini 1.0 Pro Vision 최대 토큰 수는 16,384개이며, 페이지당 단어 수를 250단어라고 가정하면 약 128페이지 분량의 책입니다. 이 최댓값에는 입력 및 출력 토큰이 모두 포함됩니다. 출력 토큰의 최대 개수는 2,048개입니다.
Gemini 1.5 Pro(미리보기) 컨텍스트 길이가 100만 개 토큰이므로 모델이 전체 코드베이스 또는 전체 애플리케이션 코드베이스로 작업할 수 있습니다.

이미지

Gemini 멀티모달 모델의 이미지 형식과 관련한 몇 가지 차이점은 다음과 같습니다.

모델 이미지 형식 세부정보
Gemini 1.0 Pro Vision 프롬프트당 최대 이미지 수는 16개입니다.
Gemini 1.5 Pro(미리보기) 프롬프트당 최대 이미지 수는 3,000개입니다.

오디오(음성만)

Gemini 멀티모달 모델의 오디오 형식과 관련한 몇 가지 차이점은 다음과 같습니다.

모델 오디오 형식 세부정보
Gemini 1.0 Pro Vision 오디오는 지원되지 않습니다.
Gemini 1.5 Pro(미리보기) 프롬프트당 최대 오디오 시간은 약 8.4시간 또는 최대 100만 개의 토큰입니다. 음성 인식을 통해 오디오 요약, 스크립트 작성, 번역이 지원됩니다.

동영상

Gemini 멀티모달 모델의 동영상 형식과 관련한 몇 가지 차이점은 다음과 같습니다.

모델 동영상 형식 세부정보
Gemini 1.0 Pro Vision 최대 동영상 길이는 2분입니다. 프롬프트당 최대 동영상 수는 1개입니다. 동영상의 오디오는 무시됩니다.
Gemini 1.5 Pro(미리보기) 오디오를 포함하는 경우 최대 동영상 길이는 약 50분입니다. 오디오가 없는 동영상의 최대 길이는 1시간입니다. 프롬프트당 최대 동영상은 10개입니다. 모델은 동영상 데이터와 오디오 데이터를 모두 사용하여 프롬프트에 응답할 수 있습니다. 예를 들어 동영상의 시각적 콘텐츠와 음성을 모두 사용하여 동영상을 요약합니다.

PDF

Gemini 멀티모달 모델의 PDF 형식과 관련한 몇 가지 차이점은 다음과 같습니다.

모델 PDF 형식 세부정보
Gemini 1.0 Pro Vision 프롬프트당 최대 페이지 수는 16개입니다. PDF의 최대 파일 크기는 50MB입니다.
Gemini 1.5 Pro(미리보기) 프롬프트당 최대 페이지 수는 300개입니다. PDF의 최대 파일 크기는 50MB입니다.

빠른 시작

Gemini API 사용을 시작하려면 다음 코드 샘플을 사용하세요. 각 코드 샘플은 다양한 형식을 사용하는 방법을 보여줍니다. 이 문서의 일부 코드 샘플은 모든 Gemini 멀티모달 모델에서 작동하며 일부는 Gemini 1.5 Pro(미리보기)에서만 작동합니다. 각 코드 샘플에 호환되는 모델이 지정되어 있습니다.

멀티 모달 프롬프트에서 테스트하고 반복하려면 Google Cloud 콘솔을 사용하는 것이 좋습니다. 멀티모달 프롬프트를 프로그래매틱 방식으로 모델에 전송하려면 REST API, Python용 Vertex AI SDK 또는 다음 탭에 표시된 기타 지원되는 라이브러리 및 SDK 중 하나를 사용하면 됩니다.

단일 이미지

다음 각 탭의 샘플 코드는 이미지에 포함된 항목을 식별하는 다양한 방법을 보여줍니다. 이 샘플은 모든 Gemini 멀티모달 모델에서 작동합니다.

Python

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python용 Vertex AI SDK API 참고 문서를 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generate_contentstream 매개변수를 사용합니다.

  response = model.generate_content(contents=[...], stream = True)
  

비스트리밍 응답의 경우 매개변수를 삭제하거나 매개변수를 False로 설정합니다.

샘플 코드

import vertexai

from vertexai.generative_models import GenerativeModel, Part

# Initialize Vertex AI
vertexai.init(project=project_id, location=location)

# Load the model
model = GenerativeModel(model_name="gemini-1.0-pro-vision-001")

# Load example image
image_url = "gs://generativeai-downloads/images/scones.jpg"
image_content = Part.from_uri(image_url, "image/jpeg")

# Query the model
response = model.generate_content([image_content, "what is this image?"])
print(response)

Node.js

이 샘플을 사용해 보기 전에 생성형 AI 빠른 시작: Node.js SDK 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Gemini용 Node.js SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generateContentStream 메서드를 사용합니다.

  const streamingResp = await generativeModel.generateContentStream(request);
  

비스트리밍 응답의 경우 generateContent 메서드를 사용합니다.

  const streamingResp = await generativeModel.generateContent(request);
  

샘플 코드

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.0-pro-vision',
  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:');
  // Create the response stream
  const responseStream =
    await generativeVisionModel.generateContentStream(request);

  // Wait for the response stream to complete
  const aggregatedResponse = await responseStream.response;

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

  console.log(fullTextResponse);
}

Java

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작의 Java 설정 안내를 따르세요. 자세한 내용은 Gemini용 Vertex AI Java SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generateContentStream 메서드를 사용합니다.

  public ResponseStream generateContentStream(Content content)
  

비스트리밍 응답의 경우 generateContent 메서드를 사용합니다.

  public GenerateContentResponse generateContent(Content content)
  

샘플 코드

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.util.Base64;

public class MultimodalQuery {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.0-pro-vision";
    String dataImageBase64 = "your-base64-encoded-image";

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

  // Ask the model to recognise the brand associated with the logo image.
  public static String multimodalQuery(String projectId, String location, String modelName,
      String dataImageBase64) throws Exception {
    // 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 output;
      byte[] imageBytes = Base64.getDecoder().decode(dataImageBase64);

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "What is this image?",
              PartMaker.fromMimeTypeAndData("image/jpg", imageBytes)
          ));

      output = ResponseHandler.getText(response);
      return output;
    }
  }
}

REST

Vertex AI API를 사용하여 게시자 모델 엔드포인트에 POST 요청을 보내면 REST를 사용하여 텍스트 프롬프트를 테스트할 수 있습니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • GENERATE_RESPONSE_METHOD: 모델에서 생성하려는 응답 유형입니다. 모델의 응답 반환 방법을 생성하는 메서드를 선택합니다.
    • streamGenerateContent: 지연 시간에 대한 인식을 줄이기 위해 응답이 생성되는 동안 스트리밍됩니다.
    • generateContent: 완전히 생성된 후 응답이 반환됩니다.
  • LOCATION: 요청을 처리하는 리전입니다. 사용 가능한 옵션은 다음과 같습니다.

    클릭하여 사용 가능한 리전 펼치기

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: 프로젝트 ID
  • MODEL_ID: 사용할 멀티모달 모델의 모델 ID입니다. 옵션은 다음과 같습니다.
    • gemini-1.0-pro-vision
  • ROLE: 콘텐츠와 연결된 대화의 역할입니다. 싱글턴 사용 사례에서도 역할을 지정해야 합니다. 허용되는 값은 다음과 같습니다.
    • USER: 전송한 콘텐츠를 지정합니다.
  • TEXT: 프롬프트에 포함할 텍스트 안내입니다.
  • B64_BASE: 프롬프트에서 인라인을 포함할 이미지, PDF, 또는 동영상의 base64 인코딩입니다. 미디어를 인라인으로 포함할 경우 MIMETYPE도 지정해야 합니다.
  • FILE_URI: 프롬프트에 포함할 이미지 또는 동영상의 Cloud Storage URI입니다. 파일을 저장하는 버킷은 요청을 전송하는 Google Cloud 프로젝트와 같은 프로젝트에 있어야 합니다. MIMETYPE도 지정해야 합니다.
  • MIME_TYPE: data 또는 fileUri 필드에 지정된 이미지 또는 동영상의 미디어 유형입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 MIME 유형 펼치기

    • application/pdf
    • audio/mpeg
    • audio/mp3
    • audio/wav
    • image/png
    • image/jpeg
    • text/plain
    • video/mov
    • video/mpeg
    • video/mp4
    • video/mpg
    • video/avi
    • video/wmv
    • video/mpegps
    • video/flv
  • SAFETY_CATEGORY: 기준점을 구성할 안전 카테고리입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 안전 카테고리 펼치기

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: 확률에 따라 지정된 안전 카테고리에 속할 수 있는 응답 차단의 기준점입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 차단 기준점 펼치기

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE(기본)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE는 가장 많이 차단하며 BLOCK_ONLY_HIGH는 가장 적게 차단합니다.
  • TEMPERATURE: 강도는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 강도는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 강도가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

    모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 강도를 높여보세요.

  • TOP_P: Top-P는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합이 Top-P 값과 같아질 때까지 확률이 가장 높은 것부터(Top-K 참조) 가장 낮은 것까지 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.3, 0.2, 0.1이고 Top-P 값이 0.5이면 모델이 강도를 사용해서 다음 토큰으로 A 또는 B를 선택하고 C는 후보에서 제외합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • TOP_K: Top-K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 강도를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

    각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • MAX_OUTPUT_TOKENS: 응답에서 생성될 수 있는 토큰의 최대 개수입니다. 토큰은 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

    응답이 짧을수록 낮은 값을 지정하고 잠재적으로 응답이 길면 높은 값을 지정합니다.

  • STOP_SEQUENCES: 문자열 중 하나가 응답에서 발견되면 모델에 텍스트 생성을 중지하도록 지시하는 문자열 목록을 지정합니다. 문자열이 응답에 여러 번 표시되면 처음 발견된 위치에서 응답이 잘립니다. 문자열은 대소문자를 구분합니다.

    예를 들어 stopSequences가 지정되지 않았을 때 다음이 반환되면:

    public static string reverse(string myString)

    이 때 stopSequences["Str", "reverse"]로 설정된 응답이 다음과 같이 반환됩니다.

    public static string

HTTP 메서드 및 URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD

JSON 요청 본문:

{
  "contents": {
    "role": "ROLE",
    "parts": [
      {
        "inlineDATA": {
          "mimeType": "MIME_TYPE",
          "data": "B64_BASE_IMAGE"
        }
      },
      {
        "fileData": {
          "mimeType": "MIME_TYPE",
          "fileUri": "FILE_URI"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "safety_settings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
  "generation_config": {
    "temperature": TEMPERATURE,
    "topP": TOP_P,
    "topK": TOP_K,
    "candidateCount": 1,
    "maxOutputTokens": MAX_OUTPUT_TOKENS,
    "stopSequences": STOP_SEQUENCES,
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content

다음과 비슷한 JSON 응답이 수신됩니다.

curl 명령어 예시

LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro-vision"
PROJECT_ID="test-project"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json"
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
$'{
  "contents": {
    "role": "user",
    "parts": [
      {
        "fileData": {
          "mimeType": "image/png",
          "fileUri": "gs://my-bucket/images/cat.png"
        }
      },
      {
        "text": "Describe this picture."
      },
    ]
  },
  "safety_settings": {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_LOW_AND_ABOVE"
  },
  "generation_config": {
    "temperature": 0.4,
    "topP": 1,
    "topK": 32,
    "maxOutputTokens": 2048,
  }
}'

단일 PDF

다음 탭에서는 Python SDK를 사용하여 프롬프트 요청에 PDF를 포함하는 방법을 보여줍니다. 이 PDF 샘플은 모든 Gemini 멀티모달 모델에서 작동합니다.

Python

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python용 Vertex AI SDK API 참고 문서를 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generate_contentstream 매개변수를 사용합니다.

  response = model.generate_content(contents=[...], stream = True)
  

비스트리밍 응답의 경우 매개변수를 삭제하거나 매개변수를 False로 설정합니다.

샘플 코드

import vertexai

from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

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

model = GenerativeModel(model_name="gemini-1.5-pro-preview-0409")

prompt = """
Your are a very professional document summarization specialist.
Please summarize the given document.
"""

pdf_file_uri = "gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf"
pdf_file = Part.from_uri(pdf_file_uri, mime_type="application/pdf")
contents = [pdf_file, prompt]

response = model.generate_content(contents)
print(response.text)

단일 동영상

다음 각 탭에서는 프롬프트 요청에 동영상을 포함하는 다양한 방법을 보여줍니다. 이 PDF 샘플은 모든 Gemini 멀티모달 모델에서 작동합니다.

Python

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python용 Vertex AI SDK API 참고 문서를 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generate_contentstream 매개변수를 사용합니다.

  response = model.generate_content(contents=[...], stream = True)
  

비스트리밍 응답의 경우 매개변수를 삭제하거나 매개변수를 False로 설정합니다.

샘플 코드

import vertexai

from vertexai.generative_models import GenerativeModel, Part

# Initialize Vertex AI
vertexai.init(project=project_id, location=location)
# Load the model
vision_model = GenerativeModel(model_name="gemini-1.0-pro-vision-001")
# Generate text
response = vision_model.generate_content(
    [
        Part.from_uri(
            "gs://cloud-samples-data/video/animals.mp4", mime_type="video/mp4"
        ),
        "What is in the video?",
    ]
)
print(response)

C#

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용C# 설정 안내를 따르세요. 자세한 내용은 Vertex AI C# API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


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

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

        // Prompt
        string prompt = "What's in the video?";
        string videoUri = "gs://cloud-samples-data/video/animals.mp4";

        // Initialize request argument(s)
        var content = new Content
        {
            Role = "USER"
        };
        content.Parts.AddRange(new List<Part>()
        {
            new() {
                Text = prompt
            },
            new() {
                FileData = new() {
                    MimeType = "video/mp4",
                    FileUri = videoUri
                }
            }
        });

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}"
        };
        generateContentRequest.Contents.Add(content);

        // 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();
    }
}

Node.js

이 샘플을 사용해 보기 전에 생성형 AI 빠른 시작: Node.js SDK 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Gemini용 Node.js SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generateContentStream 메서드를 사용합니다.

  const streamingResp = await generativeModel.generateContentStream(request);
  

비스트리밍 응답의 경우 generateContent 메서드를 사용합니다.

  const streamingResp = await generativeModel.generateContent(request);
  

샘플 코드

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

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function sendMultiModalPromptWithVideo(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro-vision'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

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

  // Pass multimodal prompt
  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            fileData: {
              fileUri: 'gs://cloud-samples-data/video/animals.mp4',
              mimeType: 'video/mp4',
            },
          },
          {
            text: 'What is in the video?',
          },
        ],
      },
    ],
  };

  // Create the response
  const response = await generativeVisionModel.generateContent(request);
  // Wait for the response to complete
  const aggregatedResponse = await response.response;
  // Select the text from the response
  const fullTextResponse =
    aggregatedResponse.candidates[0].content.parts[0].text;

  console.log(fullTextResponse);
}

Java

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작의 Java 설정 안내를 따르세요. 자세한 내용은 Gemini용 Vertex AI Java SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generateContentStream 메서드를 사용합니다.

  public ResponseStream generateContentStream(Content content)
  

비스트리밍 응답의 경우 generateContent 메서드를 사용합니다.

  public GenerateContentResponse generateContent(Content content)
  

샘플 코드

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 MultimodalVideoInput {

  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.0-pro-vision";

    multimodalVideoInput(projectId, location, modelName);
  }

  // Analyzes the given video input.
  public static void multimodalVideoInput(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/video/animals.mp4";

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "What is in the video?",
              PartMaker.fromMimeTypeAndData("video/mp4", videoUri)
          ));

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

Go

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작의 Go 설정 안내를 따르세요. 자세한 내용은 Gemini용 Vertex AI Go SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 GenerateContentStream 메서드를 사용합니다.

  iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
  

비스트리밍 응답의 경우 GenerateContent 메서드를 사용합니다.

  resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
  

샘플 코드

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

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

// generateMultimodalContent generates a response into w, based upon the prompt
// and video provided.
// video is a Google Cloud Storage path starting with "gs://"
func generateMultimodalContent(w io.Writer, prompt, video, projectID, location, modelName string) error {
	// prompt := "What is in this video?"
	// video := "gs://cloud-samples-data/video/animals.mp4"
	// location := "us-central1"
	// modelName := "gemini-1.0-pro-vision"
	ctx := context.Background()

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

	model := client.GenerativeModel(modelName)
	model.SetTemperature(0.4)

	// Given a video file URL, prepare video file as genai.Part
	img := genai.FileData{
		MIMEType: mime.TypeByExtension(filepath.Ext(video)),
		FileURI:  video,
	}

	res, err := model.GenerateContent(ctx, img, genai.Text(prompt))
	if err != nil {
		return fmt.Errorf("unable to generate contents: %v", 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
}

REST

Vertex AI API를 사용하여 게시자 모델 엔드포인트에 POST 요청을 보내면 REST를 사용하여 텍스트 프롬프트를 테스트할 수 있습니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • GENERATE_RESPONSE_METHOD: 모델에서 생성하려는 응답 유형입니다. 모델의 응답 반환 방법을 생성하는 메서드를 선택합니다.
    • streamGenerateContent: 지연 시간에 대한 인식을 줄이기 위해 응답이 생성되는 동안 스트리밍됩니다.
    • generateContent: 완전히 생성된 후 응답이 반환됩니다.
  • LOCATION: 요청을 처리하는 리전입니다. 사용 가능한 옵션은 다음과 같습니다.

    클릭하여 사용 가능한 리전 펼치기

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: 프로젝트 ID
  • MODEL_ID: 사용할 멀티모달 모델의 모델 ID입니다. 옵션은 다음과 같습니다.
    • gemini-1.0-pro-vision
  • ROLE: 콘텐츠와 연결된 대화의 역할입니다. 싱글턴 사용 사례에서도 역할을 지정해야 합니다. 허용되는 값은 다음과 같습니다.
    • USER: 전송한 콘텐츠를 지정합니다.
  • TEXT: 프롬프트에 포함할 텍스트 안내입니다.
  • B64_BASE: 프롬프트에서 인라인을 포함할 이미지, PDF, 또는 동영상의 base64 인코딩입니다. 미디어를 인라인으로 포함할 경우 MIMETYPE도 지정해야 합니다.
  • FILE_URI: 프롬프트에 포함할 이미지 또는 동영상의 Cloud Storage URI입니다. 파일을 저장하는 버킷은 요청을 전송하는 Google Cloud 프로젝트와 같은 프로젝트에 있어야 합니다. MIMETYPE도 지정해야 합니다.
  • MIME_TYPE: data 또는 fileUri 필드에 지정된 이미지 또는 동영상의 미디어 유형입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 MIME 유형 펼치기

    • application/pdf
    • audio/mpeg
    • audio/mp3
    • audio/wav
    • image/png
    • image/jpeg
    • text/plain
    • video/mov
    • video/mpeg
    • video/mp4
    • video/mpg
    • video/avi
    • video/wmv
    • video/mpegps
    • video/flv
  • SAFETY_CATEGORY: 기준점을 구성할 안전 카테고리입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 안전 카테고리 펼치기

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: 확률에 따라 지정된 안전 카테고리에 속할 수 있는 응답 차단의 기준점입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 차단 기준점 펼치기

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE(기본)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE는 가장 많이 차단하며 BLOCK_ONLY_HIGH는 가장 적게 차단합니다.
  • TEMPERATURE: 강도는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 강도는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 강도가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

    모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 강도를 높여보세요.

  • TOP_P: Top-P는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합이 Top-P 값과 같아질 때까지 확률이 가장 높은 것부터(Top-K 참조) 가장 낮은 것까지 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.3, 0.2, 0.1이고 Top-P 값이 0.5이면 모델이 강도를 사용해서 다음 토큰으로 A 또는 B를 선택하고 C는 후보에서 제외합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • TOP_K: Top-K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 강도를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

    각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • MAX_OUTPUT_TOKENS: 응답에서 생성될 수 있는 토큰의 최대 개수입니다. 토큰은 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

    응답이 짧을수록 낮은 값을 지정하고 잠재적으로 응답이 길면 높은 값을 지정합니다.

  • STOP_SEQUENCES: 문자열 중 하나가 응답에서 발견되면 모델에 텍스트 생성을 중지하도록 지시하는 문자열 목록을 지정합니다. 문자열이 응답에 여러 번 표시되면 처음 발견된 위치에서 응답이 잘립니다. 문자열은 대소문자를 구분합니다.

    예를 들어 stopSequences가 지정되지 않았을 때 다음이 반환되면:

    public static string reverse(string myString)

    이 때 stopSequences["Str", "reverse"]로 설정된 응답이 다음과 같이 반환됩니다.

    public static string

HTTP 메서드 및 URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD

JSON 요청 본문:

{
  "contents": {
    "role": "ROLE",
    "parts": [
      {
        "inlineDATA": {
          "mimeType": "MIME_TYPE",
          "data": "B64_BASE_IMAGE"
        }
      },
      {
        "fileData": {
          "mimeType": "MIME_TYPE",
          "fileUri": "FILE_URI"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "safety_settings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
  "generation_config": {
    "temperature": TEMPERATURE,
    "topP": TOP_P,
    "topK": TOP_K,
    "candidateCount": 1,
    "maxOutputTokens": MAX_OUTPUT_TOKENS,
    "stopSequences": STOP_SEQUENCES,
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content

다음과 비슷한 JSON 응답이 수신됩니다.

curl 명령어 예시

LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro-vision"
PROJECT_ID="test-project"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json"
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
$'{
  "contents": {
    "role": "user",
    "parts": [
      {
        "fileData": {
          "mimeType": "image/png",
          "fileUri": "gs://my-bucket/images/cat.png"
        }
      },
      {
        "text": "Describe this picture."
      },
    ]
  },
  "safety_settings": {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_LOW_AND_ABOVE"
  },
  "generation_config": {
    "temperature": 0.4,
    "topP": 1,
    "topK": 32,
    "maxOutputTokens": 2048,
  }
}'

콘솔

Google Cloud 콘솔을 사용하여 멀티모달 프롬프트를 보내려면 다음을 수행합니다.

  1. Google Cloud 콘솔의 Vertex AI 섹션에서 Vertex AI 스튜디오 페이지로 이동합니다.

    Vertex AI Studio로 이동

  2. 프롬프트 설계(싱글턴)에서 열기를 클릭합니다.
  3. 모델 및 매개변수를 구성합니다.

    • 리전: 사용할 리전을 선택합니다.
    • 모델: Gemini Pro Vision을 선택합니다.
    • 강도: 슬라이더 또는 텍스트 상자를 사용해서 강도 값을 입력합니다.

      강도는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 온도(temperature)는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 온도(temperature)가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

      모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 강도를 높여보세요.

    • 토큰 제한: 슬라이더 또는 텍스트 상자를 사용하여 최대 출력 한도의 값을 입력합니다.

      응답에서 생성될 수 있는 토큰의 최대 개수입니다. 토큰은 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

      응답이 짧을수록 낮은 값을 지정하고 잠재적으로 응답이 길면 높은 값을 지정합니다.

    • 중지 시퀀스 추가: 모델이 발생할 경우 응답 생성을 중지하는 일련의 문자(공백 포함)인 중지 시퀀스를 입력합니다. 이 시퀀스는 응답에 포함되지 않습니다. 최대 5개의 중지 시퀀스를 추가할 수 있습니다.
  4. (선택사항) 고급 매개변수를 구성하려면 고급을 클릭하고 다음과 같이 구성합니다.
  5. 클릭하여 고급 구성 펼치기

    • Top-K: 슬라이더 또는 텍스트 상자를 사용하여 Top-K의 값을 입력합니다.

      Top-K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 온도(temperature)를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

      각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

      임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

    • Top-P: 슬라이더 또는 텍스트 상자를 사용하여 Top-P의 값을 입력합니다. 토큰의 확률 합계가 Top-P 값과 같아질 때까지 확률이 가장 높은 순에서 낮은 순으로 토큰이 선택됩니다. 최소 변수 결과의 경우 Top-P를 0으로 설정합니다.
  6. Google Cloud 콘솔은 생성되는 프롬프트에 대한 응답을 수신하는 스트리밍만 지원합니다. 모델과 대화를 시작하기 위해 메시지 상자에 메시지를 입력할 준비가 되었습니다.

    모델은 이전 메시지를 새 응답의 컨텍스트로 사용합니다. 프롬프트에 이미지, PDF, 또는 동영상을 포함하려면 아이콘을 클릭합니다.

    멀티모달 프롬프트에 대한 자세한 내용은 멀티모달 프롬프트를 참조하세요.

  7. (선택사항) 프롬프트를 내 프롬프트에 저장하려면 저장을 클릭합니다.
  8. (선택사항) 프롬프트에 대해 Python 코드 또는 curl 명령어를 가져오려면 코드 가져오기를 클릭합니다.
  9. (선택사항) 이전 메시지를 모두 지우려면 대화 지우기를 클릭합니다.

단일 오디오

다음은 오디오 파일을 사용하여 팟캐스트를 요약하는 방법을 보여줍니다. 이 샘플은 Gemini 1.5 Pro(미리보기)에서만 작동합니다.

Python

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python용 Vertex AI SDK API 참고 문서를 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generate_contentstream 매개변수를 사용합니다.

  response = model.generate_content(contents=[...], stream = True)
  

비스트리밍 응답의 경우 매개변수를 삭제하거나 매개변수를 False로 설정합니다.

샘플 코드


  import vertexai
  from vertexai.generative_models import GenerativeModel, Part

  # TODO(developer): Update and un-comment below lines
  # project_id = "PROJECT_ID"

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

  model = GenerativeModel(model_name="gemini-1.5-pro-preview-0409")

  prompt = """
  Please provide a summary for the audio.
  Provide chapter titles with timestamps, be concise and short, no need to provide chapter summaries.
  Do not make up any information that is not part of the audio and do not be verbose.
"""

  audio_file_uri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3"
  audio_file = Part.from_uri(audio_file_uri, mime_type="audio/mpeg")

  contents = [audio_file, prompt]

  response = model.generate_content(contents)
  print(response.text)

고급 샘플

다음 샘플은 이전 샘플보다 더 복잡합니다.

여러 이미지

다음 각 탭은 프롬프트 요청에 여러 이미지를 포함하는 다양한 방법을 보여줍니다. 이러한 이미지 샘플은 모든 Gemini 멀티모달 모델에서 작동합니다.

Python

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python용 Vertex AI SDK API 참고 문서를 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generate_contentstream 매개변수를 사용합니다.

  response = model.generate_content(contents=[...], stream = True)
  

비스트리밍 응답의 경우 매개변수를 삭제하거나 매개변수를 False로 설정합니다.

샘플 코드

import http.client
import typing
import urllib.request
import vertexai

from vertexai.generative_models import GenerativeModel, Image

# Initialize Vertex AI
vertexai.init(project=project_id, location=location)

# create helper function
def load_image_from_url(image_url: str) -> Image:
    with urllib.request.urlopen(image_url) as response:
        response = typing.cast(http.client.HTTPResponse, response)
        image_bytes = response.read()
    return Image.from_bytes(image_bytes)

# Load images from Cloud Storage URI
landmark1 = load_image_from_url(
    "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png"
)
landmark2 = load_image_from_url(
    "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png"
)
landmark3 = load_image_from_url(
    "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png"
)

# Pass multimodal prompt
model = GenerativeModel(model_name="gemini-1.0-pro-vision-001")
response = model.generate_content(
    [
        landmark1,
        "city: Rome, Landmark: the Colosseum",
        landmark2,
        "city: Beijing, Landmark: Forbidden City",
        landmark3,
    ]
)
print(response)

C#

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작: 클라이언트 라이브러리 사용C# 설정 안내를 따르세요. 자세한 내용은 Vertex AI C# API 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


using Google.Api.Gax.Grpc;
using Google.Cloud.AIPlatform.V1;
using Google.Protobuf;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

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

        // Images
        ByteString colosseum = await ReadImageFileAsync(
            "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png");

        ByteString forbiddenCity = await ReadImageFileAsync(
            "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png");

        ByteString christRedeemer = await ReadImageFileAsync(
            "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png");

        // Initialize request argument(s)
        var content = new Content
        {
            Role = "USER"
        };
        content.Parts.AddRange(new List<Part>()
        {
            new()
            {
                InlineData = new()
                {
                    MimeType = "image/png",
                    Data = colosseum

                }
            },
            new()
            {
                Text = "city: Rome, Landmark: the Colosseum"
            },
            new()
            {
                InlineData = new()
                {
                    MimeType = "image/png",
                    Data = forbiddenCity
                }
            },
            new()
            {
                Text = "city: Beijing, Landmark: Forbidden City"
            },
            new()
            {
                InlineData = new()
                {
                    MimeType = "image/png",
                    Data = christRedeemer
                }
            }
        });

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}"
        };
        generateContentRequest.Contents.Add(content);

        // 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();
    }

    private static async Task<ByteString> ReadImageFileAsync(string url)
    {
        using HttpClient client = new();
        using var response = await client.GetAsync(url);
        byte[] imageBytes = await response.Content.ReadAsByteArrayAsync();
        return ByteString.CopyFrom(imageBytes);
    }
}

Node.js

이 샘플을 사용해 보기 전에 생성형 AI 빠른 시작: Node.js SDK 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Gemini용 Node.js SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generateContentStream 메서드를 사용합니다.

  const streamingResp = await generativeModel.generateContentStream(request);
  

비스트리밍 응답의 경우 generateContent 메서드를 사용합니다.

  const streamingResp = await generativeModel.generateContent(request);
  

샘플 코드

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

async function getBase64(url) {
  const image = await axios.get(url, {responseType: 'arraybuffer'});
  return Buffer.from(image.data).toString('base64');
}

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function sendMultiModalPromptWithImage(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro-vision'
) {
  // For images, the SDK supports base64 strings
  const landmarkImage1 = await getBase64(
    'https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png'
  );
  const landmarkImage2 = await getBase64(
    'https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png'
  );
  const landmarkImage3 = await getBase64(
    'https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png'
  );

  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

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

  // Pass multimodal prompt
  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            inlineData: {
              data: landmarkImage1,
              mimeType: 'image/png',
            },
          },
          {
            text: 'city: Rome, Landmark: the Colosseum',
          },

          {
            inlineData: {
              data: landmarkImage2,
              mimeType: 'image/png',
            },
          },
          {
            text: 'city: Beijing, Landmark: Forbidden City',
          },
          {
            inlineData: {
              data: landmarkImage3,
              mimeType: 'image/png',
            },
          },
        ],
      },
    ],
  };

  // Create the response
  const response = await generativeVisionModel.generateContent(request);
  // Wait for the response to complete
  const aggregatedResponse = await response.response;
  // Select the text from the response
  const fullTextResponse =
    aggregatedResponse.candidates[0].content.parts[0].text;

  console.log(fullTextResponse);
}

Java

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작의 Java 설정 안내를 따르세요. 자세한 내용은 Gemini용 Vertex AI Java SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generateContentStream 메서드를 사용합니다.

  public ResponseStream generateContentStream(Content content)
  

비스트리밍 응답의 경우 generateContent 메서드를 사용합니다.

  public GenerateContentResponse generateContent(Content content)
  

샘플 코드

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.Content;
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.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MultimodalMultiImage {

  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.0-pro-vision";

    multimodalMultiImage(projectId, location, modelName);
  }

  // Generates content from multiple input images.
  public static void multimodalMultiImage(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)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      Content content = ContentMaker.fromMultiModalData(
          PartMaker.fromMimeTypeAndData("image/png", readImageFile(
              "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png")),
          "city: Rome, Landmark: the Colosseum",
          PartMaker.fromMimeTypeAndData("image/png", readImageFile(
              "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png")),
          "city: Beijing, Landmark: Forbidden City",
          PartMaker.fromMimeTypeAndData("image/png", readImageFile(
              "https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png"))
      );

      GenerateContentResponse response = model.generateContent(content);

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

  // Reads the image data from the given URL.
  public static byte[] readImageFile(String url) throws IOException {
    URL urlObj = new URL(url);
    HttpURLConnection connection = (HttpURLConnection) urlObj.openConnection();
    connection.setRequestMethod("GET");

    int responseCode = connection.getResponseCode();

    if (responseCode == HttpURLConnection.HTTP_OK) {
      InputStream inputStream = connection.getInputStream();
      ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

      byte[] buffer = new byte[1024];
      int bytesRead;
      while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
      }

      return outputStream.toByteArray();
    } else {
      throw new RuntimeException("Error fetching file: " + responseCode);
    }
  }
}

Go

이 샘플을 사용해 보기 전에 Vertex AI 빠른 시작의 Go 설정 안내를 따르세요. 자세한 내용은 Gemini용 Vertex AI Go SDK 참고 문서를 참조하세요.

Vertex AI에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 GenerateContentStream 메서드를 사용합니다.

  iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
  

비스트리밍 응답의 경우 GenerateContent 메서드를 사용합니다.

  resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
  

샘플 코드

import (
	"context"
	"fmt"
	"io"
	"log"
	"net/http"
	"net/url"
	"os"
	"strings"

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

func main() {
	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	location := "us-central1"
	modelName := "gemini-1.0-pro-vision"
	temperature := 0.4

	if projectID == "" {
		log.Fatal("require environment variable GOOGLE_CLOUD_PROJECT")
	}

	// construct this multimodal prompt:
	// [image of colosseum] city: Rome, Landmark: the Colosseum
	// [image of forbidden city]  city: Beijing, Landmark: the Forbidden City
	// [new image]

	// create prompt image parts
	// colosseum
	colosseum, err := partFromImageURL("https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark1.png")
	if err != nil {
		log.Fatalf("unable to read image: %v", err)
	}
	// forbidden city
	forbiddenCity, err := partFromImageURL("https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark2.png")
	if err != nil {
		log.Fatalf("unable to read image: %v", err)
	}
	// new image
	newImage, err := partFromImageURL("https://storage.googleapis.com/cloud-samples-data/vertex-ai/llm/prompts/landmark3.png")
	if err != nil {
		log.Fatalf("unable to read image: %v", err)
	}

	// create a multimodal (multipart) prompt
	prompt := []genai.Part{
		colosseum,
		genai.Text("city: Rome, Landmark: the Colosseum "),
		forbiddenCity,
		genai.Text("city: Beijing, Landmark: the Forbidden City "),
		newImage,
	}

	// generate the response
	err = generateMultimodalContent(os.Stdout, prompt, projectID, location, modelName, float32(temperature))
	if err != nil {
		log.Fatalf("unable to generate: %v", err)
	}
}

// generateMultimodalContent provide a generated response using multimodal input
func generateMultimodalContent(w io.Writer, parts []genai.Part, projectID, location, modelName string, temperature float32) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		log.Fatal(err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)
	model.SetTemperature(temperature)

	res, err := model.GenerateContent(ctx, parts...)
	if err != nil {
		return fmt.Errorf("unable to generate contents: %v", err)
	}

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

	return nil
}

// partFromImageURL create a multimodal prompt part from an image URL
func partFromImageURL(image string) (genai.Part, error) {
	var img genai.Blob

	imageURL, err := url.Parse(image)
	if err != nil {
		return img, err
	}
	res, err := http.Get(image)
	if err != nil || res.StatusCode != 200 {
		return img, err
	}
	defer res.Body.Close()
	data, err := io.ReadAll(res.Body)
	if err != nil {
		return img, fmt.Errorf("unable to read from http: %v", err)
	}

	position := strings.LastIndex(imageURL.Path, ".")
	if position == -1 {
		return img, fmt.Errorf("couldn't find a period to indicate a file extension")
	}
	ext := imageURL.Path[position+1:]

	img = genai.ImageData(ext, data)
	return img, nil
}

REST

Vertex AI API를 사용하여 게시자 모델 엔드포인트에 POST 요청을 보내면 REST를 사용하여 텍스트 프롬프트를 테스트할 수 있습니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • GENERATE_RESPONSE_METHOD: 모델에서 생성하려는 응답 유형입니다. 모델의 응답 반환 방법을 생성하는 메서드를 선택합니다.
    • streamGenerateContent: 지연 시간에 대한 인식을 줄이기 위해 응답이 생성되는 동안 스트리밍됩니다.
    • generateContent: 완전히 생성된 후 응답이 반환됩니다.
  • LOCATION: 요청을 처리하는 리전입니다. 사용 가능한 옵션은 다음과 같습니다.

    클릭하여 사용 가능한 리전 펼치기

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: 프로젝트 ID
  • MODEL_ID: 사용할 멀티모달 모델의 모델 ID입니다. 옵션은 다음과 같습니다.
    • gemini-1.0-pro-vision
  • ROLE: 콘텐츠와 연결된 대화의 역할입니다. 싱글턴 사용 사례에서도 역할을 지정해야 합니다. 허용되는 값은 다음과 같습니다.
    • USER: 전송한 콘텐츠를 지정합니다.
  • TEXT: 프롬프트에 포함할 텍스트 안내입니다.
  • B64_BASE: 프롬프트에서 인라인을 포함할 이미지, PDF, 또는 동영상의 base64 인코딩입니다. 미디어를 인라인으로 포함할 경우 MIMETYPE도 지정해야 합니다.
  • FILE_URI: 프롬프트에 포함할 이미지 또는 동영상의 Cloud Storage URI입니다. 파일을 저장하는 버킷은 요청을 전송하는 Google Cloud 프로젝트와 같은 프로젝트에 있어야 합니다. MIMETYPE도 지정해야 합니다.
  • MIME_TYPE: data 또는 fileUri 필드에 지정된 이미지 또는 동영상의 미디어 유형입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 MIME 유형 펼치기

    • application/pdf
    • audio/mpeg
    • audio/mp3
    • audio/wav
    • image/png
    • image/jpeg
    • text/plain
    • video/mov
    • video/mpeg
    • video/mp4
    • video/mpg
    • video/avi
    • video/wmv
    • video/mpegps
    • video/flv
  • SAFETY_CATEGORY: 기준점을 구성할 안전 카테고리입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 안전 카테고리 펼치기

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: 확률에 따라 지정된 안전 카테고리에 속할 수 있는 응답 차단의 기준점입니다. 허용되는 값은 다음과 같습니다.

    클릭하여 차단 기준점 펼치기

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE(기본)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE는 가장 많이 차단하며 BLOCK_ONLY_HIGH는 가장 적게 차단합니다.
  • TEMPERATURE: 강도는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 강도는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 강도가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

    모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 강도를 높여보세요.

  • TOP_P: Top-P는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합이 Top-P 값과 같아질 때까지 확률이 가장 높은 것부터(Top-K 참조) 가장 낮은 것까지 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.3, 0.2, 0.1이고 Top-P 값이 0.5이면 모델이 강도를 사용해서 다음 토큰으로 A 또는 B를 선택하고 C는 후보에서 제외합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • TOP_K: Top-K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 강도를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

    각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

    임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

  • MAX_OUTPUT_TOKENS: 응답에서 생성될 수 있는 토큰의 최대 개수입니다. 토큰은 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

    응답이 짧을수록 낮은 값을 지정하고 잠재적으로 응답이 길면 높은 값을 지정합니다.

  • STOP_SEQUENCES: 문자열 중 하나가 응답에서 발견되면 모델에 텍스트 생성을 중지하도록 지시하는 문자열 목록을 지정합니다. 문자열이 응답에 여러 번 표시되면 처음 발견된 위치에서 응답이 잘립니다. 문자열은 대소문자를 구분합니다.

    예를 들어 stopSequences가 지정되지 않았을 때 다음이 반환되면:

    public static string reverse(string myString)

    이 때 stopSequences["Str", "reverse"]로 설정된 응답이 다음과 같이 반환됩니다.

    public static string

HTTP 메서드 및 URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD

JSON 요청 본문:

{
  "contents": {
    "role": "ROLE",
    "parts": [
      {
        "inlineDATA": {
          "mimeType": "MIME_TYPE",
          "data": "B64_BASE_IMAGE"
        }
      },
      {
        "fileData": {
          "mimeType": "MIME_TYPE",
          "fileUri": "FILE_URI"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "safety_settings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
  "generation_config": {
    "temperature": TEMPERATURE,
    "topP": TOP_P,
    "topK": TOP_K,
    "candidateCount": 1,
    "maxOutputTokens": MAX_OUTPUT_TOKENS,
    "stopSequences": STOP_SEQUENCES,
  }
}

요청을 보내려면 다음 옵션 중 하나를 선택합니다.

curl

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD"

PowerShell

요청 본문을 request.json 파일에 저장하고 다음 명령어를 실행합니다.

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content

다음과 비슷한 JSON 응답이 수신됩니다.

curl 명령어 예시

LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro-vision"
PROJECT_ID="test-project"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json"
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:${GENERATE_RESPONSE_METHOD} -d \
$'{
  "contents": {
    "role": "user",
    "parts": [
      {
        "fileData": {
          "mimeType": "image/png",
          "fileUri": "gs://my-bucket/images/cat.png"
        }
      },
      {
        "text": "Describe this picture."
      },
    ]
  },
  "safety_settings": {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
    "threshold": "BLOCK_LOW_AND_ABOVE"
  },
  "generation_config": {
    "temperature": 0.4,
    "topP": 1,
    "topK": 32,
    "maxOutputTokens": 2048,
  }
}'

콘솔

Google Cloud 콘솔을 사용하여 멀티모달 프롬프트를 보내려면 다음을 수행합니다.

  1. Google Cloud 콘솔의 Vertex AI 섹션에서 Vertex AI 스튜디오 페이지로 이동합니다.

    Vertex AI Studio로 이동

  2. 프롬프트 설계(싱글턴)에서 열기를 클릭합니다.
  3. 모델 및 매개변수를 구성합니다.

    • 리전: 사용할 리전을 선택합니다.
    • 모델: Gemini Pro Vision을 선택합니다.
    • 강도: 슬라이더 또는 텍스트 상자를 사용해서 강도 값을 입력합니다.

      강도는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 온도(temperature)는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 온도(temperature)가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

      모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 강도를 높여보세요.

    • 토큰 제한: 슬라이더 또는 텍스트 상자를 사용하여 최대 출력 한도의 값을 입력합니다.

      응답에서 생성될 수 있는 토큰의 최대 개수입니다. 토큰은 약 4자(영문 기준)입니다. 토큰 100개는 단어 약 60~80개에 해당합니다.

      응답이 짧을수록 낮은 값을 지정하고 잠재적으로 응답이 길면 높은 값을 지정합니다.

    • 중지 시퀀스 추가: 모델이 발생할 경우 응답 생성을 중지하는 일련의 문자(공백 포함)인 중지 시퀀스를 입력합니다. 이 시퀀스는 응답에 포함되지 않습니다. 최대 5개의 중지 시퀀스를 추가할 수 있습니다.
  4. (선택사항) 고급 매개변수를 구성하려면 고급을 클릭하고 다음과 같이 구성합니다.
  5. 클릭하여 고급 구성 펼치기

    • Top-K: 슬라이더 또는 텍스트 상자를 사용하여 Top-K의 값을 입력합니다.

      Top-K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 온도(temperature)를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

      각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

      임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

    • Top-P: 슬라이더 또는 텍스트 상자를 사용하여 Top-P의 값을 입력합니다. 토큰의 확률 합계가 Top-P 값과 같아질 때까지 확률이 가장 높은 순에서 낮은 순으로 토큰이 선택됩니다. 최소 변수 결과의 경우 Top-P를 0으로 설정합니다.
  6. Google Cloud 콘솔은 생성되는 프롬프트에 대한 응답을 수신하는 스트리밍만 지원합니다. 모델과 대화를 시작하기 위해 메시지 상자에 메시지를 입력할 준비가 되었습니다.

    모델은 이전 메시지를 새 응답의 컨텍스트로 사용합니다. 프롬프트에 이미지, PDF, 또는 동영상을 포함하려면 아이콘을 클릭합니다.

    멀티모달 프롬프트에 대한 자세한 내용은 멀티모달 프롬프트를 참조하세요.

  7. (선택사항) 프롬프트를 내 프롬프트에 저장하려면 저장을 클릭합니다.
  8. (선택사항) 프롬프트에 대해 Python 코드 또는 curl 명령어를 가져오려면 코드 가져오기를 클릭합니다.
  9. (선택사항) 이전 메시지를 모두 지우려면 대화 지우기를 클릭합니다.

타임스탬프가 포함된 오디오

다음은 오디오 파일을 사용하여 타임스탬프가 포함된 팟캐스트 스크립트를 생성하는 방법을 보여줍니다. 이 샘플은 Gemini 1.5 Pro(미리보기)에서만 작동합니다.

import vertexai
from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"

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

model = GenerativeModel("gemini-1.5-pro-preview-0409")

prompt = """
  Can you transcribe this interview, in the format of timecode, speaker, caption.
  Use speaker A, speaker B, etc. to identify the speakers.
"""

audio_file_uri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3"
audio_file = Part.from_uri(audio_file_uri, mime_type="audio/mpeg")

contents = [audio_file, prompt]

response = model.generate_content(contents)
print(response.text)

오디오가 포함된 동영상

다음은 오디오가 포함된 동영상 파일을 요약하고 타임스탬프가 포함된 챕터를 반환하는 방법을 보여줍니다. 이 샘플은 Gemini 1.5 Pro(미리보기)에서만 작동합니다.

Python

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python용 Vertex AI SDK API 참고 문서를 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generate_contentstream 매개변수를 사용합니다.

  response = model.generate_content(contents=[...], stream = True)
  

비스트리밍 응답의 경우 매개변수를 삭제하거나 매개변수를 False로 설정합니다.

샘플 코드


  import vertexai
  from vertexai.generative_models import GenerativeModel, Part

  # TODO(developer): Update and un-comment below lines
  # project_id = "PROJECT_ID"

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

  model = GenerativeModel(model_name="gemini-1.5-pro-preview-0409")

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

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

  contents = [video_file, prompt]

  response = model.generate_content(contents)
  print(response.text)

모든 형식

다음은 이미지, 동영상, 오디오, 텍스트를 동시에 처리하는 방법을 보여줍니다. 이 샘플은 Gemini 1.5 Pro(미리보기)에서만 작동합니다.

Python

Python용 Vertex AI SDK를 설치하거나 업데이트하는 방법은 Python용 Vertex AI SDK 설치를 참조하세요. 자세한 내용은 Python용 Vertex AI SDK API 참고 문서를 참조하세요.

스트리밍 및 비스트리밍 응답

모델이 스트리밍 응답을 생성할지 또는 비스트리밍 응답을 생성할지 선택할 수 있습니다. 스트리밍은 생성되는 프롬프트에 대한 응답을 수신합니다. 즉, 모델이 출력 토큰을 생성하는 즉시 출력 토큰이 전송됩니다. 프롬프트에 대한 비스트리밍 응답은 모든 출력 토큰이 생성된 후에만 전송됩니다.

스트리밍 응답의 경우 generate_contentstream 매개변수를 사용합니다.

  response = model.generate_content(contents=[...], stream = True)
  

비스트리밍 응답의 경우 매개변수를 삭제하거나 매개변수를 False로 설정합니다.

샘플 코드


  import vertexai
  from vertexai.generative_models import GenerativeModel, Part

  # TODO(developer): Update and un-comment below lines
  # project_id = "PROJECT_ID"

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

  model = GenerativeModel(model_name="gemini-1.5-pro-preview-0409")

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

  image_file_uri = "gs://cloud-samples-data/generative-ai/image/a-man-and-a-dog.png"
  image_file = Part.from_uri(image_file_uri, mime_type="image/png")

  prompt = """
  Watch each frame in the video carefully and answer the questions.
  Only base your answers strictly on what information is available in the video attached.
  Do not make up any information that is not part of the video and do not be too
  verbose, be to the point.

  Questions:
  - When is the moment in the image happening in the video? Provide a timestamp.
  - What is the context of the moment and what does the narrator say about it?
"""

  contents = [
      video_file,
      image_file,
      prompt,
  ]

  response = model.generate_content(contents)
  print(response.text)

모델 매개변수 설정

멀티모달 모델에서 다음 모델 매개변수를 설정할 수 있습니다.

Top-P

최상위 P는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. 토큰은 확률의 합이 Top-P 값과 같아질 때까지 확률이 가장 높은 것부터(Top-K 참조) 가장 낮은 것까지 선택됩니다. 예를 들어 토큰 A, B, C의 확률이 0.3, 0.2, 0.1이고 Top-P 값이 0.5이면 모델이 온도(temperature)를 사용해서 다음 토큰으로 A 또는 B를 선택하고 C는 후보에서 제외합니다.

임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

Top-K

최상위 K는 모델이 출력용 토큰을 선택하는 방식을 변경합니다. Top-K가 1이면 선택된 토큰이 모델의 어휘에 포함된 모든 토큰 중에서 가장 확률이 높다는 의미입니다(그리디 디코딩이라고도 함). 반면에 Top-K가 3이면 온도(temperature)를 사용하여 가장 확률이 높은 3개 토큰 중에서 다음 토큰이 선택된다는 의미입니다.

각 토큰 선택 단계에서 확률이 가장 높은 Top-K 토큰이 샘플링됩니다. 그런 다음 Top-P를 기준으로 토큰을 추가로 필터링하고 온도(temperature) 샘플링을 사용하여 최종 토큰을 선택합니다.

임의성이 낮은 응답에 낮은 값을 지정하고 임의성이 높은 응답에 높은 값을 지정합니다.

온도

온도(temperature)는 응답 생성 중 샘플링에 사용되며 topPtopK가 적용될 때 발생합니다. 온도(temperature)는 토큰 선택의 무작위성 수준을 제어합니다. 온도(temperature)가 낮을수록 자유롭거나 창의적인 답변과 거리가 먼 응답이 필요한 프롬프트에 적합하고, 온도(temperature)가 높을수록 보다 다양하거나 창의적인 결과로 이어질 수 있습니다. 온도(temperature)가 0이면 확률이 가장 높은 토큰이 항상 선택됩니다. 이 경우 특정 프롬프트에 대한 응답은 대부분 확정적이지만 여전히 약간의 변형이 가능합니다.

모델이 너무 일반적이거나, 너무 짧은 응답을 반환하거나 모델이 대체 응답을 제공할 경우에는 온도(temperature)를 높여보세요.

유효한 매개변수 값

매개변수 Gemini 1.0 Pro Vision Gemini 1.5 Pro(미리보기)
Top-K 1~40(기본값 32) 지원되지 않음
Top-P 0~1.0(기본값 1.0) 0~1.0(기본값 0.95)
온도 0~1.0(기본값 0.4) 0~2.0(기본값 1.0)

미디어 요구사항

프롬프트 요청에 미디어 파일을 사용할 때는 다음 요구사항을 충족해야 합니다.

이미지 요구사항

이미지의 픽셀 수에는 제한이 없습니다. 그러나 큰 이미지는 원래 가로세로 비율을 유지하면서 최대 해상도인 3072 x 3072에 맞게 축소 및 패딩됩니다.

Gemini 1.0 Pro Vision의 경우 각 이미지는 258개의 토큰을 차지합니다.

Gemini 1.5 Pro(미리보기):

  • 가로세로 비율이 1.2보다 작거나 긴 쪽이 768보다 작은 이미지는 각각 258개의 토큰을 차지합니다.
  • 긴 쪽이 768보다 크고 가로세로 비율이 1.2보다 큰 이미지는 긴 쪽을 따라 균일한 간격으로 배치된 정사각형 타일로 표시됩니다. 타일은 원본 이미지와 함께 사용되어 Gemini의 이미지를 나타냅니다. 각 타일은 258개의 토큰을 차지합니다. 예를 들어 해상도가 1000 x 2000인 이미지의 경우 258 x 3 = 774개의 토큰이 사용됩니다(원본 이미지에 1개, 1000x1000 정사각형 타일에 2개).

프롬프트 요청에 포함할 수 있는 최대 이미지 수는 다음과 같습니다.

  • Gemini 1.0 Pro Vision의 경우 16개
  • Gemini 1.5 Pro(미리보기)의 경우 3,000개

오디오 요구사항

Gemini 1.5 Pro(미리보기)는 다음 오디오 MIME 유형을 지원합니다. Gemini 1.0 Pro Vision은 오디오를 지원하지 않습니다.

  • audio/mp3
  • audio/wav

동영상 요구사항

동영상은 1fps로 샘플링됩니다. 각 동영상 프레임은 258개의 토큰을 차지합니다.

Gemini 1.5 Pro(미리보기)의 경우에만 오디오 트랙이 동영상 프레임으로 인코딩됩니다. 오디오 트랙도 1초 트렁크로 분할되며 각 트렁크는 32개의 토큰을 차지합니다. 동영상 프레임 및 오디오 토큰은 타임스탬프와 함께 인터리브 처리됩니다. 타임스탬프는 7개의 토큰으로 표시됩니다.

Gemini 멀티모달 모델은 다음과 같은 동영상 MIME 유형을 지원합니다.

동영상 MIME 유형 Gemini 1.0 Pro Vision Gemini 1.5 Pro(미리보기)
MOV - video/mov
MPEG - video/mpeg
MP4 - video/mp4
MPG - video/mpg
AVI - video/avi
WMV - video/wmv
MPEGPS - video/mpegps
FLS - video/flv

PDF 요구사항

PDF의 필수 MIME 유형은 application/pdf입니다.

권장사항

이 섹션에는 다양한 형식에 대한 권장사항이 포함되어 있습니다.

이미지 권장사항

이미지를 사용할 때 최상의 결과를 얻으려면 다음 권장사항과 정보를 사용하세요.

  • 단일 이미지가 포함된 프롬프트를 사용하면 이미지에서 텍스트를 감지하려는 경우 여러 이미지가 포함된 프롬프트보다 더 나은 결과를 얻을 수 있습니다.
  • 프롬프트에 단일 이미지가 포함된 경우 텍스트 프롬프트 앞에 이미지를 배치합니다.
  • 프롬프트에 여러 이미지가 있고 나중에 프롬프트에서 이를 참조하거나 모델이 모델 응답에서 이를 참조하도록 하려는 경우 각 이미지 앞에 색인을 지정하면 도움이 될 수 있습니다. 색인에 a b c 또는 image 1 image 2 image 3을 사용하세요. 다음은 프롬프트에서 색인이 생성된 이미지를 사용하는 예시입니다.

    image 1 <piano_recital.jpeg>
    image 2 <family_dinner.jpeg>
    image 3 <coffee_shop.jpeg>
    
    Write a blogpost about my day using image 1 and image 2. Then, give me ideas
    for tomorrow based on image 3.
    
  • 이미지 해상도가 높을수록 결과가 좋아집니다.

  • 프롬프트에 몇 가지 예시를 포함하세요.

  • 이미지를 적절한 방향으로 회전한 후에 프롬프트에 추가하세요.

  • 흐릿한 이미지는 사용하지 마세요.

동영상 권장사항

동영상을 사용할 때 최상의 결과를 얻으려면 다음 권장사항과 정보를 사용하세요.

  • 프롬프트당 동영상을 두 개 이상 사용하지 않습니다.
  • 프롬프트에 동영상 하나가 포함된 경우 텍스트 프롬프트 앞에 동영상을 배치합니다.
  • Gemini 1.0 Pro Vision을 사용하는 경우 모델은 동영상을 동영상의 비연속 이미지 프레임으로 처리합니다. 오디오는 포함되지 않습니다. 모델에서 동영상의 일부 내용이 누락되었다면 모델이 동영상 내용을 더 많이 캡처하도록 동영상 길이를 줄여보세요.
  • Gemini 1.0 Pro Vision을 사용하는 경우 처음 2분 동안의 정보만 처리됩니다.
  • Gemini 1.0 Pro Vision을 사용하는 경우 오디오 정보 또는 타임스탬프 메타데이터가 분석되지 않습니다. 따라서 자막 오디오 같은 오디오 입력이나 속도, 리듬과 같은 시간 관련 정보가 필요한 사용 사례에서는 모델이 제대로 작동하지 않을 수 있습니다.
  • 오디오가 있는 동영상에서 타임스탬프 현지화가 필요한 경우 모델에 MM:SS 형식으로 타임스탬프를 생성하도록 요청합니다. 여기서 처음 두 자리는 분을, 마지막 두 자리는 초를 나타냅니다. 타임스탬프를 묻는 질문에는 동일한 형식을 사용합니다.

PDF 권장사항

PDF를 사용할 때 최상의 결과를 얻으려면 다음 권장사항과 정보를 사용하세요.

  • PDF는 이미지로 취급되므로 PDF의 한 페이지는 하나의 이미지로 취급됩니다.
    • 지원되는 페이지 수는 모델이 지원할 수 있는 이미지 수로 제한됩니다. Gemini 1.0 Pro Vision의 한도는 16개입니다. Gemini 1.5 Pro의 한도는 300개입니다. 문서가 긴 경우 여러 PDF로 분할하여 처리하는 것이 좋습니다.
    • PDF를 입력으로 사용하는 경우 비용은 Gemini 이미지 가격을 따릅니다. 예를 들어 Gemini API 호출에 2페이지 PDF를 포함하면 두 개의 이미지 처리에 대한 입력 수수료가 발생합니다.
  • 프롬프트에 단일 PDF가 포함된 경우 텍스트 프롬프트 앞에 PDF를 배치합니다.
  • 스캔한 이미지에 텍스트를 사용하는 대신 텍스트로 렌더링된 텍스트로 생성된 PDF를 사용합니다. 이 형식은 머신이 텍스트를 읽을 수 있으므로 스캔한 이미지 PDF에 비해 모델이 더 쉽게 수정, 검색, 조작할 수 있습니다. 따라서 계약서와 같이 텍스트가 많은 문서를 작업할 때 최적의 결과를 얻을 수 있습니다.

멀티모달 프롬프트에 대한 더 많은 팁은 멀티모달 프롬프트 설계를 참조하세요.

멀티모달 제한사항

Gemini 멀티모달 모델은 많은 멀티모달 사용자 사례에서 강력하지만 모델의 제한사항을 이해하는 것이 중요합니다.

  • 공간 추론: 이 모델은 이미지 및 PDF에 있는 텍스트 또는 객체 수를 정확하게 맞히지 못합니다. 대략적인 객체 수만 반환할 수 있습니다.
  • 의료 용도: 이 모델은 의료용 영상(예: X선 및 CT 촬영)을 해석하거나 의료 조언을 제공하는 데 적합하지 않습니다.
  • 사람 인식: 이 모델은 이미지에서 유명인이 아닌 사람을 식별하는 데 적합하지 않습니다.
  • 콘텐츠 검토: 이 모델은 Google 안전 정책을 위반하는 이미지 또는 동영상에 대해 답변을 제공하지 않습니다.
  • 정확성: 이 모델은 저품질 이미지, 회전된 이미지 또는 매우 해상도가 매우 낮은 이미지를 해석할 때 할루시네이션 또는 오류가 발생할 수 있습니다. 이 모델은 이미지 또는 PDF 문서에서 필기 입력 텍스트를 해석할 때도 할루시네이션이 발생할 수 있습니다.
  • 비음성 소리 인식: 오디오를 지원하는 모델에서 음성이 아닌 소리를 인식하는 오류가 발생할 수 있습니다.
  • 고속 모션: 초당 프레임 수(fps)가 1샘플링 레이트로 고정되어 있어 모델이 동영상의 고속 모션을 인식할 때 오류가 발생할 수 있습니다.

다음 단계