قالب الگو، نحو، و نمونه‌ها


برای Firebase AI Logic، کنسول Firebase میانای کاربر راهنمایی‌شده‌ای برای شما فراهم می‌کند تا محتوای الگو را مشخص کنید.

الگوهای پیام‌واره سرور از نحو و قالب مبتنی بر Dotprompt استفاده می‌کنند. در این صفحه، می‌توانید شرح مفصلی از قالب و دستورگان الگو، همراه با مثال‌ها پیدا کنید.

در اینجا مهم‌ترین عناصر برای درخواست نمونه به مدل Gemini آورده شده است:

---
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}}.
  • بخش بالایی در داخل خط‌چین سه‌تایی حاوی نام مدل و همچنین به‌صورت اختیاری هرگونه پیکربندی مدل، اعتبارسنجی ورودی، یا طرحواره‌ای است که می‌خواهید در درخواست ارسال کنید. به‌صورت جفت‌های کلید-مقدار نوشته می‌شود و معمولاً به آن پیش‌گفتار YAML می‌گویند.

  • بدنه الگو حاوی پیام‌واره است. همچنین می‌تواند به‌صورت اختیاری شامل دستورالعمل‌های سیستم و مقادیر ورودی (بااستفاده از نحو Handlebars) باشد.


این صفحه شرح مفصلی از قالب و دستورگان الگو، به‌همراه مثال‌هایی برای موارد زیر ارائه می‌دهد:

همه مثال‌های این صفحه الگوهایی را نشان می‌دهد که از gemini-3.8-flash استفاده می‌کنند، اما می‌توانید از هر مدل Gemini پشتیبانی‌شده توسط Firebase AI Logic استفاده کنید (به‌جز مدل‌های Gemini Live).

سلام دنیا

در اینجا نمونه‌ای حداقلی از الگوی پیام‌واره سرور آورده شده است:

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

Write a story about a magic backpack.



کنترل تولید پاسخ‌ها

بسته به مورد استفاده و سطح کنترلی که نیاز دارید، می‌توانید تولید پاسخ‌ها را به روش‌های مختلفی کنترل کنید.

پیکربندی مدل

پیکربندی مدل را تنظیم کنید تا نحوه تولید پاسخ توسط مدل را کنترل کنید، مثلاً تعداد گونه‌های پاسخ (candidateCount)، حداکثر داده‌واحد برونداد، و غیره.

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

Write a story about a magic backpack.


درحال اندیشیدن درباره پیکربندی

برای مدل‌هایی که از فکر کردن پشتیبانی می‌کنند، پیکربندی مربوط به فکر کردن را مشخص کنید.

پیکربندی (پیش‌گفتار)

  • ‫Gemini 3.x و مدل‌های جدیدتر (سطوح اندیشیدن)

    ---
    model: 'gemini-3.8-flash'
    config:
      thinkingConfig:
        thinkingLevel: medium
        includeThoughts: true
    ---
    
  • ‫Gemini 2.5 مدل (بودجه‌های اندیشگر)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

Solve x^2 + 4x + 4 = 0


تنظیمات ایمنی

از تنظیمات ایمنی برای تنظیم احتمال دریافت پاسخ‌هایی که ممکن است مضر تلقی شوند استفاده کنید.

پیکربندی (پیش‌گفتار)

مثال با یک تنظیم ایمنی:

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

مثال با چندین تنظیم ایمنی:

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

Write a story about a magic backpack.


دستورالعمل‌های سیستم

برای هدایت رفتار مدل، دستورالعمل‌های سیستم تنظیم کنید. آن‌ها را به‌عنوان بخشی از پیام‌واره اضافه می‌کنید:

  • دستورالعمل‌های سیستم را بااستفاده از نحو {{role "system"}} مشخص کنید.

  • پیام‌واره نوشتاری را بااستفاده از نحو {{role "user"}} مشخص کنید.

پیکربندی (پیش‌گفتار)

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



متغیرهای ورودی

برخی‌از پیام‌واره‌ها ایستا هستند، اما اغلب باید برخی‌از داده‌های کاربر را به‌عنوان بخشی از پیام‌واره اضافه کنید.

می‌توانید بااستفاده از عبارت‌های Handlebars، متغیرهای ورودی پویا را در پیام‌واره بگنجانید. این عبارت‌ها در برچسب‌های {{ }} با قالب {{variableName}} یا {{object.propertyName}} (برای مثال، Hello, {{name}} from {{address.city}}) قرار دارند.

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

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

می‌توانید مقدار پیش‌فرضی در الگو ارائه دهید، اما مقدار متغیر ورودی معمولاً توسط کارخواه به‌عنوان بخشی از درخواست ارائه می‌شود.



جریان‌های کنترل (حلقه‌ها و شرط‌ها)

برای نوشتن پیام‌واره‌های پیچیده‌تر، می‌توانید از بلوک‌های شرطی (مثل #if ، else، و #unless) و تکرار (#each) استفاده کنید.

می‌توانید اطلاعات زمینه‌ای بیشتری را به‌عنوان متغیر با پیشوند ویژه @ ارائه دهید:

  • @first: وقتی اولین عنصر یک بلوک #each را تکرار می‌کنید، درست است.
  • @last: وقتی آخرین مورد از بلوک #each تکرار می‌شود، درست است.
  • ‫@index: موقعیت نمایه‌گذاری (مبتنی بر صفر) عنصر فعلی را ارائه می‌دهد.

برای اطلاعات درباره همه دستیارهای منطقی داخلی، مستندات Handlebars را ببینید.

پیکربندی (پیش‌گفتار)

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

اگر متغیر بولی باشد، شرطی طبق انتظار شما کار می‌کند. اگر متغیر بولی نباشد، شرط عملاً یک بررسی «غیرتهی» است. این کار می‌تواند برای مدیریت ورودی‌های اختیاری مفید باشد، برای مثال:

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



اعتبارسنجی ورودی و طرح‌واره

اگر داده‌هایی از مشتری دارید، اکیداً توصیه می‌کنیم از طرحواره ورودی استفاده کنید تا به محافظت دربرابر تزریق پیام‌واره کمک کنید و همچنین مطمئن شوید داده‌های منتقل‌شده در درخواست با انتظارات شما مطابقت دارد.

  • می‌توانید مقادیر پیش‌فرض را درصورتی‌که مشتری مقداری ارائه نکند ارائه دهید.

  • این طرحواره از انواع اسکالر string، integer، number، boolean، و object پشتیبانی می‌کند. اشیا، آرایه‌ها، و شمارش‌ها با پرانتزی پس‌از نام فیلد نشان داده می‌شوند.

  • همه دارایی‌ها الزامی درنظر گرفته می‌شوند، مگر اینکه با ? آن را اختیاری نشان دهید. وقتی دارایی به‌عنوان اختیاری علامت‌گذاری می‌شود، قابلیت تهی بودن نیز به آن اضافه می‌شود تا مدل‌های زبانی بزرگ انعطاف بیشتری داشته باشند و به‌جای حذف فیلد، مقدار تهی برگردانند.

در اینجا یک مثال ساده برای ارائه طرح ورودی آورده شده است. درست در زیر می‌توانید طرحواره پیشرفته‌تری پیدا کنید.

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

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 پشتیبانی می‌کند. اشیا، آرایه‌ها، و شمارش‌ها با پرانتزی پس‌از نام فیلد نشان داده می‌شوند.

  • همه دارایی‌ها الزامی درنظر گرفته می‌شوند، مگر اینکه با ? آن را اختیاری نشان دهید. وقتی دارایی به‌عنوان اختیاری علامت‌گذاری می‌شود، قابلیت تهی بودن نیز به آن اضافه می‌شود تا مدل‌های زبانی بزرگ انعطاف بیشتری داشته باشند و به‌جای حذف فیلد، مقدار تهی برگردانند.

در اینجا یک مثال ساده برای تولید برونداد JSON ساختاریافته آورده شده است. می‌توانید طرحواره پیشرفته‌تری را در زیر پیدا کنید.

پیکربندی (پیش‌گفتار)

---
model: gemini-3.8-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، فایل‌های نوشتار ساده، صدا، و ویدیو).

  • فایلی را بااستفاده از نشانی وب آن با نحو {{media url}} ارائه دهید.

  • فایل درون‌خطی با {{media type="mime_type" data="contents"}} نحو ارائه دهید.

مثال پایه (ورودی چندحالته)

در اینجا مثالی ساده برای ارائه ورودی چندحالته آورده شده است. می‌توانید مثال پیچیده‌تری را در زیر ببینید.

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

Describe this image

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

مثال پیچیده (ورودی چندحالته)

در اینجا مثال پیچیده‌تری برای ارائه ورودی چندوجهی آورده شده است.

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

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



استفاده از ابزار

الگوهای پیام‌واره سرور از ابزارهای زیر پشتیبانی می‌کنند.

اگر می‌خواهید کاربران برای درخواست به مدل اطلاعات تکمیلی ارائه دهند، از متغیرهای ورودی در الگوی پیام‌واره سرور، همراه با اعتبارسنجی ورودی استفاده کنید.

فراخوانی تابع

راهنمای کامل فراخوانی تابع بااستفاده از الگوهای پیام‌واره سرور را ببینید.

اجرای کد

ابزار اجرای کد به مدل امکان می‌دهد کد پایتون تولید و اجرا کند.

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

What is the sum of the first 50 prime numbers?
Generate and run code for the calculation, and make sure you get all 50.

بافت نشانی وب

ابزار بافتار نشانی وب به شما امکان می‌دهد بافتار اضافی را در قالب نشانی‌های وب به مدل ارائه دهید. این مثال همچنین نشان می‌دهد که چگونه می‌توانید درستی‌سنجی ورودی را برای نشانی‌های وب مشخص کنید، درصورتی‌که کاربر آن‌ها را ارائه دهد.

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

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

ابزار «پایه‌گذاری با Google Search» مدل را به محتوای وب هم‌زمان و دردسترس عموم متصل می‌کند.

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

Who won the Euro 2024?

درحال زمینه‌سازی با Google Maps

ابزار پایه‌گذاری با Google Maps داده‌های جغرافیایی فضایی را برای عملکرد آگاه از مکان دراختیار مدل قرار می‌دهد.

برای استفاده از ابزار googleMaps، آن را در شیء tools پیش‌گفتار الگو فهرست کنید. مثال زیر برخی‌از پیکربندی‌های اختیاری اضافی را نشان می‌دهد:

  • متغیرهای ورودی را از کد سمت کارخواه مجاز کنید و اعتبارسنجی ورودی و طرحواره آن ورودی (در این مثال، question) را انجام دهید.

  • ابزار googleMaps را با ارائه مختصات مکان و/یا کد زبان در کد سمت مشتری خود بااستفاده از TemplateToolConfig پیکربندی کنید.

در زیر الگوی نمونه، بخش گسترش‌یافتنی را پیدا کنید که نمونه‌های کد سمت مشتری را برای کار با این پیکربندی‌های اختیاری نشان می‌دهد.

پیکربندی (پیش‌گفتار)

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

پیام‌واره و (درصورت اعمال) دستورالعمل‌های سیستم

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