Format, sintaksis, dan contoh template


Untuk Firebase AI Logic, konsol Firebase menyediakan UI terpandu bagi Anda untuk menentukan konten template.

Template perintah server menggunakan sintaksis dan format berbasis Dotprompt. Di halaman ini, Anda dapat menemukan deskripsi mendetail tentang format dan sintaksis template, beserta contoh untuk Gemini dan Imagen.

Berikut adalah komponen terpenting untuk contoh permintaan ke model 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}}.
  • Bagian atas dalam tiga tanda hubung berisi nama model serta konfigurasi model, validasi input, atau skema yang ingin Anda kirim dalam permintaan. Bagian ini ditulis sebagai pasangan nilai kunci dan biasanya disebut frontmatter YAML.

  • Isi template berisi perintah. Respons juga dapat secara opsional menyertakan petunjuk sistem dan nilai input (menggunakan sintaksis Handlebars).


Halaman ini memberikan deskripsi mendetail tentang format dan sintaksis template, beserta contoh, untuk hal berikut:



Gemini

Semua contoh di bagian ini menunjukkan template yang menggunakan gemini-2.5-flash, tetapi Anda dapat menggunakan model Gemini yang didukung oleh Firebase AI Logic (kecuali model Gemini Live).

Hello world

Berikut adalah contoh minimal template prompt server:

Konfigurasi (frontmatter)

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

Perintah dan (jika ada) petunjuk sistem

Write a story about a magic backpack.


Konfigurasi model

Tetapkan konfigurasi model untuk mengontrol cara model membuat respons, seperti token output maksimum, suhu, top-K, dan top-P.

Konfigurasi (frontmatter)

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

Perintah dan (jika ada) petunjuk sistem

Write a story about a magic backpack.


Petunjuk sistem

Tetapkan petunjuk sistem untuk mengarahkan perilaku model. Anda menyertakannya sebagai bagian dari perintah:

  • Tentukan petunjuk sistem menggunakan sintaksis {{role "system"}}.

  • Tentukan perintah teks menggunakan sintaksis {{role "user"}}.

Konfigurasi (frontmatter)

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

Perintah dan (jika ada) petunjuk sistem

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


Variabel input

Beberapa perintah bersifat statis, tetapi Anda sering kali perlu menyertakan beberapa data dari pengguna sebagai bagian dari perintah.

Anda dapat menyertakan variabel input dinamis dalam perintah menggunakan ekspresi Handlebars, yang terdapat dalam tag {{ }} dalam format {{variableName}} atau {{object.propertyName}} (misalnya, Hello, {{name}} from {{address.city}}).

Konfigurasi (frontmatter)

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

Perintah dan (jika ada) petunjuk sistem

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

Anda dapat memberikan nilai default dalam template, tetapi nilai variabel input biasanya diberikan oleh klien sebagai bagian dari permintaan.


Alur kontrol (loop & kondisional)

Untuk menulis perintah yang lebih kompleks, Anda dapat menggunakan blok bersyarat (seperti #if, else, dan #unless) dan iterasi (#each).

Anda dapat memberikan informasi kontekstual tambahan sebagai variabel dengan awalan @ khusus:

  • @first: benar saat mengulangi item pertama blok #each.
  • @last: benar saat mengulangi item terakhir dari blok #each.
  • @index: memberikan posisi indeks (berbasis nol) elemen saat ini.

Lihat dokumentasi Handlebars untuk mengetahui informasi tentang semua helper logis bawaan.

Konfigurasi (frontmatter)

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

Perintah dan (jika ada) petunjuk sistem

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

Perhatikan bahwa kondisi hanya menerima referensi variabel, bukan jenis ekspresi apa pun, misalnya:

  • Berikut ini berfungsi: {{#if isVipCustomer}} ... {{/if}}
  • Berikut tidak berfungsi: {{#if customer.type == 'vip'}} ... {{/if}}

Jika variabelnya adalah boolean, maka kondisi akan berfungsi seperti yang Anda harapkan. Jika variabel bukan boolean, maka kondisi tersebut secara efektif merupakan pemeriksaan "is-not-null". Hal ini dapat berguna untuk menangani input opsional, misalnya:

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


Validasi input dan skema

Jika Anda memiliki data yang berasal dari klien, sebaiknya gunakan skema input untuk membantu melindungi dari serangan injeksi perintah serta memastikan bahwa data yang diteruskan dalam permintaan sesuai dengan ekspektasi Anda.

  • Anda dapat memberikan nilai default jika klien tidak memberikan nilai.

  • Skema ini mendukung jenis skalar string, integer, number, boolean, dan object. Objek, array, dan enum dilambangkan dengan tanda kurung setelah nama kolom.

  • Semua properti dianggap wajib diisi kecuali jika Anda menandainya sebagai opsional dengan ?. Jika sebuah properti ditandai sebagai opsional, properti tersebut juga dibuat nullable untuk memberikan lebih banyak kemudahan bagi LLM agar menampilkan null daripada menghilangkan kolom.

Berikut adalah contoh dasar untuk memberikan skema input. Anda dapat menemukan skema yang lebih lanjut tepat di bawah.

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

Perintah dan (jika ada) petunjuk sistem

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


Skema output

Jika Anda ingin model menghasilkan output JSON terstruktur, Anda dapat menentukan skema output. Dengan menentukan format: json, Anda membatasi model untuk selalu menampilkan respons JSON yang mengikuti skema yang ditentukan.

  • Skema ini mendukung jenis skalar string, integer, number, boolean, dan object. Objek, array, dan enum dilambangkan dengan tanda kurung setelah nama kolom.

  • Semua properti dianggap wajib diisi kecuali jika Anda menandainya sebagai opsional dengan ?. Jika sebuah properti ditandai sebagai opsional, properti tersebut juga dibuat nullable untuk memberikan lebih banyak kemudahan bagi LLM agar menampilkan null daripada menghilangkan kolom.

Berikut adalah contoh dasar untuk membuat output JSON terstruktur. Anda dapat menemukan skema yang lebih canggih tepat di bawah.

Konfigurasi (frontmatter)

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

Perintah dan (jika ada) petunjuk sistem

Create an example customer invoice.


Input multimodal

Perintah multimodal yang dikirim ke model Gemini dapat mencakup beberapa jenis input, termasuk file (seperti teks bersama dengan gambar, PDF, file teks biasa, audio, dan video).

  • Berikan file menggunakan URL-nya dengan sintaksis {{media url}}.

  • Berikan file inline dengan sintaks {{media type="mime_type" data="contents"}}.

Berikut contoh dasar untuk memberikan input multimodal. Anda dapat menemukan contoh yang lebih kompleks tepat di bawah.

Konfigurasi (frontmatter)

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

Perintah dan (jika ada) petunjuk sistem

Describe this image

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



Imagen (pembuatan gambar)

Pada rilis awal, template perintah server mendukung pembuatan gambar menggunakan model Imagen dan perintah khusus teks. Periksa kembali nanti untuk mendapatkan dukungan lainnya, termasuk mengedit gambar dengan Imagen (saat menggunakan Vertex AI Gemini API).

Dasar

Contoh ini menunjukkan template dasar untuk membuat gambar dengan Imagen, dengan variabel input dan validasi input yang mirip dengan Gemini.

Konfigurasi (frontmatter)

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

Perintah dan (jika ada) petunjuk sistem

Create an image containing {{prompt}}

Lanjutan

Contoh ini menunjukkan cara menambahkan konfigurasi model dan menggunakan fitur yang lebih canggih dalam perintah, seperti variabel input, validasi input, dan alur kontrol yang mirip dengan Gemini.

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

Perintah dan (jika ada) petunjuk sistem

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