W przypadku Firebase AI Logic konsola Firebase udostępnia interfejs z instrukcjami, który umożliwia określenie zawartości szablonu.
Szablony promptów serwera używają składni i formatu opartego na Dotprompt. Na tej stronie znajdziesz szczegółowe opisy formatu i składni szablonu wraz z przykładami.
Oto najważniejsze komponenty przykładowego żądania do modelu 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}}.
Górna sekcja między potrójnymi kreskami zawiera nazwę modelu oraz opcjonalnie konfigurację modelu, weryfikację danych wejściowych lub schemat, który chcesz wysłać w żądaniu. Jest on zapisany jako pary klucz-wartość i jest powszechnie nazywany sekcją z metadanymi YAML.
Treść szablonu zawiera prompt. Może też opcjonalnie zawierać instrukcje systemowe i wartości wejściowe (przy użyciu składni Handlebars).
Na tej stronie znajdziesz szczegółowe opisy formatu i składni szablonów oraz przykłady dotyczące:
Wszystkie przykłady na tej stronie pokazują szablony, które używają gemini-3.8-flash, ale możesz użyć dowolnego modelu Gemini obsługiwanego przez Firebase AI Logic (z wyjątkiem modeli Gemini Live API).
Hello world
Oto prosty przykład szablonu prompta serwera:
Konfiguracja (sekcja z metadanymi)
---
model: 'gemini-3.8-flash'
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
Write a story about a magic backpack.
Kontrolowanie generowania odpowiedzi
Możesz kontrolować generowanie odpowiedzi na różne sposoby w zależności od przypadku użycia i poziomu kontroli, którego potrzebujesz.
Konfiguracja modelu
Ustaw konfigurację modelu, aby kontrolować sposób generowania odpowiedzi przez model, np. maksymalną liczbę tokenów wyjściowych, sekwencje zatrzymania itp.
Konfiguracja (sekcja z metadanymi)
---
model: 'gemini-3.8-flash'
config:
maxOutputTokens: 200
stopSequences: ["red"]
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
Write a story about a magic backpack.
Konfiguracja myślenia
Określ konfigurację związaną z rozumowaniem w przypadku modeli, które obsługują rozumowanie.
Konfiguracja (sekcja z metadanymi)
Gemini 3.x i nowsze modele (poziomy myślenia)
--- model: 'gemini-3.8-flash' config: thinkingConfig: thinkingLevel: medium includeThoughts: true ---Modele Gemini 2.5 (budżety na myślenie)
--- model: 'gemini-2.5-flash' config: thinkingConfig: thinkingBudget: 1024 includeThoughts: true ---
prompt i (w stosownych przypadkach) instrukcje systemowe;
Solve x^2 + 4x + 4 = 0
Ustawienia bezpieczeństwa
Użyj ustawień bezpieczeństwa, aby dostosować prawdopodobieństwo otrzymywania odpowiedzi, które mogą zostać uznane za szkodliwe.
Konfiguracja (sekcja z metadanymi)
Przykład z jednym ustawieniem bezpieczeństwa:
---
model: 'gemini-3.8-flash'
config:
safetySettings:
- category: HARM_CATEGORY_HARASSMENT
threshold: BLOCK_ONLY_HIGH
---
Przykład z wieloma ustawieniami bezpieczeństwa:
---
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
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
Write a story about a magic backpack.
Instrukcje systemowe
Ustaw instrukcje systemowe, aby sterować działaniem modelu. Możesz je uwzględnić w prompcie:
Określ instrukcje systemowe za pomocą składni
{{role "system"}}.Określ prompt tekstowy, używając składni
{{role "user"}}.
Konfiguracja (sekcja z metadanymi)
---
model: 'gemini-3.8-flash'
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
{{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.
Zmienne wejściowe
Niektóre prompty są statyczne, ale często trzeba w nich uwzględnić dane od użytkownika.
W promptach możesz uwzględniać dynamiczne zmienne wejściowe, używając wyrażeń Handlebars, które są zawarte w tagach {{ }} w formacie {{variableName}} lub {{object.propertyName}} (na przykład Hello, {{name}} from {{address.city}}).
Konfiguracja (sekcja z metadanymi)
---
model: 'gemini-3.8-flash'
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
Create an example customer invoice for a customer named {{customerName}}.
W szablonie możesz podać wartość domyślną, ale wartość zmiennej wejściowej jest zwykle podawana przez klienta w ramach żądania.
Przepływy sterowania (pętle i warunki)
Aby pisać bardziej złożone prompty, możesz używać bloków warunkowych (takich jak #if, else i #unless) oraz iteracji (#each).
Możesz podać dodatkowe informacje kontekstowe jako zmienne ze specjalnym prefiksem @:
@first: true, gdy iterowany jest pierwszy element bloku#each.@last: wartość „true” (prawda) podczas iteracji ostatniego elementu bloku#each.@index: podaje pozycję indeksu (liczoną od 0) bieżącego elementu.
Informacje o wszystkich wbudowanych pomocnikach logicznych znajdziesz w dokumentacji Handlebars.
Konfiguracja (sekcja z metadanymi)
---
model: 'gemini-3.8-flash'
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
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}}
Pamiętaj, że instrukcje warunkowe akceptują tylko odwołanie do zmiennej, a nie dowolny typ wyrażenia, na przykład:
- Działa to:
{{#if isVipCustomer}} ... {{/if}} - To nie działa:
{{#if customer.type == 'vip'}} ... {{/if}}
Jeśli zmienna jest wartością logiczną, warunek działa zgodnie z oczekiwaniami. Jeśli zmienna nie jest wartością logiczną, instrukcja warunkowa jest w rzeczywistości sprawdzeniem, czy wartość nie jest pusta. Może to być przydatne w przypadku opcjonalnych danych wejściowych, na przykład:
{{#if customerName}}
Hello {{customerName}}
{{else}}
Hello Guest
{{/if}}
Weryfikacja danych wejściowych i schemat
Jeśli masz dane pochodzące od klienta, zdecydowanie zalecamy użycie schematu wejściowego, aby chronić się przed wstrzykiwaniem promptów i upewnić się, że dane przekazywane w żądaniu są zgodne z Twoimi oczekiwaniami.
Możesz podać wartości domyślne na wypadek, gdyby klient nie podał wartości.
Schemat obsługuje typy skalarne
string,integer,number,booleaniobject. Obiekty, tablice i typy wyliczeniowe są oznaczone w nawiasie po nazwie pola.Wszystkie właściwości są uważane za wymagane, chyba że oznaczysz je jako opcjonalne za pomocą
?. Gdy właściwość jest oznaczona jako opcjonalna, może też przyjmować wartość null, aby zapewnić modelom LLM większą swobodę w zwracaniu wartości null zamiast pomijania pola.
Oto podstawowy przykład schematu wejściowego. Poniżej znajdziesz bardziej zaawansowany schemat.
Konfiguracja (sekcja z metadanymi)
---
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
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
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}}
Schemat wyjściowy
Jeśli chcesz, aby model generował uporządkowane dane wyjściowe JSON, możesz określić schemat wyjściowy. Określając format: json, ograniczasz model, aby zawsze zwracał odpowiedź JSON zgodną z określonym schematem.
Schemat obsługuje typy skalarne
string,integer,number,booleaniobject. Obiekty, tablice i typy wyliczeniowe są oznaczone w nawiasie po nazwie pola.Wszystkie właściwości są uważane za wymagane, chyba że oznaczysz je jako opcjonalne za pomocą
?. Gdy właściwość jest oznaczona jako opcjonalna, może też przyjmować wartość null, aby zapewnić modelom LLM większą swobodę w zwracaniu wartości null zamiast pomijania pola.
Oto podstawowy przykład generowania uporządkowanych danych wyjściowych JSON. Poniżej znajdziesz bardziej zaawansowany schemat.
Konfiguracja (sekcja z metadanymi)
---
model: gemini-3.8-flash
output:
format: json
schema:
invoiceId: string
invoiceFile(object, an invoice file):
url?: string
contents: string
mimeType: string
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
Create an example customer invoice.
Dane wejściowe w różnych formatach
Prompty multimodalne wysyłane do modelu Gemini mogą zawierać różne typy danych wejściowych, w tym pliki (np. tekst wraz z obrazami, pliki PDF, pliki tekstowe, dźwięk i filmy).
Podaj plik, używając jego adresu URL ze składnią
{{media url}}.Podaj plik wbudowany ze składnią
{{media type="mime_type" data="contents"}}.
Podstawowy przykład (multimodalne dane wejściowe)
Oto podstawowy przykład podawania danych multimodalnych. Poniżej znajdziesz bardziej złożony przykład.
Konfiguracja (sekcja z metadanymi)
---
model: 'gemini-3.8-flash'
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
Describe this image
{{media type="mimeType" data="imageData"}}
Złożony przykład (multimodalne dane wejściowe)
Oto bardziej skomplikowany przykład podawania danych multimodalnych.
Konfiguracja (sekcja z metadanymi)
---
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
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
{{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}}
Korzystanie z narzędzi
Szablony promptów serwera obsługują te narzędzia.
Jeśli chcesz, aby użytkownicy podawali dodatkowe informacje w żądaniu do modelu, użyj zmiennych wejściowych w szablonie prompta serwera wraz z walidacją danych wejściowych.
Wywoływanie funkcji
Zapoznaj się z pełnym przewodnikiem po wywoływaniu funkcji za pomocą szablonów promptów serwera.
Wykonanie kodu
Narzędzie do wykonywania kodu umożliwia modelowi generowanie i uruchamianie kodu w Pythonie.
Konfiguracja (sekcja z metadanymi)
---
model: 'gemini-3.8-flash'
tools:
- codeExecution
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
What is the sum of the first 50 prime numbers?
Generate and run code for the calculation, and make sure you get all 50.
Kontekst adresu URL
Narzędzie URL context umożliwia przekazywanie modelowi dodatkowego kontekstu w postaci adresów URL. Ten przykład pokazuje też, jak można określić weryfikację danych wejściowych w przypadku adresów URL, jeśli są one podawane przez użytkownika.
Konfiguracja (sekcja z metadanymi)
---
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
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
Compare the ingredients and cooking times from the recipes at {{url1}} and {{url2}}
Powiązanie ze źródłami informacji przy użyciu Google Search
Narzędzie Grounding with
Konfiguracja (sekcja z metadanymi)
---
model: 'gemini-3.8-flash'
tools:
- googleSearch
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
Who won the Euro 2024?
Powiązanie ze źródłami informacji przy użyciu Google Maps
Narzędzie Grounding with
Aby użyć narzędzia googleMaps, umieść je na liście w obiekcie tools w sekcji z metadanymi szablonu. Poniższy przykład pokazuje dodatkowe opcjonalne konfiguracje:
Zezwalaj na zmienne wejściowe z kodu po stronie klienta i przeprowadzaj walidację i schemat tych danych wejściowych (w tym przykładzie
question).Skonfiguruj narzędzie
googleMaps, podając współrzędne lokalizacji lub kod języka w kodzie po stronie klienta za pomocąTemplateToolConfig.
Poniżej przykładowego szablonu znajdziesz rozwijany element, który pokazuje przykładowe kody po stronie klienta do pracy z tymi opcjonalnymi konfiguracjami.
Konfiguracja (sekcja z metadanymi)
---
model: 'gemini-3.8-flash'
tools:
- googleMaps
input:
schema:
question: string
---
prompt i (w stosownych przypadkach) instrukcje systemowe;
{{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}}