Şablon biçimi, söz dizimi ve örnekler


Firebase AI Logic için Firebase konsolunda, şablonun içeriğini belirtmenize yardımcı olacak bir kullanıcı arayüzü bulunur.

Sunucu istemi şablonları, Dotprompt tabanlı bir sözdizimi ve biçim kullanır. Bu sayfada, şablon biçimi ve söz dizimi ile ilgili ayrıntılı açıklamaların yanı sıra hem Gemini hem de Imagen için örnekler bulabilirsiniz.

Gemini modeline gönderilen örnek bir istek için en önemli bileşenler şunlardır:

---
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}}.
  • Üçlü tireler arasındaki üst bölümde model adı ve isteğe bağlı olarak, istekte göndermek istediğiniz model yapılandırması, giriş doğrulama veya şema yer alır. Anahtar/değer çiftleri olarak yazılır ve genellikle YAML frontmatter olarak adlandırılır.

  • Şablonun gövdesinde istem bulunur. Ayrıca, isteğe bağlı olarak sistem talimatları ve giriş değerleri de içerebilir (Handlebars söz dizimi kullanılarak).


Bu sayfada, şablon biçimi ve söz dizimi ile ilgili ayrıntılı açıklamaların yanı sıra aşağıdakilerle ilgili örnekler verilmektedir:



Gemini

Bu bölümdeki tüm örneklerde gemini-3-flash-preview kullanan şablonlar gösterilmektedir ancak Firebase AI Logic tarafından desteklenen herhangi bir Gemini modelini (Gemini Live modelleri hariç) kullanabilirsiniz.

Hello world

Aşağıda, sunucu istemi şablonunun en basit örneği verilmiştir:

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

Write a story about a magic backpack.


Yanıt oluşturmayı kontrol etme

Kullanım alanınıza ve ihtiyaç duyduğunuz kontrol düzeyine bağlı olarak yanıt oluşturma sürecini çeşitli şekillerde kontrol edebilirsiniz.

Model yapılandırması

Modelin yanıt oluşturma şeklini kontrol etmek için model yapılandırması ayarlayın. Örneğin, maksimum çıkış jetonu, sıcaklık, üst K ve üst P.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

Write a story about a magic backpack.


Düşünme yapılandırması

Düşünmeyi destekleyen modeller için düşünmeyle ilgili bir yapılandırma belirtin.

Yapılandırma (ön kısım)

  • Gemini 3 ve sonraki modeller (düşünme seviyeleri)

    ---
    model: 'gemini-3-flash-preview'
    config:
      thinkingConfig:
        thinkingLevel: medium
        includeThoughts: true
    ---
    
  • Gemini 2.5 modelleri (düşünme bütçeleri)

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

İstem ve (geçerliyse) sistem talimatları

Solve x^2 + 4x + 4 = 0


Güvenlik ayarları

Zararlı olarak değerlendirilebilecek yanıtlar alma olasılığını ayarlamak için güvenlik ayarlarını kullanın.

Yapılandırma (ön kısım)

Tek bir güvenlik ayarı içeren örnek:

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

Birden fazla güvenlik ayarı içeren örnek:

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

İstem ve (geçerliyse) sistem talimatları

Write a story about a magic backpack.


Sistem talimatları

Modelin davranışını yönlendirmek için sistem talimatları ayarlayın. Bu bilgileri istemin bir parçası olarak ekleyin:

  • {{role "system"}} söz dizimini kullanarak sistem talimatlarını belirtin.

  • {{role "user"}} söz dizimini kullanarak metin istemini belirtin.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

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


Giriş değişkenleri

Bazı istemler statiktir ancak genellikle isteme kullanıcıdan alınan bazı verileri eklemeniz gerekir.

Handlebars ifadelerini kullanarak isteme dinamik giriş değişkenleri ekleyebilirsiniz. Bu ifadeler, {{ }} etiketleri içinde {{variableName}} veya {{object.propertyName}} biçiminde (örneğin, Hello, {{name}} from {{address.city}}) yer alır.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

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

Şablonda varsayılan bir değer sağlayabilirsiniz ancak giriş değişkeninin değeri genellikle istek kapsamında istemci tarafından sağlanır.


Kontrol akışları (döngüler ve koşullar)

Daha karmaşık istemler yazmak için koşullu bloklar (ör. #if, else ve #unless) ve yineleme (#each) kullanabilirsiniz.

Özel bir @ önekiyle değişken olarak ek bağlamsal bilgiler sağlayabilirsiniz:

  • @first: #each bloğunun ilk öğesi üzerinde yineleme yapılırken doğru (true) olur.
  • @last: #each bloğunun son öğesi üzerinde yineleme yapılırken true (doğru) olur.
  • @index: Geçerli öğenin (sıfır tabanlı) dizin konumunu verir.

Tüm yerleşik mantıksal yardımcılar hakkında bilgi edinmek için Handlebars belgelerine bakın.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

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

Koşullu ifadelerin yalnızca değişken referansı kabul ettiğini, herhangi bir ifade türünü kabul etmediğini unutmayın. Örneğin:

  • Aşağıdakiler çalışır: {{#if isVipCustomer}} ... {{/if}}
  • Aşağıdaki işlemler çalışmaz: {{#if customer.type == 'vip'}} ... {{/if}}

Değişken bir boole değeri ise koşullu ifade beklendiği gibi çalışır. Değişken bir boolean değilse koşullu ifade, etkin bir şekilde "null değil" kontrolü olur. Bu, isteğe bağlı girişleri işlemek için yararlı olabilir. Örneğin:

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


Giriş doğrulaması ve şema

İstemciden gelen verileriniz varsa istem enjeksiyonu saldırılarına karşı korunmanıza yardımcı olması ve istekte iletilen verilerin beklentilerinizi karşılamasını sağlamak için giriş şemasını kullanmanızı önemle tavsiye ederiz.

  • Müşteri değer sağlamazsa varsayılan değerler sağlayabilirsiniz.

  • Şema, string, integer, number, boolean ve object gibi skaler türleri destekler. Nesneler, diziler ve numaralandırmalar, alan adından sonra parantez içinde gösterilir.

  • ? ile isteğe bağlı olarak belirtmediğiniz sürece tüm özellikler zorunlu kabul edilir. Bir özellik isteğe bağlı olarak işaretlendiğinde, LLM'lerin bir alanı atlamak yerine null döndürmesi için daha fazla esneklik sağlamak amacıyla null değer atanabilir hale de getirilir.

Giriş şeması sağlama ile ilgili temel bir örneği burada bulabilirsiniz. Daha gelişmiş bir şemayı hemen aşağıda bulabilirsiniz.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

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


Çıkış şeması

Modelin yapılandırılmış JSON çıkışı oluşturmasını istiyorsanız bir çıkış şeması belirtebilirsiniz. format: json değerini belirterek modeli, belirtilen şemaya uyan bir JSON yanıtı döndürmeye zorlarsınız.

  • Şema, string, integer, number, boolean ve object gibi skaler türleri destekler. Nesneler, diziler ve numaralandırmalar, alan adından sonra parantez içinde gösterilir.

  • ? ile isteğe bağlı olarak belirtmediğiniz sürece tüm özellikler zorunlu kabul edilir. Bir özellik isteğe bağlı olarak işaretlendiğinde, LLM'lerin bir alanı atlamak yerine null döndürmesi için daha fazla esneklik sağlamak amacıyla null değer atanabilir hale de getirilir.

Yapılandırılmış JSON çıkışı oluşturmayla ilgili temel bir örneği burada bulabilirsiniz. Daha gelişmiş bir şemayı hemen aşağıda bulabilirsiniz.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

Create an example customer invoice.


Çok formatlı giriş

Bir Gemini modeline gönderilen çok formatlı istemler, dosyalar (ör. resimlerin yanı sıra metin, PDF, düz metin dosyaları, ses ve video) dahil olmak üzere birden fazla giriş türü içerebilir.

  • {{media url}} söz dizimini kullanarak URL'siyle bir dosya sağlayın.

  • {{media type="mime_type" data="contents"}}söz dizimine sahip bir satır içi dosya sağlayın.

Temel örnek (çok formatlı giriş)

Çok formatlı giriş sağlama ile ilgili temel bir örneği burada bulabilirsiniz. Daha karmaşık bir örneği hemen aşağıda bulabilirsiniz.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

Describe this image

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

Karmaşık örnek (çok formatlı giriş)

Çok formatlı giriş sağlama konusunda daha karmaşık bir örneği burada bulabilirsiniz.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

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


Araç kullanımı

Sunucu istemi şablonları aşağıdaki araçları destekler. İşlev çağrısı henüz desteklenmemektedir ancak yakında kullanıma sunulacaktır.

Kullanıcılarınızın modele istek için ek bilgiler sağlamasını istiyorsanız sunucu istemi şablonunda giriş doğrulama ile birlikte giriş değişkenlerini kullanın.

Kod yürütme

Kod yürütme aracı, modelin Python kodu oluşturup çalıştırmasına olanak tanır.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

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 bağlamı

URL bağlamı aracı, URL'ler şeklinde modele ek bağlam sağlamanıza olanak tanır. Bu örnekte, kullanıcı tarafından sağlanan URL'ler için giriş doğrulama işlemini nasıl belirtebileceğiniz de gösterilmektedir.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

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

Google Arama ile Temellendirme aracı, modeli gerçek zamanlı ve herkese açık web içeriklerine bağlar.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

Who won the Euro 2024?



Imagen (görüntü üretme) (Kullanımdan kaldırıldı)

İlk sürümde, sunucu istemi şablonları yalnızca metin istemiyle Imagen modellerini kullanarak resim oluşturmayı destekler. Imagen ile resim düzenleme (Vertex AI Gemini API kullanılırken) gibi daha fazla destek için yakında tekrar kontrol edin.

Temel

Bu örnekte, Imagen ile resim oluşturmak için Gemini'a benzer giriş değişkenleri ve giriş doğrulaması içeren temel bir şablon gösterilmektedir.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

Create an image containing {{prompt}}

Gelişmiş

Bu örnekte, model yapılandırması ekleme, güvenlik ayarlarını belirtme ve istemde Gemini'ye benzer şekilde giriş değişkenleri, giriş doğrulama ve kontrol akışları gibi daha ileri seviye özelliklerin nasıl kullanılacağı gösterilmektedir.

Yapılandırma (ön kısım)

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

İstem ve (geçerliyse) sistem talimatları

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