Pour Firebase AI Logic, la console Firebase fournit une interface utilisateur guidée qui vous permet de spécifier le contenu d'un modèle.
Les modèles de prompts côté serveur utilisent une syntaxe et un format basés sur Dotprompt. Sur cette page, vous trouverez des descriptions détaillées du format et de la syntaxe des modèles, ainsi que des exemples pour Gemini et Imagen.
Voici les composants les plus importants d'un exemple de requête adressée à un modèle Gemini :
---
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}}.
La section supérieure entre les trois tirets contient le nom du modèle, ainsi que, éventuellement, toute configuration, validation d'entrée ou schéma de modèle que vous souhaitez envoyer dans la requête. Il est rédigé sous forme de paires clé/valeur et est généralement appelé frontmatter YAML.
Le corps du modèle contient la requête. Il peut également inclure des instructions système et des valeurs d'entrée (à l'aide de la syntaxe Handlebars).
Cette page fournit des descriptions détaillées du format et de la syntaxe des modèles, ainsi que des exemples, pour les éléments suivants :
Gemini
Tous les exemples de cette section montrent des modèles qui utilisent gemini-2.5-flash, mais vous pouvez utiliser n'importe quel modèle Gemini compatible avec Firebase AI Logic (à l'exception des modèles Gemini Live).
Hello World
Voici un exemple minimal de modèle de requête de serveur :
Configuration (frontmatter)
---
model: 'gemini-2.5-flash'
---
Requête et instructions système (le cas échéant)
Write a story about a magic backpack.
Configuration de modèle
Définissez une configuration de modèle pour contrôler la façon dont le modèle génère une réponse, comme le nombre maximal de jetons de sortie, la température, top-K et top-P.
Configuration (frontmatter)
---
model: 'gemini-2.5-flash'
config:
candidateCount: 1
temperature: 0.9
topP: 0.1
topK: 16
maxOutputTokens: 200
stopSequences: ["red"]
---
Requête et instructions système (le cas échéant)
Write a story about a magic backpack.
Instructions système
Définissez des instructions système pour orienter le comportement du modèle. Vous les incluez dans la requête :
Spécifiez les instructions système à l'aide de la syntaxe
{{role "system"}}.Spécifiez la requête textuelle à l'aide de la syntaxe
{{role "user"}}.
Configuration (frontmatter)
---
model: 'gemini-2.5-flash'
---
Requête et instructions système (le cas échéant)
{{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.
Variables d'entrée
Certaines requêtes sont statiques, mais vous devez souvent inclure des données de l'utilisateur dans la requête.
Vous pouvez inclure des variables d'entrée dynamiques dans la requête à l'aide d'expressions Handlebars, qui sont contenues dans des balises {{ }} au format {{variableName}} ou {{object.propertyName}} (par exemple, Hello, {{name}} from {{address.city}}).
Configuration (frontmatter)
---
model: 'gemini-2.5-flash'
---
Requête et instructions système (le cas échéant)
Create an example customer invoice for a customer named {{customerName}}.
Vous pouvez fournir une valeur par défaut dans le modèle, mais la valeur d'une variable d'entrée est généralement fournie par le client dans la requête.
Flux de contrôle (boucles et conditions)
Pour écrire des requêtes plus complexes, vous pouvez utiliser des blocs conditionnels (comme #if, else et #unless) et l'itération (#each).
Vous pouvez fournir des informations contextuelles supplémentaires sous forme de variables avec un préfixe @ spécial :
@first: "true" lors de l'itération du premier élément d'un bloc#each.@last: "true" lors de l'itération du dernier élément d'un bloc#each.@index: indique la position (indexée sur zéro) de l'élément actuel.
Consultez la documentation Handlebars pour en savoir plus sur tous les helpers logiques intégrés.
Configuration (frontmatter)
---
model: 'gemini-2.5-flash'
---
Requête et instructions système (le cas échéant)
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}}
Notez que les conditions n'acceptent qu'une référence de variable, et non un type d'expression, par exemple :
- L'exemple suivant fonctionne :
{{#if isVipCustomer}} ... {{/if}} - L'exemple suivant ne fonctionne pas :
{{#if customer.type == 'vip'}} ... {{/if}}
Si la variable est un booléen, la condition fonctionne comme prévu. Si la variable n'est pas une valeur booléenne, la condition est en fait une vérification "is-not-null". Cela peut être utile pour gérer les entrées facultatives, par exemple :
{{#if customerName}}
Hello {{customerName}}
{{else}}
Hello Guest
{{/if}}
Validation des entrées et schéma
Si vous disposez de données provenant du client, nous vous recommandons vivement d'utiliser le schéma d'entrée pour vous protéger contre l'injection de code dans les requêtes et vous assurer que les données transmises dans la requête correspondent à vos attentes.
Vous pouvez fournir des valeurs par défaut si le client n'en fournit pas.
Le schéma accepte les types scalaires
string,integer,number,booleanetobject. Les objets, les tableaux et les énumérations sont indiqués par une parenthèse après le nom du champ.Toutes les propriétés sont considérées comme obligatoires, sauf si vous les indiquez comme facultatives avec
?. Lorsqu'une propriété est marquée comme facultative, elle est également définie comme pouvant être nulle pour permettre aux LLM de renvoyer une valeur nulle au lieu d'omettre un champ.
Voici un exemple de base pour fournir un schéma d'entrée. Vous trouverez un schéma plus avancé juste en dessous.
Configuration (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
---
Requête et instructions système (le cas échéant)
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}}
Schéma de sortie
Si vous souhaitez que le modèle génère une sortie JSON structurée, vous pouvez spécifier un schéma de sortie. En spécifiant format: json, vous contraignez le modèle à toujours renvoyer une réponse JSON qui suit le schéma spécifié.
Le schéma accepte les types scalaires
string,integer,number,booleanetobject. Les objets, les tableaux et les énumérations sont indiqués par une parenthèse après le nom du champ.Toutes les propriétés sont considérées comme obligatoires, sauf si vous les indiquez comme facultatives avec
?. Lorsqu'une propriété est marquée comme facultative, elle est également définie comme pouvant être nulle pour permettre aux LLM de renvoyer une valeur nulle au lieu d'omettre un champ.
Voici un exemple de base pour générer une sortie JSON structurée. Vous trouverez ci-dessous un schéma plus avancé.
Configuration (frontmatter)
---
model: gemini-2.5-flash
output:
format: json
schema:
invoiceId: string
invoiceFile(object, an invoice file):
url?: string
contents: string
mimeType: string
---
Requête et instructions système (le cas échéant)
Create an example customer invoice.
Requêtes multimodales
Les requêtes multimodales envoyées à un modèle Gemini peuvent inclure plusieurs types d'entrées, y compris des fichiers (comme du texte avec des images, des PDF, des fichiers en texte brut, de l'audio et des vidéos).
Fournissez un fichier à l'aide de son URL avec la syntaxe
{{media url}}.Fournissez un fichier intégré avec la syntaxe
{{media type="mime_type" data="contents"}}.
Voici un exemple de base pour fournir une entrée multimodale. Vous trouverez un exemple plus complexe juste en dessous.
Configuration (frontmatter)
---
model: 'gemini-2.5-flash'
---
Requête et instructions système (le cas échéant)
Describe this image
{{media type="mimeType" data="imageData"}}
Imagen (génération d'images)
Dans la version initiale, les modèles de prompts côté serveur permettent de générer des images à l'aide des modèles Imagen et d'un prompt textuel uniquement. Revenez bientôt pour en savoir plus, y compris sur la retouche d'images avec Imagen (lorsque vous utilisez Vertex AI Gemini API).
De base
Cet exemple montre un modèle de base pour générer des images avec Imagen, avec des variables d'entrée et une validation des entrées semblable à Gemini.
Configuration (frontmatter)
---
model: 'imagen-4.0-generate-001'
input:
schema:
prompt: 'string'
---
Requête et instructions système (le cas échéant)
Create an image containing {{prompt}}
Avancé
Cet exemple montre comment ajouter une configuration de modèle et utiliser des fonctionnalités plus avancées dans l'invite, comme les variables d'entrée, la validation des entrées et les flux de contrôle semblables à Gemini.
Configuration (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
---
Requête et instructions système (le cas échéant)
A {{style}} of {{subject}}{{#if context}}{{context}}{{/if}}.