Firebase AI Logic の場合、Firebase コンソールには、テンプレートの内容を指定するためのガイド付き UI が用意されています。
サーバーのプロンプト テンプレートでは、Dotprompt ベースの構文と形式が使用されます。このページでは、テンプレートの形式と構文の詳細な説明と、Gemini と Imagen の両方の例を確認できます。
Gemini モデルへのリクエストの例で最も重要なコンポーネントは次のとおりです。
---
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 frontmatter と呼ばれます。
テンプレートの本文にはプロンプトが含まれています。また、必要に応じて、システム指示と入力値(Handlebars 構文を使用)を含めることもできます。
このページでは、次のテンプレートの形式と構文について、例を交えながら詳しく説明します。
Imagen (非推奨)
Gemini
このセクションの例はすべて gemini-3-flash-preview を使用するテンプレートを示していますが、Firebase AI Logic でサポートされている Gemini モデル(Gemini Live モデルを除く)であればどれでも使用できます。
Hello World
サーバー プロンプト テンプレートの最小限の例を次に示します。
構成(フロントマター)
---
model: 'gemini-3-flash-preview'
---
プロンプトと(該当する場合は)システム指示
Write a story about a magic backpack.
回答の生成を制御する
ユースケースと必要な制御レベルに応じて、さまざまな方法でレスポンスの生成を制御できます。
モデル設定
モデル構成を設定して、モデルがレスポンスを生成する方法(最大出力トークン、Temperature、Top-K、Top-P など)を制御します。
構成(フロントマター)
---
model: 'gemini-3-flash-preview'
config:
candidateCount: 1
temperature: 0.9
topP: 0.1
topK: 16
maxOutputTokens: 200
stopSequences: ["red"]
---
プロンプトと(該当する場合)システム指示
Write a story about a magic backpack.
思考モードの設定
思考をサポートするモデルの思考関連の構成を指定します。
構成(フロントマター)
Gemini 3 以降のモデル(思考レベル)
--- model: 'gemini-3-flash-preview' config: thinkingConfig: thinkingLevel: medium includeThoughts: true ---Gemini 2.5 モデル(思考予算)
--- model: 'gemini-3-flash-preview' config: thinkingConfig: thinkingBudget: 1024 includeThoughts: true ---
プロンプトと(該当する場合)システム指示
Solve x^2 + 4x + 4 = 0
安全性設定
安全性設定を使用して、有害とみなされる可能性のあるレスポンスを取得する可能性を調整します。
構成(フロントマター)
安全設定が 1 つの場合の例:
---
model: 'gemini-3-flash-preview'
config:
safetySettings:
- category: HARM_CATEGORY_HARASSMENT
threshold: BLOCK_ONLY_HIGH
---
複数の安全設定の例:
---
model: 'gemini-3-flash-preview'
config:
safetySettings:
- category: HARM_CATEGORY_HARASSMENT
threshold: BLOCK_ONLY_HIGH
- category: HARM_CATEGORY_HATE_SPEECH
threshold: BLOCK_MEDIUM_AND_ABOVE
---
プロンプトと(該当する場合)システム指示
Write a story about a magic backpack.
システム指示
システム指示を設定して、モデルの動作を制御します。これらはプロンプトの一部として含めます。
システム指示は
{{role "system"}}構文を使用して指定します。テキスト プロンプトは
{{role "user"}}構文を使用して指定します。
構成(フロントマター)
---
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.
入力変数
プロンプトは静的なものもありますが、多くの場合、プロンプトの一部としてユーザーからのデータを含める必要があります。
Handlebars 式を使用して、プロンプトに動的入力変数を含めることができます。これらの式は、{{variableName}} または {{object.propertyName}}(Hello, {{name}} from {{address.city}} など)の形式の {{ }} タグ内に含まれています。
構成(フロントマター)
---
model: 'gemini-3-flash-preview'
---
プロンプトと(該当する場合)システム指示
Create an example customer invoice for a customer named {{customerName}}.
テンプレートでデフォルト値を指定できますが、通常、入力変数の値はリクエストの一部としてクライアントによって提供されます。
制御フロー(ループと条件)
複雑なプロンプトを作成するには、条件ブロック(#if、else、#unless など)とイテレーション(#each)を使用します。
特別な @ プレフィックスを使用して、追加のコンテキスト情報を変数として指定できます。
@first:#eachブロックの最初のアイテムを反復処理している場合は true。@last:#eachブロックの最後のアイテムを反復処理している場合は true。@index: 現在の要素の(ゼロベースの)インデックス位置を返します。
組み込みの論理ヘルパーについては、Handlebars のドキュメントをご覧ください。
構成(フロントマター)
---
model: 'gemini-3-flash-preview'
---
プロンプトと(該当する場合)システム指示
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-3-flash-preview'
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-3-flash-preview
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-3-flash-preview'
---
プロンプトと(該当する場合)システム指示
Describe this image
{{media type="mimeType" data="imageData"}}
複雑な例(マルチモーダル入力)
マルチモーダル入力を提供する複雑な例を次に示します。
構成(フロントマター)
---
model: gemini-3-flash-preview
input:
schema:
image_urls?(array, urls of external images): string
inline_images?(array, inline image data):
type: object
properties:
mime_type: string
contents: string # inline data must be base64-encoded
---
プロンプトと(該当する場合は)システム指示
{{role "system"}}
Use the following image as the basis for comparisons
{{media url="http://example.com/reference_img.bmp"}}
{{role "user"}}
What do the following images have in common?
{{#each image_urls}}
{{media url="this"}}
{{/each}}
{{#each inline_images}}
{{media type="mime_type" data="contents"}}
{{/each}}
ツールの使用
サーバー プロンプト テンプレートは、次のツールをサポートしています。関数呼び出しはまだサポートされていませんが、近日中にサポートされる予定です。
ユーザーがモデルへのリクエストに追加情報を提供できるようにするには、サーバー プロンプト テンプレート内で入力検証とともに入力変数を使用します。
コードの実行
コード実行ツールを使用すると、モデルは Python コードを生成して実行できます。
構成(フロントマター)
---
model: 'gemini-3-flash-preview'
tools:
- codeExecution
---
プロンプトと(該当する場合は)システム指示
What is the sum of the first 50 prime numbers?
Generate and run code for the calculation, and make sure you get all 50.
URL コンテキスト
URL コンテキスト ツールを使用すると、URL の形式でモデルに追加のコンテキストを提供できます。この例では、ユーザーが URL を指定した場合に、URL の入力検証を指定する方法も示します。
構成(フロントマター)
---
model: 'gemini-3-flash-preview'
input:
schema:
url1:
type: string
pattern: '^https?://[\w.-]+\.[a-z]{2,}\S*$'
maxLength: 100
url2:
type: string
pattern: '^https?://[\w.-]+\.[a-z]{2,}\S*$'
maxLength: 100
tools:
- urlContext
---
プロンプトと(該当する場合)システム指示
Compare the ingredients and cooking times from the recipes at {{url1}} and {{url2}}
Google 検索によるグラウンディング
Google 検索でグラウンディングするツールは、モデルをリアルタイムで一般公開されているウェブ コンテンツに接続します。
構成(フロントマター)
---
model: 'gemini-3-flash-preview'
tools:
- googleSearch
---
プロンプトと(該当する場合は)システム指示
Who won the Euro 2024?
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
safetySetting: block_medium_and_above
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}}.