Structuring with XML Tags
XMLタグで構造化する
約 10 分
·
クイズ 4 問
·
演習 1 問
重要キーワード (3 語)
XML Tags
(XMLタグ)
— Claude が訓練時に強く反応するよう調整されたタグ形式
Structured Output
(構造化出力)
— JSON や XML などの機械可読な形式で結果を返させること
Delimiter
(区切り)
— プロンプト内のセクションを明示する記号や記法
XML タグでプロンプトを構造化する
Claude は XML 風タグ を使った構造化プロンプトに非常に強く反応するよう訓練されています。 JSON でも YAML でもなく、XML 風タグが最適 です。
なぜ XML?
- 区切りが視覚的に明確 (Claude にもユーザーにも)。
- 入れ子構造が自然に書ける。
- 出力フォーマットを指定しやすい。
- 出力からの抽出が正規表現や
lxmlで容易。
よく使うタグ
| タグ | 用途 |
|---|---|
<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")
複雑な入れ子なら lxml や BeautifulSoup を使うのも手です。
失敗パターン
❌ JSON だけで指定:
{
"instruction": "翻訳してください",
"input": "Hello"
}
→ Claude は理解できるが、XML より精度が落ちる傾向。
❌ Markdown だけで指定:
## 指示
翻訳してください
## 入力
Hello
→ Markdown も認識するが、入れ子データを区切るには弱い。
✅ XML タグでセクションを区切る のがベスト。
注意点
- タグ名は自由に決められるが、意味のある名前 を使うと精度が上がる。
- HTML エスケープは必須ではないが、
<>を含むデータは CDATA 風に囲むと安全。 - タグの open/close を必ず対応させる。Claude は閉じ忘れに気付きにくい。
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>