В 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.
Как управлять генерацией ответов
Вы можете управлять генерацией ответов разными способами в зависимости от того, как вы используете Gemini и какой уровень контроля вам нужен.
Конфигурация модели
Задайте конфигурацию модели, чтобы управлять тем, как модель генерирует ответ, например количеством вариантов ответа (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– значение true, если выполняется итерация первого элемента блока#each.@last– значение true, когда выполняется итерация последнего элемента блока#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. Объекты, массивы и перечисления обозначаются скобками после названия поля.Все свойства считаются обязательными, если вы не укажете, что они необязательные, с помощью
?. Если свойство отмечено как необязательное, оно также становится допускающим нулевое значение, чтобы LLM могли возвращать null вместо того, чтобы пропускать поле.
Ниже приведен простой пример схемы входных данных. Ниже приведена более сложная схема.
Конфигурация (заголовок)
---
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. Объекты, массивы и перечисления обозначаются скобками после названия поля.Все свойства считаются обязательными, если вы не укажете, что они необязательные, с помощью
?. Если свойство отмечено как необязательное, оно также становится допускающим нулевое значение, чтобы LLM могли возвращать null вместо того, чтобы пропускать поле.
Ниже приведен простой пример для создания структурированного вывода в формате 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-файлами, обычными текстовыми файлами, аудио- и видеозаписями).
Укажите файл, используя его URL с синтаксисом
{{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}}
Использование инструментов
Шаблоны запросов на сервере поддерживают следующие инструменты:
Если вы хотите, чтобы пользователи предоставляли дополнительную информацию для запроса к модели, используйте входные переменные в шаблоне системного запроса вместе с проверкой входных данных.
Вызов функций
Подробное руководство по вызову функций с помощью шаблонов запросов на сервере.
Выполнение кода
Инструмент выполнения кода позволяет модели генерировать и выполнять код на Python.
Конфигурация (заголовок)
---
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.
URL-контекст
Инструмент Контекст URL позволяет предоставить модели дополнительный контекст в виде URL. В этом примере также показано, как можно задать проверку входных данных для URL, если их предоставляет пользователь.
Конфигурация (заголовок)
---
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 )
Инструмент Обоснование с помощью
Чтобы использовать инструмент 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}}