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 w 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|> i <|audio|>), aby określić, gdzie mają być wstawiane tokeny obrazu i dźwięku. Po tokenizacji te tokeny są zastępowane w modelu przez rzeczywiste miękkie osadzanie.
Oto przykład dialogu:
prompt = """<|turn>user
Describe this image: <|image|>
And translate these audio:
a. <|audio|>
b. <|audio|><turn|>
<|turn>model"""
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ład dialogu:
<|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 opartej na działaniu agenta model może „myśleć” prywatnie, zanim zdecyduje się wywołać funkcję. Cykl życia przebiega w tej kolejności:
- Zapytanie użytkownika: użytkownik zadaje pytanie.
- Internal Reasoning: The model thinks privately in the thought channel.
- Żądanie narzędzia: model wstrzymuje generowanie, aby poprosić o wywołanie narzędzia.
- Wykonanie i wstawienie: aplikacja wykonuje narzędzie i dołącza odpowiedź.
- 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_calls i tool_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 wydajnoś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 agenty mogą chcieć zachować kontekst rozumowania, aby zapobiec wpadaniu modelu w cykliczne pętle rozumowania.
- Podsumowanie: wysoce zalecaną techniką wnioskowania jest wyodrębnianie, podsumowywanie i przekazywanie poprzednich przemyśleń modelu z powrotem do okna kontekstu w postaci zwykłego tekstu.
- Ograniczenia formatowania: model Gemma 4 nie był trenowany z użyciem surowych danych w prompcie (poza wspomnianym powyżej konkretnym scenariuszem wywołania narzędzia), dlatego nie oczekuje on ścisłego ani konkretnego formatu wstrzykiwanych danych. 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>i<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_callitool_responseułatwiają „uzgadnianie” między modelem a środowiskiem aplikacji. Aplikacja przechwytujetool_call, wykonuje kod bazowy i przekazuje wynik z powrotem do modelu w tokenachtool_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 skrajnych przypadkach, 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
„Myślenie” w przypadku modelu Gemma 4 jest oficjalnie obsługiwane jako funkcja logiczna WŁĄCZONA lub WYŁĄCZONA, ale 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 dla „wysokiego” lub „niskiego” poziomu myślenia, możesz użyć instrukcji systemowych, aby wprowadzić model w tryb ograniczonego myślenia. Jeśli wyraźnie poprosisz model o efektywne myślenie lub myślenie na mniejszej głębokości (koncepcja, którą nazywamy instrukcją myślenia „LOW”), możesz osiągnąć adaptacyjną efektywność myślenia.
- Obniżony koszt: testy wykazały, że zastosowanie instrukcji „LOW” (NISKI) może zmniejszyć liczbę tokenów generowanych przez system 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 niestandardowymi 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ń.