使用 Vertex AI 的 Gemini API 生成內容

本指南說明如何使用 Vertex AI 中 Gemini API 的 generateContentstreamGenerateContent 方法生成內容。本頁面涵蓋下列主題:

  • 開始使用說明如何建立 Google Cloud 帳戶來使用 API。
  • 參數清單詳細說明可用於控管生成輸出內容的要求主體參數。
  • 回覆內容說明您從模型收到的回覆結構和元素。
  • 範例提供各種生成作業的程式碼範例,包括文字、多模態和串流。

下圖概略說明生成內容的整體工作流程:

使用 generateContentstreamGenerateContent,透過 Gemini 生成內容。

方法 說明 用途
generateContent (一元) 向模型傳送單一要求,並在要求完成後立即接收整個生成的回覆。 最適合不需要立即回饋,且需要完整回覆才能處理的任務,例如生成文件或摘要文字。
streamGenerateContent (串流) 傳送要求,並在生成回應時,以較小的區塊接收回應。 非常適合聊天機器人等互動式應用程式,或逐步顯示結果,提供更快速的回應使用者體驗。

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

您可以鍵/值組合的形式,將中繼資料新增至 API 呼叫。

contents

參數

role

string

建立訊息的實體身分。支援的值如下:

  • user:表示訊息是由真人傳送,通常是使用者產生的訊息。
  • model:表示訊息是由模型生成。

在多輪對話中,系統會使用 model 值,將模型中的訊息插入對話。

parts

Part

組成單一郵件的排序部分清單。不同部分可能會有不同的 IANA MIME 類型

如要瞭解輸入內容的限制 (例如詞元或圖片數量上限),請參閱「Google 模型」頁面的模型規格。

如要計算要求中的權杖數量,請參閱「取得權杖數量」。

parts

包含媒體的資料類型,是多部分 Content 訊息的一部分。您可以透過兩種方式將媒體資料提供給模型:直接在要求中傳遞資料的原始位元組,或是參照儲存在 Cloud Storage 中的檔案。

選項 說明 優點 缺點 / 限制
inlineData 直接在 JSON 要求主體中嵌入媒體的原始 base64 編碼位元組。 適用於較小的檔案,不需要外部儲存空間。 增加要求酬載大小。每個要求部分不得超過 20 MB。
fileData 提供指向媒體檔案的 Cloud Storage URI (gs://...)。模型會直接從值區擷取檔案。 非常適合用於大型檔案。縮減要求酬載大小。 必須將檔案上傳至 Cloud Storage。使用的服務帳戶必須具備讀取檔案的權限。
參數

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 秒片段,且影格速率為每秒 10 個影格,請設定下列項目:

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

只有在影片資料以 inlineDatafileData 呈現時,才應指定中繼資料。

blob

代表內容 Blob。盡可能以文字而非原始位元組傳送資料。

參數

mimeType

string

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

如果是 gemini-2.0-flash-litegemini-2.0-flash,音訊檔案長度上限為 8.4 小時,影片檔案長度上限為 1 小時 (不含音訊)。詳情請參閱 Gemini 音訊影片規定。

文字檔案必須採用 UTF-8 編碼。文字檔內容會計入權杖限制。

圖片解析度沒有限制。

data

bytes

圖片、PDF 或影片的 Base64 編碼,可內嵌在提示中。內嵌媒體時,您也必須指定資料的媒體類型 (mimeType)。

大小限制:20 MB

FileData

URI 或網址資料。

參數

mimeType

string

資料的 IANA MIME 類型

fileUri

string

要加入提示的檔案 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 指定媒體檔案網址。

functionCall

模型傳回的預測 functionCall,其中包含代表 functionDeclaration.name 的字串,以及包含參數及其值的結構化 JSON 物件。

參數

name

string

要呼叫的函式名稱。

args

Struct

JSON 物件格式的函式參數和值。

如需參數詳細資料,請參閱「函式呼叫」。

functionResponse

FunctionCall 的輸出結果會包含代表 FunctionDeclaration.name 的字串。也包含結構化 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,模型一律會選取可能性最高的詞元。在這種情況下,特定提示的回覆大多是確定性的,但仍可能出現少量差異。

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

  • gemini-2.0-flash-lite 的範圍:0.0 - 2.0 (預設值:1.0)
  • gemini-2.0-flash 的範圍:0.0 - 2.0 (預設值:1.0)

詳情請參閱內容生成參數

topP

自由參加:float

如果指定,系統會使用核心取樣。

Top-P 會影響模型選取輸出符記的方式。模型會按照機率最高 (請見「Top-K」) 到最低的順序選取符記,直到所選符記的機率總和等於「Top-P」值。舉例來說,假設詞元 A、B 和 C 的可能性分別為 0.3、0.2 和 0.1,而「Top-P」值為 0.5,模型會依據 temperature 選擇 A 或 B 做為下一個詞元,並排除 C。

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

  • 範圍:0.0 - 1.0
  • gemini-2.0-flash-lite」的預設值:0.95
  • gemini-2.0-flash」的預設值:0.95

candidateCount

自由參加:int

要傳回的回應變體數量。系統會針對每個要求中所有候選人的輸出權杖收費,但只會針對輸入權杖收費一次。

指定多個候選人是預先發布功能,適用於 generateContent (不支援 streamGenerateContent)。支援的機型如下:

  • gemini-2.0-flash-lite1-8,預設值:1
  • gemini-2.0-flash1-8,預設值:1

maxOutputTokens

選用:int

回覆內可以生成的權杖數量上限。一個詞元約為四個字元。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。最小值為 -2.0

frequencyPenalty

自由參加:float

正值會懲罰在生成的文字中重複出現的符記,降低重複內容的機率。

frequencyPenalty 的最大值為 2.0,但不含 2.0。最小值為 -2.0

responseMimeType

自由參加:string (enum)

生成候選文字的輸出回應 MIME 類型。

支援的 MIME 類型如下:

  • application/json:候選人中的 JSON 回應。
  • text/plain (預設):輸出純文字。
  • text/x.enum:如為分類工作,請輸出回應結構定義中定義的列舉值。

請指定適當的回覆類型,避免發生非預期的行為。舉例來說,如果您需要 JSON 格式的回應,請指定 application/json,而非 text/plain

text/plain 不支援與 responseSchema 搭配使用。

responseSchema

選用:結構定義

生成候選文字時必須遵循的結構定義。詳情請參閱「控管生成的輸出內容」。

如要使用這個參數,您必須為 responseMimeType 參數指定支援的 MIME 類型,但不能是 text/plain

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-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:由於回應遭檢舉含有違禁內容 (例如兒少性虐待內容),模型已停止生成權杖。
  • 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 引用來源的網址。網址來源的例子包括新聞網站或 GitHub 存放區。
title 引用來源的標題。例如新聞報導或書籍的標題。
license 與引文相關聯的授權。
publicationDate 引用內容的發布日期。有效格式包括 YYYYYYYY-MMYYYY-MM-DD
avgLogprobs 候選人的平均記錄機率。
logprobsResult 在每個步驟中,傳回候選符記 (topCandidates) 和實際選取的符記 (chosenCandidates)。
token 生成式 AI 模型會將文字資料拆解成符記 (字元、字詞或詞句) 以進行處理。
logProbability 對數機率值,表示模型對特定權杖的信心。
promptTokenCount 要求中的權杖數量。
candidatesTokenCount 回應中的權杖數量。
totalTokenCount 要求和回覆中的權杖數量。

範例

下列範例說明如何使用原生 Gen AI SDK for Python 或 OpenAI 程式庫,將要求傳送至模型。您可以設定 OpenAI 程式庫,使其與 Vertex AI 端點搭配運作。

程式庫 說明 用途
Python 適用的 Gen AI SDK 與 Gemini 模型互動的官方 Google 程式庫。這項服務與 Google Cloud 服務完全整合,並提供所有最新功能。 建議用於新專案,以及想充分運用 Vertex AI 功能的開發人員。
OpenAI 程式庫 這是與大型語言模型互動的熱門第三方程式庫。您可以設定這項功能,將要求傳送至 Vertex AI 端點。 如果開發人員要從 OpenAI 平台遷移現有應用程式,或是偏好使用 OpenAI API 結構,這項功能就非常實用。

文字生成

根據文字輸入生成文字回覆。

Python 適用的 Gen AI SDK

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
}

使用多模態提示

根據多模態輸入內容 (例如文字和圖片) 生成文字回覆。

Python 適用的 Gen AI SDK

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
}

串流文字回覆

根據文字輸入內容生成串流模型回應。

Python 適用的 Gen AI SDK

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 而不是 gemini-2.0-flash-001

詳情請參閱「Gemini 模型版本和生命週期」。

後續步驟