サーバー プロンプト テンプレートを使ってみる


モデルへのリクエストごとに、プロンプトと、モデルのレスポンスを制御するスキーマと構成を送信します(省略可)。Firebase AI Logic を使用する場合は、このすべての情報をクライアント コードから直接送信するか、サーバー プロンプト テンプレートを使用してサーバーサイドでこの情報を指定できます。

サーバー プロンプト テンプレートを使用する場合、プロンプト、スキーマ、構成はサーバーサイドに保存され、アプリはクライアントからサーバーに、特定のテンプレートを参照するキー(テンプレート ID)と、そのテンプレートに必要な入力のみを渡します。

サーバー プロンプト テンプレートを使用する場合、プロンプトと構成をサーバーサイドに保存し、アプリのコードベースでキー(テンプレート ID)のみを指定します。このアプローチには次のようなメリットがあります。

  • クライアントサイドでプロンプトが公開されないように保護する

  • 新しいアプリのバージョンをリリースせずにプロンプトと構成を更新する

このガイドでは、サーバー プロンプト テンプレートの使用を開始する方法について説明します。

概要に移動 詳細な手順に移動

サポートされているモデルと機能



概要

サーバー プロンプト テンプレートを使用するための基本的なワークフローは次のとおりです。

  1. Firebase コンソールのガイド付き UI を使用してテンプレートを作成します。

  2. Firebase コンソールのテスト機能を使用して、実際のリクエストでテンプレートをテストします。

  3. アプリからテンプレートにアクセスします。

サーバー プロンプト テンプレートの基本形式

Firebase AI Logic の場合、Firebase コンソールには、テンプレートの内容を指定するためのガイド付き UI が用意されています。

サーバーのプロンプト テンプレートでは、Dotprompt ベースの構文と形式が使用されます。詳細については、テンプレートの形式、構文、例をご覧ください。

Gemini モデルへのリクエストの例で最も重要なコンポーネントは次のとおりです。

---
model: 'gemini-2.5-flash'
---

{{role "system"}}
All output must be a clearly structured invoice document.
Use a tabular or clearly delineated list format for line items.

{{role "user"}}
Create an example customer invoice for a customer named {{customerName}}.
  • 3 つのダッシュの間の上部セクションには、モデル名と、必要に応じてリクエストで送信するモデル構成、入力検証、スキーマが含まれます。これは Key-Value ペアとして記述され、一般に YAML frontmatter と呼ばれます。

  • テンプレートの本文にはプロンプトが含まれています。必要に応じて、システム指示と入力値(Handlebars 構文を使用)を含めることもできます。

コードでテンプレートを使用する

Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。

コードでテンプレートを使用する方法は次のとおりです。

Swift


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).templateGenerativeModel()

let customerName = "Jane"

do {
    let response = try await model.generateContent(
        // Specify your template ID
        templateID: "my-first-template-v1-0-0",
        // Provide the values for any input variables required by your template.
        inputs: [
            "customerName": customerName
        ]
    )
    if let text = response.text {
        print("Response Text: \(text)")
    }
} catch {
    print("An error occurred: \(error)")
}
print("\n")

Kotlin


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
val model = Firebase.googleAI.templateGenerativeModel()

val customerName = "Jane"

val response = model.generateContent(
    // Specify your template ID
    "my-first-template-v1-0-0",
    // Provide the values for any input variables required by your template.
    mapOf(
        "customerName" to customerName
    )
)

val text = response.text
println(text)

Java


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
TemplateGenerativeModel generativeModel = FirebaseAI.getInstance().templateGenerativeModel();

TemplateGenerativeModelFutures model = TemplateGenerativeModelFutures.from(generativeModel);

String customerName = "Jane";

Future response = model.generateContent(
    // Specify your template ID
    "my-first-template-v1-0-0",
    // Provide the values for any input variables required by your template.
    mapOf("customerName", customerName)
);
addCallback(response,
       new FutureCallback() {
           public void onSuccess(GenerateContentResponse result) {
             System.out.println(result.getText());
           }
           public void onFailure(Throwable t) {
             reportError(t);
           }
    }
executor);

Web


// ...

// Initialize the Gemini Developer API backend service
const ai = getAI(app, { backend: new GoogleAIBackend() });

// Create a `TemplateGenerativeModel` instance
const model = getTemplateGenerativeModel(ai);

const customerName = 'Jane';

const result = await model.generateContent(
  // Specify your template ID
  'my-first-template-v1-0-0',
  // Provide the values for any input variables required by your template
  {
    customerName: customerName,
  }
);

const response = response.result;
const text = response.text();

Dart

Flutter プラグインはまもなくサーバー プロンプト テンプレートをサポートします。

Unity

Unity パッケージはまもなくサーバー プロンプト テンプレートをサポートする予定です。



詳しい手順

このセクションでは、サーバー プロンプト テンプレートの作成、テスト、使用に関する詳細な手順について説明します。

始める前に

  • まだ行っていない場合は、スタートガイドに沿って、記載されている手順(Firebase プロジェクトの設定、アプリと Firebase の連携、SDK の追加、選択した Gemini API プロバイダのバックエンド サービスの初期化、GenerativeModel インスタンスの作成)を完了します。

  • サーバー プロンプト テンプレートの作成と管理に必要な権限があることを確認します。デフォルトでは、これらの権限はすべてオーナーロールに含まれています。

  • Vertex AI Gemini API を使用し、ユースケースでロケーション ベースの制限が必要な場合は、テンプレートの高度なワークフローがサポートされます。

ステップ 1: サーバー プロンプト テンプレートを作成する

ほとんどのユースケースでは、Firebase コンソールでサーバー プロンプト テンプレートを作成して管理します。

  1. Firebase コンソールで、Firebase AI Logic [プロンプト テンプレート] タブに移動します。

  2. [新しいテンプレートを作成] をクリックし、スターター テンプレートのオプションを選択します。

    • これらのスターター テンプレートは、一般的なユースケースの形式と構文を提供します。ただし、どのオプションを選択しても、ニーズに合わせてテンプレートを完全に変更できます。

    • このスタートガイドは、Input + System Instructions オプションを選択していることを前提としています。

  3. テンプレートの識別子を入力します。

    • テンプレート名: テンプレートの表示名(例: My First Template)。Firebase コンソールなどの Firebase インターフェース内でのみ表示されます。

    • テンプレート ID: Firebase プロジェクト内のテンプレートで一意の ID を指定してください(例: my-first-template-v1-0-0)。この ID は、アプリからのリクエストで参照されます。

  4. 必要に応じて、テンプレートの構成(フロントマター)セクションを変更します。

    • このセクションには、少なくとも次のようなモデル名を含める必要があります。

      ---
      model: 'gemini-2.5-flash'
      ---
      
    • 必要に応じて、モデルの構成、入出力制御などを指定することもできます。詳細とオプションについては、テンプレートの形式、構文、例をご覧ください。

  5. 必要に応じて、テンプレートのプロンプトと(該当する場合は)システム指示セクションを変更します。

    • このセクションには、少なくともモデルに送信するテキスト プロンプトを含める必要があります。

      Write a story about a magic backpack.
      
    • 次のような複雑なプロンプトを作成することもできます。詳細とオプションについては、テンプレートの形式、構文、例をご覧ください。

      • (必要に応じて){{role "system"}} 構文を使用してシステム指示を指定し、{{role "user"}} 構文を使用してテキスト プロンプトを指定します。

      • (省略可)Handlebars 構文({{customerName}} など)を使用して入力変数を指定します。テンプレートでデフォルト値を指定できますが、通常、この入力変数の値はリクエストで渡されます。

      {{role "system"}}
      All output must be a clearly structured invoice document.
      Use a tabular or clearly delineated list format for line items.
      
      {{role "user"}}
      Create an example customer invoice for a customer named {{customerName}}.
      

ステップ 2: Firebase コンソールでテンプレートをテストする

Firebase コンソールには、テンプレートのテスト環境が用意されています。この機能を使用すると、テンプレートが使用されたときに何が起こるかを確認できます。リクエストの形式と実際のリクエストの出力の両方を確認できます。

  1. [テンプレートを保存] をクリックして、テンプレートをテストできるようにします。

    テンプレートは後でいつでも編集または削除できます。後で変更できない値はテンプレート ID のみです。

  2. プロンプトで入力変数を使用する場合は、[テスト入力] フィールドにテスト値を含めます。この例では、次の手順で作成します。

      {
        "customerName": "Jane"
      }
    
  3. Firebase プロジェクトで複数の Gemini API プロバイダが有効になっている場合は、テスト リクエストに使用するプロバイダを選択できます。このオプションがコンソールに表示されたら、Gemini Developer API または Vertex AI Gemini API のいずれかを選択します。

    この選択は、Firebase コンソールのテスト エクスペリエンスを通じて送信されたリクエストにのみ適用されます。アプリからの実際のリクエストでは、他のリクエストと同様に、選択した Gemini API プロバイダを指定します。

  4. [フォーマットされたテスト リクエストを作成] ボタンをクリックします。

    画面の右側に表示された書式設定済みのテスト リクエストを確認し、テンプレートのフィールドを必要に応じて変更します。

  5. テスト リクエストの形式が整ったら、[プロンプト テストを実行] ボタンをクリックします。

    画面の右側に表示されたテスト レスポンスを確認し、テンプレートのフィールドを必要に応じて変更します。

  6. アプリのコードからテンプレートにアクセスする準備ができたら、テンプレートの右上にある ロック アイコンをクリックして、テンプレートをロックします。

  7. [閉じる] をクリックして編集を終了します。

ステップ 3: コードからテンプレートにアクセスする

Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。

サーバー プロンプト テンプレートを使用するリクエストは、他のリクエストと似ていますが、次の調整が行われています。

  • templateGenerativeModel(または必要に応じて templateImagenModel)を使用します。
  • テンプレート ID を指定します。
  • テンプレートに必要な変数入力の値を指定します。

テンプレートを作成または更新した後、コードからアクセスする前に、テンプレートが Firebase サーバー全体に反映されるまで数分待つ必要がある場合があります。

Swift

リクエストでテンプレートを使用するには、templateGenerativeModel インスタンス(または templateImagenModel)を作成します。


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).templateGenerativeModel()

let customerName = "Jane"

do {
    let response = try await model.generateContent(
        // Specify your template ID
        templateID: "my-first-template-v1-0-0",
        // Provide the values for any input variables required by your template.
        inputs: [
            "customerName": customerName
        ]
    )
    if let text = response.text {
        print("Response Text: \(text)")
    }
} catch {
    print("An error occurred: \(error)")
}
print("\n")

Kotlin

リクエストでテンプレートを使用するには、templateGenerativeModel インスタンス(または templateImagenModel)を作成します。


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
val model = Firebase.googleAI.templateGenerativeModel()

val customerName = "Jane"

val response = model.generateContent(
    // Specify your template ID
    "my-first-template-v1-0-0",
    // Provide the values for any input variables required by your template.
    mapOf(
        "customerName" to customerName
    )
)

val text = response.text
println(text)

Java

リクエストでテンプレートを使用するには、templateGenerativeModel インスタンス(または templateImagenModel)を作成します。


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
TemplateGenerativeModel generativeModel = FirebaseAI.getInstance().templateGenerativeModel();

TemplateGenerativeModelFutures model = TemplateGenerativeModelFutures.from(generativeModel);

String customerName = "Jane";

Future response = model.generateContent(
    // Specify your template ID
    "my-first-template-v1-0-0",
    // Provide the values for any input variables required by your template.
    mapOf("customerName", customerName)
);
addCallback(response,
       new FutureCallback() {
           public void onSuccess(GenerateContentResponse result) {
             System.out.println(result.getText());
           }
           public void onFailure(Throwable t) {
             reportError(t);
           }
    }
executor);

Web

リクエストでテンプレートを使用するには、templateGenerativeModel インスタンス(または templateImagenModel)を作成します。


// ...

// Initialize the Gemini Developer API backend service
const ai = getAI(app, { backend: new GoogleAIBackend() });

// Create a `TemplateGenerativeModel` instance
const model = getTemplateGenerativeModel(ai);

const customerName = 'Jane';

const result = await model.generateContent(
  // Specify your template ID
  'my-first-template-v1-0-0',
  // Provide the values for any input variables required by your template
  {
    customerName: customerName,
  }
);

const response = response.result;
const text = response.text();

Dart

Flutter プラグインはまもなくサーバー プロンプト テンプレートをサポートします。

Unity

Unity パッケージはまもなくサーバー プロンプト テンプレートをサポートする予定です。



次のステップ