0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AIの人格をコントロール!GEAP System Instruction 実践入門

0
Last updated at Posted at 2026-06-22

はじめに

「チャットボットを作ったけど、返答が毎回バラバラで安定しない」
「丁寧すぎて実務で使いにくい」

Gemini はデフォルトで汎用アシスタントとして振る舞います。System Instruction を使えば、モデルの役割・口調・制約をあらかじめ固定できます。コードは数行追加するだけです。

本記事では GEAP(旧 Vertex AI)で System Instruction を使う方法を、3つのキャラクター設定例とともに解説します。


System Instruction とは

System Instruction とは、ユーザーのメッセージより前に処理される「モデルへの事前指示」です。

通常の API 呼び出しは次の流れです。

ユーザーメッセージ → モデル → 返答

System Instruction を加えると、こうなります。

System Instruction(役割・制約・フォーマット)
        +
ユーザーメッセージ
        ↓
      モデル
        ↓
      返答

System Instruction はすべての会話ターンに自動的に適用されます。毎回プロンプトに「あなたは〇〇です」と書く必要がなくなります。


事前準備

GEAP の環境構築がまだの方は、先に「GEAP(旧 Vertex AI)入門:Google Cloud から Gemini を使ってみた」を参照してください。

本記事では以下が準備済みであることを前提とします。

  • google-genai SDK がインストール済み
  • gcloud auth application-default login で認証済み
  • 環境変数が設定済み
export GOOGLE_CLOUD_PROJECT="your-project-id"
export GOOGLE_CLOUD_LOCATION="global"
export GOOGLE_GENAI_USE_ENTERPRISE="True"

基本的な使い方

System Instruction は types.GenerateContentConfigsystem_instruction パラメータに渡します。

from google import genai
from google.genai import types

client = genai.Client()

response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="おすすめの Python ライブラリを教えてください。",
    config=types.GenerateContentConfig(
        system_instruction="あなたは簡潔さを最優先するエンジニアです。返答は箇条書き3行以内にしてください。",
    ),
)

print(response.text)

出力例:
image.png


実践例:3つのキャラクター設定

1. 辛口コードレビュアー

コードの問題点だけを端的に指摘するレビュアーです。褒め言葉や前置きは不要、改善点のみを返します。

コード:

REVIEWER_SI = """
あなたは10年以上の経験を持つシニアエンジニアです。
コードレビューを依頼されたら、以下の観点で厳しく評価してください。

評価観点:
- セキュリティリスク(インジェクション・認証漏れ・シークレットの平文保存など)
- パフォーマンスの問題(N+1クエリ・不要なループなど)
- 可読性・保守性の課題(命名・責務の分離・重複コードなど)

返答フォーマット:
1. 総合評価:★1〜★5(★5が最高)
2. 問題点:箇条書き(深刻度 高/中/低 を先頭に付ける)
3. 改善提案:修正後のコードスニペット付きで示す

前置きや褒め言葉は不要です。問題点がなければ「問題なし」とだけ返してください。
"""
response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="""
                以下のコードをレビューしてください。
                
                python
                import os
                
                DB_PASSWORD = "password123"
                
                def get_user(user_id):
                    query = f"SELECT * FROM users WHERE id = {user_id}"
                    return db.execute(query)
                `
                """,
    config=types.GenerateContentConfig(
        system_instruction=REVIEWER_SI,
    ),
)
print(response.text)

出力例:

image.png


2. 丁寧なカスタマーサポートBot

口調を統一し、社外向けの問い合わせ対応を担当するBotです。

コード:

SUPPORT_SI = """
あなたは日本のSaaS企業「CloudSample株式会社」のカスタマーサポート担当です。

対応ルール:
- 敬語(です・ます調)を必ず使う
- お客様を「お客様」と呼ぶ(「あなた」は使わない)
- 回答できない内容(料金交渉・個人情報の変更など)は「担当部署におつなぎします」と案内する
- 返答は200字以内に収める
- 感謝の言葉で締める

禁止事項:
- 競合サービスへの言及
- 料金の個別交渉
- 社内情報の開示
"""
response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="パスワードを忘れてしまいました。どうすればよいですか?",
    config=types.GenerateContentConfig(
        system_instruction=SUPPORT_SI,
    ),
)
print(response.text)

出力例:

image.png


3. 子ども向け家庭教師

小学生向けに噛み砕いた説明をするBotです。難しい言葉を使わず、身近な例えで教えます。

コード:

TEACHER_SI = """
あなたは小学3〜5年生向けの家庭教師です。
算数・理科・社会・国語のどんな質問にも答えます。

返答のルール:
- 漢字にはすべてふりがなをつける(例:「地球(ちきゅう)」)
- 難しい言葉や専門用語は使わない
- 身近なものを使った例えを必ず1つ入れる
- 一度に長く説明しすぎない(1ブロック3〜4文まで)
- 最後に「わかった?」か「なにか聞きたいことはある?」と添える

禁止事項:
- 「〜という概念は」「〜のメカニズムは」などの固い表現
- 一度に5つ以上の情報を並べること
"""
response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents="なんで空は青いの?",
    config=types.GenerateContentConfig(
        system_instruction=TEACHER_SI,
    ),
)
print(response.text)

出力例:

image.png


ベストプラクティス

System Instruction を書くときは、「役割・制約・フォーマット」の3要素を意識すると安定します。

要素 書くべき内容
役割 誰として振る舞うか 「10年以上の経験を持つシニアエンジニア」
制約 やっていいこと・ダメなこと 「競合サービスへの言及禁止」
フォーマット 出力の構造・文字数 「箇条書き3行以内」「200字以内」

具体的なほど効く

抽象的な指示より、具体的な役割定義の方が一貫性が上がります。

× 「あなたは AI アシスタントです。親しみやすく話してください。」
○ 「あなたは〇〇社のサポート担当 Saki です。敬語で、200字以内で答えてください。」

否定形の指示も有効

「〜してください」だけでなく「〜しないでください」を明示することで、
デフォルトの出力パターン(長い前置き・曖昧な表現・過剰な褒め言葉)を抑制できます。

system_instruction = """
...
禁止事項
- なるほど」「確かになどの相槌で始めない
- 「〜かもしれません」「〜と思われますなど曖昧な表現を避ける
- 結論の前に長い前置きを置かない
"""

長くなりすぎに注意

System Instruction が長いほど矛盾が生じやすくなります。目安は 300〜500字
本当に必要な指示だけを残し、余分な説明は削りましょう。


よくある落とし穴

ユーザー入力で上書きされることがある

Gemini はユーザーの指示を優先する傾向があります。

System Instruction:「英語でのみ返答してください」
ユーザー:「日本語で教えてください」
→ 日本語で返答されることがある

重要な制約(例:「競合情報を絶対に出力しない」)は System Instruction だけに頼らず、
アプリ側でも出力のフィルタリングを検討してください。

マルチターン会話での注意

generate_contentcontents でマルチターン会話を渡す場合でも、
system_instructionconfig に一度設定すれば全ターンに適用されます。
会話履歴の中に System Instruction を埋め込む必要はありません。

response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents=[
        {"role": "user",  "parts": [{"text": "こんにちは"}]},
        {"role": "model", "parts": [{"text": "いらっしゃいませ。"}]},
        {"role": "user",  "parts": [{"text": "パスワードを忘れました"}]},
    ],
    config=types.GenerateContentConfig(
        system_instruction=SUPPORT_SI,  # 全ターンに適用される
    ),
)

矛盾する指示を書いてしまう

「簡潔に答えてください」と「すべての観点を網羅してください」を同時に書くと、
モデルがどちらを優先するか不定になります。指示間の矛盾はチェックが必要です。


まとめ

System Instruction を使うポイントは3つです。

  1. types.GenerateContentConfig(system_instruction="...") に渡すだけで動く
  2. 役割・制約・フォーマットの3要素で書くと安定する
  3. 否定形の指示(〜しない)も有効に使う

System Instruction は Function Calling やマルチモーダルと組み合わせることでさらに活用範囲が広がります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?