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


Firebase AI Logic için Firebase konsolu, şablonun içeriğini belirtmeniz için size rehberlik eden bir kullanıcı arayüzü sağlar.

Sunucu istem şablonları, Dotprompt tabanlı bir söz dizimi ve biçim kullanır. Bu sayfada, şablon biçimi ve söz dizimiyle ilgili ayrıntılı açıklamaların yanı sıra örnekler de bulabilirsiniz.

Gemini modeline gönderilen örnek bir isteğin en önemli bileşenleri şunlardır:

---
model: 'gemini-3.8-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}}.
  • Üç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 yer alır. İsteğe bağlı olarak sistem talimatları ve giriş değerleri de (Handlebars söz dizimi kullanılarak) içerebilir.


Bu sayfada, aşağıdakiler için şablon biçimi ve söz dizimiyle ilgili ayrıntılı açıklamalar ve örnekler verilmiştir:

Bu sayfadaki tüm örneklerde gemini-3.8-flash kullanan şablonlar gösterilmektedir ancak Firebase AI Logic tarafından desteklenen tüm Gemini modellerini (Gemini Live API modelleri hariç) kullanabilirsiniz.

Hello world

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

Yapılandırma (ön sayfa)

---
model: 'gemini-3.8-flash'
---

İ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 ihtiyacınız olan kontrol düzeyine bağlı olarak yanıtların oluşturulmasını çeşitli şekillerde kontrol edebilirsiniz.

Model yapılandırması

Modelin yanıt oluşturma şeklini kontrol etmek için maksimum çıkış parçası, durdurma dizileri gibi bir model yapılandırması ayarlayın.

Yapılandırma (frontmatter)

---
model: 'gemini-3.8-flash'
config:
  maxOutputTokens: 200
  stopSequences: ["red"]
---

İstem ve (varsa) 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 (frontmatter)

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

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

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

İstem ve (varsa) 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 sayfa)

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

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

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

---
model: 'gemini-3.8-flash'
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ını ayarlayın. Bu bilgileri isteme dahil edebilirsiniz:

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

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

Yapılandırma (frontmatter)

---
model: 'gemini-3.8-flash'
---

İ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 istemin bir parçası olarak kullanıcıdan bazı veriler eklemeniz gerekir.

{{variableName}} veya {{object.propertyName}} biçimindeki {{ }} etiketlerinde bulunan Handlebars ifadelerini kullanarak isteme dinamik giriş değişkenleri ekleyebilirsiniz (ör. Hello, {{name}} from {{address.city}}).

Yapılandırma (ön sayfa)

---
model: 'gemini-3.8-flash'
---

İstem ve (geçerliyse) sistem talimatları

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

Şablonda varsayılan değer sağlayabilirsiniz ancak giriş değişkeninin değeri genellikle isteğin bir parçası olarak 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 @ ön ekiyle değişken olarak ek bağlam bilgileri sağlayabilirsiniz:

  • @first: Bir #each bloğunun ilk öğesi yinelenirken "true" değerini alır.
  • @last: #each bloğunun son öğesi üzerinde yineleme yapılırken true değerini döndürür.
  • @index: Geçerli öğenin (sıfır tabanlı) dizin konumunu verir.

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

Yapılandırma (ön sayfa)

---
model: 'gemini-3.8-flash'
---

İstem ve (varsa) 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 herhangi bir ifade türünü değil, yalnızca değişken referansını kabul ettiğini unutmayın. Örneğin:

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

Değişken bir boole ise koşullu, beklediğiniz gibi çalışır. Değişken bir boole değilse koşullu ifade, etkili bir şekilde "boş değil" kontrolü yapar. 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 şeması

İstemciden gelen verileriniz varsa istem enjeksiyonuna karşı korunmaya yardımcı olmak ve istekte iletilen verilerin beklentilerinizi karşıladığından emin olmak için giriş şeması kullanmanızı önemle tavsiye ederiz.

  • İstemcinin değer sağlamaması durumunda varsayılan değerler sağlayabilirsiniz.

  • Şema, string, integer, number, boolean ve object gibi skaler türleri destekler. Nesneler, diziler ve enum'lar, 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 değer döndürmesine daha fazla esneklik sağlamak için null değer alabilir hale de getirilir.

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

Yapılandırma (ön sayfa)

---
model: 'gemini-3.8-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
---

İ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, her zaman belirtilen şemayı izleyen bir JSON yanıtı döndürmeye zorlarsınız.

  • Şema; string, integer, number, boolean ve object skaler türlerini 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 değer döndürmesine daha fazla esneklik sağlamak için null değer alabilir 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 sayfa)

---
model: gemini-3.8-flash
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ş

Gemini modeline gönderilen çok formatlı istemler, dosyalar (ör. resimlerle birlikte metin, PDF'ler, düz metin dosyaları, ses ve video) dahil olmak üzere birden fazla giriş türü içerebilir.

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

  • {{media type="mime_type" data="contents"}} söz dizimine sahip satır içi bir 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 (frontmatter)

---
model: 'gemini-3.8-flash'
---

İstem ve (varsa) sistem talimatları

Describe this image

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

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

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

Yapılandırma (frontmatter)

---
model: gemini-3.8-flash
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 (varsa) 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.

Kullanıcılarınızın modele gönderilen istek için ek bilgi sağlamasını istiyorsanız sunucu istem şablonunda giriş değişkenlerini ve giriş doğrulamasını kullanın.

İşlev çağırma

Sunucu istem şablonlarını kullanarak işlev çağrısı yapma ile ilgili kılavuzun tamamını inceleyin.

Kod yürütme

Kod yürütme aracı, modelin Python kodu oluşturup çalıştırmasını sağlar.

Yapılandırma (ön sayfa)

---
model: 'gemini-3.8-flash'
tools:
  - codeExecution
---

İstem ve (varsa) 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 biçiminde modele ek bağlam sağlamanıza olanak tanır. Bu örnekte, kullanıcı tarafından sağlanan URL'ler için giriş doğrulamasını nasıl belirtebileceğiniz de gösterilmektedir.

Yapılandırma (ön sayfa)

---
model: 'gemini-3.8-flash'
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 Search ile Temellendirme aracı, modeli gerçek zamanlı ve herkese açık web içeriğine bağlar.

Yapılandırma (frontmatter)

---
model: 'gemini-3.8-flash'
tools:
  - googleSearch
---

İstem ve (geçerliyse) sistem talimatları

Who won the Euro 2024?

Google Maps ile temellendirme

Google Maps ile Temellendirme aracı, konuma duyarlı işlevler için modele coğrafi veriler sağlar.

googleMaps aracını kullanmak için şablonun ön sayfasındaki tools nesnesinde listeleyin. Aşağıdaki örnekte bazı ek isteğe bağlı yapılandırmalar gösterilmektedir:

  • İstemci tarafı kodundan giriş değişkenlerine izin verin ve bu girişin (bu örnekte question) giriş doğrulamasını ve şemasını gerçekleştirin.

  • İstemci tarafı kodunuzda bir TemplateToolConfig kullanarak konum koordinatlarını ve/veya dil kodunu sağlayarak googleMaps aracını yapılandırın.

Örnek şablonun altında, bu isteğe bağlı yapılandırmalarla çalışmaya yönelik istemci tarafı kod örneklerini gösteren genişletilebilir bir bölüm bulunur.

Yapılandırma (frontmatter)

---
model: 'gemini-3.8-flash'
tools:
  - googleMaps
input:
  schema:
    question: string
---

İstem ve (geçerliyse) sistem talimatları

{{role "system"}}
You are a helpful tour guide. Use the Google Maps tool with the provided coordinates to answer the user's question based on their location.

{{role "user"}}
{{question}}