Firebase AI Logic の場合、Firebase コンソールには、テンプレートの内容を指定するためのガイド付き UI が用意されています 。
サーバー プロンプト テンプレートでは、Dotprompt ベースの構文と形式が使用されます。このページでは、テンプレートの形式と構文の詳細な説明と例を確認できます。
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 フロントマターと呼ばれます。
テンプレートの本文にはプロンプトが含まれます。また、 システム指示と入力値( Handlebars 構文を使用)を含めることもできます。
このページでは、次のテンプレートの形式と構文の詳細な説明と例を示します。
このページのすべての例では
gemini-3-flash-preview を使用するテンプレートを示していますが、Gemini モデル(Gemini Live モデルを除く)を使用できます。Firebase AI Logic
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.
入力変数
プロンプトは静的なものもありますが、多くの場合、ユーザーからのデータをプロンプトの一部として含める必要があります。
構成(フロントマター)
---
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: 現在の要素のインデックス位置(0 ベース)を示します。
組み込みの論理ヘルパーの詳細については、 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 を提供した場合に入力検証を指定する方法も示します。
構成(フロントマター)
---
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}}.