Formatowanie promptów w przypadku modelu Gemma 4

W przypadku modelu Gemma 4 wprowadzamy nowe tokeny sterujące. W przypadku modeli Gemma 3 i starszych zapoznaj się z poprzednim dokumentem.

W kolejnych sekcjach znajdziesz informacje o tokenach sterujących używanych przez model Gemma 4 i ich przypadkach użycia. Pamiętaj, że tokeny sterujące są zarezerwowane w naszym tokenizerze i są dla niego charakterystyczne.

  • Token wskazujący instrukcję systemową: system
  • Token wskazujący turę użytkownika: user
  • Token wskazujący turę modelu: model
  • Token oznaczający początek tury dialogu: <|turn>
  • Token oznaczający koniec wypowiedzi w dialogu: <turn|>

Oto przykładowy dialog:

<|turn>system
You are a helpful assistant.<turn|>
<|turn>user
Hello.<turn|>

Wiele rodzajów

Token multimodalny Cel
<|image>
<image|>
Wskazywanie wektorów dystrybucyjnych obrazów
<|audio>
<audio|>
Wskazywanie wektorów dystrybucyjnych audio
<|image|>
<|audio|>
Specjalne tokeny zmiennych

Używamy 2 specjalnych tokenów symboli zastępczych (<|image|><|audio|>), aby określić, gdzie mają być wstawiane tokeny obrazów i dźwięku. Po tokenizacji te tokeny są zastępowane w modelu przez rzeczywiste miękkie osadzanie.

Oto przykładowy dialog:

prompt = """<|turn>user
Describe this image: <|image|>

And translate these audio:

a. <|audio|>
b. <|audio|><turn|>
<|turn>model"""

Audio

Do przetwarzania dźwięku używaj tych struktur promptów:

  • Rozpoznawanie mowy (ASR)
Transcribe the following speech segment in {LANGUAGE} into {LANGUAGE} text.

Follow these specific instructions for formatting the answer:
*   Only output the transcription, with no newlines.
*   When transcribing numbers, write the digits, i.e. write 1.7 and not one point seven, and write 3 instead of three.
  • Automatyczne tłumaczenie mowy (AST)
Transcribe the following speech segment in {SOURCE_LANGUAGE}, then translate it into {TARGET_LANGUAGE}.
When formatting the answer, first output the transcription in {SOURCE_LANGUAGE}, then one newline, then output the string '{TARGET_LANGUAGE}: ', then the translation in {TARGET_LANGUAGE}.

Tokeny sterujące agentem i rozumowaniem

Aby obsługiwać przepływy pracy oparte na agentach, Gemma używa specjalnych tokenów sterujących, które oddzielają wewnętrzne rozumowanie (myślenie) od działań zewnętrznych (wywoływanie funkcji). Te tokeny umożliwiają modelowi przetwarzanie złożonej logiki przed udzieleniem ostatecznej odpowiedzi lub interakcją z narzędziami zewnętrznymi.

Wywoływanie funkcji

Model Gemma 4 jest trenowany na 6 specjalnych tokenach, które służą do zarządzania cyklem życia „korzystania z narzędzi”.

Para tokenów Cel
<|tool>
<tool|>
Definiuje narzędzie
<|tool_call>
<tool_call|>
Wskazuje żądanie modelu dotyczące użycia narzędzia.
<|tool_response>
<tool_response|>
Zwraca do modelu wynik wykonania narzędzia.

Separator wartości tekstowych: <|"|>

Jako separator wszystkich wartości tekstowych w blokach danych strukturalnych używany jest pojedynczy token <|"|>.

  • Cel: ten token zapewnia, że wszystkie znaki specjalne (np. {, }, , lub cudzysłowy) w ciągu znaków są traktowane jako tekst dosłowny, a nie jako część składni struktury danych.
  • Użycie: wszystkie literały ciągów znaków w deklaracjach funkcji, wywołaniach i odpowiedziach muszą być ujęte w ten token (np. key:<|"|>string value<|"|>).

Tryb myślenia

Aby aktywować tryb myślenia, w instrukcji systemowej umieść token sterujący <|think|>.

Token kontroli Cel
<|think|> Aktywuje tryb myślenia
<|channel>
<channel|>
Wskazuje wewnętrzny proces modelu.

Oto przykładowy dialog:

<|turn>system
<|think|><turn|>
<|turn>user
What is the water formula?<turn|>
<|turn>model
<|channel>thought
...
<channel|>The most common interpretation of "the water formula" refers...<turn|>

Tryb myślenia jest przeznaczony do włączania na poziomie rozmowy. Należy je połączyć w jeden ruch systemu wraz z innymi instrukcjami systemowymi, takimi jak definicje narzędzi.

Przykład rozumowania i wywoływania funkcji

W przypadku odpowiedzi agenta model może „myśleć” prywatnie, zanim zdecyduje się wywołać funkcję. Cykl życia przebiega w tej kolejności:

  1. Zapytanie użytkownika: użytkownik zadaje pytanie.
  2. Wewnętrzne rozumowanie: model myśli prywatnie w kanale myśli.
  3. Żądanie narzędzia: model wstrzymuje generowanie, aby zażądać wywołania narzędzia.
  4. Wykonanie i wstawienie: aplikacja wykonuje narzędzie i dołącza odpowiedź.
  5. Odpowiedź końcowa: model odczytuje odpowiedź i generuje ostateczną odpowiedź.

Poniższy przykład pokazuje model korzystający z narzędzia pogodowego:

<|turn>system
<|think|>You are a helpful assistant.<|tool>declaration:get_current_temperature{...}<tool|><turn|>
<|turn>user
What's the temperature in London?<turn|>
<|turn>model
<|channel>thought
...
<channel|><|tool_call>call:get_current_temperature{location:<|"|>London<|"|>}<tool_call|><|tool_response>

Aplikacja powinna przeanalizować odpowiedź modelu, aby wyodrębnić nazwę funkcji i argumenty, wykonać funkcję, a następnie dodać tool_callstool_responses do historii czatu w ramach roli assistant.

<|turn>model
<|tool_call>call:get_current_weather{location:<|"|>London<|"|>}<tool_call|><|tool_response>response:get_current_weather{temperature:15,weather:<|"|>sunny<|"|>}<tool_response|>

Na koniec Gemma odczytuje odpowiedź narzędzia i odpowiada użytkownikowi.

The temperature in London is 15 degrees and it is sunny.<turn|>

Oto pełna historia czatu w formacie JSON w tym przykładzie:

[
  {
    "role": "system",
    "content": "You are a helpful assistant."
  },
  {
    "role": "user",
    "content": "What's the temperature in London?"
  },
  {
    "role": "assistant",
    "tool_calls": [
      {
        "function": {
          "name": "get_current_weather",
          "arguments": {
            "location": "London"
          }
        }
      }
    ],
    "tool_responses": [
      {
        "name": "get_current_weather",
        "response": {
          "temperature": 15,
          "weather": "sunny"
        }
      }
    ],
    "content": "The temperature in London is 15 degrees and it is sunny."
  }
]

Zarządzanie kontekstem myśli między turami

Odpowiednie zarządzanie wygenerowanymi przez model myślami ma kluczowe znaczenie dla utrzymania skuteczności w rozmowach wieloetapowych.

  • Standardowe rozmowy wieloetapowe: przed przekazaniem historii rozmowy z powrotem do modelu w celu uzyskania kolejnej odpowiedzi musisz usunąć (wyciąć) wygenerowane przez model myśli z poprzedniego etapu. Jeśli chcesz wyłączyć tryb myślenia w trakcie rozmowy, możesz usunąć token <|think|>, gdy usuniesz poprzednie myśli.
  • Wywoływanie funkcji (wyjątek): jeśli pojedyncza tura modelu obejmuje wywołania funkcji lub narzędzi, nie należy usuwać myśli między wywołaniami funkcji.

Procesy agentowe i długotrwałe zadania

Ponieważ surowe myśli są usuwane między standardowymi turami, programiści tworzący długotrwałe działania agentów mogą chcieć zachować kontekst rozumowania, aby zapobiec wpadaniu modelu w cykliczne pętle rozumowania.

  • Podsumowywanie myśli: wysoce zalecaną techniką wnioskowania jest wyodrębnianie, podsumowywanie i przekazywanie poprzednich myśli modelu z powrotem do okna kontekstu w postaci zwykłego tekstu.
  • Ograniczenia formatowania: model Gemma 4 nie był trenowany z uwzględnieniem surowych myśli w prompcie (poza wspomnianym powyżej konkretnym scenariuszem wywołania narzędzia), dlatego nie oczekuje on ścisłego ani konkretnego formatu tych wstrzykiwanych myśli. Możesz sformatować podsumowane uzasadnienie w dowolny sposób, który najlepiej pasuje do Twojej architektury agenta.

Uwagi dotyczące integracji

  • Stan wewnętrzny: tokeny <|channel><channel|> są zwykle używane do przetwarzania typu Chain-of-Thought (CoT). W standardowych aplikacjach dla użytkowników te treści są zwykle ukryte przed użytkownikiem końcowym.
  • Tool Loop: tokeny tool_calltool_response ułatwiają „uzgadnianie” między modelem a środowiskiem aplikacji. Aplikacja przechwytuje tool_call, wykonuje kod bazowy i przekazuje wynik z powrotem do modelu w tokenach tool_response.
  • Zachowanie modelu: większe modele (np. gemma-4-26B-A4B-it, gemma-4-31B-it) mogą czasami generować kanał myślenia, nawet gdy tryb myślenia jest wyraźnie wyłączony. Aby ustabilizować zachowanie modelu w tych przypadkach brzegowych, rozważ dodanie do promptu pustego tokena myślenia.

Wskazówka: dostrajanie dużych modeli za pomocą zbiorów danych bez myślenia

Podczas dostrajania większych modeli Gemma za pomocą zbioru danych, który nie zawiera procesu myślowego, możesz uzyskać lepsze wyniki, dodając pusty kanał do promptów treningowych:

<|turn>model
<|channel>thought
<channel|>

Wskazówka: adaptacyjna efektywność myślenia z użyciem instrukcji systemowych

Chociaż „myślenie” w przypadku modelu Gemma 4 jest oficjalnie obsługiwane jako funkcja boolowska ON lub OFF, model ten ma wyjątkowo silne możliwości wykonywania instrukcji, które pozwalają dynamicznie modyfikować jego zachowanie związane z myśleniem.

Zamiast polegać na zakodowanym na stałe parametrze platformy, który określa „wysoki” lub „niski” poziom myślenia, możesz użyć instrukcji systemowych, aby wprowadzić model w tryb ograniczonego myślenia. Wyraźnie instruując model, aby myślał wydajnie lub na mniejszej głębokości (koncepcja, którą nazywamy instrukcją myślenia „LOW”), możesz osiągnąć adaptacyjną wydajność myślenia.

  • Obniżony koszt: testy wykazały, że zastosowanie systemu myślenia „LOW” może zmniejszyć liczbę tokenów myślenia generowanych przez model o około 20%.
  • Dowód koncepcji: ponieważ to zachowanie jest efektem ubocznym możliwości modelu do wykonywania instrukcji, a nie wynikiem specjalnego trenowania, nie ma jednego „idealnego” promptu. Instrukcja „LOW” jest modelem koncepcyjnym.
  • Dostosowywanie: zachęcamy programistów do eksperymentowania z własnymi instrukcjami systemowymi. Możesz dostroić głębię, długość i styl procesu myślowego modelu, aby idealnie zrównoważyć czas oczekiwania, koszt i jakość danych wyjściowych w przypadku konkretnych zastosowań.