Prompt-Formatierung für Gemma 4

Ab Gemma 4 führen wir neue Steuer-Tokens ein. Informationen zu Gemma 3 und niedriger finden Sie im vorherigen Dokument.

In den folgenden Abschnitten werden die von Gemma 4 verwendeten Steuerungstokens und ihre Anwendungsfälle beschrieben. Die Steuerungstokens sind in unserem Tokenizer reserviert und spezifisch für ihn.

  • Token für eine Systemanweisung: system
  • Token für einen Nutzer-Turn: user
  • Token für einen Modell-Turn: model
  • Token für den Beginn eines Dialogbeitrags: <|turn>
  • Token, das das Ende eines Dialogabschnitts angibt: <turn|>

Hier ein Beispiel für einen Dialog:

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

Multimodale Daten

Multimodales Token Zweck
<|image>
<image|>
Bildeinbettungen angeben
<|audio>
<audio|>
Audio-Einbettungen 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 im Modell durch die tatsächlichen Soft Embeddings ersetzt.

Hier ein Beispiel für einen Dialog:

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

And translate these audio:

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

Tokens für Agentic- und Reasoning-Steuerung

Zur Unterstützung von Agent-Workflows verwendet Gemma spezielle Steuerungstokens, die interne Überlegungen (Denken) von externen Aktionen (Funktionsaufruf) abgrenzen. Mithilfe dieser 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 „Tool-Nutzung“ zu verwalten.

Token-Paar Zweck
<|tool>
<tool|>
Definiert ein Tool
<|tool_call>
<tool_call|>
Gibt an, dass ein Modell eine Anfrage zum Verwenden eines Tools gesendet hat.
<|tool_response>
<tool_response|>
Gibt das Ausführungsergebnis eines Tools an das Modell zurück.

Trennzeichen für String-Werte: <|"|>

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

  • Zweck:Mit diesem Token wird dafür gesorgt, 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

Um den Denkmodus zu aktivieren, fügen Sie das Steuerungstoken <|think|> in die Systemanweisung ein.

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

Hier ein 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 Denkmodus ist für die Aktivierung auf Konversationsebene konzipiert. Diese sollten in einem einzigen Systemzug zusammen mit Ihren anderen Systemanweisungen, z. B. Tool-Definitionen, konsolidiert werden.

Beispiel für Reasoning und Funktionsaufrufe

In einem agentischen Turn kann das Modell privat „denken“, bevor es sich entscheidet, eine Funktion aufzurufen. Der Lebenszyklus folgt dieser Reihenfolge:

  1. Nutzeranfrage: Der Nutzer stellt eine Frage.
  2. Interne Argumentation: Das Modell denkt privat im Gedankenkanal.
  3. Tool-Anfrage: Das Modell hält die Generierung an, um einen Tool-Aufruf 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 mit einem Wettertool:

<|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 tool_calls und tool_responses dem Chatverlauf unter der Rolle assistant hinzufügen.

<|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 Tool-Antwort 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."
  }
]

Gedankenkontext zwischen Zügen verwalten

Die generierten Gedanken des Modells müssen richtig verwaltet werden, um die Leistung bei Multi-Turn-Unterhaltungen aufrechtzuerhalten.

  • Standard-Multi-Turn-Unterhaltungen:Sie müssen die vom Modell generierten Gedanken aus dem vorherigen Turn entfernen, bevor Sie den Unterhaltungsverlauf für den nächsten Turn an das Modell zurückgeben. Wenn Sie den Denkmodus während einer Unterhaltung deaktivieren möchten, können Sie das <|think|>-Token entfernen, wenn Sie die vorherigen Gedanken entfernen.
  • Funktionsaufrufe (Ausnahme): Wenn ein einzelner Modell-Turn Funktions- oder Tool-Aufrufe umfasst, dürfen die Gedanken zwischen den Funktionsaufrufen NICHT entfernt werden.

Agentische Workflows und lang andauernde Aufgaben

Da Rohgedanken zwischen Standardrunden entfernt werden, möchten Entwickler, die Agents mit langer Laufzeit erstellen, möglicherweise den Kontext der Argumentation beibehalten, um zu verhindern, dass das Modell in zyklische Argumentationsschleifen gerät.

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

Hinweise zur Integration

  • Interner Status:Die Tokens <|channel> und <channel|> werden in der Regel für die Chain-of-Thought-Verarbeitung (CoT) verwendet. In standardmäßigen nutzerorientierten Anwendungen sind diese Inhalte in der Regel für den Endnutzer ausgeblendet.
  • Tool Loop:Die Tokens tool_call und tool_response ermöglichen einen „Handshake“ zwischen dem Modell und der Anwendungsumgebung. Die Anwendung fängt 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 Denkkanal generiert wird, obwohl der Denkmodus explizit deaktiviert ist. Um das Modellverhalten in diesen Grenzfall zu stabilisieren, sollten Sie dem Prompt ein leeres Denk-Token hinzufügen.

Tipp: Große Modelle mit Datasets ohne Denkprozess optimieren

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

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

Tipp: Adaptive Thought Efficiency mit Systemanweisungen

Die Funktion „thinking“ in Gemma 4 wird offiziell als boolesche ON- oder OFF-Funktion unterstützt. Das Modell verfügt jedoch über außergewöhnlich leistungsstarke Funktionen zur Befolgung von Anweisungen, mit denen Sie das Denkverhalten dynamisch modulieren können.

Anstatt sich auf einen hartcodierten Framework-Parameter für „hohe“ oder „niedrige“ Überlegungen zu verlassen, können Sie Systemanweisungen verwenden, um das Modell in einen Modus mit weniger Überlegungen zu versetzen. Wenn Sie das Modell explizit anweisen, effizient oder auf einer niedrigeren Tiefe zu denken (ein Konzept, das wir als „LOW“-Denkanweisung bezeichnen), können Sie eine adaptive Denkeffizienz erreichen.

  • Geringere Kosten:Tests haben gezeigt, dass durch die Anwendung einer Systemanweisung mit dem Denkstil „LOW“ die Anzahl der generierten Denk-Tokens um etwa 20 % reduziert werden kann.
  • Konzeptnachweis:Da dieses Verhalten ein Nebenprodukt der Anweisungsfähigkeit des Modells und nicht speziell darauf trainiert ist, gibt es keinen einzelnen „perfekten“ Prompt. Die Anweisung „LOW“ ist ein Proof of Concept.
  • Anpassung:Wir empfehlen Entwicklern, 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 in Einklang zu bringen.