LESSON 30分

ストーリー

田中VPoE
「AIの出力をアプリケーションに組み込む場合、自由形式のテキストでは困るよね。」
あなた
「確かに。JSON形式で返してくれないとパースできません。」
田中VPoE
「まさにそこだ。出力フォーマットの制御は、AIをシステムに統合する上で最も実践的なスキルの一つだよ。」
あなた
「JSONだけでなく、CSV やMarkdownも制御できるんですか?」
田中VPoE
「もちろん。さらにパーサーとの連携まで考えると、プロンプト設計の幅がぐっと広がる。」

出力フォーマットの種類

JSON出力

最もプログラムとの連携に適したフォーマットだ。

以下のレビューテキストを分析し、JSON形式で出力してください。

レビュー: 「配送は早かったが商品に傷があった」

出力形式:
{
  "sentiment": "mixed",
  "aspects": [
    {"topic": "配送", "sentiment": "positive", "score": 0.8},
    {"topic": "商品品質", "sentiment": "negative", "score": 0.3}
  ],
  "summary": "1行の要約"
}

CSV出力

表形式データの生成やスプレッドシート連携に便利だ。

以下の商品リストをCSV形式で出力してください。
ヘッダー行を含めてください。

商品: ノートPC(15万円、在庫30)、マウス(3千円、在庫200)、キーボード(1万円、在庫80)

出力形式:
product_name,price,stock

Markdown出力

ドキュメント生成や表示用途に適している。

以下の技術スタックについてMarkdown形式で比較表を作成してください。

比較対象: React, Vue, Svelte
比較観点: 学習コスト、パフォーマンス、エコシステム、採用企業数

出力形式: Markdownの表(|区切り)

構造化出力のテクニック

テクニック1: スキーマを明示する

以下のJSON Schemaに準拠した出力を生成してください。

{
  "type": "object",
  "properties": {
    "title": {"type": "string", "maxLength": 100},
    "tags": {"type": "array", "items": {"type": "string"}, "maxItems": 5},
    "priority": {"type": "string", "enum": ["HIGH", "MEDIUM", "LOW"]},
    "description": {"type": "string"}
  },
  "required": ["title", "tags", "priority"]
}

テクニック2: 区切り文字を指定する

回答を以下の区切り文字で構造化してください。

===ANALYSIS_START===
(分析内容をここに記述)
===ANALYSIS_END===

===RECOMMENDATION_START===
(推奨事項をここに記述)
===RECOMMENDATION_END===

テクニック3: 出力の制約を加える

以下の制約に従って出力してください:
- JSONのみを出力(説明文や前置きは不要)
- 文字列値はダブルクォートで囲む
- 数値はクォートなし
- null値は使用しない(空文字列で代替)
- 配列は最大10要素

パーサーとの連携

AIの出力をプログラムで処理する際の実践的なパターンを紹介する。

TypeScriptでのJSON出力パース

// プロンプトで指定した型定義
interface ReviewAnalysis {
  sentiment: "positive" | "negative" | "mixed" | "neutral";
  confidence: number;
  topics: string[];
}

// AIからの出力をパース
function parseAIResponse(response: string): ReviewAnalysis {
  // JSON部分を抽出(余計なテキストが含まれる場合の対策)
  const jsonMatch = response.match(/\{[\s\S]*\}/);
  if (!jsonMatch) {
    throw new Error("JSON not found in response");
  }

  const parsed = JSON.parse(jsonMatch[0]);

  // バリデーション
  if (!["positive", "negative", "mixed", "neutral"].includes(parsed.sentiment)) {
    throw new Error(`Invalid sentiment: ${parsed.sentiment}`);
  }

  return parsed as ReviewAnalysis;
}

出力の堅牢性を高めるプロンプト

重要: 出力はJSON形式のみにしてください。
コードブロック(```json)で囲まないでください。
説明文や前置きは一切不要です。
JSONオブジェクトの { から始めてください。

よくある問題と対処法

問題原因対処法
JSONに余計なテキストが付く指示が不十分「JSONのみ出力」を明記
フィールドが欠落するrequired指定がないJSON Schemaでrequiredを明示
型が一致しない型制約が曖昧具体例で型を示す
配列が空になるデータ不足最低要素数を指定
ネストが深すぎる構造指定が曖昧フラットな構造を指示

実践例: NetShop社の商品分析

以下の商品レビュー群を分析し、指定のJSON形式で出力してください。

レビュー:
1. 「軽くて持ち運びやすい。バッテリーも長持ち」
2. 「価格は高いが、品質は確か」
3. 「初期不良で交換してもらった。対応は迅速だった」

出力形式:
{
  "product_summary": {
    "overall_sentiment": "positive/negative/mixed",
    "average_score": 0.0-1.0,
    "review_count": 数値
  },
  "aspects": [
    {
      "name": "カテゴリ名",
      "sentiment": "positive/negative/mixed",
      "mentions": 数値,
      "representative_comment": "代表的なコメント"
    }
  ],
  "action_items": ["改善提案1", "改善提案2"]
}

まとめ

項目ポイント
JSON出力スキーマ明示+制約指定で精度向上
CSV出力ヘッダー行の指定とデリミタの明示が重要
Markdown出力表・見出し・リスト形式を具体的に指示
パーサー連携余計なテキスト除去とバリデーションを実装

チェックリスト

  • JSON/CSV/Markdownの出力指定ができる
  • JSON Schemaを使った構造化出力を実践できる
  • 区切り文字による出力構造化を理解した
  • パーサー連携時の堅牢性対策を把握した

次のステップへ

次は演習として、これまで学んだ基本テクニックを組み合わせてプロンプトを設計してみよう。


推定読了時間: 30分