Форматирование подсказки Джеммы 4

Начиная с Gemma 4, мы вводим новые управляющие токены. Информацию о Gemma 3 и более ранних версиях см. в предыдущем документе .

В следующих разделах указаны управляющие токены, используемые Gemma 4, и варианты их применения. Обратите внимание, что управляющие токены зарезервированы и являются специфичными для нашего токенизатора.

  • Токен для обозначения системной инструкции: system
  • Токен для обозначения хода пользователя: user
  • Жетон для обозначения поворота модели: model
  • Символ, обозначающий начало хода диалога: <|turn>
  • Символ, обозначающий конец хода диалога: <turn|>

Вот пример диалога:

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

Мультимодальности

Мультимодальный токен Цель
<|image>
<image|>
Укажите встраивания изображений.
<|audio>
<audio|>
Укажите встраивание аудиофайлов.
<|image|>
<|audio|>
Специальные токены-заполнители

Мы используем два специальных токена-заполнителя ( <|image|> и <|audio|> ), чтобы указать, куда следует вставлять токены изображения и аудио. После токенизации эти токены заменяются фактическими эмбеддингами внутри модели.

Вот пример диалога:

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

And translate these audio:

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

Токены управления агентами и рассуждениями

Для поддержки агентных рабочих процессов Gemma использует специализированные управляющие токены, которые разграничивают внутренние рассуждения (мышление) от внешних действий (вызов функций). Эти токены позволяют модели обрабатывать сложную логику, прежде чем предоставить окончательный ответ или взаимодействовать с внешними инструментами.

Вызов функции

Модель Gemma 4 обучена на шести специальных токенах для управления жизненным циклом "использования инструмента".

Пара токенов Цель
<|tool>
<tool|>
Определяет инструмент
<|tool_call>
<tool_call|>
Указывает на запрос модели на использование инструмента.
<|tool_response>
<tool_response|>
Передает результат выполнения инструмента обратно в модель.

Разделитель для строковых значений: <|"|>

В качестве разделителя для всех строковых значений в блоках структурированных данных используется один токен, <|"|> .

  • Назначение: Этот токен гарантирует, что любые специальные символы (такие как { , } , , , или кавычки) внутри строки будут рассматриваться как буквальный текст, а не как часть базового синтаксиса структуры данных.
  • Использование: Все строковые литералы в объявлениях функций, вызовах и ответах должны быть заключены в этот токен (например, key:<|"|>string value<|"|> ).

Режим размышления

Для активации режима мышления включите управляющий маркер <|think|> в системную инструкцию.

Управляющий токен Цель
<|think|> Активирует режим мышления
<|channel>
<channel|>
Указывает на внутренний процесс модели.

Вот пример диалога:

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

Режим обдумывания предназначен для активации на уровне диалога. Его следует объединить в один системный ход вместе с другими системными инструкциями, такими как определения инструментов.

Пример рассуждений и вызова функции

В случае агентного поворота модель может «подумать» в частном порядке, прежде чем принять решение о вызове функции. Жизненный цикл протекает в следующей последовательности:

  1. Запрос пользователя: Пользователь задает вопрос.
  2. Внутреннее мышление: Модель мыслит в уединении, в канале мыслей.
  3. Запрос инструмента: Модель приостанавливает генерацию для запроса вызова инструмента.
  4. Выполнение и внедрение: Приложение запускает инструмент и добавляет ответ.
  5. Окончательный ответ: Модель считывает ответ и генерирует окончательный результат.

Следующий пример демонстрирует модель, использующую инструмент прогнозирования погоды:

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

Ваше приложение должно проанализировать ответ модели, чтобы извлечь имя функции и её аргументы, выполнить функцию, а затем добавить записи tool_calls и tool_responses в историю чата в рамках роли 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|>

Наконец, Джемма зачитывает ответ инструмента и отвечает пользователю.

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

Вот полная история чата в формате JSON для этого примера:

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

Управление контекстом мыслей между репликами

Правильное управление мыслями, генерируемыми моделью, имеет решающее значение для поддержания производительности в многоэтапных диалогах.

  • Стандартные многоходовые диалоги: Перед передачей истории диалога обратно модели для следующего хода необходимо удалить (стереть) сгенерированные моделью мысли из предыдущего хода. Если вы хотите отключить режим обдумывания в середине диалога, вы можете удалить токен <|think|> при удалении предыдущих мыслей.
  • Вызов функций (исключение): Если один поворот модели включает вызовы функций или инструментов, нельзя прерывать мысли между вызовами функций.

Рабочие процессы агентов и длительные задачи

Поскольку между стандартными ходами рассуждений удаляются исходные мысли, разработчикам, создающим долго работающие агенты, может потребоваться сохранять контекст рассуждений, чтобы предотвратить попадание модели в циклические циклы рассуждений.

  • Подведение итогов: Настоятельно рекомендуемый метод вывода заключается в извлечении, обобщении и передаче предыдущих мыслей модели обратно в контекстное окно в виде стандартного текста.
  • Ограничения по форматированию: Поскольку модель Gemma 4 не обучалась с использованием исходных мыслей, включенных в запрос (за исключением конкретного сценария вызова инструмента, упомянутого выше), модель не ожидает строгого или специфического формата для этих введенных мыслей. У вас есть возможность форматировать обобщенные рассуждения любым способом, который наилучшим образом подходит для вашей конкретной архитектуры агента.

Примечания по интеграции

  • Внутреннее состояние: токены <|channel> и <channel|> обычно используются для обработки цепочки мыслей (Chain-of-Thought, CoT). В стандартных приложениях, ориентированных на пользователя, это содержимое обычно скрыто от конечного пользователя.
  • Цикл обработки инструментов: токены tool_call и tool_response обеспечивают «рукопожатие» между моделью и средой приложения. Приложение перехватывает tool_call , выполняет соответствующий код и передает результат обратно в модель в токенах tool_response .
  • Поведение модели: Более крупные модели (например, gemma-4-26B-A4B-it, gemma-4-31B-it) могут иногда генерировать канал мыслей, даже если режим мышления явно отключен. Для стабилизации поведения модели в таких крайних случаях рекомендуется добавить пустой токен мышления к подсказке.

Совет: Тонкая настройка больших моделей с помощью простых наборов данных, не требующих предварительного анализа.

При тонкой настройке более крупных моделей Gemma с использованием набора данных, не включающего элементы мышления, можно добиться лучших результатов, добавив пустой канал к обучающим подсказкам:

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

Совет: Адаптивная эффективность мышления с использованием системных инструкций

Хотя в Gemma 4 функция «мышления» официально поддерживается как логический параметр «вкл.» или «выкл.», модель обладает исключительно мощными возможностями следования инструкциям, позволяющими динамически регулировать ее мыслительное поведение.

Вместо того чтобы полагаться на жестко заданный параметр структуры для «высокого» или «низкого» уровня мышления, вы можете использовать системные инструкции (СИ), чтобы направлять модель в режим пониженного мышления. Явно указывая модели мыслить эффективно или на меньшей глубине (концепция, которую мы называем инструкцией «НИЗКОГО» мышления), вы можете достичь адаптивной эффективности мышления.

  • Снижение затрат: Тестирование показало, что применение инструкции системы мышления с низким уровнем сложности может уменьшить количество генерируемых жетонов мышления примерно на 20%.
  • Доказательство концепции: Поскольку такое поведение является побочным продуктом способности модели к управлению, а не результатом специального обучения, не существует единственной «идеальной» подсказки. Инструкция «LOW» — это доказательство концепции.
  • Настройка: Мы настоятельно рекомендуем разработчикам экспериментировать с собственными системными инструкциями. Вы можете точно настроить глубину, продолжительность и стиль мыслительного процесса модели, чтобы идеально сбалансировать задержку, стоимость и качество выходных данных для ваших конкретных задач.