Lesson CH01-L01
Static Instructions
固定文字列のシステムプロンプトで挙動を制御する。
- 読了目安
- 10 min
- Colab目安
- 16 min
- 合計
- 26 min
- 前提
- GLA vs Vertex AI
関連: 公式ドキュメント
一行サマリ
Agent(model, instructions='...') の instructions 引数に固定文字列を渡す だけで、Agent の口調・役割・出力形式・言語を一括で固定できる。これが Static Instructions。
ヒーロー: instructions は LLM への "システムからの指示"
ユーザーが投げる prompt (質問文) とは別に、Agent には 「あなたは何者で、どう振る舞うか」を伝えるシステム側の指示 があります。これが instructions です。
概念: なぜ instructions を分けるのか
LLM 呼び出しは大きく 2 つの入力に分かれます。
- system message =
instructions— そのエージェントが 常に守るべき設計図。「君はカクテルの専門家で、日本語で答える」のような不変ルール - user message =
prompt— その回ごとの問い。「モヒートとは?」「ジントニックとは?」と毎回変わる
この分離があるおかげで、Agent を 1 度作れば 同じ役割で何度でも違う質問 を投げられます。役割を変えるたびに同じ説明文を毎回 prompt に書く必要がありません。
instructions と system_prompt の違い (重要)
PydanticAI には似た 2 つの仕組みがあります。
| 仕組み | 渡し方 | 振る舞い |
|---|---|---|
instructions | Agent(..., instructions='...') | メッセージ履歴に残らない。各 run で常に新鮮 |
system_prompt | Agent(..., system_prompt='...') | メッセージ履歴に残る。会話を繋げるとき過去の system も連鎖する |
結論: 単発の "役割固定" には instructions を使う。system_prompt は会話履歴を引き継いで段階的に積む使い方をするときに選ぶ、と覚えておけば十分です。本レッスン以降、特別な理由がない限り instructions を使います。
コード: カクテル専門家エージェント
例 1: 最小の Static Instructions
from pydantic_ai import Agent
# 役割 + 言語 + 形式 を 1 行で固定
agent_ja = Agent(
'google-gla:gemini-3-flash-preview',
instructions='あなたはカクテルの専門家です。日本語で 3〜5 行で簡潔に答えてください。',
)
print(agent_ja.run_sync('モヒートとは?').output)ポイント:
instructionsは 文字列 をそのまま渡すだけ- 「役割」「言語」「形式 (3〜5行)」の 3 要素を 1 行に詰めた だけで実用的に動く
- 同じ
agent_jaを使って何度でも違う質問を投げられる (役割は維持される)
例 2: instructions を変えると振る舞いが丸ごと変わる
agent_en = Agent(
'google-gla:gemini-3-flash-preview',
instructions='You are a cocktail expert. Answer in English in 3 to 5 lines.',
)
print(agent_en.run_sync('What is a Mojito?').output)prompt の側を「モヒートとは?」のままにしても、instructions で英語を指定すれば 応答も英語に切り替わります。これは LLM が user prompt より system instructions を優先しやすい性質を活用したパターンです。
例 3: 複数行の instructions で構造化
instructions は 複数行 で書けます。役割が複雑な場合は、箇条書きで条件を並べると LLM が拾いやすくなります。
agent_struct = Agent(
'google-gla:gemini-3-flash-preview',
instructions=(
'あなたは新人バーテンダー向けの教育担当者です。\n'
'以下のフォーマットで答えてください:\n'
'1. 起源 (1 行)\n'
'2. 主な材料 (箇条書き)\n'
'3. 作るときの注意点 (1〜2 行)\n'
'専門用語は最小限にしてください。'
),
)
print(agent_struct.run_sync('モヒートを教えて').output)設計のコツ
instructions を書くときに踏まえると効くポイント:
| コツ | 例 |
|---|---|
| 役割は具体的に | "ヘルプデスク" よりも "新人エンジニア向けの Python ヘルプデスク" |
| 出力形式を明示 | "Markdown で / 箇条書きで / 3 行で / JSON で" |
| 言語を固定 | "日本語で" や "Answer in English only" を入れないと、prompt の言語に引きずられる |
| NG を併記 | "コードブロックに ```python を必ず付ける / 個人情報は伏字にする" |
| 長すぎない | 数百文字までが扱いやすい。複雑なら Ch3 で扱う Function Tools へ責務を移す |
まとめ
- Static Instructions =
Agent(..., instructions='固定文字列')。役割・言語・形式・制約を 1 度に固定できる - system message として LLM に渡るので、user prompt より優先されやすい
- 複数行 / 箇条書きで条件を並べると、LLM が指示を拾いやすくなる
- 単発の役割固定には
system_promptではなくinstructionsを選ぶ (履歴に残らないため)
次レッスンでは、Dynamic Instructions — 関数を使って instructions をランタイムに組み立てるパターン (例: 現在時刻やユーザーIDで instructions を差し替える) を扱います。
Colab で実際に動かす
本レッスンの内容を Google Colab 上で実行できるノートブックを用意しています。下のボタンから自分のColab環境に開けます (要 Google アカウント / GOOGLE_API_KEY)。
notebooks/ch01/01-static-instructions.ipynb