Gemini API を使用してコンテンツを生成する

generateContent または streamGenerateContent を使用して、Gemini でコンテンツを生成します。

Gemini モデル ファミリーには、マルチモーダル プロンプト リクエストに対応するモデルが含まれています。マルチモーダルとは、プロンプトで複数のモダリティ(入力タイプ)を使用できることを示します。マルチモーダルではないモデルは、テキストのみのプロンプトを受け入れます。モダリティには、テキスト、音声、動画などがあります。

Google Cloud アカウントを作成して開始する

Vertex AI API for Gemini の使用を開始するには、Google Cloud アカウントを作成します。

アカウントを作成したら、このドキュメントを使用して、Gemini モデルのリクエスト本文モデル パラメータレスポンスの本文リクエストのサンプルを確認してください。

準備ができたら、Vertex AI API for Gemini クイックスタートで、プログラミング言語 SDK または REST API を使用して Vertex AI Gemini API にリクエストを送信する方法をご覧ください。

サポートされているモデル

モデル バージョン
Gemini 1.5 Flash gemini-1.5-flash-001
gemini-1.5-flash-002
Gemini 1.5 Pro gemini-1.5-pro-001
gemini-1.5-pro-002
Gemini 1.0 Pro Vision gemini-1.0-pro-001
gemini-1.0-pro-vision-001
Gemini 1.0 Pro gemini-1.0-pro
gemini-1.0-pro-001
gemini-1.0-pro-002

構文の例

モデルのレスポンスを生成するための構文。

非ストリーミング

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \

https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:generateContent \
-d '{
  "contents": [{
    ...
  }],
  "generationConfig": {
    ...
  },
  "safetySettings": {
    ...
  }
  ...
}'

Python

gemini_model = GenerativeModel(MODEL_ID)
generation_config = GenerationConfig(...)

model_response = gemini_model.generate_content([...], generation_config, safety_settings={...})

ストリーミング

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:streamGenerateContent \
  -d '{
    "contents": [{
      ...
    }],
    "generationConfig": {
      ...
    },
    "safetySettings": {
      ...
    }
    ...
  }'

Python

gemini_model = GenerativeModel(MODEL_ID)
model_response = gemini_model.generate_content([...], generation_config, safety_settings={...}, stream=True)

パラメータ リスト

実装の詳細については、をご覧ください。

リクエスト本文

{
  "cachedContent": string,
  "contents": [
    {
      "role": string,
      "parts": [
        {
          // Union field data can be only one of the following:
          "text": string,
          "inlineData": {
            "mimeType": string,
            "data": string
          },
          "fileData": {
            "mimeType": string,
            "fileUri": string
          },
          // End of list of possible types for union field data.

          "videoMetadata": {
            "startOffset": {
              "seconds": integer,
              "nanos": integer
            },
            "endOffset": {
              "seconds": integer,
              "nanos": integer
            }
          }
        }
      ]
    }
  ],
  "systemInstruction": {
    "role": string,
    "parts": [
      {
        "text": string
      }
    ]
  },
  "tools": [
    {
      "functionDeclarations": [
        {
          "name": string,
          "description": string,
          "parameters": {
            object (OpenAPI Object Schema)
          }
        }
      ]
    }
  ],
  "safetySettings": [
    {
      "category": enum (HarmCategory),
      "threshold": enum (HarmBlockThreshold)
    }
  ],
  "generationConfig": {
    "temperature": number,
    "topP": number,
    "topK": number,
    "candidateCount": integer,
    "maxOutputTokens": integer,
    "presencePenalty": float,
    "frequencyPenalty": float,
    "stopSequences": [
      string
    ],
    "responseMimeType": string,
    "responseSchema": schema,
    "seed": integer,
    "responseLogprobs": boolean,
    "logprobs": integer,
    "audioTimestamp": boolean
  },
  "labels": {
    string: string
  }
}

リクエスト本文には、データと次のパラメータが含まれます。

パラメータ

cachedContent

省略可: CachedContent

キャッシュに保存されたコンテンツ。キャッシュに保存されたコンテンツは、繰り返されるコンテンツを含むリクエストで使用できます。

contents

必須: Content

モデルとの現在の会話の内容。

シングルターンのクエリの場合、これは単一のインスタンスです。マルチターン クエリの場合、これは会話履歴と最新のリクエストを含む繰り返しフィールドです。

systemInstruction

省略可: Content

gemini-1.5-flashgemini-1.5-progemini-1.0-pro-002 で使用できます。

モデルのパフォーマンスを向上させるための指示。たとえば、「できるだけ簡潔に答えて」、「専門用語は使用しない」などです。

text 文字列はトークンの上限に計上されます。

systemInstructionrole フィールドは無視されるため、モデルのパフォーマンスには影響しません。

tools

省略可。システムが外部システムと対話して、モデルの知識や範囲外のアクションまたは一連のアクションを実行できるようにするコード。関数呼び出しをご覧ください。

toolConfig

省略可。関数呼び出しをご覧ください。

safetySettings

省略可: SafetySetting

安全でないコンテンツをブロックするためのリクエストごとの設定。

GenerateContentResponse.candidates に適用されます。

generationConfig

省略可: GenerationConfig

生成構成の設定。

labels

省略可: string

Key-Value ペアの形式で API 呼び出しに追加できるメタデータ。

contents

メッセージのマルチパート コンテンツを含む基本的な構造化データ型。

このクラスは、roleparts という 2 つの主要なプロパティで構成されています。role プロパティはコンテンツを生成している個人を表し、parts プロパティには複数の要素が含まれます。各要素はメッセージ内のデータ セグメントを表します。

パラメータ

role

省略可: string

メッセージを作成するエンティティの ID。次の値を使用できます。

  • user: メッセージが実際のユーザーによって送信されたことを示します(通常はユーザー生成のメッセージ)。
  • model: メッセージがモデルによって生成されたことを示します。

model 値は、マルチターンの会話中にモデルからのメッセージを会話に挿入するために使用されます。

マルチターンではない会話の場合、このフィールドは空白のままにするか、未設定のままにできます。

parts

Part

1 つのメッセージを構成する順序付きのパーツのリスト。パーツによって IANA MIME タイプが異なる場合があります。

トークンの最大数や画像の数など、入力に関する制限については、Google モデルのページでモデルの仕様をご覧ください。

リクエスト内のトークンの数を計算するには、トークン数を取得するをご覧ください。

parts

マルチパート Content メッセージの一部であるメディアを含むデータ型。

パラメータ

text

省略可: string

テキスト プロンプトまたはコード スニペット。

inlineData

省略可: Blob

元のバイトのインライン データ。

gemini-1.0-pro-vision の場合、inlineData を使用して指定できる画像は 1 個だけです。16 個までの画像を指定するには、fileData を使用します。

fileData

省略可: fileData

ファイルに保存されたデータ。

functionCall

省略可: FunctionCall

FunctionDeclaration.name フィールドを表す文字列と、モデルによって予測された関数呼び出しのパラメータを含む構造化 JSON オブジェクトが含まれます。

関数呼び出しをご覧ください。

functionResponse

省略可: FunctionResponse

FunctionCall の結果の出力。FunctionDeclaration.name フィールドを表す文字列と、関数呼び出しからの出力を含む構造化 JSON オブジェクトが含まれます。これは、モデルのコンテキストとして使用されます。

関数呼び出しをご覧ください。

videoMetadata

省略可: VideoMetadata

動画入力の場合、動画の開始と終了のオフセットは Duration 形式で指定します。たとえば、1:00 から 10 秒間のクリップを指定するには、"startOffset": { "seconds": 60 }"endOffset": { "seconds": 70 } を設定します。

メタデータは、動画データが inlineData または fileData で表されている場合にのみ指定する必要があります。

blob

コンテンツ blob。可能であれば、元のバイトではなくテキストとして送信します。

パラメータ

mimeType

string

data または fileUri フィールドで指定されたファイルのメディアタイプ。有効な値は次のとおりです。

クリックして MIME タイプを開く

  • application/pdf
  • audio/mpeg
  • audio/mp3
  • audio/wav
  • image/png
  • image/jpeg
  • image/webp
  • text/plain
  • video/mov
  • video/mpeg
  • video/mp4
  • video/mpg
  • video/avi
  • video/wmv
  • video/mpegps
  • video/flv

gemini-1.0-pro-vision の場合、動画の長さの上限は 2 分です。

Gemini 1.5 Pro と Gemini 1.5 Flash の場合、音声ファイルの最大長は 8.4 時間、動画ファイル(音声なし)の最大長は 1 時間です。詳細については、Gemini 1.5 Pro のメディアの要件をご覧ください。

テキスト ファイルは UTF-8 でエンコードされていなければなりません。テキスト ファイルの内容は、トークンの上限に計上されます。

画像の解像度に上限はありません。

data

bytes

プロンプトにインラインで含める画像、PDF、または動画の base64 エンコード。メディアをインラインで含める場合は、データのメディアタイプ(mimeType)も指定する必要があります。

サイズの上限: 20 MB。

CachedContent

期限切れになったコンテキスト キャッシュを更新するために使用されます。CachedContent を更新する場合は ttl または expireTime を指定する必要がありますが、両方を指定することはできません。詳細については、コンテキスト キャッシュを使用するをご覧ください。

パラメータ

ttl

TTL

コンテキスト キャッシュが作成または更新されてから期限切れになるまでの時間を秒単位およびナノ秒単位で指定するために使用します。

expireTime

Timestamp

コンテキスト キャッシュの有効期限を表すタイムスタンプ。

TTL

コンテキスト キャッシュが作成または更新されてから期限切れになるまでの存続期間。

パラメータ

seconds

float

コンテキスト キャッシュが作成されてから期限切れになるまでの期間の秒部分。デフォルト値は 3,600 秒です。

nano

省略可: float

コンテキスト キャッシュが作成されてから期限切れになるまでの期間のナノ秒部分。

FileData

URI またはウェブ URL データ。

パラメータ

mimeType

string

データの IANA MIME タイプ

fileUri

string

プロンプトに含めるファイルの URI または URL。有効な値は次のとおりです。

  • Cloud Storage バケット URI: オブジェクトは一般公開されているか、リクエストを送信するプロジェクトと同じ Google Cloud プロジェクトに存在している必要があります。
  • HTTP URL: ファイルの URL は一般公開されている必要があります。リクエストごとに 1 つの動画ファイルと最大 10 個の画像ファイルを指定できます。音声ファイルとドキュメントのサイズは 15 MB 以下にする必要があります。
  • YouTube 動画の URL: YouTube 動画は、Google Cloud コンソールのログインに使用したアカウントが所有しているか、公開されている必要があります。リクエストごとにサポートされる YouTube 動画の URL は 1 つだけです。

fileURI を指定する場合は、ファイルのメディアタイプ(mimeType)も指定する必要があります。

gemini-1.5-progemini-1.5-flash の場合、サイズの上限は 2 GB です。

gemini-1.0-pro-vision の場合、サイズの上限は 20 MB です。

functionCall

モデルから返される、予測された functionCallfunctionDeclaration.name を表す文字列と、パラメータとその値を含む構造化 JSON オブジェクトが含まれます。

パラメータ

name

string

呼び出す関数の名前。

args

Struct

JSON オブジェクト形式の関数パラメータと値。

パラメータの詳細については、関数呼び出しをご覧ください。

functionResponse

FunctionDeclaration.name を表す文字列を含む FunctionCall からの出力。また、関数からの出力を含む構造化 JSON オブジェクトも含まれます(これはモデルのコンテキストとして使用されます)。これには、モデル予測に基づいて作成された FunctionCall の結果が含まれている必要があります。

パラメータ

name

string

呼び出す関数の名前。

response

Struct

JSON オブジェクト形式の関数のレスポンス。

videoMetadata

入力動画コンテンツを記述するメタデータ。

パラメータ

startOffset

省略可: google.protobuf.Duration

動画の開始オフセット

endOffset

省略可: google.protobuf.Duration

動画の終了オフセット。

safetySetting

安全性設定。

パラメータ

category

省略可: HarmCategory

しきい値を構成する安全性カテゴリ。有効な値は次のとおりです。

クリックして安全性カテゴリを開く

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
  • HARM_CATEGORY_HATE_SPEECH
  • HARM_CATEGORY_HARASSMENT
  • HARM_CATEGORY_DANGEROUS_CONTENT

threshold

省略可: HarmBlockThreshold

確率に基づいて、指定された安全性カテゴリに属する可能性のあるレスポンスをブロックするためのしきい値。

  • OFF
  • BLOCK_NONE
  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

method

省略可: HarmBlockMethod

しきい値を確率スコアと重大度スコアのどちらに使用するかを指定します。指定しない場合、しきい値が確率スコアに使用されます。

harmCategory

コンテンツをブロックする有害カテゴリ。

パラメータ

HARM_CATEGORY_UNSPECIFIED

有害カテゴリが指定されていません。

HARM_CATEGORY_HATE_SPEECH

有害カテゴリはヘイトスピーチです。

HARM_CATEGORY_DANGEROUS_CONTENT

有害カテゴリは危険なコンテンツです。

HARM_CATEGORY_HARASSMENT

有害カテゴリはハラスメントです。

HARM_CATEGORY_SEXUALLY_EXPLICIT

有害カテゴリは、性的描写が露骨なコンテンツです。

harmBlockThreshold

レスポンスをブロックするために使用される確率しきい値のレベル。

パラメータ

HARM_BLOCK_THRESHOLD_UNSPECIFIED

有害ブロックのしきい値が指定されていません。

BLOCK_LOW_AND_ABOVE

低しきい値以上をブロックします(つまり、より多くのものをブロックします)。

BLOCK_MEDIUM_AND_ABOVE

中程度のしきい値以上をブロックします。

BLOCK_ONLY_HIGH

高しきい値のみをブロックします(つまり、ブロックを少なくします)。

BLOCK_NONE

ブロックなし。

OFF

すべてのカテゴリがオフになっている場合、安全性機能はオフになります。

harmBlockMethod

確率と重大度の組み合わせに基づいてレスポンスをブロックする確率しきい値。

パラメータ

HARM_BLOCK_METHOD_UNSPECIFIED

有害のブロック方法が指定されていません。

SEVERITY

有害のブロック方法で、確率スコアと重大度スコアの両方を使用します。

PROBABILITY

有害のブロック方法で、確率スコアを使用します。

generationConfig

プロンプトの生成時に使用される構成設定。

パラメータ

temperature

省略可: float

温度は、レスポンスの生成時のサンプリングに使用されます。レスポンスの生成は、topPtopK が適用された場合に発生します。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が 0 の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。

モデルが返すレスポンスが一般的すぎる、短すぎる、あるいはフォールバック(代替)レスポンスが返ってくる場合は、温度を高く設定してみてください。

  • gemini-1.5-flash の範囲: 0.0 - 2.0(デフォルト: 1.0
  • gemini-1.5-pro の範囲: 0.0 - 2.0(デフォルト: 1.0
  • gemini-1.0-pro-vision の範囲: 0.0 - 1.0(デフォルト: 0.4
  • gemini-1.0-pro-002 の範囲: 0.0 - 2.0(デフォルト: 1.0
  • gemini-1.0-pro-001 の範囲: 0.0 - 1.0(デフォルト: 0.9

詳細については、コンテンツ生成パラメータをご覧ください。

topP

省略可: float

指定した場合、Nucleus サンプリングが使用されます。

Top-P は、モデルが出力用にトークンを選択する方法を変更します。トークンは、確率の合計が Top-P 値に等しくなるまで、確率の高いもの(Top-K を参照)から低いものへと選択されます。たとえば、トークン A、B、C の確率が 0.3、0.2、0.1 で、Top-P の値が 0.5 だとします。このとき、モデルは次のトークンとして A か B を温度を使って選択し、C は候補から外します。

レスポンスのランダム性を下げる場合は小さい値を、ランダム性を上げる場合は大きい値を指定します。

  • 範囲: 0.0 - 1.0
  • gemini-1.5-flash のデフォルト: 0.95
  • gemini-1.5-pro のデフォルト: 0.95
  • gemini-1.0-pro のデフォルト: 1.0
  • gemini-1.0-pro-vision のデフォルト: 1.0

topK

省略可: Top-K は、モデルが出力用にトークンを選択する方法を変更します。Top-K が 1 の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものになります(グリーディ デコードとも呼ばれます)。Top-K が 3 の場合は、最も確率が高い上位 3 つのトークンから温度を使用して次のトークンが選択されることになります。

トークン選択のそれぞれのステップで、最も高い確率を持つ Top-K のトークンがサンプリングされます。その後、トークンは Top-P に基づいてさらにフィルタされ、最終的なトークンは温度サンプリングを使って選択されます。

レスポンスのランダム性を下げる場合は小さい値を、ランダム性を上げる場合は大きい値を指定します。

範囲: 1-40

gemini-1.0-pro-vision でのみサポートされています。

gemini-1.0-pro-vision のデフォルト: 32

candidateCount

省略可: int

レスポンスのバリエーションの数。リクエストごとに、すべての候補の出力トークンが課金されますが、入力トークンは 1 回のみ課金されます。

複数の候補を指定する機能は、generateContent で動作するプレビュー機能です(streamGenerateContent はサポートされていません)。次のモデルがサポートされています。

  • Gemini 1.5 Flash: 18、デフォルト: 1
  • Gemini 1.5 Pro: 18、デフォルト: 1
  • Gemini 1.0 Pro: 18、デフォルト: 1

maxOutputTokens

省略可: 整数

レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。

レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。

詳細については、コンテンツ生成パラメータをご覧ください。

stopSequences

省略可: List[string]

レスポンスでいずれかの文字列が検出された場合に、テキストの生成を停止するようモデルに指示する文字列のリストを指定します。レスポンスで文字列が複数回出現する場合、レスポンスでは最初に見つかった箇所が切り捨てられます。文字列では大文字と小文字が区別されます。

たとえば、stopSequences が指定されていない場合に、次のレスポンスが返されたとします。

public static string reverse(string myString)

この場合に、stopSequences["Str", "reverse"] に設定されている次のようなレスポンスが返されます。

public static string

リスト内のアイテムは最大 5 個。

詳細については、コンテンツ生成パラメータをご覧ください。

presencePenalty

省略可: float

正のペナルティ。

値が正の場合は、生成されたテキスト内の既存のトークンにペナルティが課されるため、より多様なコンテンツが生成される確率は高くなります。

presencePenalty の最大値は 2.0 の手前の値です。最小値は -2.0 です。

gemini-1.5-pro-002gemini-1.5-flash-002 でのみサポートされます。

frequencyPenalty

省略可: float

値が正の場合は、生成されたテキストに繰り返し出現するトークンにペナルティが課されるため、コンテンツが繰り返される確率は低下します。

frequencyPenalty の最大値は 2.0 の手前の値です。最小値は -2.0 です。

gemini-1.5-pro-002gemini-1.5-flash-002 でのみサポートされます。

responseMimeType

省略可: string (enum)

次のモデルで利用できます。

  • gemini-1.5-pro
  • gemini-1.5-flash

生成された候補テキストの出力レスポンスの MIME タイプ。

次の MIME タイプがサポートされています。

  • application/json: 候補の JSON レスポンス。
  • text/plain(デフォルト): プレーン テキスト出力。
  • text/x.enum: 分類タスクの場合は、レスポンス スキーマで定義されている列挙型の値を出力します。

意図しない動作を回避するために、適切なレスポンス タイプを指定します。たとえば、JSON 形式のレスポンスを必要とする場合は、text/plain ではなく application/json を指定します。

responseSchema

省略可: スキーマ

生成された候補テキストのスキーマ。詳細については、生成された出力を制御するをご覧ください。

このパラメータを使用するには、responseMimeType パラメータを指定する必要があります。

次のモデルで利用できます。

  • gemini-1.5-pro
  • gemini-1.5-flash

seed

省略可: int

シードが特定の値に固定されている場合、繰り返されるリクエストに対してモデルはベスト エフォートで同じレスポンスを提供します。確定的な出力は保証されません。また、モデルやパラメータの設定(温度など)を変更すると、同じシード値を使用してもレスポンスが変化することがあります。デフォルトでは、ランダムなシード値が使用されます。

これはプレビュー機能です。

次のモデルで利用できます。

  • gemini-1.5-pro
  • gemini-1.5-flash
  • gemini-1.0-pro-002

responseLogprobs

省略可: boolean

true の場合、各ステップでモデルによって選択されたトークンのログ確率を返します。デフォルトでは、このパラメータは false に設定されます。

次のモデルで利用できます。

  • gemini-1.5-flash

これはプレビュー機能です。

logprobs

省略可: int

各生成ステップで、最上位の候補トークンのログ確率を返します。モデルが選択したトークンとログ確率は、各ステップで常に返されますが、上位候補のリストに含まれない場合があります。15 の範囲の整数値を使用して、返される候補の数を指定します。

このパラメータを使用するには、response_logprobs を有効にする必要があります。

これはプレビュー機能です。

audioTimestamp

省略可: boolean

次のモデルで利用できます。

  • gemini-1.5-pro-002
  • gemini-1.5-flash-002

音声のみのファイルでタイムスタンプの認識を有効にします。

これはプレビュー機能です。

レスポンスの本文

{
  "candidates": [
    {
      "modelVersion": string,
      "content": {
        "parts": [
          {
            "text": string
          }
        ]
      },
      "finishReason": enum (FinishReason),
      "safetyRatings": [
        {
          "category": enum (HarmCategory),
          "probability": enum (HarmProbability),
          "blocked": boolean
        }
      ],
      "citationMetadata": {
        "citations": [
          {
            "startIndex": integer,
            "endIndex": integer,
            "uri": string,
            "title": string,
            "license": string,
            "publicationDate": {
              "year": integer,
              "month": integer,
              "day": integer
            }
          }
        ]
      },
      "avgLogprobs": double,
      "logprobsResult": {
        "topCandidates": [
          {
            "candidates": [
              {
                "token": string,
                "logProbability": float
              }
            ]
          }
        ],
        "chosenCandidates": [
          {
            "token": string,
            "logProbability": float
          }
        ]
      }
    }
  ],
  "usageMetadata": {
    "promptTokenCount": integer,
    "candidatesTokenCount": integer,
    "totalTokenCount": integer
  }
}
レスポンス要素 説明
modelVersion 生成に使用されるモデルとバージョン。例: gemini-1.5-flash-002
text 生成されたテキスト。
finishReason モデルがトークンの生成を停止した理由。空の場合、モデルはトークンの生成を停止していません。レスポンスはコンテキストとしてプロンプトを使用するため、モデルがトークンの生成を停止する動作を変更できません。
  • FINISH_REASON_STOP: モデルの自然な停止点、または指定された停止シーケンス。
  • FINISH_REASON_MAX_TOKENS: リクエストで指定されたトークンの上限に達しました。
  • FINISH_REASON_SAFETY: 安全上の理由からレスポンスにフラグが付けられたため、トークンの生成が停止されました。コンテンツ フィルタが出力をブロックしている場合、Candidate.content は空になります。
  • FINISH_REASON_RECITATION: 未承認の引用でレスポンスにフラグが付けられたため、トークンの生成が停止されました。
  • FINISH_REASON_BLOCKLIST: ブロック対象の語句がレスポンスに含まれているため、トークンの生成が停止されました。
  • FINISH_REASON_PROHIBITED_CONTENT: レスポンスに児童性的虐待のコンテンツ(CSAM)などの禁止されているコンテンツが含まれ、フラグが付けられたため、トークンの生成が停止されました。
  • FINISH_REASON_SPII: レスポンスに個人を特定できる機密情報(SPII)が含まれているため、トークンの生成が停止されました。
  • FINISH_REASON_MALFORMED_FUNCTION_CALL: 候補がブロックされました。これは、関数呼び出しの形式が正しくなく、解析できないためです。
  • FINISH_REASON_OTHER: その他の理由でトークンが停止されました。
  • FINISH_REASON_UNSPECIFIED: 終了の理由は指定されていません。
category しきい値を構成する安全性カテゴリ。有効な値は次のとおりです。

クリックして安全性カテゴリを開く

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
  • HARM_CATEGORY_HATE_SPEECH
  • HARM_CATEGORY_HARASSMENT
  • HARM_CATEGORY_DANGEROUS_CONTENT
probability コンテンツ内が有害である確率のレベル。
  • HARM_PROBABILITY_UNSPECIFIED
  • NEGLIGIBLE
  • LOW
  • MEDIUM
  • HIGH
blocked ブール値のフラグ。モデルの入力または出力がブロックされたかどうかを示す安全性属性に関連するフラグです。
startIndex content の中で引用の開始位置を示す整数。
endIndex content の中で引用の終了位置を示す整数。
url 引用元の URL。引用元の URL ソースとしては、ニュースサイトや GitHub リポジトリなどがあります。
title 引用元のタイトル。引用元のタイトルとしては、ニュース記事や書籍などがあります。
license 引用に関連付けられているライセンス。
publicationDate 引用が公開された日付。有効な形式は、YYYYYYYY-MMYYYY-MM-DD です。
avgLogprobs 候補の平均ログ確率。
token 生成 AI モデルは、テキストデータをトークン(文字、単語、フレーズ)に分割して処理します。
logProbability 特定のトークンに対するモデルの信頼度を示すログ確率値。
promptTokenCount リクエスト内のトークン数。
candidatesTokenCount レスポンス内のトークン数。
totalTokenCount リクエストとレスポンス内のトークンの数。

非ストリーミング テキスト レスポンス

テキスト入力から非ストリーミング モデルのレスポンスを生成します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: 使用するモデルのモデル ID(gemini-1.5-flash-002 など)。サポートされているモデルのリストをご覧ください。
  • TEXT: プロンプトに含める指示のテキスト。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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:generateContent"

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:generateContent" | Select-Object -Expand Content

Python

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
# ...

NodeJS

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

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;

public class QuestionAnswer {

  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.5-flash-001";

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

  // Asks a question to the specified Vertex AI Gemini model and returns the generated answer.
  public static String simpleQuestion(String projectId, String location, String modelName)
      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;
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      // Send the question to the model for processing.
      GenerateContentResponse response = model.generateContent("Why is the sky blue?");
      // Extract the generated text from the model's response.
      output = ResponseHandler.getText(response);
      return output;
    }
  }
}

Go

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#


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(OpenAI)

OpenAI ライブラリを使用して、Inference API を呼び出すことができます。詳細については、OpenAI ライブラリを使用して Vertex AI モデルを呼び出すをご覧ください。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: 使用するモデルの名前。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

リクエストの本文(JSON):

{
  "model": "google/MODEL_ID",
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python(OpenAI)

OpenAI ライブラリを使用して、Inference API を呼び出すことができます。詳細については、OpenAI ライブラリを使用して Vertex AI モデルを呼び出すをご覧ください。

import vertexai
import openai

from google.auth import default, transport

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

vertexai.init(project=PROJECT_ID, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# # OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

print(response.choices[0].message.content)
# Example response:
# The sky is blue due to a phenomenon called **Rayleigh scattering**.
# Sunlight is made up of all the colors of the rainbow.
# As sunlight enters the Earth's atmosphere ...

非ストリーミング マルチモーダル レスポンス

テキストや画像などのマルチモーダル入力から非ストリーミング モデル レスポンスを生成します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: 使用するモデルのモデル ID(gemini-1.5-flash-002 など)。サポートされているモデルのリストをご覧ください。
  • TEXT: プロンプトに含める指示のテキスト。
  • FILE_URI: データを格納するファイルの Cloud Storage URI
  • MIME_TYPE: データの IANA MIME タイプ

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
  "contents": [{
    "role": "user",
    "parts": [
      {
        "text": "TEXT"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      }
    ]
  }]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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:generateContent"

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:generateContent" | Select-Object -Expand Content

Python

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.
# ...

NodeJS

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

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;

public class Multimodal {
  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.5-flash-001";

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

  // Ask a simple question and get the response.
  public static String nonStreamingMultimodal(String projectId, String location, String modelName)
      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)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      String videoUri = "gs://cloud-samples-data/video/animals.mp4";
      String imgUri = "gs://cloud-samples-data/generative-ai/image/character.jpg";

      // Get the response from the model.
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              PartMaker.fromMimeTypeAndData("video/mp4", videoUri),
              PartMaker.fromMimeTypeAndData("image/jpeg", imgUri),
              "Are this video and image correlated?"
          ));

      // Extract the generated text from the model's response.
      String output = ResponseHandler.getText(response);
      return output;
    }
  }
}

Go

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#


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(OpenAI)

OpenAI ライブラリを使用して、Inference API を呼び出すことができます。詳細については、OpenAI ライブラリを使用して Vertex AI モデルを呼び出すをご覧ください。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: 使用するモデルの名前。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

リクエストの本文(JSON):

{
  "model": "google/MODEL_ID",
  "messages": [{
    "role": "user",
    "content": [
       {
          "type": "text",
          "text": "Describe the following image:"
       },
       {
          "type": "image_url",
          "image_url": {
             "url": "gs://generativeai-downloads/images/character.jpg"
          }
       }
     ]
  }]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python(OpenAI)

OpenAI ライブラリを使用して、Inference API を呼び出すことができます。詳細については、OpenAI ライブラリを使用して Vertex AI モデルを呼び出すをご覧ください。

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
location = "us-central1"

vertexai.init(project=PROJECT_ID, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Describe the following image:"},
                {
                    "type": "image_url",
                    "image_url": "gs://cloud-samples-data/generative-ai/image/scones.jpg",
                },
            ],
        }
    ],
)

print(response.choices[0].message.content)
# Example response:
# Here's a description of the image:
# High-angle, close-up view of a rustic arrangement featuring several blueberry scones
# on a piece of parchment paper. The scones are golden-brown...

ストリーミング テキスト レスポンス

テキスト入力からストリーミング モデルのレスポンスを生成します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: 使用するモデルのモデル ID(gemini-1.5-flash-002 など)。サポートされているモデルのリストをご覧ください。
  • TEXT: プロンプトに含める指示のテキスト。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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:streamGenerateContent"

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:streamGenerateContent" | Select-Object -Expand Content

Python

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")
responses = model.generate_content(
    "Write a story about a magic backpack.", stream=True
)

for response in responses:
    print(response.text)
# Example response:
# El
# ara wasn't looking for magic. She was looking for rent money.
# Her tiny apartment, perched precariously on the edge of Whispering Woods,
# ...

NodeJS

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

/**
 * TODO(developer): Update these variables before running the sample.
 */
const PROJECT_ID = process.env.CAIP_PROJECT_ID;
const LOCATION = process.env.LOCATION;
const MODEL = 'gemini-1.5-flash-001';

async function generateContent() {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: PROJECT_ID, location: LOCATION});

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

  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            text: 'Write a story about a magic backpack.',
          },
        ],
      },
    ],
  };

  console.log(JSON.stringify(request));

  const result = await generativeModel.generateContentStream(request);
  for await (const item of result.stream) {
    console.log(item.candidates[0].content.parts[0].text);
  }
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.generativeai.GenerativeModel;

public class StreamingQuestionAnswer {

  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.5-flash-001";

    streamingQuestion(projectId, location, modelName);
  }

  // Ask a simple question and get the response via streaming.
  public static void streamingQuestion(String projectId, String location, String modelName)
      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)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      // Stream the result.
      model.generateContentStream("Write a story about a magic backpack.")
          .stream()
          .forEach(System.out::println);

      System.out.println("Streaming complete.");
    }
  }
}

Go

import (
	"context"
	"errors"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
	"google.golang.org/api/iterator"
)

// generateContent shows how to	send a basic streaming text prompt, writing
// the response to the provided io.Writer.
func generateContent(w io.Writer, projectID, modelName string) error {
	ctx := context.Background()

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

	model := client.GenerativeModel(modelName)

	iter := model.GenerateContentStream(
		ctx,
		genai.Text("Write a story about a magic backpack."),
	)
	for {
		resp, err := iter.Next()
		if err == iterator.Done {
			return nil
		}
		if len(resp.Candidates) == 0 || len(resp.Candidates[0].Content.Parts) == 0 {
			return errors.New("empty response from model")
		}
		if err != nil {
			return err
		}
		fmt.Fprint(w, "generated response: ")
		for _, c := range resp.Candidates {
			for _, p := range c.Content.Parts {
				fmt.Fprintf(w, "%s ", p)
			}
		}
	}
}

REST(OpenAI)

OpenAI ライブラリを使用して、Inference API を呼び出すことができます。詳細については、OpenAI ライブラリを使用して Vertex AI モデルを呼び出すをご覧ください。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: 使用するモデルの名前。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

リクエストの本文(JSON):

{
  "model": "google/MODEL_ID",
  "stream": true,
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python(OpenAI)

OpenAI ライブラリを使用して、Inference API を呼び出すことができます。詳細については、OpenAI ライブラリを使用して Vertex AI モデルを呼び出すをご覧ください。

import vertexai
import openai

from google.auth import default, transport

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

vertexai.init(project=PROJECT_ID, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
    stream=True,
)
for chunk in response:
    print(chunk.choices[0].delta.content)
# Example response:
# The sky is blue due to a phenomenon called **Rayleigh scattering**. Sunlight is
# made up of all the colors of the rainbow. When sunlight enters the Earth 's atmosphere,
# it collides with tiny air molecules (mostly nitrogen and oxygen). ...

ストリーミング マルチモーダル レスポンス

テキストや画像などのマルチモーダル入力からストリーミング モデルのレスポンスを生成します。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: 使用するモデルのモデル ID(gemini-1.5-flash-002 など)。サポートされているモデルのリストをご覧ください。
  • TEXT: プロンプトに含める指示のテキスト。
  • FILE_URI1: データを格納するファイルの Cloud Storage URI
  • MIME_TYPE1: データの IANA MIME タイプ
  • FILE_URI2: データを格納するファイルの Cloud Storage URI
  • MIME_TYPE2: データの IANA MIME タイプ

HTTP メソッドと URL:

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

リクエストの本文(JSON):

{
  "contents": [{
    "role": "user",
    "parts": [
      {
        "text": "TEXT"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI1",
          "mimeType": "MIME_TYPE1"
        }
      },
      {
        "fileData": {
          "fileUri": "FILE_URI2",
          "mimeType": "MIME_TYPE2"
        }
      }
    ]
  }]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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:streamGenerateContent"

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:streamGenerateContent" | Select-Object -Expand Content

Python

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")
responses = model.generate_content(
    [
        Part.from_uri(
            "gs://cloud-samples-data/generative-ai/video/animals.mp4", "video/mp4"
        ),
        Part.from_uri(
            "gs://cloud-samples-data/generative-ai/image/character.jpg",
            "image/jpeg",
        ),
        "Are these video and image correlated?",
    ],
    stream=True,
)

for response in responses:
    print(response.candidates[0].content.text)
# Example response:
# No, the video and image are not correlated. The video shows a Google Photos
# project where animals at the Los Angeles Zoo take selfies using modified cameras.
# The image is a simple drawing of a wizard.

NodeJS

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

/**
 * TODO(developer): Update these variables before running the sample.
 */
const PROJECT_ID = process.env.CAIP_PROJECT_ID;
const LOCATION = process.env.LOCATION;
const MODEL = 'gemini-1.5-flash-001';

async function generateContent() {
  // Initialize Vertex AI
  const vertexAI = new VertexAI({project: PROJECT_ID, location: LOCATION});
  const generativeModel = vertexAI.getGenerativeModel({model: MODEL});

  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            file_data: {
              file_uri: 'gs://cloud-samples-data/video/animals.mp4',
              mime_type: 'video/mp4',
            },
          },
          {
            file_data: {
              file_uri:
                'gs://cloud-samples-data/generative-ai/image/character.jpg',
              mime_type: 'image/jpeg',
            },
          },
          {text: 'Are this video and image correlated?'},
        ],
      },
    ],
  };

  const result = await generativeModel.generateContentStream(request);

  for await (const item of result.stream) {
    console.log(item.candidates[0].content.parts[0].text);
  }
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;

public class StreamingMultimodal {
  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.5-flash-001";

    streamingMultimodal(projectId, location, modelName);
  }

  // Ask a simple question and get the response via streaming.
  public static void streamingMultimodal(String projectId, String location, String modelName)
      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)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      String videoUri = "gs://cloud-samples-data/video/animals.mp4";
      String imgUri = "gs://cloud-samples-data/generative-ai/image/character.jpg";

      // Stream the result.
      model.generateContentStream(
          ContentMaker.fromMultiModalData(
              PartMaker.fromMimeTypeAndData("video/mp4", videoUri),
              PartMaker.fromMimeTypeAndData("image/jpeg", imgUri),
              "Are this video and image correlated?"
          ))
          .stream()
          .forEach(System.out::println);
    }
  }
}

Go

import (
	"context"
	"errors"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
	"google.golang.org/api/iterator"
)

func generateContent(w io.Writer, projectID, modelName string) error {
	ctx := context.Background()

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

	model := client.GenerativeModel(modelName)
	iter := model.GenerateContentStream(
		ctx,
		genai.FileData{
			MIMEType: "video/mp4",
			FileURI:  "gs://cloud-samples-data/generative-ai/video/animals.mp4",
		},
		genai.FileData{
			MIMEType: "video/jpeg",
			FileURI:  "gs://cloud-samples-data/generative-ai/image/character.jpg",
		},
		genai.Text("Are these video and image correlated?"),
	)
	for {
		resp, err := iter.Next()
		if err == iterator.Done {
			return nil
		}
		if len(resp.Candidates) == 0 || len(resp.Candidates[0].Content.Parts) == 0 {
			return errors.New("empty response from model")
		}
		if err != nil {
			return err
		}

		fmt.Fprint(w, "generated response: ")
		for _, c := range resp.Candidates {
			for _, p := range c.Content.Parts {
				fmt.Fprintf(w, "%s ", p)
			}
		}
		fmt.Fprint(w, "\n")
	}
}

REST(OpenAI)

OpenAI ライブラリを使用して、Inference API を呼び出すことができます。詳細については、OpenAI ライブラリを使用して Vertex AI モデルを呼び出すをご覧ください。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • LOCATION: リクエストを処理するリージョン。
  • MODEL_ID: 使用するモデルの名前。

HTTP メソッドと URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

リクエストの本文(JSON):

{
  "model": "google/MODEL_ID",
  "stream": true,
  "messages": [{
    "role": "user",
    "content": [
       {
          "type": "text",
          "text": "Describe the following image:"
       },
       {
          "type": "image_url",
          "image_url": {
             "url": "gs://generativeai-downloads/images/character.jpg"
          }
       }
     ]
  }]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python(OpenAI)

OpenAI ライブラリを使用して、Inference API を呼び出すことができます。詳細については、OpenAI ライブラリを使用して Vertex AI モデルを呼び出すをご覧ください。

import vertexai
import openai

from google.auth import default, transport

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

vertexai.init(project=PROJECT_ID, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{PROJECT_ID}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Describe the following image:"},
                {
                    "type": "image_url",
                    "image_url": "gs://cloud-samples-data/generative-ai/image/scones.jpg",
                },
            ],
        }
    ],
    stream=True,
)
for chunk in response:
    print(chunk.choices[0].delta.content)
# Example response:
# Here's a description of the image:
# High-angle, close-up view of a rustic scene featuring several blueberry
# scones arranged on a piece of parchment paper...

モデル バージョン

自動更新バージョンを使用するには、末尾のバージョン番号なしでモデル名を指定します(たとえば、gemini-1.5-flash-001 ではなく gemini-1.5-flash)。

詳細については、Gemini モデルのバージョンとライフサイクルをご覧ください。

次のステップ