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

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

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

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

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

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

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

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

すべての Gemini モデルでコンテンツ生成がサポートされています。

パラメータ リスト

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

リクエスト本文

{
  "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
            },
            "fps": double
          }
        }
      ]
    }
  ],
  "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

省略可: string

予測を提供するためにコンテキストとして使用される、キャッシュに保存されたコンテンツの名前。形式: projects/{project}/locations/{location}/cachedContents/{cachedContent}

contents

必須: Content

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

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

systemInstruction

省略可: Content

gemini-2.0-flashgemini-2.0-flash-lite で使用できます。

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

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-2.0-flash-litegemini-2.0-flash の場合、inlineData を使用して最大 3, 000 個の画像を指定できます。

fileData

省略可: fileData

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

functionCall

省略可: FunctionCall

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

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

functionResponse

省略可: FunctionResponse

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

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

videoMetadata

省略可: VideoMetadata

動画入力の場合、動画の開始と終了のオフセットは Duration 形式で指定し、動画のフレームレートを指定します。たとえば、1:00 から 10 秒間のクリップを 1 秒あたり 10 フレームのフレームレートで指定するには、次のように設定します。

  • "startOffset": { "seconds": 60 }
  • "endOffset": { "seconds": 70 }
  • "fps": 10.0

メタデータは、動画データが 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-2.0-flash-litegemini-2.0-flash の場合、音声ファイルの最大長は 8.4 時間、動画ファイル(音声なし)の最大長は 1 時間です。詳しくは、Gemini の音声動画の要件をご覧ください。

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

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

data

bytes

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

サイズの上限: 20 MB。

FileData

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

パラメータ

mimeType

string

データの IANA MIME タイプ

fileUri

string

プロンプトに含めるファイルの URI または URL。指定できる値は以下のとおりです。

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

fileURI を指定する場合は、ファイルのメディアタイプ(mimeType)も指定する必要があります。VPC Service Controls が有効になっている場合、fileURI のメディア ファイル URL の指定はサポートされていません。

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

動画の終了オフセット。

fps

省略可: double

モデルに送信された動画のフレームレート。指定しない場合、デフォルトは 1.0 です。最低金額は 0.0 の手前の値です。最大値は 24.0 です。

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-2.0-flash-lite の範囲: 0.0 - 2.0(デフォルト: 1.0
  • gemini-2.0-flash の範囲: 0.0 - 2.0(デフォルト: 1.0

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

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-2.0-flash-lite のデフォルト: 0.95
  • gemini-2.0-flash のデフォルト: 0.95

candidateCount

省略可: int

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

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

  • gemini-2.0-flash-lite: 1-8、デフォルト: 1
  • gemini-2.0-flash: 1-8、デフォルト: 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 です。

frequencyPenalty

省略可: float

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

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

responseMimeType

省略可: string (enum)

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

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

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

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

text/plainresponseSchema での使用はサポートされていません。

responseSchema

省略可: スキーマ

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

このパラメータを使用するには、responseMimeType パラメータに text/plain 以外のサポートされている MIME タイプを指定する必要があります。

seed

省略可: int

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

responseLogprobs

省略可: boolean

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

logprobs

省略可: int

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

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

audioTimestamp

省略可: boolean

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

  • Gemini 2.0 Flash-Lite
  • Gemini 2.0 Flash

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

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

レスポンスの本文

{
  "candidates": [
    {
      "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": string
}
レスポンス要素 説明
modelVersion 生成に使用されるモデルとバージョン。例: gemini-2.0-flash-lite-001
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 の中で引用の開始位置を示す整数。startIndex はバイト単位で、UTF-8 でエンコードされたレスポンスから計算されます。
endIndex content の中で引用の終了位置を示す整数。endIndex はバイト単位で、UTF-8 でエンコードされたレスポンスから計算されます。
url 引用元の URL。引用元の URL ソースとしては、ニュースサイトや GitHub リポジトリなどがあります。
title 引用元のタイトル。引用元のタイトルとしては、ニュース記事や書籍などがあります。
license 引用に関連付けられているライセンス。
publicationDate 引用が公開された日付。有効な形式は、YYYYYYYY-MMYYYY-MM-DD です。
avgLogprobs 候補の平均ログ確率。
logprobsResult 各ステップで、最上位の候補トークン(topCandidates)と実際に選択されたトークン(chosenCandidates)を返します。
token 生成 AI モデルは、テキストデータをトークン(文字、単語、フレーズ)に分割して処理します。
logProbability 特定のトークンに対するモデルの信頼度を示すログ確率値。
promptTokenCount リクエスト内のトークン数。
candidatesTokenCount レスポンス内のトークン数。
totalTokenCount リクエストとレスポンス内のトークンの数。

テキスト生成

テキスト入力からテキスト レスポンスを生成します。

Gen AI SDK for Python

from google import genai
from google.genai.types import HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="How does AI work?",
)
print(response.text)
# Example response:
# Okay, let's break down how AI works. It's a broad field, so I'll focus on the ...
#
# Here's a simplified overview:
# ...

Python(OpenAI)

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

from google.auth import default
import google.auth.transport.requests

import openai

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

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

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

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

print(response)

Go

import (
	"context"
	"fmt"
	"io"

	"google.golang.org/genai"
)

// generateWithText shows how to generate text using a text prompt.
func generateWithText(w io.Writer) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
	})
	if err != nil {
		return fmt.Errorf("failed to create genai client: %w", err)
	}

	resp, err := client.Models.GenerateContent(ctx,
		"gemini-2.5-flash",
		genai.Text("How does AI work?"),
		nil,
	)
	if err != nil {
		return fmt.Errorf("failed to generate content: %w", err)
	}

	respText := resp.Text()

	fmt.Fprintln(w, respText)
	// Example response:
	// That's a great question! Understanding how AI works can feel like ...
	// ...
	// **1. The Foundation: Data and Algorithms**
	// ...

	return nil
}

マルチモーダル プロンプトを使用する

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

Gen AI SDK for Python

from google import genai
from google.genai.types import HttpOptions, Part

client = genai.Client(http_options=HttpOptions(api_version="v1"))
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        "What is shown in this image?",
        Part.from_uri(
            file_uri="gs://cloud-samples-data/generative-ai/image/scones.jpg",
            mime_type="image/jpeg",
        ),
    ],
)
print(response.text)
# Example response:
# The image shows a flat lay of blueberry scones arranged on parchment paper. There are ...

Python(OpenAI)

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


from google.auth import default
import google.auth.transport.requests

import openai

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

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

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

response = client.chat.completions.create(
    model="google/gemini-2.0-flash-001",
    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)

Go

import (
	"context"
	"fmt"
	"io"

	genai "google.golang.org/genai"
)

// generateWithTextImage shows how to generate text using both text and image input
func generateWithTextImage(w io.Writer) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
	})
	if err != nil {
		return fmt.Errorf("failed to create genai client: %w", err)
	}

	modelName := "gemini-2.5-flash"
	contents := []*genai.Content{
		{Parts: []*genai.Part{
			{Text: "What is shown in this image?"},
			{FileData: &genai.FileData{
				// Image source: https://storage.googleapis.com/cloud-samples-data/generative-ai/image/scones.jpg
				FileURI:  "gs://cloud-samples-data/generative-ai/image/scones.jpg",
				MIMEType: "image/jpeg",
			}},
		},
			Role: "user"},
	}

	resp, err := client.Models.GenerateContent(ctx, modelName, contents, nil)
	if err != nil {
		return fmt.Errorf("failed to generate content: %w", err)
	}

	respText := resp.Text()

	fmt.Fprintln(w, respText)

	// Example response:
	// The image shows an overhead shot of a rustic, artistic arrangement on a surface that ...

	return nil
}

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

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

Gen AI SDK for Python

from google import genai
from google.genai.types import HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))

for chunk in client.models.generate_content_stream(
    model="gemini-2.5-flash",
    contents="Why is the sky blue?",
):
    print(chunk.text, end="")
# Example response:
# The
#  sky appears blue due to a phenomenon called **Rayleigh scattering**. Here's
#  a breakdown of why:
# ...

Python(OpenAI)

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

from google.auth import default
import google.auth.transport.requests

import openai

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

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

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

response = client.chat.completions.create(
    model="google/gemini-2.0-flash-001",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
    stream=True,
)
for chunk in response:
    print(chunk)

Go

import (
	"context"
	"fmt"
	"io"

	genai "google.golang.org/genai"
)

// generateWithTextStream shows how to generate text stream using a text prompt.
func generateWithTextStream(w io.Writer) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
	})
	if err != nil {
		return fmt.Errorf("failed to create genai client: %w", err)
	}

	modelName := "gemini-2.5-flash"
	contents := genai.Text("Why is the sky blue?")

	for resp, err := range client.Models.GenerateContentStream(ctx, modelName, contents, nil) {
		if err != nil {
			return fmt.Errorf("failed to generate content: %w", err)
		}

		chunk := resp.Text()

		fmt.Fprintln(w, chunk)
	}

	// Example response:
	// The
	//  sky is blue
	//  because of a phenomenon called **Rayleigh scattering**. Here's the breakdown:
	// ...

	return nil
}

モデル バージョン

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

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

次のステップ