モデルへのリクエストごとに、プロンプトと、モデルのレスポンスを制御するスキーマと構成(省略可)を送信します。Firebase AI Logic を使用する場合、このすべての情報をクライアント コードから直接送信することも、サーバー プロンプト テンプレートを使用してサーバーサイドで指定することもできます。
サーバーのプロンプト テンプレートを使用すると、プロンプト、スキーマ、構成をサーバーサイドに保存し、アプリのコードベースは、特定のテンプレートを参照するキー(テンプレート ID)と、そのテンプレートに必要な入力のみをクライアントからサーバーに渡します。このアプローチには次のようなメリットがあります。
クライアントサイドでプロンプトが公開されないように保護する
新しいアプリ バージョンをリリースせずにプロンプトと構成を更新する
このガイドでは、サーバー プロンプト テンプレートの使用を開始する方法について説明します。
サポートされているモデルと機能
Firebase AI Logic がサポートするGemini モデル(Gemini Live API モデルを除く)でサーバー プロンプト テンプレートを使用します。
まだサポートされていない機能の一覧を確認します。
概要
サーバー プロンプト テンプレートを使用する基本的なワークフローは次のとおりです。
Firebase コンソールのガイド付き UI を使用してテンプレートを作成します。
Firebase コンソールのテスト機能を使用して、実際のリクエストでテンプレートをテストします。
templateGenerativeModelを使用して、アプリのコードからテンプレートにアクセスします。
サーバー プロンプト テンプレートの基本形式
Firebase AI Logic の場合、Firebase コンソールには、テンプレートのフロントマターとコンテンツを指定するためのガイド付き UI が用意されています。
サーバーのプロンプト テンプレートは、Dotprompt ベースの構文と形式を使用します。詳細については、テンプレートの形式、構文、例をご覧ください。
次のテンプレートの例は、Gemini モデルへのリクエスト例のテンプレートの最も重要なコンポーネントを示しています。
---
model: 'gemini-3.8-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.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インスタンスの作成)を完了します。サーバー プロンプト テンプレートの作成と管理に必要な権限があることを確認します。デフォルトでは、これらの権限はすべてオーナーロールに含まれています。
Agent Platform Gemini API (formerly Vertex AI) を使用し、ユースケースでロケーション ベースの制限が必要な場合は、テンプレートの高度なワークフローがサポートされます。
ステップ 1: サーバー プロンプト テンプレートを作成する
ほとんどのユースケースでは、Firebase コンソールでサーバー プロンプト テンプレートを作成して管理します。
Firebase コンソールで、[AI サービス] > [AI ロジック] > [プロンプト テンプレート] タブに移動します。
[新しいテンプレートを作成] をクリックし、スターター テンプレート オプションを選択します。
これらのスターター テンプレートは、一般的なユースケースの形式と構文を提供します。どのオプションを選択しても、ニーズに合わせてテンプレートを完全に変更できます。
このスタートガイドは、
Input + System Instructionsオプションを選択していることを前提としています。
テンプレートの識別子を入力します。
テンプレート名: テンプレートの表示名(例:
My First Template)。Firebase コンソールなどの Firebase インターフェース内でのみ表示されます。テンプレート ID: Firebase プロジェクト内のテンプレートで一意の ID を指定してください(例:
)。この ID は、アプリからのリクエストで参照されます。my-first-template-v1-0-0テンプレート ID にはバージョン管理システムを使用することをおすすめします。
テンプレート ID は最大 63 文字で、英小文字、数字、ハイフンを使用できます。
必要に応じて、テンプレートの構成(フロントマター)セクションを変更します。
このセクションには、少なくとも次のようなモデル名を含める必要があります。
--- model: 'gemini-3.8-flash' ---必要に応じて、モデルの構成、入出力制御などを指定することもできます。詳細とオプションについては、テンプレートの形式、構文、例をご覧ください。
必要に応じて、テンプレートの [プロンプトと(該当する場合)システム指示] セクションを変更します。
このセクションには、モデルに送信するテキスト プロンプトを少なくとも含める必要があります。
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 コンソールでは、テンプレートのテスト エクスペリエンスが提供されます。このエクスペリエンスでは、テンプレートが使用されたときに何が起こるかを確認できます。リクエストの形式と実際のリクエストの出力の両方を確認できます。
[テンプレートを保存] をクリックして、テンプレートをテストできるようにします。
テンプレートは後でいつでも編集または削除できます。後で変更できない値はテンプレート ID のみです。
プロンプトで入力変数を使用する場合は、[テスト入力] フィールドにテスト値を含めます。この例では、
{ "customerName": "Jane" }Firebase プロジェクトで複数の Gemini API プロバイダが有効になっている場合は、テスト リクエストに使用するプロバイダを選択できます。このオプションがコンソールに表示されたら、
Gemini Developer APIまたはAgent Platform Gemini API(以前の Vertex AI)のいずれかを選択します。この選択は、Firebase コンソールのテスト エクスペリエンスを通じて送信されたリクエストにのみ適用されます。アプリからの実際のリクエストでは、他のリクエストと同様に、選択した Gemini API プロバイダを指定します。
[フォーマットされたテスト リクエストを作成] ボタンをクリックします。
画面の右側に表示された形式設定済みのテスト リクエストを確認し、テンプレートのフィールドを必要に応じて変更します。
フォーマットされたテスト リクエストに問題がなければ、[プロンプト テストを実行] ボタンをクリックします。
画面の右側に表示された テスト レスポンスを確認し、テンプレートのフィールドを必要に応じて変更します。
アプリのコードからテンプレートにアクセスする準備ができたら、テンプレートの右上にある
ロック アイコンをクリックして、テンプレートをロックします。[閉じる] をクリックして編集画面を終了します。
ステップ 3: コードからテンプレートにアクセスする
|
Gemini API プロバイダをクリックして、このページでプロバイダ固有のコンテンツとコードを表示します。 |
サーバー プロンプト テンプレートを使用するリクエストは、他のリクエストと似ていますが、次の点が異なります。
templateGenerativeModelを使用します。- テンプレート ID を指定します。
- テンプレートに必要な変数入力の値を指定します。
テンプレートを作成または更新した後、コードからアクセスする前に、テンプレートが Firebase サーバー全体に反映されるまで数分待つ必要がある場合があります。
Swift
リクエストでテンプレートを使用する templateGenerativeModel インスタンスを作成します。
// ...
// 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 インスタンスを作成します。
// ...
// 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 インスタンスを作成します。
// ...
// 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 インスタンスを作成します。
// ...
// 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 インスタンスを作成します。
// ...
// 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 インスタンスを作成します。
// ...
// 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 を使用してテンプレートをプログラムで操作する、特定の場所にテンプレートをデプロイするなど、高度なワークフローについて学習します。