モデルへのリクエストごとに、プロンプトと、必要に応じてスキーマと構成を送信して、モデルのレスポンスを制御します。 Firebase AI Logic を使用する場合は、このすべての情報を クライアント コードから直接送信できます。または、 サーバー プロンプト テンプレート を使用して、この情報をサーバーサイドで指定することもできます。
サーバー プロンプト テンプレートを使用する場合は、プロンプト、スキーマ、構成をサーバーサイドに保存します。アプリは、特定のテンプレートを参照するキー(テンプレート ID)と、そのテンプレートに必要な入力をクライアントからサーバーに渡します。
サーバー プロンプト テンプレートを使用する場合は、プロンプトと構成をサーバーサイドに保存し、アプリのコードベースにキー(テンプレート ID)のみを指定します。この方法には次のようなメリットがあります。
プロンプトがクライアントサイドで公開されないように保護する
新しいアプリ バージョンをリリースせずにプロンプトと構成を更新する
このガイドでは、サーバー プロンプト テンプレートの使用を開始する方法について説明します。
サポートされているモデルと機能
サーバー プロンプト テンプレートは、 Gemini と Imagen モデル(Gemini Live モデルを除く)で Firebase AI Logic使用できます。
まだサポートされていない機能の リストを確認してください。
概要
サーバー プロンプト テンプレートを使用するための基本的なワークフローは次のとおりです。
コンソールのテスト機能を使用して、実際のリクエストでテンプレートをテストします。Firebase
templateGenerativeModelを使用して、アプリのコードからテンプレートにアクセスします。
サーバー プロンプト テンプレートの基本形式
Firebase AI Logic の場合、 Firebase コンソール には、テンプレートのフロントマターとコンテンツを指定するためのガイド付き UI が用意されています。
サーバー プロンプト テンプレートでは、Dotprompt ベースの構文と形式が使用されます。 詳細については、 テンプレートの形式、構文、例をご覧ください。
次のテンプレートの例は、 an example request to a Gemini model のテンプレートの最も重要なコンポーネントを示しています。
---
model: 'gemini-3-flash-preview'
---
{{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 フロントマターと呼ばれます。
テンプレートの本文にはプロンプトが含まれます。必要に応じて、 システム指示と入力値( 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.ai(backend = GenerativeBackend.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 = result.response;
const text = response.text();
Dart
// ...
// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
var _model = FirebaseAI.googleAI().templateGenerativeModel()
var customerName = 'Jane';
var response = await _model.generateContent(
// Specify your template ID
'my-first-template-v1-0-0',
// Provide the values for any input variables required by your template
inputs: {
'customerName': customerName,
},
);
var text = response?.text;
print(text);
Unity
// ...
// Initialize the Gemini Developer API backend service
var firebaseAI = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `TemplateGenerativeModel` instance
var model = firebaseAI.GetTemplateGenerativeModel();
var customerName = "Jane";
try
{
var response = await model.GenerateContentAsync(
// Specify your template ID
"my-first-template-v1-0-0",
// Provide the values for any input variables required by your template
new Dictionary<string, object> {
{ "customerName", customerName },
}
);
Debug.Log($"Response Text: {response.Text}");
}
catch (Exception e) {
Debug.LogError($"An error occurred: {e.Message}");
}
詳しい手順
このセクションでは、サーバー プロンプト テンプレートの作成、テスト、使用に関する詳細な手順について説明します。
始める前に
まだ行っていない場合は、 **スタートガイドに沿って**、Firebase プロジェクトの設定、アプリと Firebase の連携、 SDK の追加、選択した Gemini API プロバイダのバックエンド サービスの初期化、
GenerativeModelインスタンスの作成を完了します。サーバー プロンプト テンプレートを作成して管理するために必要な権限 があることを確認します。デフォルトでは、これらの権限はすべてオーナーロールに含まれています。
Vertex AI Gemini API を使用していて、Vertex AI Gemini APIユースケースで ロケーション ベースの制限が必要な場合は、 テンプレートの高度なワークフローがサポートされています。
ステップ 1: サーバー プロンプト テンプレートを作成する
ほとんどのユースケースでは、 Firebase コンソールでサーバー プロンプト テンプレートを作成して管理します。
Firebase コンソールで、[AI Services] > [AI Logic] > [Prompt templates] タブに移動します。
[Create new template] をクリックして、スターター テンプレート オプションを選択します。
これらのスターター テンプレートには、一般的なユースケースの形式と構文が用意されています。どのオプションを選択しても、ニーズに合わせてテンプレートを完全に変更できます。
このスタートガイドでは、
Input + System Instructionsオプションを選択していることを前提としています。
テンプレートの ID を入力します。
テンプレート名: テンプレートの表示名(例:
My First Template)。 Firebase コンソールなどの Firebase インターフェース内でのみ表示されます。テンプレート ID: Firebase プロジェクト内のテンプレートで一意の ID を指定する必要があります(
など)。アプリからのリクエストでこの ID を参照します。my-first-template-v1-0-0テンプレート ID には バージョン管理システム を使用することをおすすめします。
テンプレート ID は最大 63 文字で、小文字、数字、ハイフンを使用できます。
必要に応じて、テンプレートの [Configuration (frontmatter)] セクションを変更します。
このセクションには、少なくとも次のようなモデル名を含める必要があります。
--- model: 'gemini-3-flash-preview' ---必要に応じて、モデルの構成や入出力制御などを指定することもできます。詳細とオプションについては、 テンプレートの形式、構文、例をご覧ください。
必要に応じて、テンプレートの [Prompt and (as applicable) system instructions] セクションを変更します。
このセクションには、少なくともモデルに送信するテキスト プロンプトを含める必要があります。
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 コンソールには、テンプレートのテスト機能が用意されています。この機能を使用すると、テンプレートが使用されたときに何が起こるかを確認できます。リクエストの形式と実際のリクエストの出力の両方を確認できます。
テンプレートをテストできるように、[Save template] をクリックします。
テンプレートは後でいつでも編集または削除できます。後で変更できない値はテンプレート ID のみです。
プロンプトで入力変数を使用する場合は、[Test input] フィールドにテスト値を含めます。この例では、次のようになります。
{ "customerName": "Jane" }Firebase プロジェクトで複数の Gemini API プロバイダが有効になっている場合は、テスト リクエストに使用するプロバイダを選択できます。このオプションがコンソールに表示されたら、
Gemini Developer APIまたはVertex AI Gemini APIを選択します。この選択は、 Firebase コンソールのテスト機能を使用して送信されたリクエストにのみ適用されます。アプリからの実際のリクエストでは、 他のリクエストと同様に、選択した Gemini API プロバイダを指定します。
[Create formatted test request] ボタンをクリックします。
画面の右側に表示される結果のフォーマットされたテスト リクエストを確認し、テンプレートのフィールドを反復処理します。
フォーマットされたテスト リクエストに問題がなければ、[Run prompt test] ボタンをクリックします。
画面の右側に表示される結果のテスト レスポンスを確認し、テンプレートのフィールドを反復処理します。
アプリのコードからテンプレートにアクセスする準備ができたら、 テンプレートをロック するには、テンプレートの 右上にある
ロック アイコンをクリックします。[Close] をクリックして編集を終了します。
ステップ 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.ai(backend = GenerativeBackend.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 = result.response;
const text = response.text();
Dart
Flutter プラグインは、近日中にサーバー プロンプト テンプレートをサポートする予定です。
リクエストでテンプレートを使用するには、templateGenerativeModel インスタンス(または templateImagenModel)を作成します。
// ...
// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
var _model = FirebaseAI.googleAI().templateGenerativeModel()
var customerName = 'Jane';
var response = await _model.generateContent(
// Specify your template ID
'my-first-template-v1-0-0',
// Provide the values for any input variables required by your template
inputs: {
'customerName': customerName,
},
);
var text = response?.text;
print(text);
Unity
リクエストでテンプレートを使用するには、templateGenerativeModel インスタンス(または templateImagenModel)を作成します。
// ...
// Initialize the Gemini Developer API backend service
var firebaseAI = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `TemplateGenerativeModel` instance
var model = firebaseAI.GetTemplateGenerativeModel();
var customerName = "Jane";
try
{
var response = await model.GenerateContentAsync(
// Specify your template ID
"my-first-template-v1-0-0",
// Provide the values for any input variables required by your template
new Dictionary<string, object> {
{ "customerName", customerName },
}
);
Debug.Log($"Response Text: {response.Text}");
}
catch (Exception e) {
Debug.LogError($"An error occurred: {e.Message}");
}
次のステップ
サーバー プロンプト テンプレートの使用に関する ベスト プラクティスと考慮事項 について学習する。
テンプレートの形式と構文の詳細と例を確認する 。
テンプレートの管理(編集、ロック、バージョン管理など)について学習する。
REST API を使用してテンプレートをプログラムで操作する、特定の場所にテンプレートをデプロイするなど、 高度なワークフローについて学習する。