Formato de instrucciones de Gemma 4

A partir de Gemma 4, presentamos nuevos tokens de control. Para Gemma 3 y versiones anteriores, consulta el documento anterior.

En las siguientes secciones, se especifican los tokens de control que usa Gemma 4 y sus casos de uso. Ten en cuenta que los tokens de control están reservados y son específicos de nuestro tokenizador.

  • Token para indicar una instrucción del sistema: system
  • Token para indicar un turno del usuario: user
  • Token para indicar un turno del modelo: model
  • Token para indicar el comienzo de un turno de diálogo: <|turn>
  • Token para indicar el final de un turno de diálogo: <turn|>

Este es un ejemplo de diálogo:

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

Multi-modalidades

Token multimodal Objetivo
<|image>
<image|>
Indicar incorporaciones de imágenes
<|audio>
<audio|>
Indicar incorporaciones de audio
<|image|>
<|audio|>
Tokens de marcador de posición especiales

Usamos dos tokens de marcador de posición especiales (<|image|> y <|audio|>) para especificar dónde se deben insertar los tokens de imagen y audio. Después de la tokenización, estos tokens se reemplazan por las incorporaciones flexibles reales dentro del modelo.

Este es un ejemplo de diálogo:

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

And translate these audio:

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

Tokens de control de razonamiento y de agente

Para admitir flujos de trabajo de agentes, Gemma usa tokens de control especializados que delimitan el razonamiento interno (pensamiento) de las acciones externas (llamada a función). Estos tokens permiten que el modelo procese una lógica compleja antes de proporcionar una respuesta final o interactuar con herramientas externas.

Llamada a función

Gemma 4 se entrena con seis tokens especiales para administrar el ciclo de vida de "uso de herramientas".

Par de tokens Objetivo
<|tool>
<tool|>
Define una herramienta
<|tool_call>
<tool_call|>
Indica la solicitud de un modelo para usar una herramienta.
<|tool_response>
<tool_response|>
Proporciona el resultado de la ejecución de una herramienta al modelo.

Delimitador para valores de cadena: <|"|>

Se usa un solo token, <|"|>, como delimitador para todos los valores de cadena dentro de los bloques de datos estructurados.

  • Objetivo: Este token garantiza que cualquier carácter especial (como {, }, , o comillas) dentro de una cadena se trate como texto literal y no como parte de la sintaxis subyacente de la estructura de datos.
  • Uso: Todos los literales de cadena en las declaraciones, las llamadas y las respuestas de tu función deben incluirse con este token (p.ej., key:<|"|>string value<|"|>).

Modo de pensamiento

Para activar el modo de pensamiento, incluye el <|think|> token de control en la instrucción del sistema.

Token de control Objetivo
<|think|> Activa el modo de pensamiento
<|channel>
<channel|>
Indica el proceso interno de un modelo.

Este es un ejemplo de diálogo:

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

El modo de pensamiento está diseñado para habilitarse a nivel de la conversación. Esto se debe consolidar en un solo turno del sistema junto con tus otras instrucciones del sistema, como las definiciones de herramientas.

Ejemplo de razonamiento y llamada a función

En un turno de agente, el modelo puede "pensar" de forma privada antes de decidir llamar a una función. El ciclo de vida sigue esta secuencia:

  1. Consulta del usuario: El usuario hace una pregunta.
  2. Razonamiento interno: El modelo piensa de forma privada en el canal de pensamiento.
  3. Solicitud de herramienta: El modelo detiene la generación para solicitar una llamada a herramienta.
  4. Ejecución e inyección: La aplicación ejecuta la herramienta y agrega la respuesta.
  5. Respuesta final: El modelo lee la respuesta y genera la respuesta final.

En el siguiente ejemplo, se muestra un modelo que usa una herramienta de clima:

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

Tu aplicación debe analizar la respuesta del modelo para extraer el nombre y los argumentos de la función, ejecutar la función y, luego, agregar tool_calls y tool_responses al historial de chat en el rol 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|>

Por último, Gemma lee la respuesta de la herramienta y responde al usuario.

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

Este es el historial de chat JSON completo para este ejemplo:

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

Administra el contexto de pensamiento entre turnos

Administrar correctamente los pensamientos generados del modelo es fundamental para mantener el rendimiento en conversaciones de varios turnos.

  • Conversaciones estándar de varios turnos: Debes quitar (eliminar) los pensamientos generados del modelo del turno anterior antes de volver a pasar el historial de conversación al modelo para el siguiente turno. Si quieres inhabilitar el modo de pensamiento en medio de la conversación, puedes quitar el token <|think|> cuando elimines los pensamientos anteriores.
  • Llamada a función (excepción): Si un solo turno del modelo implica llamadas a función o herramienta, NO se deben quitar los pensamientos entre las llamadas a función.

Flujos de trabajo de agentes y tareas de larga duración

Debido a que los pensamientos sin procesar se eliminan entre los turnos estándar, es posible que los desarrolladores que compilan agentes de larga duración deseen conservar el contexto de razonamiento para evitar que el modelo ingrese en bucles de razonamiento cíclicos.

  • Resumen de pensamientos: Una técnica de inferencia muy recomendada es extraer, resumir y volver a introducir los pensamientos anteriores del modelo en la ventana de contexto como texto estándar.
  • Restricciones de formato: Debido a que Gemma 4 no se entrenó explícitamente con pensamientos sin procesar incluidos en la instrucción (fuera de la situación específica de llamada a herramienta mencionada anteriormente), el modelo no espera un formato estricto o específico para estos pensamientos inyectados. Tienes la flexibilidad de dar formato al razonamiento resumido de la manera que mejor se adapte a tu arquitectura de agente específica.

Notas de integración

  • Estado interno: Los tokens <|channel> y <channel|> suelen usarse para el procesamiento de la cadena de pensamientos (CoT). En las aplicaciones estándar orientadas al usuario, este contenido suele estar oculto para el usuario final.
  • Bucle de herramientas: Los tokens tool_call y tool_response facilitan un "protocolo de enlace" entre el modelo y el entorno de tu aplicación. La aplicación intercepta la tool_call, ejecuta el código subyacente y vuelve a introducir el resultado en el modelo dentro de los tokens tool_response.
  • Comportamiento del modelo: Los modelos más grandes (p.ej., gemma-4-26B-A4B-it, gemma-4-31B-it) pueden generar ocasionalmente un canal de pensamiento, incluso cuando el modo de pensamiento está desactivado de forma explícita. Para estabilizar el comportamiento del modelo en estos casos extremos, considera agregar un token de pensamiento vacío a la instrucción.

Sugerencia: Ajusta modelos grandes con conjuntos de datos sin pensamiento

Cuando ajustes modelos de Gemma más grandes con un conjunto de datos que no incluya pensamiento, puedes obtener mejores resultados si agregas el canal vacío a tus instrucciones de entrenamiento:

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

Sugerencia: Eficiencia de pensamiento adaptativa con instrucciones del sistema

Si bien el "pensamiento" en Gemma 4 se admite oficialmente como una función booleana ACTIVADA o DESACTIVADA, el modelo tiene capacidades de seguimiento de instrucciones excepcionalmente sólidas que te permiten modular su comportamiento de pensamiento de forma dinámica.

En lugar de depender de un parámetro de framework codificado para el pensamiento "alto" o "bajo", puedes usar las instrucciones del sistema (SI) para guiar el modelo a un modo de pensamiento reducido. Si le indicas explícitamente al modelo que piense de manera eficiente o a una profundidad menor (un concepto al que nos referimos como una instrucción de pensamiento "BAJO"), puedes lograr una eficiencia de pensamiento adaptativa.

  • Costo reducido: Las pruebas demostraron que aplicar una instrucción del sistema de pensamiento "BAJO" puede reducir la cantidad de tokens de pensamiento generados en aproximadamente un 20%.
  • Prueba de concepto: Debido a que este comportamiento es un subproducto de la capacidad de instrucción del modelo en lugar de un entrenamiento específico, no hay una sola instrucción "perfecta". La instrucción "BAJO" es una prueba de concepto.
  • Personalización: Recomendamos a los desarrolladores que experimenten con sus propias instrucciones del sistema personalizadas. Puedes ajustar la profundidad, la longitud y el estilo del proceso de pensamiento del modelo para equilibrar perfectamente la latencia, el costo y la calidad de salida para tus casos de uso específicos.