圖像理解

你可以在 Gemini 要求中加入圖片,讓 Gemini 瞭解圖片內容,進而執行相關工作。本頁面說明如何使用Google Cloud 控制台和 Vertex AI API,在傳送給 Vertex AI 中 Gemini 的要求中加入圖片。

支援的模型

下表列出支援圖片理解功能的模型:

型號 媒體詳細資料 MIME 類型
Gemini 2.5 Flash 圖片預覽
  • 每個提示的圖片數量上限: 3
  • 圖片大小上限: 7 MB
  • 每個提示的輸出圖片數量上限: 10
  • image/png
  • image/jpeg
  • image/webp
Gemini 2.5 Flash-Lite
  • 每個提示的圖片數量上限: 3,000 張
  • 圖片大小上限: 7 MB
  • 每個提示的輸出圖片數量上限: 10
  • image/png
  • image/jpeg
  • image/webp
Gemini 2.0 Flash (可生成圖片)
  • 每個提示的圖片數量上限: 3,000 張
  • 圖片大小上限: 7 MB
  • 每個提示的輸出圖片數量上限: 10
  • 每個專案每分鐘的權杖數上限 (TPM):
    • 高/中/預設媒體解析度:
      • 美國/亞洲:4,000 萬
      • 歐盟:1000 萬
    • 媒體解析度過低:
      • 美國/亞洲:1000 萬
      • 歐盟:300 萬
  • image/png
  • image/jpeg
  • image/webp
Gemini 2.5 Pro
  • 每個提示的圖片數量上限: 3,000 張
  • 圖片大小上限: 7 MB
  • image/png
  • image/jpeg
  • image/webp
Gemini 2.5 Flash
  • 每個提示的圖片數量上限: 3,000 張
  • 圖片大小上限: 7 MB
  • image/png
  • image/jpeg
  • image/webp
Gemini 2.0 Flash
  • 每個提示的圖片數量上限: 3,000 張
  • 圖片大小上限: 7 MB
  • 每個專案每分鐘的權杖數上限 (TPM):
    • 高/中/預設媒體解析度:
      • 美國/亞洲:4,000 萬
      • 歐盟:1000 萬
    • 媒體解析度過低:
      • 美國/亞洲:1000 萬
      • 歐盟:260 萬
  • image/png
  • image/jpeg
  • image/webp
Gemini 2.0 Flash-Lite
  • 每個提示的圖片數量上限: 3,000 張
  • 圖片大小上限: 7 MB
  • 每分鐘最多權杖數 (TPM):
    • 高/中/預設媒體解析度:
      • 美國/亞洲:670 萬
      • 歐盟:260 萬
    • 媒體解析度過低:
      • 美國/亞洲:260 萬
      • 歐盟:260 萬
  • image/png
  • image/jpeg
  • image/webp

配額指標為 generate_content_video_input_per_base_model_id_and_resolution

如需 Gemini 模型支援的語言清單,請參閱Google 模型的資訊。如要進一步瞭解如何設計多模態提示,請參閱「設計多模態提示」。如要直接從行動和網頁應用程式使用 Gemini,請參閱 Firebase AI Logic 用戶端 SDK,瞭解如何用於 Swift、Android、網頁、Flutter 和 Unity 應用程式。

在要求中新增圖片

你可以在要求中新增單張或多張圖片。

單一圖片

下列各分頁中的程式碼範例,分別說明如何以不同方式識別圖片內容。這個範例適用於所有 Gemini 多模態模型。

控制台

如要使用 Google Cloud 控制台傳送多模態提示,請按照下列步驟操作:

  1. 在 Google Cloud 控制台的 Vertex AI 專區中,前往「Vertex AI Studio」頁面。

    前往 Vertex AI Studio

  2. 按一下「開啟任意形式文字」

  3. 選用步驟:設定模型和參數:

    • 模型:選取模型。
    • 區域:選取要使用的區域。
    • 溫度:使用滑桿或文字方塊輸入溫度值。

      系統會在套用 topPtopK 時,使用溫度在生成回覆期間進行取樣。溫度參數會決定選取詞元時的隨機程度。 如果希望提示生成較不具開放性和創意性的回覆,建議調低溫度參數。另一方面,如果溫度參數較高,則可能產生較多元或有創意的結果。如果溫度參數為 0,模型一律會選取可能性最高的詞元。在這種情況下,特定提示的回覆大多是確定性的,但仍可能出現少量差異。

      如果模型的回覆太普通、太短或提供了備用回覆,再試試看調高 Temperature。

    • 輸出詞元限制:使用滑桿或文字方塊輸入輸出上限值。

      回覆內可以生成的權杖數量上限。一個詞元約為四個字元。100 個符記約等於 60 到 80 個字。

      如要取得較短的回覆,請指定較低的值;如要取得可能較長的回覆,請調高此值。

    • 新增停止序列:選用。輸入停止序列,也就是包含空格的一系列字元。如果模型遇到停止序列,就會停止生成回覆。停止序列不會包含在回覆中,且最多可新增五個停止序列。

  4. 選用:如要設定進階參數,請按一下「進階」,然後按照下列方式設定:

    按一下即可展開進階設定

    • Top-K:使用滑桿或文字方塊輸入 Top-K 的值。 (Gemini 1.5 不支援)。

      「Top-K」會影響模型選取輸出符記的方式。如果 Top-K 設為 1,代表下一個所選詞元是模型詞彙表的所有詞元中可能性最高者 (也稱為「貪婪解碼」)。如果 Top-K 設為 3,則代表模型會依據 temperature,從可能性最高的 3 個詞元中選取下一個詞元。

      在每個符記選取步驟中,模型會對機率最高的「Top-K」符記取樣,接著進一步根據「Top-P」篩選詞元,最後依 temperature 選出最終詞元。

      如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。

    • Top-P:使用滑桿或文字方塊輸入 Top-P 的值。 模型會按照可能性最高到最低的順序選取符記,直到所選符記的可能性總和等於 Top-P 值。如要讓結果的變化性降到最低,請將 Top-P 設為 0
    • 最多回應數:使用滑桿或文字方塊輸入要生成的回應數值。
    • 顯示正在產生的回應:啟用後,系統會顯示正在產生的回應。
    • 安全篩選器門檻:選取門檻,調整看見可能有害回應的機率。
    • 啟用基礎:多模態提示不支援基礎功能。

  5. 按一下「插入媒體」,然後選取檔案來源。

    上傳

    選取要上傳的檔案,然後按一下「開啟」

    使用網址上傳

    輸入要使用的檔案網址,然後按一下「插入」

    Cloud Storage

    選取值區,然後從值區中選取要匯入的檔案,並按一下「選取」

    Google 雲端硬碟

    1. 選擇帳戶,並在首次選取這個選項時,授權 Vertex AI Studio 存取帳戶。你可以上傳多個檔案,總大小上限為 10 MB。單一檔案不得超過 7 MB。
    2. 按一下要新增的檔案。
    3. 按一下「選取」

      檔案縮圖會顯示在「提示」窗格中。系統也會顯示權杖總數。如果提示資料超過符記上限,系統會截斷符記,且不會將其納入資料處理程序。

  6. 在「提示」窗格中輸入文字提示。

  7. 選用:如要查看「權杖 ID 對應的文字」和「權杖 ID」,請按一下「提示」窗格中的「權杖數量」

  8. 按一下「提交」

  9. 選用:如要將提示詞儲存至「我的提示詞」,請按一下 「儲存」

  10. 選用:如要取得提示的 Python 程式碼或 curl 指令,請按一下「取得程式碼」

Python

安裝

pip install --upgrade google-genai

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 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=global
export GOOGLE_GENAI_USE_VERTEXAI=True

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

Go

瞭解如何安裝或更新 Go

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 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=global
export GOOGLE_GENAI_USE_VERTEXAI=True

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
}

Node.js

安裝

npm install @google/genai

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 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=global
export GOOGLE_GENAI_USE_VERTEXAI=True

const {GoogleGenAI} = require('@google/genai');

const GOOGLE_CLOUD_PROJECT = process.env.GOOGLE_CLOUD_PROJECT;
const GOOGLE_CLOUD_LOCATION = process.env.GOOGLE_CLOUD_LOCATION || 'global';

async function generateContent(
  projectId = GOOGLE_CLOUD_PROJECT,
  location = GOOGLE_CLOUD_LOCATION
) {
  const ai = new GoogleGenAI({
    vertexai: true,
    project: projectId,
    location: location,
  });

  const image = {
    fileData: {
      fileUri: 'gs://cloud-samples-data/generative-ai/image/scones.jpg',
      mimeType: 'image/jpeg',
    },
  };

  const response = await ai.models.generateContent({
    model: 'gemini-2.5-flash',
    contents: [image, 'What is shown in this image?'],
  });

  console.log(response.text);

  return response.text;
}

Java

瞭解如何安裝或更新 Java

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 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=global
export GOOGLE_GENAI_USE_VERTEXAI=True


import com.google.genai.Client;
import com.google.genai.types.Content;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.HttpOptions;
import com.google.genai.types.Part;

public class TextGenerationWithTextAndImage {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String modelId = "gemini-2.5-flash";
    generateContent(modelId);
  }

  // Generates text with text and image input
  public static String generateContent(String modelId) {
    // 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 (Client client =
        Client.builder()
            .location("global")
            .vertexAI(true)
            .httpOptions(HttpOptions.builder().apiVersion("v1").build())
            .build()) {

      GenerateContentResponse response =
          client.models.generateContent(
              modelId,
              Content.fromParts(
                  Part.fromText("What is shown in this image?"),
                  Part.fromUri(
                      "gs://cloud-samples-data/generative-ai/image/scones.jpg", "image/jpeg")),
              null);

      System.out.print(response.text());
      // Example response:
      // The image shows a flat lay of blueberry scones arranged on parchment paper. There are ...
      return response.text();
    }
  }
}

REST

設定環境後,即可使用 REST 測試文字提示。下列範例會將要求傳送至發布商模型端點。

您可以加入儲存在 Cloud Storage 中的圖片,或使用 base64 編碼的圖片資料。

Cloud Storage 中的圖片

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的專案 ID
  • FILE_URI: 要納入提示的檔案 URI 或網址。可接受的值包括:
    • Cloud Storage 值區 URI:物件必須可公開讀取,或位於傳送要求的 Google Cloud 專案中。對於 gemini-2.0-flashgemini-2.0-flash-lite,大小上限為 2 GB。
    • HTTP 網址:檔案網址必須可公開讀取。每項要求可指定一個影片檔案、一個音訊檔案,以及最多 10 個圖片檔案。音訊檔、影片檔和文件不得超過 15 MB。
    • YouTube 影片網址:YouTube 影片必須由您用來登入 Google Cloud 控制台的帳戶擁有,或是設為公開。每個要求僅支援一個 YouTube 影片網址。

    指定 fileURI 時,您也必須指定檔案的媒體類型 (mimeType)。如果啟用 VPC Service Controls,系統不支援為 fileURI 指定媒體檔案網址。

    如果 Cloud Storage 中沒有圖片檔案,可以使用下列公開檔案: gs://cloud-samples-data/generative-ai/image/scones.jpg,MIME 類型為 image/jpeg。如要查看這張圖片,請開啟範例圖片檔案。

  • MIME_TYPEdatafileUri 欄位中指定檔案的媒體類型。可接受的值包括:

    按一下即可展開 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?

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 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://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-1.5-flash:generateContent"

PowerShell

將要求主體儲存在名為 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://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-1.5-flash:generateContent" | Select-Object -Expand Content

您應該會收到類似如下的 JSON 回應。

Base64 圖片資料

使用任何要求資料之前,請先替換以下項目:

  • LOCATION:處理要求的區域。輸入支援的區域。如需支援的完整地區清單,請參閱「可用位置」。

    按一下即可展開可用地區的部分清單

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID:您的專案 ID
  • B64_BASE_IMAGE
    圖片、PDF 或影片的 base64 編碼,可內嵌在提示中。內嵌媒體時,您也必須指定資料的媒體類型 (mimeType)。
  • MIME_TYPEdatafileUri 欄位中指定檔案的媒體類型。可接受的值包括:

    按一下即可展開 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?

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 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://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-1.5-flash:generateContent"

PowerShell

將要求主體儲存在名為 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://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-1.5-flash:generateContent" | Select-Object -Expand Content

您應該會收到類似如下的 JSON 回應。

請注意這個範例網址的下列事項:
  • 使用 generateContent 方法,要求在完整生成回覆後再傳回。 如要減少人類觀眾的延遲感,請使用 streamGenerateContent 方法,在生成回覆的同時串流回覆內容。
  • 多模態模型 ID 位於網址尾端,方法之前 (例如 gemini-2.0-flash)。這個範例也可能支援其他模型。

多張圖片

以下每個分頁都說明瞭在提示要求中加入多張圖片的不同方式。每個樣本都包含下列兩組輸入內容:

  • 熱門城市地標的圖片
  • 圖片的媒體類型
  • 指出圖片中城市和地標的文字

這個範例也會納入第三張圖片和媒體類型,但不會納入文字。這個範例會傳回文字回覆,指出第三張圖片中的城市和地標。

這些圖片樣本適用於所有 Gemini 多模態模型。

控制台

如要使用 Google Cloud 控制台傳送多模態提示,請按照下列步驟操作:

  1. 在 Google Cloud 控制台的 Vertex AI 專區中,前往「Vertex AI Studio」頁面。

    前往 Vertex AI Studio

  2. 按一下「開啟任意形式文字」

  3. 選用步驟:設定模型和參數:

    • 模型:選取模型。
    • 區域:選取要使用的區域。
    • 溫度:使用滑桿或文字方塊輸入溫度值。

      系統會在套用 topPtopK 時,使用溫度在生成回覆期間進行取樣。溫度參數會決定選取詞元時的隨機程度。 如果希望提示生成較不具開放性和創意性的回覆,建議調低溫度參數。另一方面,如果溫度參數較高,則可能產生較多元或有創意的結果。如果溫度參數為 0,模型一律會選取可能性最高的詞元。在這種情況下,特定提示的回覆大多是確定性的,但仍可能出現少量差異。

      如果模型的回覆太普通、太短或提供了備用回覆,再試試看調高 Temperature。

    • 輸出詞元限制:使用滑桿或文字方塊輸入輸出上限值。

      回覆內可以生成的權杖數量上限。一個詞元約為四個字元。100 個符記約等於 60 到 80 個字。

      如要取得較短的回覆,請指定較低的值;如要取得可能較長的回覆,請調高此值。

    • 新增停止序列:選用。輸入停止序列,也就是包含空格的一系列字元。如果模型遇到停止序列,就會停止生成回覆。停止序列不會包含在回覆中,且最多可新增五個停止序列。

  4. 選用:如要設定進階參數,請按一下「進階」,然後按照下列方式設定:

    按一下即可展開進階設定

    • Top-K:使用滑桿或文字方塊輸入 Top-K 的值。 (Gemini 1.5 不支援)。

      「Top-K」會影響模型選取輸出符記的方式。如果 Top-K 設為 1,代表下一個所選詞元是模型詞彙表的所有詞元中可能性最高者 (也稱為「貪婪解碼」)。如果 Top-K 設為 3,則代表模型會依據 temperature,從可能性最高的 3 個詞元中選取下一個詞元。

      在每個符記選取步驟中,模型會對機率最高的「Top-K」符記取樣,接著進一步根據「Top-P」篩選詞元,最後依 temperature 選出最終詞元。

      如要取得較不隨機的回覆,請指定較低的值;如要取得較隨機的回覆,請調高此值。

    • Top-P:使用滑桿或文字方塊輸入 Top-P 的值。 模型會按照可能性最高到最低的順序選取符記,直到所選符記的可能性總和等於 Top-P 值。如要讓結果的變化性降到最低,請將 Top-P 設為 0
    • 最多回應數:使用滑桿或文字方塊輸入要生成的回應數值。
    • 顯示正在產生的回應:啟用後,系統會顯示正在產生的回應。
    • 安全篩選器門檻:選取門檻,調整看見可能有害回應的機率。
    • 啟用基礎:多模態提示不支援基礎功能。

  5. 按一下「插入媒體」,然後選取檔案來源。

    上傳

    選取要上傳的檔案,然後按一下「開啟」

    使用網址上傳

    輸入要使用的檔案網址,然後按一下「插入」

    Cloud Storage

    選取值區,然後從值區中選取要匯入的檔案,並按一下「選取」

    Google 雲端硬碟

    1. 選擇帳戶,並在首次選取這個選項時,授權 Vertex AI Studio 存取帳戶。你可以上傳多個檔案,總大小上限為 10 MB。單一檔案不得超過 7 MB。
    2. 按一下要新增的檔案。
    3. 按一下「選取」

      檔案縮圖會顯示在「提示」窗格中。系統也會顯示權杖總數。如果提示資料超過符記上限,系統會截斷符記,且不會將其納入資料處理程序。

  6. 在「提示」窗格中輸入文字提示。

  7. 選用:如要查看「權杖 ID 對應的文字」和「權杖 ID」,請按一下「提示」窗格中的「權杖數量」

  8. 按一下「提交」

  9. 選用:如要將提示詞儲存至「我的提示詞」,請按一下 「儲存」

  10. 選用:如要取得提示的 Python 程式碼或 curl 指令,請按一下「取得程式碼」

Python

安裝

pip install --upgrade google-genai

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 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=global
export GOOGLE_GENAI_USE_VERTEXAI=True

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

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

# Read content from GCS
gcs_file_img_path = "gs://cloud-samples-data/generative-ai/image/scones.jpg"

# Read content from a local file
with open("test_data/latte.jpg", "rb") as f:
    local_file_img_bytes = f.read()

response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        "Generate a list of all the objects contained in both images.",
        Part.from_uri(file_uri=gcs_file_img_path, mime_type="image/jpeg"),
        Part.from_bytes(data=local_file_img_bytes, mime_type="image/jpeg"),
    ],
)
print(response.text)
# Example response:
# Okay, here's the list of objects present in both images:
# ...

Go

瞭解如何安裝或更新 Go

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 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=global
export GOOGLE_GENAI_USE_VERTEXAI=True

import (
	"context"
	"fmt"
	"io"
	"os"

	genai "google.golang.org/genai"
)

// generateWithMultiImg shows how to generate text using multiple image inputs.
func generateWithMultiImg(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)
	}

	// TODO(Developer): Update the path to file (image source:
	//   https://storage.googleapis.com/cloud-samples-data/generative-ai/image/latte.jpg )
	imageBytes, err := os.ReadFile("./latte.jpg")
	if err != nil {
		return fmt.Errorf("failed to read image: %w", err)
	}

	contents := []*genai.Content{
		{Parts: []*genai.Part{
			{Text: "Write an advertising jingle based on the items in both images."},
			{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",
			}},
			{InlineData: &genai.Blob{
				Data:     imageBytes,
				MIMEType: "image/jpeg",
			}},
		}},
	}
	modelName := "gemini-2.5-flash"

	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:
	// Okay, here's an advertising jingle inspired by the blueberry scones, coffee, flowers, chocolate cake, and latte:
	//
	// (Upbeat, jazzy music)
	// ...

	return nil
}

Node.js

安裝

npm install @google/genai

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 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=global
export GOOGLE_GENAI_USE_VERTEXAI=True

const {GoogleGenAI} = require('@google/genai');

const GOOGLE_CLOUD_PROJECT = process.env.GOOGLE_CLOUD_PROJECT;
const GOOGLE_CLOUD_LOCATION = process.env.GOOGLE_CLOUD_LOCATION || 'global';

async function generateContent(
  projectId = GOOGLE_CLOUD_PROJECT,
  location = GOOGLE_CLOUD_LOCATION
) {
  const ai = new GoogleGenAI({
    vertexai: true,
    project: projectId,
    location: location,
  });

  const image1 = {
    fileData: {
      fileUri: 'gs://cloud-samples-data/generative-ai/image/scones.jpg',
      mimeType: 'image/jpeg',
    },
  };

  const image2 = {
    fileData: {
      fileUri: 'gs://cloud-samples-data/generative-ai/image/fruit.png',
      mimeType: 'image/png',
    },
  };

  const response = await ai.models.generateContent({
    model: 'gemini-2.5-flash',
    contents: [
      image1,
      image2,
      'Generate a list of all the objects contained in both images.',
    ],
  });

  console.log(response.text);

  return response.text;
}

Java

瞭解如何安裝或更新 Java

詳情請參閱 SDK 參考說明文件

設定環境變數,透過 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=global
export GOOGLE_GENAI_USE_VERTEXAI=True


import com.google.genai.Client;
import com.google.genai.types.Content;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.HttpOptions;
import com.google.genai.types.Part;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class TextGenerationWithMultiImage {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String modelId = "gemini-2.5-flash";
    // Content from Google Cloud Storage
    String gcsFileImagePath = "gs://cloud-samples-data/generative-ai/image/scones.jpg";
    String localImageFilePath = "resources/latte.jpg";
    generateContent(modelId, gcsFileImagePath, localImageFilePath);
  }

  // Generates text with multiple images
  public static String generateContent(
      String modelId, String gcsFileImagePath, String localImageFilePath) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (Client client =
        Client.builder()
            .location("global")
            .vertexAI(true)
            .httpOptions(HttpOptions.builder().apiVersion("v1").build())
            .build()) {

      // Read content from a local file.
      byte[] localFileImgBytes = Files.readAllBytes(Paths.get(localImageFilePath));

      GenerateContentResponse response =
          client.models.generateContent(
              modelId,
              Content.fromParts(
                  Part.fromText("Generate a list of all the objects contained in both images"),
                  Part.fromBytes(localFileImgBytes, "image/jpeg"),
                  Part.fromUri(gcsFileImagePath, "image/jpeg")),
              null);

      System.out.print(response.text());
      // Example response:
      // Okay, here's the list of objects present in both images:
      //
      // **Image 1 (Scones):**
      //
      // *   Scones
      // *   Plate
      // *   Jam/Preserve
      // *   Cream/Butter
      // *   Table/Surface
      // *   Napkin/Cloth (possibly)
      //
      // **Image 2 (Latte):**
      //
      // *   Latte/Coffee cup
      // *   Saucer
      // *   Spoon
      // *   Table/Surface
      // *   Foam/Latte art
      //
      // **Objects potentially in both (depending on interpretation and specific items):**
      //
      // *   Plate/Saucer (both are serving dishes)
      // *   Table/Surface
      return response.text();
    }
  }
}

REST

設定環境後,即可使用 REST 測試文字提示。下列範例會將要求傳送至發布商模型端點。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:。
  • FILE_URI1: 要納入提示的檔案 URI 或網址。可接受的值包括:
    • Cloud Storage 值區 URI:物件必須可公開讀取,或位於傳送要求的 Google Cloud 專案中。對於 gemini-2.0-flashgemini-2.0-flash-lite,大小上限為 2 GB。
    • HTTP 網址:檔案網址必須可公開讀取。每項要求可指定一個影片檔案、一個音訊檔案,以及最多 10 個圖片檔案。音訊檔、影片檔和文件不得超過 15 MB。
    • YouTube 影片網址:YouTube 影片必須由您用來登入 Google Cloud 控制台的帳戶擁有,或是設為公開。每個要求僅支援一個 YouTube 影片網址。

    指定 fileURI 時,您也必須指定檔案的媒體類型 (mimeType)。如果啟用 VPC Service Controls,系統不支援為 fileURI 指定媒體檔案網址。

    如果 Cloud Storage 中沒有圖片檔案,可以使用下列公開檔案: gs://cloud-samples-data/vertex-ai/llm/prompts/landmark1.png,MIME 類型為 image/png。如要查看這張圖片,請開啟範例圖片檔案。

  • MIME_TYPEdatafileUri 欄位中指定檔案的媒體類型。可接受的值包括:

    按一下即可展開 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
  • FILE_URI2: 要納入提示的檔案 URI 或網址。可接受的值包括:
    • Cloud Storage 值區 URI:物件必須可公開讀取,或位於傳送要求的 Google Cloud 專案中。對於 gemini-2.0-flashgemini-2.0-flash-lite,大小上限為 2 GB。
    • HTTP 網址:檔案網址必須可公開讀取。每項要求可指定一個影片檔案、一個音訊檔案,以及最多 10 個圖片檔案。音訊檔、影片檔和文件不得超過 15 MB。
    • YouTube 影片網址:YouTube 影片必須由您用來登入 Google Cloud 控制台的帳戶擁有,或是設為公開。每個要求僅支援一個 YouTube 影片網址。

    指定 fileURI 時,您也必須指定檔案的媒體類型 (mimeType)。如果啟用 VPC Service Controls,系統不支援為 fileURI 指定媒體檔案網址。

    如果 Cloud Storage 中沒有圖片檔案,可以使用下列公開檔案: gs://cloud-samples-data/vertex-ai/llm/prompts/landmark2.png,MIME 類型為 image/png。如要查看這張圖片,請開啟範例圖片檔案。

  • TEXT2: 提示中要加入的文字指令。 例如: city: Beijing, Landmark: Forbidden City
  • FILE_URI3: 要納入提示的檔案 URI 或網址。可接受的值包括:
    • Cloud Storage 值區 URI:物件必須可公開讀取,或位於傳送要求的 Google Cloud 專案中。對於 gemini-2.0-flashgemini-2.0-flash-lite,大小上限為 2 GB。
    • HTTP 網址:檔案網址必須可公開讀取。每項要求可指定一個影片檔案、一個音訊檔案,以及最多 10 個圖片檔案。音訊檔、影片檔和文件不得超過 15 MB。
    • YouTube 影片網址:YouTube 影片必須由您用來登入 Google Cloud 控制台的帳戶擁有,或是設為公開。每個要求僅支援一個 YouTube 影片網址。

    指定 fileURI 時,您也必須指定檔案的媒體類型 (mimeType)。如果啟用 VPC Service Controls,系統不支援為 fileURI 指定媒體檔案網址。

    如果 Cloud Storage 中沒有圖片檔案,可以使用下列公開檔案: gs://cloud-samples-data/vertex-ai/llm/prompts/landmark3.png,MIME 類型為 image/png。如要查看這張圖片,請開啟範例圖片檔案。

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 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://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-2.5-flash:generateContent"

PowerShell

將要求主體儲存在名為 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://aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/global/publishers/google/models/gemini-2.5-flash:generateContent" | Select-Object -Expand Content

您應該會收到類似如下的 JSON 回應。

請注意這個範例網址中的以下項目:
  • 使用 generateContent 方法,要求在完整生成回覆後再傳回。 如要減少人類觀眾的延遲感,請使用 streamGenerateContent 方法,在生成回覆的同時串流回覆內容。
  • 多模態模型 ID 位於網址尾端,方法之前 (例如 gemini-2.0-flash)。這個範例也可能支援其他模型。

設定選用模型參數

每個模型都有一組可供設定的選用參數。詳情請參閱內容生成參數

圖片權杖化

圖片的權杖計算方式如下:

  • 如果圖片的兩個維度都小於或等於 384 像素,則會使用 258 個權杖。
  • 如果圖片的其中一個尺寸大於 384 像素,系統就會將圖片裁剪成圖塊。每個圖塊大小預設為最小維度 (寬度或高度) 除以 1.5。如有需要,系統會調整每個圖塊,確保圖塊大小介於 256 像素和 768 像素之間。每個圖塊隨後會調整為 768x768 大小,並使用 258 個權杖。

最佳做法

使用圖片時,請遵循下列最佳做法和資訊,以獲得最佳成效:

  • 如要偵測圖片中的文字,請使用單張圖片的提示,這樣比使用多張圖片的提示效果更好。
  • 如果提示包含單一圖片,請將圖片放在要求中的文字提示之前。
  • 如果提示包含多張圖片,且您想在提示中稍後參照這些圖片,或讓模型在模型回覆中參照這些圖片,建議先為每張圖片加上索引。使用 a b cimage 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 多模態模型在許多多模態用途中都非常強大,但請務必瞭解模型的限制:

  • 內容審查:模型會拒絕提供違反安全政策的圖片相關答案。
  • 空間推理:模型無法精確定位圖片中的文字或物件。他們可能只會傳回物件的概略計數。
  • 醫療用途:模型不適合用於解讀醫學圖像 (例如 X 光片和 CT 掃描),也不適合提供醫療建議。
  • 人物辨識:模型不應用於辨識圖片中非名人的身分。
  • 準確度:解讀品質不佳、旋轉或極低解析度的圖片時,模型可能會產生幻覺或出錯。模型在解讀圖片文件中的手寫文字時,也可能會產生錯覺。

後續步驟