Vorlagenformat, ‑syntax und ‑beispiele


Für Firebase AI Logic bietet die Firebase-Konsole eine geführte Benutzeroberfläche, über die Sie den Inhalt einer Vorlage angeben können.

Server-Prompt-Vorlagen verwenden eine auf Dotprompt basierende Syntax und ein auf Dotprompt basierendes Format. Auf dieser Seite finden Sie detaillierte Beschreibungen des Vorlagenformats und der Syntax sowie Beispiele für Gemini und Imagen.

Hier sind die wichtigsten Komponenten für eine Beispielanfrage an ein Gemini-Modell:

---
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}}.
  • Der obere Bereich zwischen den drei Bindestrichen enthält den Modellnamen sowie optional eine beliebige Modellkonfiguration, Eingabevalidierung oder ein Schema, das Sie in der Anfrage senden möchten. Die Daten werden in Schlüssel/Wert-Paaren angeordnet und werden häufig als YAML-Frontmatter bezeichnet.

  • Der Text der Vorlage enthält den Prompt. Optional können auch Systemanweisungen und Eingabewerte (mit Handlebars-Syntax) enthalten sein.


Auf dieser Seite finden Sie detaillierte Beschreibungen des Vorlagenformats und der Vorlagensyntax sowie Beispiele für Folgendes:



Gemini

In allen Beispielen in diesem Abschnitt werden Vorlagen mit gemini-3-flash-preview verwendet. Sie können jedoch jedes von Firebase AI Logic unterstützte Gemini-Modell verwenden (mit Ausnahme von Gemini Live-Modellen).

Hello World

Hier ein minimales Beispiel für eine Server-Promptvorlage:

Konfiguration (Frontmatter)

---
model: 'gemini-3-flash-preview'
---

Prompt und (falls zutreffend) Systemanweisungen

Write a story about a magic backpack.


Generierung von Antworten steuern

Je nach Anwendungsfall und dem erforderlichen Maß an Kontrolle können Sie die Generierung von Antworten auf verschiedene Arten steuern.

Modellkonfiguration

Legen Sie eine Modellkonfiguration fest, um zu steuern, wie das Modell eine Antwort generiert, z. B. maximale Anzahl von Ausgabetokens, Temperatur, Top-K und Top-P.

Konfiguration (Frontmatter)

---
model: 'gemini-3-flash-preview'
config:
  candidateCount: 1
  temperature: 0.9
  topP: 0.1
  topK: 16
  maxOutputTokens: 200
  stopSequences: ["red"]
---

Prompt und (falls zutreffend) Systemanweisungen

Write a story about a magic backpack.


Konfiguration für „Denken“

Geben Sie eine Konfiguration für das Denken für Modelle an, die das Denken unterstützen.

Konfiguration (Frontmatter)

  • Gemini 3 und spätere Modelle (Denkebenen)

    ---
    model: 'gemini-3-flash-preview'
    config:
      thinkingConfig:
        thinkingLevel: medium
        includeThoughts: true
    ---
    
  • Gemini 2.5-Modelle (Budgets für Denkprozesse)

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

Prompt und (falls zutreffend) Systemanweisungen

Solve x^2 + 4x + 4 = 0


Sicherheits­einstellungen

Mit den Sicherheitseinstellungen können Sie die Wahrscheinlichkeit anpassen, Antworten zu erhalten, die als schädlich eingestuft werden könnten.

Konfiguration (Frontmatter)

Beispiel mit einer Sicherheitseinstellung:

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

Beispiel mit mehreren Sicherheitseinstellungen:

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

Prompt und (falls zutreffend) Systemanweisungen

Write a story about a magic backpack.


Systemanweisungen

Legen Sie Systemanweisungen fest, um das Verhalten des Modells zu steuern. Sie sind Teil des Prompts:

  • Geben Sie die Systemanweisungen mit der Syntax {{role "system"}} an.

  • Geben Sie den Text-Prompt mit der Syntax {{role "user"}} an.

Konfiguration (Frontmatter)

---
model: 'gemini-3-flash-preview'
---

Prompt und (falls zutreffend) Systemanweisungen

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


Eingabevariablen

Einige Prompts sind statisch, aber oft müssen Sie Daten des Nutzers in den Prompt einfügen.

Sie können dynamische Eingabevariablen mithilfe von Handlebars-Ausdrücken in den Prompt einfügen. Diese Ausdrücke sind in {{ }}-Tags im Format {{variableName}} oder {{object.propertyName}} enthalten (z. B. Hello, {{name}} from {{address.city}}).

Konfiguration (Frontmatter)

---
model: 'gemini-3-flash-preview'
---

Prompt und (falls zutreffend) Systemanweisungen

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

Sie können in der Vorlage einen Standardwert angeben. Der Wert einer Eingabevariablen wird jedoch in der Regel vom Client im Rahmen der Anfrage bereitgestellt.


Kontrollfluss (Schleifen und Bedingungen)

Für komplexere Prompts können Sie bedingte Blöcke (z. B. #if, else und #unless) und Iterationen (#each) verwenden.

Sie können zusätzliche Kontextinformationen als Variablen mit dem speziellen Präfix @ angeben:

  • @first: „true“, wenn das erste Element eines #each-Blocks durchlaufen wird.
  • @last: „true“, wenn das letzte Element eines #each-Blocks durchlaufen wird.
  • @index: Gibt die (nullbasierte) Indexposition des aktuellen Elements zurück.

Informationen zu allen integrierten logischen Helfern finden Sie in der Handlebars-Dokumentation.

Konfiguration (Frontmatter)

---
model: 'gemini-3-flash-preview'
---

Prompt und (falls zutreffend) Systemanweisungen

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

Für Bedingungen ist nur ein Variablenverweis zulässig, nicht ein beliebiger Ausdruck, z. B.:

  • Das funktioniert: {{#if isVipCustomer}} ... {{/if}}
  • Das Folgende funktioniert nicht: {{#if customer.type == 'vip'}} ... {{/if}}

Wenn die Variable ein boolescher Wert ist, funktioniert die Bedingung wie erwartet. Wenn die Variable kein boolescher Wert ist, entspricht die Bedingung effektiv einer „is-not-null“-Prüfung. Das kann beispielsweise beim Umgang mit optionalen Eingaben nützlich sein:

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


Eingabevalidierung und ‑schema

Wenn Sie Daten vom Client erhalten, empfehlen wir dringend, das Eingabeschema zu verwenden, um sich vor Prompt-Injection zu schützen und dafür zu sorgen, dass die im Request übergebenen Daten Ihren Erwartungen entsprechen.

  • Sie können Standardwerte angeben, falls der Client keinen Wert bereitstellt.

  • Das Schema unterstützt die skalaren Typen string, integer, number, boolean und object. Objekte, Arrays und Enums werden durch eine Klammer nach dem Feldnamen gekennzeichnet.

  • Alle Attribute gelten als erforderlich, sofern Sie sie nicht mit ? als optional kennzeichnen. Wenn eine Eigenschaft als optional gekennzeichnet ist, wird sie auch auf „nullable“ gesetzt, damit LLMs mehr Spielraum haben, „null“ zurückzugeben, anstatt ein Feld auszulassen.

Hier finden Sie ein einfaches Beispiel für die Bereitstellung eines Eingabeschemas. Ein komplexeres Schema finden Sie direkt darunter.

Konfiguration (Frontmatter)

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

Prompt und (falls zutreffend) Systemanweisungen

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


Ausgabeschema

Wenn das Modell eine strukturierte JSON-Ausgabe generieren soll, können Sie ein Ausgabeschema angeben. Wenn Sie format: json angeben, wird das Modell darauf beschränkt, immer eine JSON-Antwort zurückzugeben, die dem angegebenen Schema entspricht.

  • Das Schema unterstützt die skalaren Typen string, integer, number, boolean und object. Objekte, Arrays und Enums werden durch eine Klammer nach dem Feldnamen gekennzeichnet.

  • Alle Attribute gelten als erforderlich, sofern Sie sie nicht mit ? als optional kennzeichnen. Wenn eine Eigenschaft als optional gekennzeichnet ist, wird sie auch auf „nullable“ gesetzt, damit LLMs mehr Spielraum haben, „null“ zurückzugeben, anstatt ein Feld auszulassen.

Hier finden Sie ein einfaches Beispiel für die Generierung strukturierter JSON-Ausgabe. Ein komplexeres Schema finden Sie unten.

Konfiguration (Frontmatter)

---
model: gemini-3-flash-preview
output:
  format: json
  schema:
    invoiceId: string
    invoiceFile(object, an invoice file):
      url?: string
      contents: string
      mimeType: string
---

Prompt und (falls zutreffend) Systemanweisungen

Create an example customer invoice.


Multimodale Eingabe

Multimodale Prompts, die an ein Gemini-Modell gesendet werden, können mehrere Arten von Eingaben enthalten, darunter Dateien (z. B. Text zusammen mit Bildern, PDFs, Nur-Text-Dateien, Audio und Video).

  • Geben Sie eine Datei über ihre URL mit der Syntax {{media url}} an.

  • Geben Sie eine Inline-Datei mit der {{media type="mime_type" data="contents"}}-Syntax an.

Einfaches Beispiel (multimodale Eingabe)

Einfaches Beispiel für die multimodale Eingabe Ein komplexeres Beispiel finden Sie direkt unten.

Konfiguration (Frontmatter)

---
model: 'gemini-3-flash-preview'
---

Prompt und (falls zutreffend) Systemanweisungen

Describe this image

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

Komplexes Beispiel (multimodale Eingabe)

Komplexeres Beispiel für die multimodale Eingabe

Konfiguration (Frontmatter)

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

Prompt und (falls zutreffend) Systemanweisungen

{{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}}


Tool-Nutzung

Server-Promptvorlagen unterstützen die folgenden Tools. Funktionsaufrufe werden noch nicht unterstützt, aber das wird sich bald ändern.

Wenn Sie möchten, dass Ihre Nutzer zusätzliche Informationen für die Anfrage an das Modell angeben, verwenden Sie Eingabevariablen in der Server-Promptvorlage zusammen mit der Eingabevalidierung.

Codeausführung

Mit dem Tool Codeausführung kann das Modell Python-Code generieren und ausführen.

Konfiguration (Frontmatter)

---
model: 'gemini-3-flash-preview'
tools:
  - codeExecution
---

Prompt und (falls zutreffend) Systemanweisungen

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

Mit dem Tool URL-Kontext können Sie dem Modell zusätzlichen Kontext in Form von URLs zur Verfügung stellen. In diesem Beispiel wird auch gezeigt, wie Sie die Eingabevalidierung für URLs festlegen können, wenn sie vom Nutzer angegeben werden.

Konfiguration (Frontmatter)

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

Prompt und (falls zutreffend) Systemanweisungen

Compare the ingredients and cooking times from the recipes at {{url1}} and {{url2}}

Das Tool Mit der Google Suche fundieren verbindet das Modell mit öffentlich verfügbaren Webinhalten in Echtzeit.

Konfiguration (Frontmatter)

---
model: 'gemini-3-flash-preview'
tools:
  - googleSearch
---

Prompt und (falls zutreffend) Systemanweisungen

Who won the Euro 2024?



Imagen (Bildgenerierung) (eingestellt)

In der ersten Version unterstützen Server-Prompt-Vorlagen das Generieren von Bildern mit Imagen-Modellen und einem reinen Text-Prompt. Wir werden bald weitere Funktionen hinzufügen, darunter das Bearbeiten von Bildern mit Imagen (bei Verwendung des Vertex AI Gemini API).

Einfach

Dieses Beispiel zeigt eine einfache Vorlage zum Generieren von Bildern mit Imagen, mit Eingabevariablen und Eingabevalidierung ähnlich wie bei Gemini.

Konfiguration (Frontmatter)

---
model: 'imagen-4.0-generate-001'
input:
  schema:
    prompt: 'string'
---

Prompt und (falls zutreffend) Systemanweisungen

Create an image containing {{prompt}}

Erweitert

In diesem Beispiel wird gezeigt, wie Sie eine Modellkonfiguration hinzufügen, Sicherheitseinstellungen angeben und erweiterte Funktionen im Prompt verwenden, z. B. Eingabevariablen, Eingabevalidierung und Ablaufsteuerung, ähnlich wie bei Gemini.

Konfiguration (Frontmatter)

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

Prompt und (falls zutreffend) Systemanweisungen

A {{style}} of {{subject}}{{#if context}}{{context}}{{/if}}.