圖像理解

您可以將圖片新增至 Gemini 要求,執行涉及瞭解所附圖片內容的工作。本頁說明如何使用Google Cloud 控制台和 Vertex AI API,在 Vertex AI 中將圖片新增至 Gemini 的要求。

支援的模型

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

型號 媒體詳細資料 MIME 類型
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):
    • 高/中/預設媒體解析度:
      • 美國/亞洲:40 M
      • 歐盟:10 公尺
    • 低媒體解析度:
      • 美國/亞洲:10 公尺
      • 歐盟:3 個月
  • 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):
    • 高/中/預設媒體解析度:
      • 美國/亞洲:40 M
      • 歐盟:10 公尺
    • 低媒體解析度:
      • 美國/亞洲:10 公尺
      • 歐盟: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,請參閱 Swift、Android、Web、Flutter 和 Unity 應用程式的 Firebase AI Logic 用戶端 SDK

在要求中加入圖片

您可以在向 Gemini 提出的要求中加入單張或多張圖片。

單一圖片

下列各分頁中的程式碼範例會顯示不同的圖片內容辨識方法。這個範例可搭配所有 Gemini 多模態模型使用。

控制台

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

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

    前往 Vertex AI Studio

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

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

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

      溫度會在應用 topPtopK 時,用於回覆產生期間的取樣。溫度參數會決定選取詞元時的隨機程度。如果您想藉由提示生成較不具開放性和創意性的回覆,建議調低溫度參數。另一方面,如果溫度參數較高,則可能產生較多樣化或有創意的結果。如果溫度參數為 0,系統一律會選取可能性最高的詞元。在這種情況下,系統會根據特定提示提供的回覆,但仍可能出現少量變化。

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

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

      回覆內可以生成的符記數量上限。一個符記約為四個字元。100 個符記大約對應 60 到 80 個字詞。

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

    • 新增停止序列:選用。輸入停止序列,這是一系列包含空格的字元。如果模型遇到停止序列,回應產生作業就會停止。回應中不包含停靠點序列,且最多可新增五個停靠點序列。

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

    按一下即可展開進階設定

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

      「Top-K」會影響模型選取輸出符記的方式。如果「前 K 個」設為 1,代表下一個所選詞元是模型詞彙表的所有詞元中可能性最高者 (也稱為「貪婪解碼」)。如果「前 K 個」設為 3,則代表模型會依據溫度參數,從可能性最高的 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 指令,請按一下 「Get code」

Gen AI SDK for 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 ...

Gen AI SDK for Go

瞭解如何安裝或更新 Gen AI SDK for 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.0-flash-001"
	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",
			}},
		}},
	}

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

	respText, err := resp.Text()
	if err != nil {
		return fmt.Errorf("failed to convert model response to text: %w", err)
	}
	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 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.0-flash',
    contents: [image, 'What is shown in this image?'],
  });

  console.log(response.text);

  return response.text;
}

Gen AI SDK for Java

瞭解如何安裝或更新 Gen AI SDK for 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 GenerateContentWithTextAndImage {

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

  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()
        .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_TYPE:在 datafileUri 欄位中指定的檔案媒體類型。可接受的值包括:

    按一下即可展開 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_TYPE:在 datafileUri 欄位中指定的檔案媒體類型。可接受的值包括:

    按一下即可展開 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,系統一律會選取可能性最高的詞元。在這種情況下,系統會根據特定提示提供的回覆,但仍可能出現少量變化。

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

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

      回覆內可以生成的符記數量上限。一個符記約為四個字元。100 個符記大約對應 60 到 80 個字詞。

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

    • 新增停止序列:選用。輸入停止序列,這是一系列包含空格的字元。如果模型遇到停止序列,回應產生作業就會停止。回應中不包含停靠點序列,且最多可新增五個停靠點序列。

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

    按一下即可展開進階設定

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

      「Top-K」會影響模型選取輸出符記的方式。如果「前 K 個」設為 1,代表下一個所選詞元是模型詞彙表的所有詞元中可能性最高者 (也稱為「貪婪解碼」)。如果「前 K 個」設為 3,則代表模型會依據溫度參數,從可能性最高的 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 指令,請按一下 「Get code」

Gen AI SDK for 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:
# ...

Gen AI SDK for Go

瞭解如何安裝或更新 Gen AI SDK for 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.0-flash-001"

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

	respText, err := resp.Text()
	if err != nil {
		return fmt.Errorf("failed to convert model response to text: %w", err)
	}
	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
}

Gen AI SDK for 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.0-flash',
    contents: [
      image1,
      image2,
      'Generate a list of all the objects contained in both images.',
    ],
  });

  console.log(response.text);

  return response.text;
}

Gen AI SDK for Java

瞭解如何安裝或更新 Gen AI SDK for 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.0-flash";
    // Content from Google Cloud Storage
    String gcsFileImagePath = "gs://cloud-samples-data/generative-ai/image/scones.jpg";
    String localImageFilePath = "test_data/latte.jpg";

    generateContent(modelId, gcsFileImagePath, localImageFilePath);
  }

  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()
        .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:您的專案 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_TYPE:在 datafileUri 欄位中指定的檔案媒體類型。可接受的值包括:

    按一下即可展開 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.0-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.0-flash:generateContent" | Select-Object -Expand Content

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

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

設定選用模型參數

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

圖片權杖化

以下是圖片的符記計算方式:

  • Gemini 2.0 Flash 和 Gemini 2.0 Flash-Lite
    • 如果圖片的長邊和短邊都小於或等於 384 像素,則會使用 258 個符記。
    • 如果圖片的一個尺寸大於 384 像素,系統會將圖片裁剪成圖塊。每個圖塊大小的預設值為最小尺寸 (寬度或高度) 除以 1.5。如有需要,系統會調整每個圖塊,使其大小不小於 256 像素,也不大於 768 像素。然後,每個資訊方塊的大小都會調整為 768 x 768,並使用 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 掃描),也不適合用於提供醫療建議。
  • 人物辨識:模型並非用於辨識圖片中非名人的人物。
  • 準確度:模型在解讀低品質、旋轉或極低解析度的圖片時,可能會產生幻覺或出錯。模型在解讀圖像文件中的手寫文字時,也可能會產生錯誤。

後續步驟