Gemini API を使用してマルチターンの会話(チャット)を作成する


Gemini API を使用すると、複数のターンにわたる自由形式の会話を作成できます。Vertex AI in Firebase SDK は会話の状態を管理することでプロセスを簡素化するため、generateContentStream()generateContent() とは異なり、会話履歴を自分で保存する必要はありません。

始める前に

まだ行っていない場合は、スタートガイドを完了してください。Firebase プロジェクトの設定、アプリの Firebase への接続、SDK の追加、Vertex AI サービスの初期化、GenerativeModel インスタンスの作成方法が記載されています。

チャット プロンプト リクエストを送信する

マルチターンの会話(チャットなど)を構築するには、まず startChat() を呼び出してチャットを初期化します。次に、sendMessageStream()(または sendMessage())を使用して新しいユーザー メッセージを送信します。これにより、メッセージとレスポンスがチャット履歴に追加されます。

会話内のコンテンツに関連付けられた role には、次の 2 つのオプションがあります。

  • user: プロンプトを提供するロール。この値は sendMessageStream()(または sendMessage())の呼び出しのデフォルト値です。別のロールが渡された場合、関数は例外をスローします。

  • model: レスポンスを提供するロール。このロールは、既存の historystartChat() を呼び出す場合に使用できます。

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

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

この例は、startChat()sendMessageStream() を使用してモデルからレスポンスをストリーミングする方法を示しています。

import FirebaseVertexAI

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

// Create a `GenerativeModel` instance with a model that supports your use case
let model = vertex.generativeModel(modelName: "gemini-2.0-flash")

// Optionally specify existing chat history
let history = [
  ModelContent(role: "user", parts: "Hello, I have 2 dogs in my house."),
  ModelContent(role: "model", parts: "Great to meet you. What would you like to know?"),
]

// Initialize the chat with optional chat history
let chat = model.startChat(history: history)

// To stream generated text output, call sendMessageStream and pass in the message
let contentStream = try chat.sendMessageStream("How many paws are in my house?")
for try await chunk in contentStream {
  if let text = chunk.text {
    print(text)
  }
}

または、ストリーミングではなく結果全体が返されるのを待つこともできます。結果は、モデルが生成プロセス全体を完了した後にのみ返されます。

次の例は、startChat()sendMessage() を使用して新しいユーザー メッセージを送信する方法を示しています。

import FirebaseVertexAI

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

// Create a `GenerativeModel` instance with a model that supports your use case
let model = vertex.generativeModel(modelName: "gemini-2.0-flash")

// Optionally specify existing chat history
let history = [
  ModelContent(role: "user", parts: "Hello, I have 2 dogs in my house."),
  ModelContent(role: "model", parts: "Great to meet you. What would you like to know?"),
]

// Initialize the chat with optional chat history
let chat = model.startChat(history: history)

// To generate text output, call sendMessage and pass in the message
let response = try await chat.sendMessage("How many paws are in my house?")
print(response.text ?? "No text in response.")

ユースケースとアプリに適したモデルと、必要に応じてロケーションを選択する方法を学びます。

Google アシスタントの機能

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

その他の機能を試す

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

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

サポートされているモデルの詳細

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


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