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|> |
特殊なプレースホルダ トークン |
2 つの特別なプレースホルダ トークン(<|image|> と <|audio|>)を使用して、画像トークンと音声トークンを挿入する場所を指定します。トークン化後、これらのトークンはモデル内の実際のソフト エンベディングに置き換えられます。
以下に会話の例を示します。
prompt = """<|turn>user
Describe this image: <|image|>
And translate these audio:
a. <|audio|>
b. <|audio|><turn|>
<|turn>model"""
音声
音声処理には次のプロンプト構造を使用します。
- 音声認識(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.
- 自動音声翻訳(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}.
エージェントと推論の制御トークン
エージェント ワークフローをサポートするために、Gemma は内部推論(思考)と外部アクション(関数呼び出し)を区別する特別な制御トークンを使用します。これらのトークンにより、モデルは複雑なロジックを処理してから、最終的なレスポンスを提供したり、外部ツールとやり取りしたりできます。
関数呼び出し
Gemma 4 は、ツール使用のライフサイクルを管理するために 6 つの特別なトークンでトレーニングされています。
| トークンペア | 目的 |
|---|---|
<|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|>
思考モードは、会話レベルで有効になるように設計されています。これは、ツール定義などの他のシステム指示とともに、単一のシステムターンに統合される必要があります。
推論と関数呼び出しの例
エージェント ターンでは、モデルは関数を呼び出す前に非公開で「思考」することがあります。ライフサイクルは次の順序で進みます。
- ユーザーからの問い合わせ: ユーザーが質問します。
- 内部推論: モデルは思考チャンネルで非公開で考えます。
- ツール リクエスト: モデルは生成を停止して、ツール呼び出しをリクエストします。
- 実行と挿入: アプリケーションがツールを実行し、レスポンスを追加します。
- 最終回答: モデルが回答を読み取り、最終的な回答を生成します。
次の例は、天気ツールを使用するモデルを示しています。
<|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>
アプリケーションは、モデルのレスポンスを解析して関数名と引数を抽出し、関数を実行してから、assistant ロールのチャット履歴に tool_calls と tool_responses を追加する必要があります。
<|turn>model
<|tool_call>call:get_current_weather{location:<|"|>London<|"|>}<tool_call|><|tool_response>response:get_current_weather{temperature:15,weather:<|"|>sunny<|"|>}<tool_response|>
最後に、Gemma はツールのレスポンスを読み取り、ユーザーに返信します。
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 の「思考」は、ON または OFF のブール値機能として正式にサポートされていますが、このモデルには、思考動作を動的に調整できる非常に強力な指示追従機能があります。
「高」または「低」の思考にハードコードされたフレームワーク パラメータに依存するのではなく、システム指示(SI)を使用して、モデルを思考削減モードに誘導できます。モデルに効率的に思考するよう、またはより低い深さで思考するよう明示的に指示することで(このコンセプトを「低」思考指示と呼びます)、適応型思考効率を実現できます。
- コストの削減: テストでは、「LOW」の思考システム指示を適用すると、生成される思考トークンの数を約 20% 削減できることが示されています。
- コンセプト実証: この動作は、モデルの指示可能性の副産物であり、特別にトレーニングされたものではないため、「完璧」なプロンプトは存在しません。「LOW」の指示は概念実証です。
- カスタマイズ: デベロッパーは、独自のカスタム システム指示を試してみることを強くおすすめします。モデルの思考プロセスの深さ、長さ、スタイルをファインチューニングして、特定のユースケースのレイテンシ、費用、出力品質のバランスを最適化できます。