System、User、Assistantのロール
現代のチャットAPIにおける3つのメッセージロールと、それらがモデルの信頼や従う指示に与える影響を理解します。
「System、User、Assistantのロール」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
3つの役割、1つの会話
すべてのチャットAPIでは、次の3つのメッセージ役割を使用します。
- system — メタ指示、ペルソナ、ルール
- user — 人間または上流システムからの入力
- assistant — モデルの出力
役割が存在する理由
モデルは、これらの役割を異なるものとして扱うように学習されています。systemの役割が最も高く信頼され、userメッセージが最も低くなります。
これにより、ユーザー入力に攻撃者が入力した内容よりも、自分の指示が優先されることをモデルが理解できます。
systemスロットはあなたのもの
systemメッセージは、モデルとの契約です。ここには次の内容を記述します。
- アイデンティティと目標
- 厳格なルール(Xを決して明かさない、常にYを実行するなど)
- 出力形式の要件
- ツールの使用ポリシー
systemは安定させ、userは動的にする
セッション中、systemメッセージはほとんど変更しないようにします。ターンごとに変わる内容は、userメッセージに記述します。
このパターンにより、プロンプトキャッシュも利用できるようになります。詳しくは「コスト最適化」コースを参照してください。
例:カスタマーサポートエージェント
一般的な構成は次のとおりです。
messages = [
{'role': 'system', 'content': '''
You are SupportBot, the customer-support agent for Acme Corp.
You help with order status, returns, and product info.
You never share internal pricing or roadmap info.
Answer in 2-3 sentences. Use the search_orders tool when asked about orders.
'''},
{'role': 'user', 'content': 'Where is my order #1234?'},
]
for m in messages:
print(f"[{m['role']}] {m['content'].strip()}")
複数のsystemメッセージ
ほとんどのAPIは、systemメッセージを1つしかサポートしていません。指示を階層化する必要がある場合は、指示を連結するか、systemコンテンツ内で別々のXMLセクションを使用してください。
assistantメッセージとメモリ
過去のassistantターンはコンテキストの一部です。モデルは自分の過去の出力を確認できるため、一貫性を保てます。
そのため、前のターンでモデルが「はい、ルールに従います」と答えていると、実際にルールに従うよう促されます。
assistantターンの事前入力(Anthropic)
Anthropicでは、モデルが続けて生成するテキストをassistantメッセージの先頭に設定できます。
messages = [
{'role': 'user', 'content': 'Return a JSON object with name and age.'},
{'role': 'assistant', 'content': '{'}
]
# The model continues from '{', forcing JSON output.
for m in messages:
print(f"{m['role']}: {m['content']}")
print("The model continues from '{', forcing JSON output.")
toolの役割
最新のAPIには、4つ目の役割としてtool(OpenAI)や、tool_resultを含むコンテンツブロック(Anthropic)が追加されています。
モデルが要求した関数を実行した後、toolメッセージを追加します。
役割を混同するミス
よくあるバグは次のとおりです。
- ツールの結果をuserメッセージに入れる — 信頼階層が混乱します
- tool_call_idの送信を忘れる — APIエラーになります
- userまたはassistantメッセージが2つ連続する — ほとんどのAPIで拒否されます
指示の階層
OpenAIは、次のようなモデル仕様を公開しています。
"競合が発生した場合、モデルは階層の上位にある指示に従う必要があります。platform > developer (system) > user > tool。"
Anthropicにも同様のガイダンスがあります。systemスロットが優先されます。
役割スロット
「内部価格を決して公開しない」のような厳格なルールは、どこに記述すべきですか?
まとめ
3つの役割には、それぞれ異なる信頼レベルがあります。ルールにはsystem、入力にはuser、再現する過去の出力にはassistantを使用します。関数呼び出しの後にはtoolメッセージを追加してください。
よくある質問
「System、User、Assistantのロール」レッスンは無料ですか?
はい。「System、User、Assistantのロール」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「System、User、Assistantのロール」で何を学びますか?
現代のチャットAPIにおける3つのメッセージロールと、それらがモデルの信頼や従う指示に与える影響を理解します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「System、User、Assistantのロール」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Zero-shot、Few-shot、Chain-of-Thought
- System、User、Assistantのロール
- 出力フォーマット(JSON、XML、Markdown)
- 入力へのPrompt Injectionを防ぐ