Gemini API を使用してマルチモーダル プロンプトからテキストを生成する


Vertex AI in Firebase SDK を使用してアプリから Gemini API を呼び出すと、マルチモーダル入力に基づいてテキストを生成するように Gemini モデルにプロンプトを出すことができます。マルチモーダル プロンプトには、テキスト、画像、PDF、テキスト ファイル、動画、音声など、複数のモダリティ(または入力タイプ)を含めることができます。

各マルチモーダル リクエストで、必ず次の情報を指定する必要があります。

  • ファイルの mimeType。各入力ファイルでサポートされている MIME タイプについて確認する。

  • ファイル。ファイルは、(このページに示すように)インライン データとして指定することも、URL または URI を使用して指定することもできます。

マルチモーダル プロンプトのテストと反復処理には、Vertex AI Studio を使用することをおすすめします。

始める前に

Vertex AI in Firebase SDK のスタートガイドの手順をまだ完了していない場合は、完了してください。以下の手順をすべて完了していることを確認します。

  1. Blaze お支払いプランの使用や必要な API の有効化など、新規または既存の Firebase プロジェクトを設定します。

  2. アプリを Firebase に接続して、アプリの登録や Firebase 構成のアプリへの追加などを行います。

  3. SDK を追加し、アプリで Vertex AI サービスと生成モデルを初期化します。

アプリを Firebase に接続し、SDK を追加して、Vertex AI サービスと生成モデルを初期化したら、Gemini API を呼び出す準備が整います。

テキストと 1 つの画像からテキストを生成する テキストと複数の画像からテキストを生成する テキストと動画からテキストを生成する

サンプル メディア ファイル

メディア ファイルがない場合は、次の一般公開ファイルを使用できます。

テキストと 1 つの画像からテキストを生成する

このサンプルを試す前に、このガイドの始める前にのセクションを完了してください。

Gemini API は、テキストと単一のファイル(この例の画像など)の両方を含むマルチモーダル プロンプトで呼び出すことができます。これらの呼び出しでは、プロンプトでメディアをサポートするモデル(Gemini 1.5 Flash など)を使用する必要があります。

入力ファイルの要件と推奨事項を確認してください。

レスポンスをストリーミングするか(generateContentStream)、結果全体が生成されるまでレスポンスを待つか(generateContent)を選択します。

ストリーミング

モデル生成の結果全体を待たずに、ストリーミングを使用して部分的な結果を処理することで、インタラクションを高速化できます。

この例では、generateContentStream() を使用して、テキストと 1 つの画像を含むマルチモーダル プロンプト リクエストから生成されたテキストをストリーミングする方法を示します。

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() を使用して、テキストと 1 つの画像を含むマルチモーダル プロンプト リクエストからテキストを生成する方法を示します。

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() を使用して、テキストと 1 つの動画を含むマルチモーダル プロンプト リクエストから生成されたテキストをストリーミングする方法を示します。

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() を使用して、テキストと 1 つの動画を含むマルチモーダル プロンプト リクエストからテキストを生成する方法を示します。

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 タイプとその指定方法
  • ファイルとマルチモーダル リクエストの要件とベスト プラクティス

Google アシスタントの機能

  • 長いプロンプトをモデルに送信する前に、トークンをカウントする方法を学びます。
  • Cloud Storage for Firebase を設定して、マルチモーダル リクエストに大きなファイルを含め、プロンプトでファイルを提供するより管理されたソリューションを利用できるようにします。ファイルには、画像、PDF、動画、音声を含めることができます。
  • 本番環境の準備を開始します。たとえば、Firebase App Check を設定してGemini API を不正なクライアントによる不正使用から保護します。

Gemini API の他の機能を試す

コンテンツ生成を制御する方法

Vertex AI Studio を使用して、プロンプトとモデル構成をテストすることもできます。

Gemini モデルの詳細

さまざまなユースケースで利用可能なモデルと、その割り当てと料金について学びます。


Vertex AI in Firebase の使用感に関するフィードバックを送信する