← レッスンに戻る
第2章 · プロンプトエンジニアリング

XMLタグで構造化する

Structuring with XML Tags · 約 10 分

重要キーワード

English日本語説明
XML Tags XMLタグ Claude が訓練時に強く反応するよう調整されたタグ形式
Structured Output 構造化出力 JSON や XML などの機械可読な形式で結果を返させること
Delimiter 区切り プロンプト内のセクションを明示する記号や記法

XML タグでプロンプトを構造化する

Claude は XML 風タグ を使った構造化プロンプトに非常に強く反応するよう訓練されています。 JSON でも YAML でもなく、XML 風タグが最適 です。

なぜ XML?

よく使うタグ

タグ 用途
<instructions> 指示
<context> 背景・参考資料
<example> Few-shot 例
<input> 処理対象データ
<output_format> 期待する出力形式
<thinking> CoT の思考過程
<answer> 最終回答
<rules> 守るべきルール

<instructions>
次のメールを丁寧な日本語に書き直してください。
</instructions>

<example>
<input>会議遅れる</input>
<output>会議に遅れる旨をご連絡いたします。誠に申し訳ございません。</output>
</example>

<input>
{ここに対象メール}
</input>

<output_format>
<rewritten>...</rewritten>
</output_format>

出力からタグだけ抜き出す

Python では正規表現で簡単に抽出できます。

import re

def extract(text: str, tag: str) -> str | None:
    m = re.search(rf"<{tag}>(.*?)</{tag}>", text, re.DOTALL)
    return m.group(1).strip() if m else None

answer = extract(response, "answer")

複雑な入れ子なら lxmlBeautifulSoup を使うのも手です。

失敗パターン

❌ JSON だけで指定:

{
  "instruction": "翻訳してください",
  "input": "Hello"
}

→ Claude は理解できるが、XML より精度が落ちる傾向。

❌ Markdown だけで指定:

## 指示
翻訳してください
## 入力
Hello

→ Markdown も認識するが、入れ子データを区切るには弱い。

XML タグでセクションを区切る のがベスト。

注意点

XML タグでカスタマーレビュー分析

実際にやってみましょう。

▶ レビュー分類タスク
<task> 次のレビューを sentiment (positive/negative/neutral) と topic (price/quality/support/other) に分類してください。 </task> <output_format> <sentiment>...</sentiment> <topic>...</topic> <reason>20 字で理由</reason> </output_format> <review> 値段の割に音質はそこそこだったけど、サポートの返事が遅すぎてイライラした。もう買わない。 </review>

演習問題

演習 1: メール分類器を XML プロンプトで

受信メールを 「営業」「カスタマーサポート」「内部連絡」「スパム」 に分類するプロンプトを XML タグで設計してください。

出力は次のフォーマットに固定:

<category>...</category>
<confidence>0.0-1.0</confidence>
<reason>30 字</reason>

テストメールを 3 件用意して、3 件全部正しく分類できるかを確認しましょう。

スタータープロンプト:
<task>
次のメールを「営業」「カスタマーサポート」「内部連絡」「スパム」のいずれかに分類してください。
</task>

<output_format>
<category>...</category>
<confidence>0.0-1.0</confidence>
<reason>30 字以内の理由</reason>
</output_format>

<email>
From: tanaka@example.co.jp
件名: 来週のミーティング
本文: お疲れ様です。来週のチーム MTG ですが、火曜 15:00 でいかがでしょうか?
</email>
ヒントを見る

Few-shot 例を 2-3 件追加するとさらに安定します。境界ケース (営業 vs スパム など) を意識した例を入れましょう。

理解度チェック

  1. Claude がよく反応するプロンプト構造化形式は?
    1. JSON
    2. YAML
    3. XML 風タグ
    4. TOML
  2. 次のうち XML タグを使う利点でないのは?
    1. 視覚的な区切り
    2. 入れ子構造の表現
    3. GPU メモリ削減
    4. 出力フォーマット指定
  3. 出力から `<answer>...</answer>` を抜き出す手段として適切なのは?
    1. 正規表現や XML パーサ
    2. `int()` キャスト
    3. `json.loads`
    4. `open()` で読む
  4. XML タグの命名で精度に影響しやすい要素は?
    1. タグの色
    2. タグ名の意味性
    3. タグの長さ
    4. 全部大文字かどうか
解答と解説を見る
  1. C — Anthropic は XML タグでの構造化を強く推奨しています。
  2. C — GPU メモリ削減はタグの効果ではありません。
  3. A — 正規表現や lxml などで簡単に抽出できます。
  4. B — 意味のある (semantic) タグ名にすると Claude が役割を理解しやすくなります。