รูปแบบ ไวยากรณ์ และตัวอย่างของเทมเพลต


สำหรับ Firebase AI Logic คอนโซล Firebase มี UI ที่แนะนำให้คุณ ระบุเนื้อหาของเทมเพลต

เทมเพลตพรอมต์ของเซิร์ฟเวอร์ใช้ไวยากรณ์และรูปแบบที่อิงตาม Dotprompt ในหน้านี้ คุณจะเห็นคำอธิบายโดยละเอียดเกี่ยวกับรูปแบบและไวยากรณ์ของเทมเพลต พร้อมด้วย ตัวอย่างสำหรับทั้ง Gemini และ Imagen

ต่อไปนี้คือคอมโพเนนต์ที่สำคัญที่สุดสำหรับคำขอตัวอย่างไปยังโมเดล 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}}.
  • ส่วนบนภายในขีดสามขีดประกอบด้วยชื่อโมเดล รวมถึง การกำหนดค่าโมเดล การตรวจสอบอินพุต หรือสคีมาที่คุณต้องการ ส่งในคำขอ (ไม่บังคับ) โดยจะเขียนเป็นคู่คีย์-ค่า และมักเรียกว่า frontmatter ของ YAML

  • เนื้อหาของเทมเพลตมีข้อความแจ้ง นอกจากนี้ คุณยังใส่ คำสั่งของระบบและค่าอินพุต (โดยใช้ไวยากรณ์ Handlebars) ได้ด้วย (ไม่บังคับ)


หน้านี้จะอธิบายรูปแบบและไวยากรณ์ของเทมเพลตโดยละเอียด พร้อมตัวอย่างสำหรับรายการต่อไปนี้



Gemini

ตัวอย่างทั้งหมดในส่วนนี้แสดงเทมเพลตที่ใช้ gemini-2.5-flash แต่คุณสามารถใช้โมเดล Gemini ใดก็ได้ที่ Firebase AI Logic รองรับ (ยกเว้นโมเดล Gemini Live)

Hello world

ตัวอย่างเทมเพลตพรอมต์ของเซิร์ฟเวอร์แบบเรียบง่ายมีดังนี้

การกำหนดค่า (Frontmatter)

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

พรอมต์และคำสั่งของระบบ (หากมี)

Write a story about a magic backpack.


การกำหนดค่าโมเดล

ตั้งค่าการกำหนดค่าโมเดลเพื่อควบคุมวิธีที่โมเดลสร้างคำตอบ เช่น โทเค็นเอาต์พุตสูงสุด อุณหภูมิ Top-K และ Top-P

การกำหนดค่า (Frontmatter)

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

พรอมต์และคำสั่งของระบบ (หากมี)

Write a story about a magic backpack.


คำสั่งของระบบ

ตั้งค่าคำสั่งของระบบเพื่อกำหนดลักษณะการทำงานของโมเดล คุณจะรวมไว้เป็นส่วนหนึ่งของพรอมต์ได้โดยทำดังนี้

  • ระบุวิธีการของระบบโดยใช้ไวยากรณ์ {{role "system"}}

  • ระบุพรอมต์ข้อความโดยใช้ไวยากรณ์ {{role "user"}}

การกำหนดค่า (Frontmatter)

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


ตัวแปรอินพุต

พรอมต์บางรายการเป็นแบบคงที่ แต่คุณมักจะต้องใส่ข้อมูลบางอย่างจากผู้ใช้ เป็นส่วนหนึ่งของพรอมต์

คุณสามารถรวมตัวแปรอินพุตแบบไดนามิกลงในพรอมต์ได้โดยใช้ นิพจน์ Handlebars ซึ่ง อยู่ในแท็ก {{ }} ในรูปแบบ {{variableName}} หรือ {{object.propertyName}} (เช่น Hello, {{name}} from {{address.city}})

การกำหนดค่า (Frontmatter)

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

พรอมต์และคำสั่งของระบบ (หากมี)

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

คุณระบุค่าเริ่มต้นในเทมเพลตได้ แต่โดยปกติแล้วไคลเอ็นต์จะเป็นผู้ระบุค่าของตัวแปรอินพุต ซึ่งเป็นส่วนหนึ่งของคำขอ


โฟลว์การควบคุม (ลูปและเงื่อนไข)

หากต้องการเขียนพรอมต์ที่ซับซ้อนมากขึ้น คุณสามารถใช้บล็อกแบบมีเงื่อนไข (เช่น #if , else และ #unless) และการวนซ้ำ (#each)

คุณสามารถให้ข้อมูลบริบทเพิ่มเติมเป็นตัวแปรที่มีคำนำหน้าพิเศษ @ ได้ดังนี้

  • @first: จริงเมื่อทำซ้ำรายการแรกของบล็อก #each
  • @last: จริงเมื่อวนซ้ำรายการสุดท้ายของบล็อก #each
  • @index: แสดงตำแหน่งดัชนี (อิงตาม 0) ขององค์ประกอบปัจจุบัน

ดูข้อมูลเกี่ยวกับตัวช่วยเชิงตรรกะในตัวทั้งหมดได้ที่ เอกสารประกอบของ Handlebars

การกำหนดค่า (Frontmatter)

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

พรอมต์และคำสั่งของระบบ (หากมี)

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

โปรดทราบว่าเงื่อนไขยอมรับเฉพาะการอ้างอิงตัวแปร ไม่ยอมรับนิพจน์ประเภทใดก็ตาม เช่น

  • โดยทำดังนี้ {{#if isVipCustomer}} ... {{/if}}
  • {{#if customer.type == 'vip'}} ... {{/if}} ไม่ได้ผล

หากตัวแปรเป็นบูลีน เงื่อนไขจะทำงานตามที่คุณคาดไว้ หากตัวแปรไม่ใช่บูลีน เงื่อนไขจะกลายเป็นการตรวจสอบ "is-not-null" ซึ่งอาจมีประโยชน์ในการจัดการอินพุตที่ไม่บังคับ เช่น

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


การตรวจสอบอินพุตและสคีมา

หากคุณมีข้อมูลที่มาจากไคลเอ็นต์ เราขอแนะนำอย่างยิ่งให้ใช้สคีมาอินพุต เพื่อช่วยป้องกันการแทรกพรอมต์ รวมถึงตรวจสอบว่าข้อมูล ที่ส่งในคำขอตรงกับที่คุณคาดหวัง

  • คุณระบุมูลค่าเริ่มต้นได้ในกรณีที่ไคลเอ็นต์ไม่ได้ระบุมูลค่า

  • สคีมารองรับประเภทสเกลาร์ string, integer, number, boolean และ object ระบบจะระบุออบเจ็กต์ อาร์เรย์ และ Enum ด้วยวงเล็บหลังชื่อฟิลด์

  • ระบบจะถือว่าพร็อพเพอร์ตี้ทั้งหมดเป็นพร็อพเพอร์ตี้ที่ต้องระบุ เว้นแต่คุณจะระบุว่าเป็นพร็อพเพอร์ตี้ที่ไม่บังคับด้วย ? เมื่อทำเครื่องหมายพร็อพเพอร์ตี้เป็นไม่บังคับ ระบบจะทำให้พร็อพเพอร์ตี้เป็น Null ได้ด้วยเพื่อให้ LLM มีความยืดหยุ่นมากขึ้นในการแสดงผลเป็น Null แทนที่จะละเว้นฟิลด์

ต่อไปนี้คือตัวอย่างพื้นฐานสำหรับการระบุสคีมาอินพุต ดูสคีมา ขั้นสูงเพิ่มเติมได้ที่ด้านล่าง

การกำหนดค่า (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
---

พรอมต์และคำสั่งของระบบ (หากมี)

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


สคีมาเอาต์พุต

หากต้องการให้โมเดลสร้างเอาต์พุต JSON ที่มีโครงสร้าง คุณก็ระบุสคีมาเอาต์พุตได้ การระบุ format: json จะเป็นการ จำกัดโมเดลให้แสดงผลการตอบกลับเป็น JSON ที่เป็นไปตาม สคีมาที่ระบุเสมอ

  • สคีมารองรับประเภทสเกลาร์ string, integer, number, boolean และ object ระบบจะระบุออบเจ็กต์ อาร์เรย์ และ Enum ด้วยวงเล็บหลังชื่อฟิลด์

  • ระบบจะถือว่าพร็อพเพอร์ตี้ทั้งหมดเป็นพร็อพเพอร์ตี้ที่ต้องระบุ เว้นแต่คุณจะระบุว่าเป็นพร็อพเพอร์ตี้ที่ไม่บังคับด้วย ? เมื่อทำเครื่องหมายพร็อพเพอร์ตี้เป็นไม่บังคับ ระบบจะทำให้พร็อพเพอร์ตี้เป็น Null ได้ด้วยเพื่อให้ LLM มีความยืดหยุ่นมากขึ้นในการแสดงผลเป็น Null แทนที่จะละเว้นฟิลด์

ต่อไปนี้คือตัวอย่างพื้นฐานสำหรับการสร้างเอาต์พุต JSON ที่มีโครงสร้าง คุณดูสคีมาขั้นสูงเพิ่มเติมได้ที่ด้านล่าง

การกำหนดค่า (Frontmatter)

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

พรอมต์และคำสั่งของระบบ (หากมี)

Create an example customer invoice.


อินพุตหลายรูปแบบ

พรอมต์หลายรูปแบบที่ส่งไปยังโมเดล Gemini สามารถมีอินพุตได้หลายประเภท ซึ่งรวมถึงไฟล์ (เช่น ข้อความพร้อมกับรูปภาพ, PDF, ไฟล์ข้อความธรรมดา, เสียง และวิดีโอ)

  • ระบุไฟล์โดยใช้ URL ของไฟล์ที่มี{{media url}} ไวยากรณ์

  • ระบุไฟล์ในบรรทัดด้วยไวยากรณ์ {{media type="mime_type" data="contents"}}

ต่อไปนี้คือตัวอย่างพื้นฐานสำหรับการป้อนข้อมูลแบบมัลติโมดัล ดูตัวอย่างที่ซับซ้อนกว่านี้ได้ที่ด้านล่าง

การกำหนดค่า (Frontmatter)

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

พรอมต์และคำสั่งของระบบ (หากมี)

Describe this image

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



Imagen (การสร้างรูปภาพ)

ในการเปิดตัวครั้งแรก เทมเพลตพรอมต์ของเซิร์ฟเวอร์รองรับการสร้างรูปภาพโดยใช้โมเดล Imagen และพรอมต์ที่เป็นข้อความเท่านั้น โปรดกลับมาดูการสนับสนุนเพิ่มเติมในเร็วๆ นี้ ซึ่งรวมถึง การแก้ไขรูปภาพด้วย Imagen (เมื่อใช้ Vertex AI Gemini API)

พื้นฐาน

ตัวอย่างนี้แสดงเทมเพลตพื้นฐานสำหรับการสร้างรูปภาพด้วย Imagen โดยมีตัวแปรอินพุตและ การตรวจสอบอินพุตที่คล้ายกับ Gemini

การกำหนดค่า (Frontmatter)

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

พรอมต์และคำสั่งของระบบ (หากมี)

Create an image containing {{prompt}}

ขั้นสูง

ตัวอย่างนี้แสดงวิธีเพิ่มการกำหนดค่าโมเดลและใช้ฟีเจอร์ขั้นสูงเพิ่มเติมในพรอมต์ เช่น ตัวแปรอินพุต การตรวจสอบอินพุต และโฟลว์การควบคุมที่คล้ายกับ Gemini

การกำหนดค่า (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
---

พรอมต์และคำสั่งของระบบ (หากมี)

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