Gemini リクエストに画像を追加して、含まれる画像の内容を理解するタスクを実行できます。このページでは、Google Cloud コンソールと Vertex AI API を使用して、Vertex AI で Gemini に送信するリクエストに画像を追加する方法について説明します。
サポートされているモデル
次の表に、画像理解をサポートするモデルを示します。
モデル | 画像モダリティの詳細 | モデルを試す |
---|---|---|
Gemini 2.0 Flash
gemini-2.0-flash-001
|
プロンプトあたりの最大画像数: 3,000 | Gemini 2.0 Flash を試す |
Gemini 1.5 Flash
gemini-1.5-flash
|
プロンプトあたりの最大画像数: 3,000 | Gemini 1.5 Flash を試す |
Gemini 1.5 Pro
gemini-1.5-pro
|
プロンプトあたりの最大画像数: 3,000 | Gemini 1.5 Pro を試す |
Gemini 1.0 Pro Vision
gemini-1.0-pro-vision
|
プロンプトあたりの最大画像数: 16 | Gemini 1.0 Pro Vision を試す |
Gemini モデルでサポートされている言語の一覧については、モデル情報の Google モデルをご覧ください。マルチモーダル プロンプトの設計方法について詳しくは、マルチモーダル プロンプトを設計するをご覧ください。モバイルアプリやウェブアプリから Gemini を直接使用することをお考えの場合は、Android、Swift、ウェブ、Flutter アプリの Vertex AI in Firebase SDK をご覧ください。
リクエストに画像を追加する
Gemini へのリクエストに単一の画像または複数の画像を追加できます。
単一の画像
次の各タブのサンプルコードでは、画像に含まれているものを識別するさまざまな方法を示します。このサンプルは、すべての Gemini マルチモーダル モデルで動作します。
Google Gen AI SDK for Python をインストールまたは更新する方法を確認します。
詳細については、Gen AI SDK for Python API リファレンス ドキュメントまたは python-genai
GitHub リポジトリをご覧ください。
Vertex AI で Gen AI SDK を使用するように環境変数を設定します。
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=us-central1 export GOOGLE_GENAI_USE_VERTEXAI=True
Vertex AI SDK for Python のインストールまたは更新方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Vertex AI SDK for Python API リファレンス ドキュメントをご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、generate_content
で stream
パラメータを使用します。
response = model.generate_content(contents=[...], stream = True)
非ストリーミング レスポンスの場合は、パラメータを削除するか、パラメータを False
に設定します。
サンプルコード
このサンプルを試す前に、Vertex AI クイックスタートの Java の設定手順を実施してください。詳細については、Vertex AI Java SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、generateContentStream
メソッドを使用します。
public ResponseStream<GenerateContentResponse> generateContentStream(Content content)
非ストリーミング レスポンスの場合は、generateContent
メソッドを使用します。
public GenerateContentResponse generateContent(Content content)
サンプルコード
このサンプルを試す前に、Node.js SDK を使用した生成 AI クイックスタートの Node.js の設定手順を実施してください。詳細については、Node.js SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、generateContentStream
メソッドを使用します。
const streamingResp = await generativeModel.generateContentStream(request);
非ストリーミング レスポンスの場合は、generateContent
メソッドを使用します。
const streamingResp = await generativeModel.generateContent(request);
サンプルコード
このサンプルを試す前に、Vertex AI クイックスタートの Go の設定手順を実施してください。詳細については、Vertex AI Go SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、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?"))
サンプルコード
このサンプルを試す前に、Vertex AI クイックスタートの C# の設定手順を実施してください。詳細については、Vertex AI C# のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、StreamGenerateContent
メソッドを使用します。
public virtual PredictionServiceClient.StreamGenerateContentStream StreamGenerateContent(GenerateContentRequest request)
非ストリーミング レスポンスの場合は、GenerateContentAsync
メソッドを使用します。
public virtual Task<GenerateContentResponse> GenerateContentAsync(GenerateContentRequest request)
サーバーがレスポンスをストリーミングする方法の詳細については、ストリーミング RPC をご覧ください。
サンプルコード
環境をセットアップしたら、REST を使用してテキスト プロンプトをテストできます。次のサンプルは、パブリッシャー モデルのエンドポイントにリクエストを送信します。
Cloud Storage に保存されている画像を追加することも、base64 でエンコードされた画像データを使用することもできます。リクエストのデータを使用する前に、次のように置き換えます。
: リクエストを処理するリージョン。サポートされているリージョンを入力します。サポートされているリージョンの一覧については、利用可能なロケーションをご覧ください。LOCATION クリックして、利用可能なリージョンの一部を開く
us-central1
us-west4
northamerica-northeast1
us-east4
us-west1
asia-northeast3
asia-southeast1
asia-northeast1
: 実際のプロジェクト ID。PROJECT_ID
: プロンプトに含めるファイルの URI または URL。指定できる値は以下のとおりです。FILE_URI - Cloud Storage バケット URI: オブジェクトは一般公開されているか、リクエストを送信するプロジェクトと同じ Google Cloud プロジェクトに存在している必要があります。
gemini-1.5-pro
とgemini-1.5-flash
の場合、サイズの上限は 2 GB です。gemini-1.0-pro-vision
の場合、サイズの上限は 20 MB です。 - HTTP URL: ファイルの URL は一般公開されている必要があります。リクエストごとに 1 つの動画ファイル、1 つの音声ファイル、最大 10 個の画像ファイルを指定できます。音声ファイル、動画ファイル、ドキュメントのサイズは 15 MB 以下にする必要があります。
- YouTube 動画の URL: YouTube 動画は、Google Cloud コンソールのログインに使用したアカウントが所有しているか、公開されている必要があります。リクエストごとにサポートされる YouTube 動画の URL は 1 つだけです。
fileURI
を指定する場合は、ファイルのメディアタイプ(mimeType
)も指定する必要があります。VPC Service Controls が有効になっている場合、fileURI
のメディア ファイル URL の指定はサポートされていません。Cloud Storage に画像ファイルがない場合は、MIME タイプが
image/jpeg
の一般公開ファイルgs://cloud-samples-data/generative-ai/image/scones.jpg
を使用できます。この画像を表示するには、サンプルの画像ファイルを開きます。- Cloud Storage バケット URI: オブジェクトは一般公開されているか、リクエストを送信するプロジェクトと同じ Google Cloud プロジェクトに存在している必要があります。
:MIME_TYPE 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
: プロンプトに含める指示のテキスト。例:TEXT What is shown in this image?
リクエストを送信するには、次のいずれかのオプションを選択します。
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
cat > request.json << 'EOF' { "contents": { "role": "USER", "parts": [ { "fileData": { "fileUri": "FILE_URI ", "mimeType": "MIME_TYPE " } }, { "text": "TEXT " } ] } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
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/gemini-1.5-flash:generateContent"
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
@' { "contents": { "role": "USER", "parts": [ { "fileData": { "fileUri": "FILE_URI ", "mimeType": "MIME_TYPE " } }, { "text": "TEXT " } ] } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$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/gemini-1.5-flash:generateContent" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{ "candidates": [ { "content": { "role": "model", "parts": [ { "text": " The image shows a table with a cup of coffee, a bowl of blueberries, and a plate of scones with blueberries on it. There are also pink flowers on the table." } ] }, "finishReason": "STOP", "safetyRatings": [ { "category": "HARM_CATEGORY_HATE_SPEECH", "probability": "NEGLIGIBLE", "probabilityScore": 0.027742893, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.07276838 }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "probability": "NEGLIGIBLE", "probabilityScore": 0.026155617, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.07172113 }, { "category": "HARM_CATEGORY_HARASSMENT", "probability": "NEGLIGIBLE", "probabilityScore": 0.04304285, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.037608635 }, { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "probability": "NEGLIGIBLE", "probabilityScore": 0.08803312, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.09203286 } ] } ], "usageMetadata": { "promptTokenCount": 265, "candidatesTokenCount": 35, "totalTokenCount": 300 } }
リクエストのデータを使用する前に、次のように置き換えます。
: リクエストを処理するリージョン。サポートされているリージョンを入力します。サポートされているリージョンの一覧については、利用可能なロケーションをご覧ください。LOCATION クリックして、利用可能なリージョンの一部を開く
us-central1
us-west4
northamerica-northeast1
us-east4
us-west1
asia-northeast3
asia-southeast1
asia-northeast1
: 実際のプロジェクト ID。PROJECT_ID プロンプトにインラインで含める画像、PDF、または動画の Base64 エンコード。メディアをインラインで含める場合は、データのメディアタイプ(B64_BASE_IMAGE mimeType
)も指定する必要があります。
:MIME_TYPE 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
: プロンプトに含める指示のテキスト。 例:TEXT What is shown in this image?
。
リクエストを送信するには、次のいずれかのオプションを選択します。
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
cat > request.json << 'EOF' { "contents": { "role": "USER", "parts": [ { "inlineData": { "data": "B64_BASE_IMAGE ", "mimeType": "MIME_TYPE " } }, { "text": "TEXT " } ] } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
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/gemini-1.5-flash:generateContent"
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
@' { "contents": { "role": "USER", "parts": [ { "inlineData": { "data": "B64_BASE_IMAGE ", "mimeType": "MIME_TYPE " } }, { "text": "TEXT " } ] } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$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/gemini-1.5-flash:generateContent" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{ "candidates": [ { "content": { "role": "model", "parts": [ { "text": " The image shows a table with a cup of coffee, a bowl of blueberries, and a plate of scones with blueberries on it. There are also pink flowers on the table." } ] }, "finishReason": "STOP", "safetyRatings": [ { "category": "HARM_CATEGORY_HATE_SPEECH", "probability": "NEGLIGIBLE", "probabilityScore": 0.027742893, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.07276838 }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "probability": "NEGLIGIBLE", "probabilityScore": 0.026155617, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.07172113 }, { "category": "HARM_CATEGORY_HARASSMENT", "probability": "NEGLIGIBLE", "probabilityScore": 0.04304285, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.037608635 }, { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "probability": "NEGLIGIBLE", "probabilityScore": 0.08803312, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.09203286 } ] } ], "usageMetadata": { "promptTokenCount": 265, "candidatesTokenCount": 35, "totalTokenCount": 300 } }
generateContent
メソッドを使用して、レスポンスが完全に生成された後に返されるようにリクエストします。ユーザーが認識するレイテンシを短縮するには、streamGenerateContent
メソッドを使用して、生成時にレスポンスをストリーミングします。- マルチモーダル モデル ID は、URL の末尾のメソッドの前に配置されます(例:
gemini-1.5-flash
、gemini-1.0-pro-vision
)。このサンプルでは、他のモデルもサポートされている場合があります。
Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Studio] ページに移動します。
[自由形式を開く] をクリックします。
省略可: モデルとパラメータを構成します。
- Model: モデルを選択します。
- リージョン: 使用するリージョンを選択します。
温度: スライダーまたはテキスト ボックスを使用して、温度の値を入力します。
温度は、レスポンス生成時のサンプリングに使用されます。レスポンス生成は、
topP
とtopK
が適用された場合に発生します。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が0
の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。モデルが返すレスポンスが一般的すぎる、短すぎる、あるいはフォールバック(代替)レスポンスが返ってくる場合は、温度を高く設定してみてください。
出力トークンの上限: スライダーまたはテキスト ボックスを使用して、最大出力の上限値を入力します。
レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。
レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
停止シーケンスを追加: 省略可。停止シーケンスを入力します。これはスペースを含む一連の文字列です。モデルが停止シーケンスに遭遇すると、レスポンスの生成が停止します。停止シーケンスはレスポンスには含まれません。停止シーケンスは 5 つまで追加できます。
省略可: 詳細パラメータを構成するには、[詳細] をクリックして、次のように構成します。
クリックして [高度な構成] を開く
Top-K: スライダーまたはテキスト ボックスを使用して、Top-K の値を入力します(Gemini 1.5 ではサポートされていません)。
Top-K は、モデルが出力用にトークンを選択する方法を変更します。Top-K が1
の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります(グリーディ デコードとも呼ばれます)。Top-K が3
の場合は、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。トークン選択のそれぞれのステップで、最も高い確率を持つ Top-K のトークンがサンプリングされます。その後、トークンは Top-P に基づいてさらにフィルタされ、最終的なトークンは温度サンプリングを使って選択されます。
ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。
- Top-P: スライダーまたはテキスト ボックスを使用して、Top-P の値を入力します。確率の合計が Top-P の値と等しくなるまで、最も確率が高いものから最も確率が低いものの順に、トークンが選択されます。結果を最小にするには、Top-P を
0
に設定します。 - 最大レスポンス数: スライダーまたはテキスト ボックスを使用して、生成するレスポンスの数の値を入力します。
- ストリーミング レスポンス: 有効にすると、レスポンスが生成されたときに出力されます。
- 安全フィルタのしきい値: 有害なおそれのあるレスポンスが表示される可能性のしきい値を選択します。
- グラウンディングを有効にする: マルチモーダル プロンプトでは、グラウンティングはサポートされていません。
[メディアを挿入] をクリックし、ファイルのソースを選択します。
アップロードするファイルを選択して [開く] をクリックします。
使用するファイルの URL を入力し、[挿入] をクリックします。
バケットを選択してから、バケット内のインポートするファイルを選択し、[選択] をクリックします。
- このオプションを初めて選択するときに、アカウントを選択して Vertex AI Studio がアカウントにアクセスできるように同意します。合計サイズが最大 10 MB の複数のファイルをアップロードできます。1 つのファイルのサイズが 7 MB を超えないようにしてください。
- 追加するファイルをクリックします。
[選択] をクリックします。
ファイルのサムネイルが [プロンプト] ペインに表示されます。トークンの合計数も表示されます。プロンプト データがトークンの上限を超えると、トークンは切り捨てられ、データの処理には含まれません。
[プロンプト] ペインにテキスト プロンプトを入力します。
省略可: [テキストのトークン ID] と [トークン ID] を表示するには、[プロンプト] ペインで [トークン数] をクリックします。
[送信] をクリックします。
省略可: プロンプトを [マイプロンプト] に保存するには、[
保存] をクリックします。省略可: プロンプトの Python コードまたは curl コマンドを取得するには、[
コードを取得] をクリックします。
複数の画像
以下の各タブでは、プロンプト リクエストに複数の画像を含める方法を説明します。各サンプルは、次の入力の 2 つのセットを受け取ります。
- 人気のある都市のランドマークの画像
- 画像のメディアタイプ
- 画像内の都市とランドマークを示すテキスト
このサンプルでは、3 つ目の画像とメディアタイプも取り込まれますが、テキストは取り込まれません。このサンプルは、3 つ目の画像に表示されている都市とランドマークを示すテキスト レスポンスを返します。
これらの画像サンプルは、すべての Gemini マルチモーダル モデルで使用できます。
Google Gen AI SDK for Python をインストールまたは更新する方法を確認します。
詳細については、Gen AI SDK for Python API リファレンス ドキュメントまたは python-genai
GitHub リポジトリをご覧ください。
Vertex AI で Gen AI SDK を使用するように環境変数を設定します。
# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values # with appropriate values for your project. export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT export GOOGLE_CLOUD_LOCATION=us-central1 export GOOGLE_GENAI_USE_VERTEXAI=True
Vertex AI SDK for Python のインストールまたは更新方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Vertex AI SDK for Python API リファレンス ドキュメントをご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、generate_content
で stream
パラメータを使用します。
response = model.generate_content(contents=[...], stream = True)
非ストリーミング レスポンスの場合は、パラメータを削除するか、パラメータを False
に設定します。
サンプルコード
このサンプルを試す前に、Vertex AI クイックスタートの Java の設定手順を実施してください。詳細については、Vertex AI Java SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、generateContentStream
メソッドを使用します。
public ResponseStream<GenerateContentResponse> generateContentStream(Content content)
非ストリーミング レスポンスの場合は、generateContent
メソッドを使用します。
public GenerateContentResponse generateContent(Content content)
サンプルコード
このサンプルを試す前に、Node.js SDK を使用した生成 AI クイックスタートの Node.js の設定手順を実施してください。詳細については、Node.js SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、generateContentStream
メソッドを使用します。
const streamingResp = await generativeModel.generateContentStream(request);
非ストリーミング レスポンスの場合は、generateContent
メソッドを使用します。
const streamingResp = await generativeModel.generateContent(request);
サンプルコード
このサンプルを試す前に、Vertex AI クイックスタートの Go の設定手順を実施してください。詳細については、Vertex AI Go SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、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?"))
サンプルコード
このサンプルを試す前に、Vertex AI クイックスタートの C# の設定手順を実施してください。詳細については、Vertex AI C# のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の ADC の設定をご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、StreamGenerateContent
メソッドを使用します。
public virtual PredictionServiceClient.StreamGenerateContentStream StreamGenerateContent(GenerateContentRequest request)
非ストリーミング レスポンスの場合は、GenerateContentAsync
メソッドを使用します。
public virtual Task<GenerateContentResponse> GenerateContentAsync(GenerateContentRequest request)
サーバーがレスポンスをストリーミングする方法の詳細については、ストリーミング RPC をご覧ください。
サンプルコード
環境をセットアップしたら、REST を使用してテキスト プロンプトをテストできます。次のサンプルは、パブリッシャー モデルのエンドポイントにリクエストを送信します。
リクエストのデータを使用する前に、次のように置き換えます。
: リクエストを処理するリージョン。サポートされているリージョンを入力します。サポートされているリージョンの一覧については、利用可能なロケーションをご覧ください。LOCATION クリックして、利用可能なリージョンの一部を開く
us-central1
us-west4
northamerica-northeast1
us-east4
us-west1
asia-northeast3
asia-southeast1
asia-northeast1
: 実際のプロジェクト ID。PROJECT_ID
: プロンプトに含めるファイルの URI または URL。指定できる値は以下のとおりです。FILE_URI1 - Cloud Storage バケット URI: オブジェクトは一般公開されているか、リクエストを送信するプロジェクトと同じ Google Cloud プロジェクトに存在している必要があります。
gemini-1.5-pro
とgemini-1.5-flash
の場合、サイズの上限は 2 GB です。gemini-1.0-pro-vision
の場合、サイズの上限は 20 MB です。 - HTTP URL: ファイルの URL は一般公開されている必要があります。リクエストごとに 1 つの動画ファイル、1 つの音声ファイル、最大 10 個の画像ファイルを指定できます。音声ファイル、動画ファイル、ドキュメントのサイズは 15 MB 以下にする必要があります。
- YouTube 動画の URL: YouTube 動画は、Google Cloud コンソールのログインに使用したアカウントが所有しているか、公開されている必要があります。リクエストごとにサポートされる YouTube 動画の URL は 1 つだけです。
fileURI
を指定する場合は、ファイルのメディアタイプ(mimeType
)も指定する必要があります。VPC Service Controls が有効になっている場合、fileURI
のメディア ファイル URL の指定はサポートされていません。Cloud Storage に画像ファイルがない場合は、MIME タイプが
image/png
の一般公開ファイルgs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png
を使用できます。この画像を表示するには、サンプルの画像ファイルを開きます。- Cloud Storage バケット URI: オブジェクトは一般公開されているか、リクエストを送信するプロジェクトと同じ Google Cloud プロジェクトに存在している必要があります。
:MIME_TYPE data
フィールドまたはfileUri
フィールドで指定されたファイルのメディアタイプ。指定できる値は以下のとおりです。 わかりやすくするために、このサンプルでは 3 つの入力画像すべてに同じメディアタイプを使用します。クリックして 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
: プロンプトに含める指示のテキスト。 例:TEXT1 city: Rome, Landmark: the Colosseum
: プロンプトに含めるファイルの URI または URL。指定できる値は以下のとおりです。FILE_URI2 - Cloud Storage バケット URI: オブジェクトは一般公開されているか、リクエストを送信するプロジェクトと同じ Google Cloud プロジェクトに存在している必要があります。
gemini-1.5-pro
とgemini-1.5-flash
の場合、サイズの上限は 2 GB です。gemini-1.0-pro-vision
の場合、サイズの上限は 20 MB です。 - HTTP URL: ファイルの URL は一般公開されている必要があります。リクエストごとに 1 つの動画ファイル、1 つの音声ファイル、最大 10 個の画像ファイルを指定できます。音声ファイル、動画ファイル、ドキュメントのサイズは 15 MB 以下にする必要があります。
- YouTube 動画の URL: YouTube 動画は、Google Cloud コンソールのログインに使用したアカウントが所有しているか、公開されている必要があります。リクエストごとにサポートされる YouTube 動画の URL は 1 つだけです。
fileURI
を指定する場合は、ファイルのメディアタイプ(mimeType
)も指定する必要があります。VPC Service Controls が有効になっている場合、fileURI
のメディア ファイル URL の指定はサポートされていません。Cloud Storage に画像ファイルがない場合は、MIME タイプが
image/png
の一般公開ファイルgs://cloud-samples-data/vertex-ai/llm/prompts/landmark2.png
を使用できます。この画像を表示するには、サンプルの画像ファイルを開きます。- Cloud Storage バケット URI: オブジェクトは一般公開されているか、リクエストを送信するプロジェクトと同じ Google Cloud プロジェクトに存在している必要があります。
: プロンプトに含める指示のテキスト。 例:TEXT2 city: Beijing, Landmark: Forbidden City
: プロンプトに含めるファイルの URI または URL。指定できる値は以下のとおりです。FILE_URI3 - Cloud Storage バケット URI: オブジェクトは一般公開されているか、リクエストを送信するプロジェクトと同じ Google Cloud プロジェクトに存在している必要があります。
gemini-1.5-pro
とgemini-1.5-flash
の場合、サイズの上限は 2 GB です。gemini-1.0-pro-vision
の場合、サイズの上限は 20 MB です。 - HTTP URL: ファイルの URL は一般公開されている必要があります。リクエストごとに 1 つの動画ファイル、1 つの音声ファイル、最大 10 個の画像ファイルを指定できます。音声ファイル、動画ファイル、ドキュメントのサイズは 15 MB 以下にする必要があります。
- YouTube 動画の URL: YouTube 動画は、Google Cloud コンソールのログインに使用したアカウントが所有しているか、公開されている必要があります。リクエストごとにサポートされる YouTube 動画の URL は 1 つだけです。
fileURI
を指定する場合は、ファイルのメディアタイプ(mimeType
)も指定する必要があります。VPC Service Controls が有効になっている場合、fileURI
のメディア ファイル URL の指定はサポートされていません。Cloud Storage に画像ファイルがない場合は、MIME タイプが
image/png
の一般公開ファイルgs://cloud-samples-data/vertex-ai/llm/prompts/landmark3.png
を使用できます。この画像を表示するには、サンプルの画像ファイルを開きます。- Cloud Storage バケット URI: オブジェクトは一般公開されているか、リクエストを送信するプロジェクトと同じ Google Cloud プロジェクトに存在している必要があります。
リクエストを送信するには、次のいずれかのオプションを選択します。
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
cat > request.json << 'EOF' { "contents": { "role": "USER", "parts": [ { "fileData": { "fileUri": "FILE_URI1 ", "mimeType": "MIME_TYPE " } }, { "text": "TEXT1 " }, { "fileData": { "fileUri": "FILE_URI2 ", "mimeType": "MIME_TYPE " } }, { "text": "TEXT2 " }, { "fileData": { "fileUri": "FILE_URI3 ", "mimeType": "MIME_TYPE " } } ] } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
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/gemini-1.5-flash:generateContent"
リクエスト本文を request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。
@' { "contents": { "role": "USER", "parts": [ { "fileData": { "fileUri": "FILE_URI1 ", "mimeType": "MIME_TYPE " } }, { "text": "TEXT1 " }, { "fileData": { "fileUri": "FILE_URI2 ", "mimeType": "MIME_TYPE " } }, { "text": "TEXT2 " }, { "fileData": { "fileUri": "FILE_URI3 ", "mimeType": "MIME_TYPE " } } ] } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$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/gemini-1.5-flash:generateContent" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{ "candidates": [ { "content": { "role": "model", "parts": [ { "text": "city: Rio de Janeiro, Landmark: Christ the Redeemer statue \n" } ] }, "finishReason": "STOP", "safetyRatings": [ { "category": "HARM_CATEGORY_HATE_SPEECH", "probability": "NEGLIGIBLE", "probabilityScore": 0.05340333, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.08740791 }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "probability": "NEGLIGIBLE", "probabilityScore": 0.13050689, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.10338596 }, { "category": "HARM_CATEGORY_HARASSMENT", "probability": "NEGLIGIBLE", "probabilityScore": 0.05399884, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.09947021 }, { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "probability": "NEGLIGIBLE", "probabilityScore": 0.10576342, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.066934206 } ] } ], "usageMetadata": { "promptTokenCount": 791, "candidatesTokenCount": 14, "totalTokenCount": 805 } }
generateContent
メソッドを使用して、レスポンスが完全に生成された後に返されるようにリクエストします。ユーザーが認識するレイテンシを短縮するには、streamGenerateContent
メソッドを使用して、生成時にレスポンスをストリーミングします。- マルチモーダル モデル ID は、URL の末尾のメソッドの前に配置されます(例:
gemini-1.5-flash
、gemini-1.0-pro-vision
)。このサンプルでは、他のモデルもサポートされている場合があります。
Google Cloud コンソールの [Vertex AI] セクションで、[Vertex AI Studio] ページに移動します。
[自由形式を開く] をクリックします。
省略可: モデルとパラメータを構成します。
- Model: モデルを選択します。
- リージョン: 使用するリージョンを選択します。
温度: スライダーまたはテキスト ボックスを使用して、温度の値を入力します。
温度は、レスポンス生成時のサンプリングに使用されます。レスポンス生成は、
topP
とtopK
が適用された場合に発生します。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が0
の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。モデルが返すレスポンスが一般的すぎる、短すぎる、あるいはフォールバック(代替)レスポンスが返ってくる場合は、温度を高く設定してみてください。
出力トークンの上限: スライダーまたはテキスト ボックスを使用して、最大出力の上限値を入力します。
レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。
レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。
停止シーケンスを追加: 省略可。停止シーケンスを入力します。これはスペースを含む一連の文字列です。モデルが停止シーケンスに遭遇すると、レスポンスの生成が停止します。停止シーケンスはレスポンスには含まれません。停止シーケンスは 5 つまで追加できます。
省略可: 詳細パラメータを構成するには、[詳細] をクリックして、次のように構成します。
クリックして [高度な構成] を開く
Top-K: スライダーまたはテキスト ボックスを使用して、Top-K の値を入力します(Gemini 1.5 ではサポートされていません)。
Top-K は、モデルが出力用にトークンを選択する方法を変更します。Top-K が1
の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります(グリーディ デコードとも呼ばれます)。Top-K が3
の場合は、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。トークン選択のそれぞれのステップで、最も高い確率を持つ Top-K のトークンがサンプリングされます。その後、トークンは Top-P に基づいてさらにフィルタされ、最終的なトークンは温度サンプリングを使って選択されます。
ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。
- Top-P: スライダーまたはテキスト ボックスを使用して、Top-P の値を入力します。確率の合計が Top-P の値と等しくなるまで、最も確率が高いものから最も確率が低いものの順に、トークンが選択されます。結果を最小にするには、Top-P を
0
に設定します。 - 最大レスポンス数: スライダーまたはテキスト ボックスを使用して、生成するレスポンスの数の値を入力します。
- ストリーミング レスポンス: 有効にすると、レスポンスが生成されたときに出力されます。
- 安全フィルタのしきい値: 有害なおそれのあるレスポンスが表示される可能性のしきい値を選択します。
- グラウンディングを有効にする: マルチモーダル プロンプトでは、グラウンティングはサポートされていません。
[メディアを挿入] をクリックし、ファイルのソースを選択します。
アップロードするファイルを選択して [開く] をクリックします。
使用するファイルの URL を入力し、[挿入] をクリックします。
バケットを選択してから、バケット内のインポートするファイルを選択し、[選択] をクリックします。
- このオプションを初めて選択するときに、アカウントを選択して Vertex AI Studio がアカウントにアクセスできるように同意します。合計サイズが最大 10 MB の複数のファイルをアップロードできます。1 つのファイルのサイズが 7 MB を超えないようにしてください。
- 追加するファイルをクリックします。
[選択] をクリックします。
ファイルのサムネイルが [プロンプト] ペインに表示されます。トークンの合計数も表示されます。プロンプト データがトークンの上限を超えると、トークンは切り捨てられ、データの処理には含まれません。
[プロンプト] ペインにテキスト プロンプトを入力します。
省略可: [テキストのトークン ID] と [トークン ID] を表示するには、[プロンプト] ペインで [トークン数] をクリックします。
[送信] をクリックします。
省略可: プロンプトを [マイプロンプト] に保存するには、[
保存] をクリックします。省略可: プロンプトの Python コードまたは curl コマンドを取得するには、[
コードを取得] をクリックします。
オプションのモデル パラメータを設定する
各モデルには、設定可能な一連のオプション パラメータがあります。詳細については、コンテンツ生成パラメータをご覧ください。
画像の要件
Gemini マルチモーダル モデルは、次の画像 MIME タイプをサポートしています。
画像の MIME タイプ | Gemini 2.0 Flash | Gemini 1.5 Flash | Gemini 1.5 Pro | Gemini 1.0 Pro Vision |
---|---|---|---|---|
PNG - image/png |
||||
JPEG - image/jpeg |
||||
WebP - image/webp |
画像のピクセル数に特に制限はありません。ただし、大きな画像は元のアスペクト比を維持したまま、最大解像度 3,072 x 3,072 に合わせて縮小され、パディングされます。
プロンプト リクエストで許可される画像ファイルの最大数は次のとおりです。
- Gemini 1.0 Pro Vision: 16 個の画像
- Gemini 1.5 Flash、Gemini 1.5 Pro、Gemini 2.0 Flash: 3,000 個の画像
画像のトークンの計算方法は次のとおりです。
- Gemini 1.0 Pro Vision: 1 つの画像は 258 個のトークンに相当します。
- Gemini 1.5 Flash と Gemini 1.5 Pro:
- 画像の両方の寸法が 384 ピクセル以下の場合、258 個のトークンが使用されます。
- 画像の 1 つの寸法が 384 ピクセルを超える場合、画像はタイルに切り抜かれます。各タイルサイズは、デフォルトで最小の寸法(幅または高さ)を 1.5 で割った値になります。必要に応じて、各タイルは 256 ピクセル以上、768 ピクセル以下になるように調整されます。各タイルは 768x768 にサイズ変更され、258 個のトークンを使用します。
ベスト プラクティス
画像を使用する場合は、最適な結果を得るために、次のベスト プラクティスと情報を使用してください。
- 画像内のテキストを検出する必要がある場合は、1 つの画像を使用するプロンプトのほうが、複数の画像を使用するプロンプトよりも適切な結果が得られます。
- プロンプトに 1 つの画像が含まれている場合は、リクエスト内でテキスト プロンプトの前に画像を配置します。
- プロンプトに複数の画像が含まれており、これらの画像をプロンプトの後半で参照する場合、またはモデル レスポンスでモデルが参照する場合は、各画像の前にインデックスを付けると、より良い結果が得られる可能性があります。インデックスには
またはa
b
c
を使用します。プロンプトでインデックス付き画像を使用する例を次に示します。image 1
image 2
image 3
image 1
image 2 image 3 Write a blogpost about my day using image 1 and image 2. Then, give me ideas for tomorrow based on image 3. - 解像度の高い画像を使用すると、より良い結果が得られます。
- プロンプトにいくつかの例を含めます。
- 画像を適切な向きに回転してから、プロンプトに追加します。
- ぼやけた画像は使用しないでください。
制限事項
Gemini マルチモーダル モデルは多くのマルチモーダル ユースケースに対応していますが、モデルの制限事項も理解しておく必要があります。
- コンテンツの管理: Google の安全に関するポリシーに違反する画像に対する回答は拒否されます。
- 空間推論: 画像内のテキストやオブジェクトの位置を正確に特定することはできません。オブジェクトの数も推定値しか返されない場合があります。
- 医療目的での使用: 医療画像(X 線、CT スキャンなど)の解釈や医学的なアドバイスの提供には適していません。
- 人物認識: このモデルは、画像内の著名人以外の人物を特定することを目的としたものではありません。
- 精度: 低品質、回転、極端に低解像度の画像を解釈する際に、ハルシネーションや誤りが発生する可能性があります。また、画像ドキュメント内の手書きテキストを解釈する際に、ハルシネーションが発生することもあります。
次のステップ
- Gemini マルチモーダル モデルで構築を開始する - 新規のお客様は Google Cloud クレジット $300 分を無料で利用して、Gemini の機能をお試しいただけます。
- チャット プロンプト リクエストの送信方法を学習する。
- 責任ある AI のベスト プラクティスと Vertex AI の安全フィルタについて学習する。