PydanticAI ビジュアルガイド

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 です。

図を読み込み中…
図1. instructions と prompt の役割分担

概念: なぜ instructions を分けるのか

LLM 呼び出しは大きく 2 つの入力に分かれます。

  • system message = instructions — そのエージェントが 常に守るべき設計図。「君はカクテルの専門家で、日本語で答える」のような不変ルール
  • user message = promptその回ごとの問い。「モヒートとは?」「ジントニックとは?」と毎回変わる

この分離があるおかげで、Agent を 1 度作れば 同じ役割で何度でも違う質問 を投げられます。役割を変えるたびに同じ説明文を毎回 prompt に書く必要がありません。

instructionssystem_prompt の違い (重要)

PydanticAI には似た 2 つの仕組みがあります。

仕組み渡し方振る舞い
instructionsAgent(..., instructions='...')メッセージ履歴に残らない。各 run で常に新鮮
system_promptAgent(..., 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)
図を読み込み中…
図2. Static Instructions 設計の 4 要素

設計のコツ

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)。

Open in Colab

notebooks/ch01/01-static-instructions.ipynb