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 Dotprompt-basierte Syntax und ein Dotprompt-basiertes 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-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}}.
  • 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-2.5-flash verwendet. Sie können jedoch jedes Gemini-Modell verwenden, das von Firebase AI Logic unterstützt wird (mit Ausnahme von Gemini Live-Modellen).

Hello World

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

Konfiguration (Frontmatter)

---
model: 'gemini-2.5-flash'
---

Prompt und (falls zutreffend) Systemanweisungen

Write a story about a magic backpack.


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-2.5-flash'
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.


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-2.5-flash'
---

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 einige 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-2.5-flash'
---

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.


Kontrollflüsse (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-2.5-flash'
---

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 im Grunde 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 Angabe eines Eingabeschemas. Ein komplexeres Schema finden Sie unten.

Konfiguration (Frontmatter)

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

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-2.5-flash
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 Syntax {{media type="mime_type" data="contents"}} an.

Hier finden Sie ein einfaches Beispiel für die multimodale Eingabe. Ein komplexeres Beispiel finden Sie direkt unten.

Konfiguration (Frontmatter)

---
model: 'gemini-2.5-flash'
---

Prompt und (falls zutreffend) Systemanweisungen

Describe this image

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



Imagen (Bildgenerierung)

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