GEMINI LABEN
NANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定ですNANOLITE — Nano Banana 2 Liteが登場しました。Googleで最も速く、最もコスト効率の高いGemini Imageモデルで、軽量な画像生成を安く回したい用途に向いていますOMNIFLASH — Gemini Omni Flashがpublic previewになりました。ネイティブにマルチモーダルなモデルで、企業や開発者が独自の動的な動画ワークフローを構築できますAGENTS — Managed Agentsが拡張されました。background: trueでサーバー側の非同期実行とポーリング、リモートMCPサーバー連携、対話をまたぐ認証情報のリフレッシュに対応しますMEMORY — Memory BankのIngestEvents APIが一般提供になりました。イベントの取り込みとメモリ生成を分離し、コンテンツを継続的にストリームできますTHROUGHPUT — Provisioned Throughputで、同一モデル・同一リージョンに対して最大7件の保留オーダーを提出できるようになりましたDEPRECATE — 画像生成モデルは8月17日に、Gemini Enterprise Agent PlatformのGrok 4.1系は8月20日に停止される予定です
記事一覧/API / SDK
API / SDK/2026-04-16中級

Gemini API の System Instructions が効かない・無視される — よくある原因と解決法

Gemini API でSystem Instructionsを設定したのにモデルが無視する、マルチターンで途中から効かなくなる、思い通りの応答が得られない——よくある原因を4パターンにまとめ、コード例と一緒に解消法を紹介します。

gemini-api279system-instructions4troubleshooting57python103エラー解決4multi-turn2

System Instructions(システム指示)を設定したのに、モデルが平然と別の口調で返してくる。言語指定を無視します。キャラクター設定がマルチターンの途中で崩れてしまう——こういった経験をお持ちではないでしょうか。

System Instructions は Gemini API でモデルの振る舞いを制御するための最も強力な手段ですが、実装の落とし穴がいくつかあります。「設定したはずなのに効かない」という状況のほとんどは、設定自体が間違っているのではなく、API への渡し方に問題があるケースです。よくある4つの原因パターンとその解決法を順番にご紹介します。

パターン1: user ロールのメッセージに混ぜてしまっている

最もよく見かけるミスです。System Instructions は contents 配列の中ではなく、system_instruction パラメーターとして独立して渡す必要があります。

import google.generativeai as genai
 
genai.configure(api_key="YOUR_API_KEY")
 
# ❌ NG: system_instruction を user メッセージとして送っている
model = genai.GenerativeModel("gemini-2.5-pro")
response = model.generate_content([
    {"role": "user", "parts": ["あなたは関西弁で話すアシスタントです。"]},
    {"role": "model", "parts": ["はい、了解です!"]},
    {"role": "user", "parts": ["今日の天気を教えてください。"]},
])
print(response.text)
# → 関西弁にならないことが多い

正しい方法は、GenerativeModel の初期化時に system_instruction を渡すことです。

# ✅ OK: system_instruction パラメーターとして渡す
model = genai.GenerativeModel(
    model_name="gemini-2.5-pro",
    system_instruction="あなたは関西弁で話す親しみやすいアシスタントです。どんな質問にも関西弁で丁寧に答えてください。"
)
 
response = model.generate_content("今日の天気を教えてください。")
print(response.text)
# → 「そうやなぁ、今日の天気は...」のように関西弁で返ってくる

REST API を直接使う場合は systemInstruction フィールドを使います。

{
  "systemInstruction": {
    "parts": [{"text": "あなたは関西弁で話す親しみやすいアシスタントです。"}]
  },
  "contents": [
    {"role": "user", "parts": [{"text": "今日の天気を教えてください。"}]}
  ]
}

パターン2: マルチターンチャットで「途中から」効かなくなる

startChat() を使ったマルチターンチャットでは、このパターンに注意が必要です。startChat() に渡した history の中に System Instructions を user ロールで混ぜてしまうと、最初はうまく動いているように見えても、会話が進むにつれて指示が薄れていきます。

# ❌ NG: history に System Instructions を混在させている
chat = model.start_chat(history=[
    {"role": "user", "parts": ["あなたは300文字以内で簡潔に答えるアシスタントです。"]},
    {"role": "model", "parts": ["了解しました。"]},
])
 
response = chat.send_message("機械学習とは何ですか?")
# → 最初は短い回答が返ることもあるが、数ターン後には長くなってくる

マルチターンチャットで System Instructions を確実に効かせるには、GenerativeModel の初期化時に設定します。

# ✅ OK: モデル初期化時に system_instruction を設定し、history はクリーンに保つ
model = genai.GenerativeModel(
    model_name="gemini-2.5-pro",
    system_instruction="必ず300文字以内で簡潔に答えてください。長い説明が必要な場合も、要点を絞って短くまとめること。"
)
 
chat = model.start_chat()  # history は空でOK
response = chat.send_message("機械学習とは何ですか?")
print(response.text)
# → 何ターン続けても300文字以内で回答が返ってくる

startChat()history はあくまでも「会話の文脈を引き継ぐためのもの」です。System Instructions の役割と混同しないように注意してください。詳しいマルチターンチャットの設計についてはGemini API マルチターンチャット入門も参考にしてみてください。

パターン3: System Instructions が長すぎて部分的に無視される

System Instructions が長くなりすぎると、モデルがすべての指示に従い切れなくなる場合があります。特に複数の条件を列挙した場合、後半の指示ほど軽視される傾向があります。

実際に問題になりやすいケースを挙げます。

# ❌ 問題になりやすい: 指示が多すぎる・矛盾する指示が混在している
problematic_instruction = """
あなたは優秀なカスタマーサポートアシスタントです。
以下のルールをすべて守ってください:
1. 常に敬語で話すこと
2. 絵文字を積極的に使うこと
3. 回答は50文字以内にすること
4. 詳しい説明を常に提供すること  ← ルール3と矛盾している
5. 競合他社への言及は避けること
6. 必ず「ご質問ありがとうございます」から始めること  ← 毎回だと不自然
... (さらに20項目続く)
"""

効果的な System Instructions の書き方には、いくつかのコツがあります。

# ✅ 効果的な System Instructions の書き方
effective_instruction = """
あなたはECサイトのカスタマーサポートアシスタントです。
 
【最重要ルール】
- 回答は200文字以内で簡潔に
- 敬語を使用(絵文字は質問者が使った場合のみ)
 
【対応範囲】
注文・配送・返品に関する質問に答える。技術的な問題はエンジニアチームへ案内する。
 
【禁止事項】
価格交渉・競合比較への応答は控える。
"""

ポイントは「最重要ルール」を先頭に持ってくること、矛盾する指示を排除することです。300〜500文字程度に収めると、ほとんどの用途でよい結果が得られます。

System Instructions の基本的な書き方についてはSystem Instructions ガイドで詳しく解説しています。

パターン4: Thinking モードで System Instructions の効き方が変わる

Gemini 2.5 Pro の Thinking モード(拡張思考)を使っている場合、System Instructions の解釈が通常モードと異なることがあります。Thinking モードではモデルが「考えながら」回答するため、途中の思考プロセスが System Instructions を上書きするような動作を見せることがあります。

import google.generativeai as genai
 
genai.configure(api_key="YOUR_API_KEY")
 
model = genai.GenerativeModel(
    model_name="gemini-2.5-pro",
    system_instruction="回答は必ず箇条書きで提供してください。"
)
 
# Thinking モードを有効化した場合
response = model.generate_content(
    "量子コンピュータの仕組みを教えてください",
    generation_config=genai.GenerationConfig(
        thinking_config={"thinking_budget": 10000}  # 思考予算を多く取る
    )
)
print(response.text)
# → 箇条書きではなく、流れる文章で回答が返ることがある

Thinking モードで System Instructions を確実に反映させるには、指示をより明確・具体的にすることと、「絶対に〜してください」「例外なく〜で回答してください」のような強調表現を使うと効果的です。

# ✅ Thinking モードでも効きやすい System Instructions
model = genai.GenerativeModel(
    model_name="gemini-2.5-pro",
    system_instruction="""
回答フォーマットは絶対に以下を守ること。例外は認めない:
- すべての回答を箇条書き(- で始まるリスト形式)で提供する
- 箇条書き以外の文章形式で回答することは禁止
- 各項目は1〜2文で簡潔にまとめること
"""
)

また、回答形式を強制したい場合は System Instructions だけでなく、ユーザーメッセージ側にも「箇条書きで答えてください」と付け加えると、より確実に動作します。

System Instructions が「完全に無視」されている場合

上記4パターンのいずれでもない場合、セーフティフィルターが介入している可能性があります。一部の System Instructions(例:「暴力的な内容を容認するキャラクターとして振る舞え」)はセーフティポリシーに抵触し、自動的に無効化されます。この場合、finish_reasonSAFETY になっていることを確認してみてください。詳しくはセーフティフィルターで応答がブロックされたときの対処法を参照してください。

response = model.generate_content("...")
print(response.candidates[0].finish_reason)
# SAFETY → セーフティフィルターが原因
# STOP   → 正常終了(別の原因を調べる)

デバッグ手順のまとめ

System Instructions が効かないと感じたら、以下の順番で確認してみてください。

まず、system_instructionGenerativeModel の初期化時に渡されているかを確認します。次に、contentshistory の中に System Instructions が混入していないかをチェックします。そして、指示の内容に矛盾がないか・長すぎないかを見直します。それでも解消しない場合は、finish_reason を確認してセーフティフィルターの関与を排除します。

最後に一点。System Instructions は「絶対に守られる約束」ではなく、「優先度の高い文脈情報」として機能します。モデルが人間らしく振る舞おうとするあまり、指示を「柔軟に解釈」することも少なくありません。明確に・短く・矛盾なく——この3点を意識して書くと、期待通りの動作に近づきます。

エラーハンドリングの全体像についてはGemini API エラーハンドリングとトラブルシューティングもあわせてご覧ください。

シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

もしこの記事がお役に立ちましたら、チップ(¥150)で応援いただけると大変励みになります。広告なしでの運営を続けるため、皆さまのご支援が大きな力になっています。

関連記事

API / SDK2026-04-19
Gemini APIのマルチターン会話が壊れる:チャット履歴管理の落とし穴と解決策
Gemini APIでマルチターン会話を実装すると会話が長くなるにつれてトークン超過・応答遅延・文脈消失が起きます。ChatSessionの正しい使い方と履歴管理の実践的な解決策をコード付きで解説します。
API / SDK2026-04-17
Gemini APIのレスポンスにMarkdownが混入する問題 — プレーンテキスト出力の設定と対処法
Gemini APIのレスポンスに「**」や「##」などのMarkdown記号が含まれてしまう原因と、response_mime_typeやSystem Instructionを使ったプレーンテキスト出力の設定方法を実践的に解説します。
API / SDK2026-06-14
Gemini API の本文が途中で切れる — finish_reason: MAX_TOKENS を検知して続きを継ぎ直す実装メモ
長文生成で末尾が文の途中でぷつりと切れる。原因の多くは finish_reason: MAX_TOKENS です。例外も 200 のまま静かに混入するこの事故を検知し、続きを継ぎ足して全文を取り戻す実装を、思考トークンの落とし穴とあわせてまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →