En el caso de Firebase AI Logic, la consola de Firebase proporciona una IU guiada para que especifiques el contenido de una plantilla.
Las plantillas de instrucciones del servidor usan una sintaxis y un formato basados en Dotprompt. En esta página, encontrarás descripciones detalladas del formato y la sintaxis de la plantilla, junto con ejemplos para Gemini y Imagen.
Estos son los componentes más importantes de una solicitud de ejemplo a un modelo 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 sección superior dentro de los guiones triples contiene el nombre del modelo, así como cualquier configuración, validación de entrada o esquema del modelo que desees enviar en la solicitud (opcional). Se escribe como pares clave-valor y se conoce comúnmente como frontmatter de YAML.
El cuerpo de la plantilla contiene la instrucción. También puede incluir, de forma opcional, instrucciones del sistema y valores de entrada (con la sintaxis de Handlebars).
En esta página, se proporcionan descripciones detalladas del formato y la sintaxis de la plantilla, junto con ejemplos, para lo siguiente:
Gemini
Todos los ejemplos de esta sección muestran plantillas que usan gemini-2.5-flash, pero puedes usar cualquier modelo de Gemini compatible con Firebase AI Logic (excepto los modelos de Gemini Live).
Hello World
Este es un ejemplo mínimo de una plantilla de instrucciones del servidor:
Configuración (frontmatter)
---
model: 'gemini-2.5-flash'
---
Instrucción y (si corresponde) instrucciones del sistema
Write a story about a magic backpack.
Configuración del modelo
Establece una configuración del modelo para controlar cómo genera una respuesta, como la cantidad máxima de tokens de salida, la temperatura, Top-K y Top-P.
Configuración (frontmatter)
---
model: 'gemini-2.5-flash'
config:
candidateCount: 1
temperature: 0.9
topP: 0.1
topK: 16
maxOutputTokens: 200
stopSequences: ["red"]
---
Instrucción y (si corresponde) instrucciones del sistema
Write a story about a magic backpack.
Instrucciones del sistema
Establece instrucciones del sistema para dirigir el comportamiento del modelo. Inclúyelos como parte de la instrucción:
Especifica las instrucciones del sistema con la sintaxis
{{role "system"}}.Especifica la instrucción de texto con la sintaxis
{{role "user"}}.
Configuración (frontmatter)
---
model: 'gemini-2.5-flash'
---
Instrucción y (si corresponde) instrucciones del sistema
{{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 de entrada
Algunas instrucciones son estáticas, pero, a menudo, debes incluir algunos datos del usuario como parte de la instrucción.
Puedes incluir variables de entrada dinámicas en la instrucción con expresiones de Handlebars, que se encuentran dentro de etiquetas {{ }} en el formato de {{variableName}} o {{object.propertyName}} (por ejemplo, Hello, {{name}} from {{address.city}}).
Configuración (frontmatter)
---
model: 'gemini-2.5-flash'
---
Instrucción y (si corresponde) instrucciones del sistema
Create an example customer invoice for a customer named {{customerName}}.
Puedes proporcionar un valor predeterminado en la plantilla, pero el cliente suele proporcionar el valor de una variable de entrada como parte de la solicitud.
Flujos de control (bucles y condicionales)
Para escribir instrucciones más complejas, puedes usar bloques condicionales (como #if, else y #unless) y la iteración (#each).
Puedes proporcionar información contextual adicional como variables con un prefijo @ especial:
@first: Es verdadero cuando se itera el primer elemento de un bloque#each.@last: Es verdadero cuando se itera el último elemento de un bloque#each.@index: Proporciona la posición del índice (basado en cero) del elemento actual.
Consulta la documentación de Handlebars para obtener información sobre todos los ayudantes lógicos integrados.
Configuración (frontmatter)
---
model: 'gemini-2.5-flash'
---
Instrucción y (si corresponde) instrucciones del sistema
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}}
Ten en cuenta que las condiciones solo aceptan una referencia de variable, no ningún tipo de expresión, por ejemplo:
- Lo siguiente funciona:
{{#if isVipCustomer}} ... {{/if}} - Lo siguiente no funciona:
{{#if customer.type == 'vip'}} ... {{/if}}
Si la variable es booleana, la condición funciona como se espera. Si la variable no es booleana, la condición es, en efecto, una verificación de "no es nula". Esto puede ser útil para controlar entradas opcionales, por ejemplo:
{{#if customerName}}
Hello {{customerName}}
{{else}}
Hello Guest
{{/if}}
Validación y esquema de entrada
Si tienes datos provenientes del cliente, te recomendamos que uses el esquema de entrada para protegerte contra la inyección de instrucciones y garantizar que los datos que se pasan en la solicitud coincidan con tus expectativas.
Puedes proporcionar valores predeterminados en caso de que el cliente no proporcione un valor.
El esquema admite los tipos escalares
string,integer,number,booleanyobject. Los objetos, arrays y enums se denotan con un paréntesis después del nombre del campo.Todas las propiedades se consideran obligatorias, a menos que las indiques como opcionales con
?. Cuando una propiedad se marca como opcional, también se hace anulable para proporcionar más legibilidad para que los LLMs devuelvan un valor nulo en lugar de omitir un campo.
Este es un ejemplo básico para proporcionar un esquema de entrada. A continuación, encontrarás un esquema más avanzado.
Configuración (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
---
Instrucción y (si corresponde) instrucciones del sistema
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}}
Esquema de salida
Si quieres que el modelo genere resultados JSON estructurados, puedes especificar un esquema de salida. Si especificas format: json, restringes el modelo para que siempre muestre una respuesta en formato JSON que siga el esquema especificado.
El esquema admite los tipos escalares
string,integer,number,booleanyobject. Los objetos, arrays y enums se denotan con un paréntesis después del nombre del campo.Todas las propiedades se consideran obligatorias, a menos que las indiques como opcionales con
?. Cuando una propiedad se marca como opcional, también se hace anulable para proporcionar más legibilidad para que los LLMs devuelvan un valor nulo en lugar de omitir un campo.
Este es un ejemplo básico para generar un resultado JSON estructurado. A continuación, puedes encontrar un esquema más avanzado.
Configuración (frontmatter)
---
model: gemini-2.5-flash
output:
format: json
schema:
invoiceId: string
invoiceFile(object, an invoice file):
url?: string
contents: string
mimeType: string
---
Instrucción y (si corresponde) instrucciones del sistema
Create an example customer invoice.
Entrada multimodal
Las instrucciones multimodales que se envían a un modelo de Gemini pueden incluir varios tipos de entrada, incluidos archivos (como texto junto con imágenes, PDFs, archivos de texto sin formato, audio y video).
Proporciona un archivo con su URL usando la sintaxis
{{media url}}.Proporciona un archivo intercalado con la sintaxis de
{{media type="mime_type" data="contents"}}.
Aquí tienes un ejemplo básico para proporcionar entrada multimodal. A continuación, encontrarás un ejemplo más complejo.
Configuración (frontmatter)
---
model: 'gemini-2.5-flash'
---
Instrucción y (si corresponde) instrucciones del sistema
Describe this image
{{media type="mimeType" data="imageData"}}
Imagen (generación de imágenes)
En la versión inicial, las plantillas de instrucciones del servidor admiten la generación de imágenes con modelos de Imagen y una instrucción solo de texto. Vuelve pronto para obtener más asistencia, incluida la edición de imágenes con Imagen (cuando uses Vertex AI Gemini API).
Básico
En este ejemplo, se muestra una plantilla básica para generar imágenes con Imagen, con variables de entrada y validación de entrada similares a Gemini.
Configuración (frontmatter)
---
model: 'imagen-4.0-generate-001'
input:
schema:
prompt: 'string'
---
Instrucción y (si corresponde) instrucciones del sistema
Create an image containing {{prompt}}
Opciones avanzadas
En este ejemplo, se muestra cómo agregar una configuración del modelo y usar funciones más avanzadas en la instrucción, como variables de entrada, validación de entrada y flujos de control similares a Gemini.
Configuración (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
---
Instrucción y (si corresponde) instrucciones del sistema
A {{style}} of {{subject}}{{#if context}}{{context}}{{/if}}.