Prompt-Formatierung für Gemma 4

Mit Gemma 4 führen wir neue Steuerungstokens ein. Informationen zu Gemma 3 und niedrigeren Versionen finden Sie im vorherigen Dokument.

In den folgenden Abschnitten werden die Steuerungstokens angegeben, die von Gemma 4 verwendet werden, und ihre Anwendungsfälle. Beachten Sie, dass die Steuerungstokens in unserem Tokenizer reserviert und spezifisch sind.

  • Token zur Angabe einer Systemanweisung: system
  • Token zur Angabe einer Nutzerantwort: user
  • Token zur Angabe einer Modellantwort: model
  • Token zur Angabe des Beginns einer Dialogrunde: <|turn>
  • Token zur Angabe des Endes einer Dialogrunde: <turn|>

Beispiel für einen Dialog:

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

Multimodalitäten

Multimodales Token Zweck
<|image>
<image|>
Bildeinbettungen angeben
<|audio>
<audio|>
Audioeinbettungen angeben
<|image|>
<|audio|>
Spezielle Platzhalter-Tokens

Wir verwenden zwei spezielle Platzhalter-Tokens (<|image|> und <|audio|>), um anzugeben wo Bild- und Audio-Tokens eingefügt werden sollen. Nach der Tokenisierung werden diese Tokens durch die tatsächlichen Soft-Embeddings im Modell ersetzt.

Beispiel für einen Dialog:

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

And translate these audio:

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

Audio

Verwenden Sie die folgenden Promptstrukturen für die Audioverarbeitung:

  • Audio-Spracherkennung (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.
  • Automatische Sprachübersetzung (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}.

Steuerungstokens für Agenten und Reasoning

Zur Unterstützung von Agenten-Workflows verwendet Gemma spezielle Steuerungstokens, die zwischen internem Reasoning (Denken) und externen Aktionen (Funktionsaufrufe) unterscheiden. Mit diesen Tokens kann das Modell komplexe Logik verarbeiten, bevor es eine endgültige Antwort gibt oder mit externen Tools interagiert.

Funktionsaufrufe

Gemma 4 wurde mit sechs speziellen Tokens trainiert, um den Lebenszyklus der Toolnutzung zu verwalten.

Token-Paar Zweck
<|tool>
<tool|>
Definiert ein Tool
<|tool_call>
<tool_call|>
Gibt eine Anfrage des Modells zur Verwendung eines Tools an.
<|tool_response>
<tool_response|>
Gibt das Ausführungsergebnis eines Tools an das Modell zurück.

Trennzeichen für Stringwerte: <|"|>

Ein einzelnes Token, <|"|>, wird als Trennzeichen für alle Stringwerte in den Blöcken mit strukturierten Daten verwendet.

  • Zweck:Mit diesem Token wird sichergestellt, dass alle Sonderzeichen (z. B. {, }, , oder Anführungszeichen) in einem String als Literaltext und nicht als Teil der zugrunde liegenden Syntax der Datenstruktur behandelt werden.
  • Verwendung: Alle Stringliterale in Ihren Funktionsdeklarationen, -aufrufen und -antworten müssen mit diesem Token eingeschlossen werden (z.B. key:<|"|>string value<|"|>).

Thinking-Modus

Wenn Sie den Thinking-Modus aktivieren möchten, fügen Sie das <|think|> Steuerungstoken in die Systemanweisung ein.

Steuerungstoken Zweck
<|think|> Aktiviert den Thinking-Modus
<|channel>
<channel|>
Gibt einen internen Prozess des Modells an.

Beispiel für einen 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|>

Der Thinking-Modus sollte auf Konversationsebene aktiviert werden. Dies sollte zusammen mit Ihren anderen Systemanweisungen, z. B. Tooldefinitionen, in einer einzigen Systemrunde zusammengefasst werden.

Beispiel für Reasoning und Funktionsaufrufe

In einer Agentenrunde kann das Modell privat „denken“, bevor es sich für den Aufruf einer Funktion entscheidet. Der Lebenszyklus folgt dieser Sequenz:

  1. Nutzeranfrage: Der Nutzer stellt eine Frage.
  2. Internes Reasoning: Das Modell denkt privat im Thought-Channel.
  3. Toolanfrage: Das Modell unterbricht die Generierung, um einen Toolaufruf anzufordern.
  4. Ausführung und Einfügung: Die Anwendung führt das Tool aus und fügt die Antwort an.
  5. Endgültige Antwort: Das Modell liest die Antwort und generiert die endgültige Antwort.

Das folgende Beispiel zeigt ein Modell, das ein Wetter-Tool verwendet:

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

Ihre Anwendung sollte die Antwort des Modells parsen, um den Funktionsnamen und die Argumente zu extrahieren, die Funktion ausführen und dann die tool_calls und tool_responses unter der Rolle assistant an den Chatverlauf anhängen.

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

Schließlich liest Gemma die Toolantwort und antwortet dem Nutzer.

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

Hier ist der vollständige JSON-Chatverlauf für dieses Beispiel:

[
  {
    "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."
  }
]

Thought-Kontext zwischen Runden verwalten

Die korrekte Verwaltung der vom Modell generierten Gedanken ist entscheidend, um die Leistung bei Konversationen in mehreren Runden aufrechtzuerhalten.

  • Standardkonversationen in mehreren Runden:Sie müssen die vom Modell generierten Gedanken aus der vorherigen Runde entfernen (strippen), bevor Sie den Konversationsverlauf für die nächste Runde an das Modell zurückgeben. Wenn Sie den Thinking Modus während einer Konversation deaktivieren möchten, können Sie das <|think|> Token entfernen, wenn Sie die vorherigen Gedanken strippen.
  • Funktionsaufrufe (Ausnahme) : Wenn eine einzelne Modellrunde Funktions- oder Toolaufrufe umfasst, dürfen die Gedanken zwischen den Funktionsaufrufen NICHT entfernt werden.

Agenten-Workflows und lang andauernde Aufgaben

Da die Rohgedanken zwischen den Standardrunden entfernt werden, möchten Entwickler, die lang andauernde Agenten erstellen, möglicherweise den Reasoning-Kontext beibehalten, um zu verhindern, dass das Modell in zyklische Reasoning-Schleifen gerät.

  • Gedanken zusammenfassen:Eine sehr empfehlenswerte Inferenztechnik besteht darin, die vorherigen Gedanken des Modells zu extrahieren, zusammenzufassen und als Standardtext in das Kontextfenster einzufügen.
  • Formatierungsbeschränkungen:Da Gemma 4 nicht explizit mit Rohgedanken trainiert wurde, die im Prompt enthalten sind (außer im oben genannten spezifischen Toolaufrufszenario), wird vom Modell kein strenges oder spezifisches Format für diese eingefügten Gedanken erwartet. Sie können das zusammengefasste Reasoning so formatieren, wie es am besten zu Ihrer spezifischen Agentenarchitektur passt.

Hinweise zur Integration

  • Interner Status: Die <|channel> und <channel|> Tokens werden in der Regel für die Chain-of-Thought-Verarbeitung (CoT) verwendet. In Standardanwendungen für Nutzer ist dieser Inhalt in der Regel für den Endnutzer ausgeblendet.
  • Toolschleife:Die Tokens tool_call und tool_response ermöglichen einen „Handshake“ zwischen dem Modell und Ihrer Anwendungsumgebung. Die Anwendung fängt den tool_call ab, führt den zugrunde liegenden Code aus und gibt das Ergebnis innerhalb der tool_response-Tokens an das Modell zurück.
  • Modellverhalten:Bei größeren Modellen (z.B. gemma-4-26B-A4B-it, gemma-4-31B-it) kann es vorkommen, dass ein Thought-Channel generiert wird, obwohl der Thinking-Modus explizit deaktiviert ist. Um das Modellverhalten in diesen Grenzfällen zu stabilisieren, sollten Sie dem Prompt ein leeres Thinking-Token hinzufügen.

Tipp: Große Modelle mit Datasets ohne Thinking-Modus optimieren

Wenn Sie größere Gemma-Modelle mit einem Dataset optimieren, das keinen Thinking-Modus enthält, können Sie bessere Ergebnisse erzielen, indem Sie Ihren Trainingsprompts den leeren Channel hinzufügen:

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

Tipp: Adaptive Thought-Effizienz mit Systemanweisungen

Das „Denken“ in Gemma 4 wird offiziell als boolesche Funktion EIN oder AUS unterstützt. Das Modell verfügt jedoch über außergewöhnlich gute Fähigkeiten zur Befolgung von Anweisungen, mit denen Sie sein Denkverhalten dynamisch modulieren können.

Anstatt sich auf einen fest codierten Framework-Parameter für „hoch“ oder „niedrig“ zu verlassen, können Sie Systemanweisungen (System Instructions, SI) verwenden, um das Modell in einen reduzierten Thinking-Modus zu versetzen. Wenn Sie das Modell explizit anweisen, effizient oder weniger tief zu denken (ein Konzept, das wir als „LOW“-Thinking-Anweisung bezeichnen), können Sie eine adaptive Thought-Effizienz erzielen.

  • Geringere Kosten:Tests haben gezeigt, dass die Anwendung einer „LOW“-Thinking-Systemanweisung die Anzahl der generierten Thinking-Tokens um etwa 20 % reduzieren kann.
  • Proof of Concept:Da dieses Verhalten ein Nebenprodukt der Anweisungsfähigkeit des Modells und nicht speziell trainiert ist, gibt es keinen einzelnen „perfekten“ Prompt. Die „LOW“-Anweisung ist ein Proof of Concept.
  • Anpassung:Wir empfehlen Entwicklern dringend, mit ihren eigenen benutzerdefinierten Systemanweisungen zu experimentieren. Sie können die Tiefe, Länge und den Stil des Denkprozesses des Modells optimieren, um Latenz, Kosten und Ausgabequalität für Ihre spezifischen Anwendungsfälle perfekt auszubalancieren.