使用 Gemini-API,根據多模態提示生成文字


使用 Vertex AI in Firebase SDK 從應用程式呼叫 Gemini API 時,您可以提示 Gemini 模型根據多模態輸入內容產生文字。多模態提示可包含多種模態 (或輸入類型),例如文字、圖片、PDF、純文字檔案、影片和音訊。

在每個多模態要求中,您都必須提供下列項目:

  • 檔案為 mimeType。瞭解各個輸入檔案支援的 MIME 類型

  • 檔案。您可以將檔案做為內嵌資料提供 (如本頁所示),或使用檔案的網址或 URI。

如要測試及重複使用多模式提示,建議您使用 Vertex AI Studio

事前準備

如果您尚未完成,請完成Vertex AI in Firebase SDK 的入門指南。請確認您已完成下列所有操作:

  1. 設定新的或現有的 Firebase 專案,包括使用 Blaze 定價方案和啟用必要的 API。

  2. 將應用程式連結至 Firebase,包括註冊應用程式,以及將 Firebase 設定新增至應用程式。

  3. 新增 SDK,並在應用程式中初始化 Vertex AI 服務和生成式模型。

將應用程式連結至 Firebase、新增 SDK 並初始化 Vertex AI 服務和生成模型後,您就可以呼叫 Gemini API

從文字和單張圖片生成文字 從文字和多張圖片生成文字 從文字和影片生成文字

媒體檔案範例

如果您沒有媒體檔案,可以使用下列公開檔案:

使用文字和單一圖片生成文字

請先完成本指南的「事前準備」一節,再嘗試使用這個範例。

您可以使用含有文字和單一檔案 (例如圖片,如本範例所示) 的多模態提示呼叫 Gemini API。針對這些呼叫,您必須使用支援提示中的媒體的模型 (例如 Gemini 1.5 Flash)。

請務必詳閱輸入檔案的規定和建議

選擇要串流回應 (generateContentStream),還是等待回應產生完整結果 (generateContent)。

串流

您可以不等待模型產生的完整結果,改用串流處理部分結果,以便加快互動速度。

以下範例說明如何使用 generateContentStream(),從包含文字和單一圖片的多模態提示要求中,串流產生的文字:

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Initialize the generative model with a model that supports your use case
// Gemini 1.5 models are versatile and can be used with all API capabilities
let model = vertex.generativeModel(modelName: "gemini-1.5-flash")

guard let image = UIImage(systemName: "bicycle") else { fatalError() }

// Provide a text prompt to include with the image
let prompt = "What's in this picture?"

// To stream generated text output, call generateContentStream and pass in the prompt
let contentStream = try model.generateContentStream(image, prompt)
for try await chunk in contentStream {
  if let text = chunk.text {
    print(text)
  }
}

不使用串流

或者,您可以等待整個結果,而不是串流;結果只會在模型完成整個產生程序後傳回。

以下範例說明如何使用 generateContent(),從包含文字和單一圖片的多模態提示要求產生文字:

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Initialize the generative model with a model that supports your use case
// Gemini 1.5 models are versatile and can be used with all API capabilities
let model = vertex.generativeModel(modelName: "gemini-1.5-flash")

guard let image = UIImage(systemName: "bicycle") else { fatalError() }

// Provide a text prompt to include with the image
let prompt = "What's in this picture?"

// To generate text output, call generateContent and pass in the prompt
let response = try await model.generateContent(image, prompt)
print(response.text ?? "No text in response.")

瞭解如何選擇適合您用途和應用程式的 Gemini 模型,以及選用位置

使用文字和多張圖片生成文字

請先完成本指南的「事前準備」一節,再嘗試使用這個範例。

您可以使用含有文字和多個檔案 (例如圖片,如本範例所示) 的多模態提示呼叫 Gemini API。針對這些呼叫,您必須使用支援提示中的媒體的模型 (例如 Gemini 1.5 Flash)。

請務必詳閱輸入檔案的規定和建議

選擇要串流回應 (generateContentStream),還是等待回應產生完整結果 (generateContent)。

串流

您可以不等待模型產生的完整結果,改用串流處理部分結果,以便加快互動速度。

以下範例說明如何使用 generateContentStream(),從包含文字和多張圖片的多模態提示要求中,串流傳輸產生的文字:

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Initialize the generative model with a model that supports your use case
// Gemini 1.5 models are versatile and can be used with all API capabilities
let model = vertex.generativeModel(modelName: "gemini-1.5-flash")

guard let image1 = UIImage(systemName: "car") else { fatalError() }
guard let image2 = UIImage(systemName: "car.2") else { fatalError() }

// Provide a text prompt to include with the images
let prompt = "What's different between these pictures?"

// To stream generated text output, call generateContentStream and pass in the prompt
let contentStream = try model.generateContentStream(image1, image2, prompt)
for try await chunk in contentStream {
  if let text = chunk.text {
    print(text)
  }
}

不使用串流

或者,您也可以等待整個結果,而不是串流;結果只會在模型完成整個產生程序後傳回。

以下範例說明如何使用 generateContent(),從包含文字和多張圖片的多模態提示要求產生文字:

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Initialize the generative model with a model that supports your use case
// Gemini 1.5 models are versatile and can be used with all API capabilities
let model = vertex.generativeModel(modelName: "gemini-1.5-flash")

guard let image1 = UIImage(systemName: "car") else { fatalError() }
guard let image2 = UIImage(systemName: "car.2") else { fatalError() }

// Provide a text prompt to include with the images
let prompt = "What's different between these pictures?"

// To generate text output, call generateContent and pass in the prompt
let response = try await model.generateContent(image1, image2, prompt)
print(response.text ?? "No text in response.")

瞭解如何選擇適合您用途和應用程式的 Gemini 模型,以及選用位置

使用文字和影片來生成文字

請先完成本指南的「事前準備」一節,再嘗試使用這個範例。

您可以使用包含文字和影片檔案的多模態提示呼叫 Gemini API (如本範例所示)。針對這些呼叫,您必須使用支援提示中的媒體的模型 (例如 Gemini 1.5 Flash)。

請務必詳閱輸入檔案的規定和建議

選擇要串流回應 (generateContentStream),還是等待回應產生完整結果 (generateContent)。

串流

您可以不等待模型產生的完整結果,改用串流處理部分結果,以便加快互動速度。

以下範例說明如何使用 generateContentStream(),從包含文字和單一影片的多模態提示要求中,串流生成文字:

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Initialize the generative model with a model that supports your use case
// Gemini 1.5 models are versatile and can be used with all API capabilities
let model = vertex.generativeModel(modelName: "gemini-1.5-flash")

// Provide the video as `Data` with the appropriate MIME type
let video = InlineDataPart(data: try Data(contentsOf: videoURL), mimeType: "video/mp4")

// Provide a text prompt to include with the video
let prompt = "What is in the video?"

// To stream generated text output, call generateContentStream with the text and video
let contentStream = try model.generateContentStream(video, prompt)
for try await chunk in contentStream {
  if let text = chunk.text {
    print(text)
  }
}

不使用串流

或者,您可以等待整個結果,而不是串流;結果只會在模型完成整個產生程序後傳回。

以下範例說明如何使用 generateContent(),從包含文字和單一影片的多模態提示要求產生文字:

import FirebaseVertexAI

// Initialize the Vertex AI service
let vertex = VertexAI.vertexAI()

// Initialize the generative model with a model that supports your use case
// Gemini 1.5 models are versatile and can be used with all API capabilities
let model = vertex.generativeModel(modelName: "gemini-1.5-flash")

// Provide the video as `Data` with the appropriate MIME type.
let video = InlineDataPart(data: try Data(contentsOf: videoURL), mimeType: "video/mp4")

// Provide a text prompt to include with the video
let prompt = "What is in the video?"

// To generate text output, call generateContent with the text and video
let response = try await model.generateContent(video, prompt)
print(response.text ?? "No text in response.")

瞭解如何選擇適合您用途和應用程式的 Gemini 模型,以及選用位置

輸入檔案的規定和建議

請參閱「支援的 Vertex AI Gemini API 輸入檔案和相關規定」,瞭解下列資訊:

  • 在要求中提供檔案的不同選項
  • 支援的檔案類型
  • 支援的 MIME 類型和指定方式
  • 檔案和多模態要求的規定和最佳做法

你還可以做些什麼?

  • 瞭解如何在向模型傳送長提示之前,計算符記
  • 設定 Cloud Storage for Firebase,這樣您就能在多模態要求中加入大型檔案,並透過更有條理的解決方案在提示中提供檔案。檔案可包含圖片、PDF、影片和音訊。
  • 開始著手準備正式版,包括設定 Firebase App Check,以防範未經授權的用戶端濫用 Gemini API

試用 Gemini API 的其他功能

瞭解如何控管內容產生

您也可以使用 Vertex AI Studio 嘗試使用提示和模型設定。

進一步瞭解 Gemini 型號

瞭解可用於各種用途的模型,以及相關配額和定價


提供使用 Vertex AI in Firebase 的意見回饋