Firebase AI Logic の場合、Firebase コンソールには、テンプレートの内容を指定するためのガイド付き UI が用意されています。
サーバーのプロンプト テンプレートでは、Dotprompt ベースの構文と形式が使用されます。このページでは、テンプレートの形式と構文の詳細な説明と、Gemini と Imagen の両方の例を確認できます。
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
このセクションの例はすべて gemini-2.5-flash を使用するテンプレートを示していますが、Firebase AI Logic でサポートされている Gemini モデル(Gemini Live モデルを除く)を使用できます。
Hello World
サーバー プロンプト テンプレートの最小限の例を次に示します。
構成(フロントマター)
---
model: 'gemini-2.5-flash'
---
プロンプトと(該当する場合)システム指示
Write a story about a magic backpack.
モデル設定
モデル構成を設定して、モデルがレスポンスを生成する方法(最大出力トークン、温度、トップ K、トップ P など)を制御します。
構成(フロントマター)
---
model: 'gemini-2.5-flash'
config:
candidateCount: 1
temperature: 0.9
topP: 0.1
topK: 16
maxOutputTokens: 200
stopSequences: ["red"]
---
プロンプトと(該当する場合)システム指示
Write a story about a magic backpack.
システム指示
システム指示を設定して、モデルの動作を制御します。これらはプロンプトの一部として含めます。
システム指示は
{{role "system"}}構文を使用して指定します。テキスト プロンプトは
{{role "user"}}構文を使用して指定します。
構成(フロントマター)
---
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.
入力変数
プロンプトは静的なものもありますが、多くの場合、プロンプトの一部としてユーザーからのデータを含める必要があります。
Handlebars 式を使用して、プロンプトに動的入力変数を含めることができます。この式は、{{variableName}} または {{object.propertyName}}(Hello, {{name}} from {{address.city}} など)の形式の {{ }} タグ内に含まれています。
構成(フロントマター)
---
model: 'gemini-2.5-flash'
---
プロンプトと(該当する場合)システム指示
Create an example customer invoice for a customer named {{customerName}}.
テンプレートでデフォルト値を指定できますが、通常、入力変数の値はリクエストの一部としてクライアントによって指定されます。
制御フロー(ループと条件)
複雑なプロンプトを作成するには、条件ブロック(#if、else、#unless など)とイテレーション(#each)を使用します。
特別な @ プレフィックスを使用して、追加のコンテキスト情報を変数として指定できます。
@first:#eachブロックの最初のアイテムを反復処理している場合は true。@last:#eachブロックの最後のアイテムを反復処理している場合は true。@index: 現在の要素の(ゼロベースの)インデックス位置を返します。
組み込みの論理ヘルパーについては、Handlebars のドキュメントをご覧ください。
構成(フロントマター)
---
model: 'gemini-2.5-flash'
---
プロンプトと(該当する場合)システム指示
Create an example customer invoice for a customer named {{customerName}}.
Include entries for each of the following products
{{#each productNames}}
{{#if @first}}
Include line items for the following purchases
{{/if}}
- {{this}}
{{/each}}
{{#if isVipCustomer}}
Give the customer a 5% discount.
{{/if}}
条件式では、変数参照のみが受け入れられます。式は受け入れられません。例:
- 次のコードは機能します。
{{#if isVipCustomer}} ... {{/if}} - 次のコードは機能しません。
{{#if customer.type == 'vip'}} ... {{/if}}
変数がブール値の場合、条件は想定どおりに機能します。変数がブール値でない場合、条件は事実上「null ではない」チェックになります。これは、たとえば、次のような省略可能な入力を処理する場合に便利です。
{{#if customerName}}
Hello {{customerName}}
{{else}}
Hello Guest
{{/if}}
入力検証とスキーマ
クライアントからデータが送信される場合は、入力スキーマを使用してプロンプト インジェクションから保護し、リクエストで渡されるデータが期待どおりであることを確認することを強くおすすめします。
クライアントが値を指定しない場合に備えて、デフォルト値を指定できます。
スキーマは、スカラー型の
string、integer、number、boolean、objectをサポートしています。オブジェクト、配列、列挙型については、フィールド名の後に括弧で囲んで記述します。?で省略可能と指定しない限り、すべてのプロパティは必須と見なされます。プロパティが省略可能としてマークされている場合、そのプロパティは null 値許容型にもなるため、LLM はフィールドを省略するかわりに null を返すことも可能になります。
入力スキーマを指定する基本的な例を次に示します。より高度なスキーマについては、以下をご覧ください。
構成(フロントマター)
---
model: 'gemini-2.5-flash'
input:
default:
isVipCustomer: false
schema:
customerName: string, the customers name # string, number, and boolean types are defined like this
productNames?(array, list of products to include in the invoice): string # optional fields are marked with a ?
isVipCustomer?: boolean, whether or not the customer is a VIP
---
プロンプトと(該当する場合)システム指示
Create an example customer invoice for a customer named {{customerName}}.
Include entries for each of the following products
{{#each productNames}}
{{#if @first}}
Include line items for the following purchases
{{/if}}
- {{this}}
{{/each}}
{{#if isVipCustomer}}
Give the customer a 5% discount.
{{/if}}
出力スキーマ
構造化された JSON 出力を生成する場合は、出力スキーマを指定できます。format: json を指定すると、モデルは常に指定されたスキーマに従った JSON レスポンスを返すように制約されます。
スキーマは、スカラー型の
string、integer、number、boolean、objectをサポートしています。オブジェクト、配列、列挙型については、フィールド名の後に括弧で囲んで記述します。?で省略可能と指定しない限り、すべてのプロパティは必須と見なされます。プロパティが省略可能としてマークされている場合、そのプロパティは null 値許容型にもなるため、LLM はフィールドを省略するかわりに null を返すことも可能になります。
構造化された JSON 出力を生成する基本的な例を次に示します。より高度なスキーマについては、以下をご覧ください。
構成(フロントマター)
---
model: gemini-2.5-flash
output:
format: json
schema:
invoiceId: string
invoiceFile(object, an invoice file):
url?: string
contents: string
mimeType: string
---
プロンプトと(該当する場合)システム指示
Create an example customer invoice.
マルチモーダル入力
Gemini モデルに送信されるマルチモーダル プロンプトには、ファイル(テキストと画像、PDF、プレーン テキスト ファイル、音声、動画など)を含む複数の種類の入力を含めることができます。
{{media url}}構文を使用して、URL でファイルを指定します。{{media type="mime_type" data="contents"}}構文を使用してインライン ファイルを指定します。
マルチモーダル入力を提供する基本的な例を次に示します。より複雑な例を以下に示します。
構成(フロントマター)
---
model: 'gemini-2.5-flash'
---
プロンプトと(該当する場合)システム指示
Describe this image
{{media type="mimeType" data="imageData"}}
Imagen(画像生成)
最初のリリースでは、サーバー プロンプト テンプレートは Imagen モデルとテキストのみのプロンプトを使用した画像の生成をサポートしています。Imagen を使用した画像の編集(Vertex AI Gemini API を使用する場合)など、近日中にサポートを追加する予定です。
基本
この例は、Imagen で画像を生成するための基本的なテンプレートを示しています。このテンプレートには、Gemini と同様の入力変数と入力検証が含まれています。
構成(フロントマター)
---
model: 'imagen-4.0-generate-001'
input:
schema:
prompt: 'string'
---
プロンプトと(該当する場合)システム指示
Create an image containing {{prompt}}
高度
この例では、モデル構成を追加し、Gemini と同様の入力変数、入力検証、制御フローなどの高度な機能をプロンプトで使用する方法を示します。
構成(フロントマター)
---
model: 'imagen-4.0-fast-generate-001'
config:
sampleCount: 1
aspectRatio: "16:9"
personGeneration: dont_allow
includeRaiReason: true
input:
schema:
style(enum, The style of image): [photo, sketch, painting]
subject: string, The object or animal or scenery to generate.
context?: string, Optional background or context description.
default:
style: photo
---
プロンプトと(該当する場合)システム指示
A {{style}} of {{subject}}{{#if context}}{{context}}{{/if}}.