テンプレートの形式、構文、例


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-3.8-flash を使用するテンプレートを示していますが、Firebase AI Logic でサポートされている Gemini モデル(Gemini Live API モデルを除く)を使用できます。

Hello World

サーバー プロンプト テンプレートの最小限の例を次に示します。

構成(frontmatter)

---
model: 'gemini-3.8-flash'
---

プロンプトと(該当する場合)システム指示

Write a story about a magic backpack.



回答の生成を制御する

ユースケースと必要な制御レベルに応じて、さまざまな方法でレスポンスの生成を制御できます。

モデル設定

モデル構成を設定して、モデルがレスポンスを生成する方法(最大出力トークン、停止シーケンスなど)を制御します。

構成(frontmatter)

---
model: 'gemini-3.8-flash'
config:
  maxOutputTokens: 200
  stopSequences: ["red"]
---

プロンプトと(該当する場合)システム指示

Write a story about a magic backpack.


思考の構成

思考をサポートするモデルに思考関連の構成を指定します。

構成(frontmatter)

  • Gemini 3.x 以降のモデル(思考レベル)

    ---
    model: 'gemini-3.8-flash'
    config:
      thinkingConfig:
        thinkingLevel: medium
        includeThoughts: true
    ---
    
  • Gemini 2.5 モデル(思考予算)

    ---
    model: 'gemini-2.5-flash'
    config:
      thinkingConfig:
        thinkingBudget: 1024
        includeThoughts: true
    ---
    

プロンプトと(該当する場合)システム指示

Solve x^2 + 4x + 4 = 0


安全性設定

安全性設定を使用して、有害と見なされる可能性のある回答が生成される可能性を調整します。

構成(frontmatter)

1 つの安全設定の例:

---
model: 'gemini-3.8-flash'
config:
  safetySettings:
    - category: HARM_CATEGORY_HARASSMENT
      threshold: BLOCK_ONLY_HIGH
---

複数の安全性設定の例:

---
model: 'gemini-3.8-flash'
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"}} 構文を使用してテキスト プロンプトを指定します。

構成(frontmatter)

---
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.



入力変数

プロンプトには静的なものもありますが、多くの場合、プロンプトの一部としてユーザーからのデータを含める必要があります。

プロンプトに動的入力変数を含めるには、Handlebars 式を使用します。この式は、{{variableName}} または {{object.propertyName}} の形式の {{ }} タグ内に含まれます(例: Hello, {{name}} from {{address.city}})。

構成(frontmatter)

---
model: 'gemini-3.8-flash'
---

プロンプトと(該当する場合)システム指示

Create an example customer invoice for a customer named {{customerName}}.

テンプレートにデフォルト値を指定できますが、入力変数の値は通常、リクエストの一部としてクライアントから提供されます。



制御フロー(ループと条件)

より複雑なプロンプトを作成するには、条件ブロック(#if、else、#unless など)とイテレーション(#each)を使用します。

特別な @ 接頭辞を持つ変数として、追加のコンテキスト情報を提供できます。

  • @first: #each ブロックの最初のアイテムを反復処理する場合は true。
  • @last: #each ブロックの最後のアイテムを反復処理する場合は true。
  • @index: 現在の要素のインデックス位置(0 ベース)を示します。

すべての組み込み論理ヘルパーについては、Handlebars のドキュメントをご覧ください。

構成(frontmatter)

---
model: 'gemini-3.8-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}}

変数がブール値の場合、条件は想定どおりに機能します。変数がブール値でない場合、条件は実質的に「is-not-null」チェックになります。これは、オプションの入力を処理する場合に便利です。次に例を示します。

{{#if customerName}}
Hello {{customerName}}
{{else}}
Hello Guest
{{/if}}



入力の検証とスキーマ

クライアントからデータが送信される場合は、入力スキーマを使用してプロンプト インジェクションから保護し、リクエストで渡されたデータが想定どおりであることを確認することを強くおすすめします。

  • クライアントが値を指定しない場合に備えて、デフォルト値を指定できます。

  • スキーマは、スカラー型の string、integer、number、boolean、object をサポートしています。オブジェクト、配列、列挙型については、フィールド名の後に括弧で囲んで記述します。

  • ? で省略可能と指定しない限り、すべてのプロパティは必須と見なされます。プロパティが省略可能としてマークされている場合、そのプロパティは null 値許容型にもなるため、LLM はフィールドを省略するかわりに null を返すことも可能になります。

入力スキーマを指定する基本的な例を次に示します。より高度なスキーマを以下に示します。

構成(frontmatter)

---
model: 'gemini-3.8-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 出力を生成する基本的な例を次に示します。より高度なスキーマについては、すぐ下をご覧ください。

構成(frontmatter)

---
model: gemini-3.8-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"}} 構文を使用してインライン ファイルを指定します。

基本的な例(マルチモーダル入力)

マルチモーダル入力を提供する基本的な例を次に示します。より複雑な例を以下に示します。

構成(frontmatter)

---
model: 'gemini-3.8-flash'
---

プロンプトと(該当する場合)システム指示

Describe this image

{{media type="mimeType" data="imageData"}}

複雑な例(マルチモーダル入力)

マルチモーダル入力を提供する、より複雑な例を次に示します。

構成(frontmatter)

---
model: gemini-3.8-flash
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 コードを生成して実行できます。

構成(frontmatter)

---
model: 'gemini-3.8-flash'
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 の入力検証を指定する方法も示しています。

構成(frontmatter)

---
model: 'gemini-3.8-flash'
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 Search によるグラウンディング ツールは、モデルをリアルタイムで一般公開されているウェブ コンテンツに接続します。

構成(frontmatter)

---
model: 'gemini-3.8-flash'
tools:
  - googleSearch
---

プロンプトと(該当する場合)システム指示

Who won the Euro 2024?

Google Maps を使用したグラウンディング

Google Maps によるグラウンディング ツールは、位置認識機能の地理空間データをモデルに提供します。

googleMaps ツールを使用するには、テンプレートのフロントマターの tools オブジェクトにツールをリストします。次の例は、いくつかの追加のオプション構成を示しています。

  • クライアントサイド コードからの入力変数を許可し、その入力(この例では question)の入力検証とスキーマを実行します。

  • TemplateToolConfig を使用して、クライアントサイドのコードで場所の座標や言語コードを指定して、googleMaps ツールを構成します。

サンプル テンプレートの下に、これらのオプション構成を操作するためのクライアントサイドのコードサンプルを示す展開可能なセクションがあります。

構成(frontmatter)

---
model: 'gemini-3.8-flash'
tools:
  - googleMaps
input:
  schema:
    question: string
---

プロンプトと(該当する場合)システム指示

{{role "system"}}
You are a helpful tour guide. Use the Google Maps tool with the provided coordinates to answer the user's question based on their location.

{{role "user"}}
{{question}}