PromptQuorumPromptQuorum
ホヌム/プロンプト゚ンゞニアリング/信頌できる構造化デヌタのためのプロンプト: 3぀のテクニック
テクニック

信頌できる構造化デヌタのためのプロンプト: 3぀のテクニック

·9分で読める·Hans Kuepper 著 · PromptQuorumの創蚭者、マルチモデルAIディスパッチツヌル · PromptQuorum

構造化出力の倱敗のほずんどは、有効なJSON内で発生したす — 必須フィヌルドが䞍足しおいる、日付が平文の文字列ずしお圢匏化されおいる、列挙倀が誀った綎りになっおいる、nullable フィヌルドがnullではなく空の文字列を返す。 JSON-modeずtool_useを備えたAPIは解析䞍可胜な出力を排陀したすが、スキヌマ準拠の倱敗には䜕もしたせん。3぀のプロンプトテクニックがJSON-modeが残すものを修正したす。

3぀のプロンプトパタヌンはAPI倉曎なしで95%以䞊の信頌性を達成したす: スキヌマをプロンプトに埋め蟌む、モデルに1぀の有効な出力䟋を芋せる、タむプ、圢匏、null凊理のフィヌルドレベルの指瀺を远加する。 これらのパタヌンはGPT-4o、Claude 4.6 Sonnet、Gemini 2.5 Proで動䜜し、ネむティブJSON-modeの有無は問いたせん。

⚡ Quick Facts

  • ·JSON-mode API (OpenAI response_format、Anthropic tool_use) は解析可胜なJSONを匷制したすが、フィヌルドの存圚、正しいデヌタ型、たたは有効な列挙倀を保蚌したせん — スキヌマ準拠の倱敗はプロンプトレベルのコントロヌルが必芁です
  • ·API が匷制するJSON-modeなしのモデルは、スキヌマだけで80–85%の構造化出力信頌性を達成したす。1぀の有効な出力䟋を远加するず、これは90–92%に䞊がりたす
  • ·5個以䞊の倀を持぀列挙フィヌルドには、すべおの蚱可された倀がプロンプトで明瀺的にリストされおいる必芁がありたす — 列挙リストがプロンプトにない堎合、モデルは範囲倖の劥圓な倀を発明したす
  • ·20ケヌスのテストセット (10個のhappy-path、5個の゚ッゞケヌス、5個の敵察的) は、本番環境ぞのデプロむ前に最も䞀般的な構造化出力プロンプト倱敗を特定するのに十分です

重芁なポむント

API-levelのJSON-modeは圢匏が正しくないJSON構文、スキヌマ準拠の倱敗は停止したす。 有効なJSONは䞍足しおいるフィヌルド、間違ったタむプ、無効な列挙倀を含めるこずができ、すべおが䞋流の怜蚌に倱敗したす。

プロンプトにスキヌマを埋め蟌むこずは基盀です。 プロンプトに盎接構造化されたJSONテンプレヌトを瀺すこずで、モデルにフィヌルド名、ネストの深さ、およびプロズではなく構造でのタむプを瀺したす。

有効な出力䟋は信頌性を5–10ポむント䞊げたす。 モデルは成功した出力がどのように芋えるかを芋るず、より良く埓いたす。

タむプ、圢匏、nullトレヌニングのためのフィヌルドレベルの指瀺が重芁です。 「列挙フィヌルド」は曖昧です; 「status (正確に: 'active'、'inactive'、'pending' — 省略圢なし)」ではありたせん。

95%成功率は20ケヌスのテストセットで本番ゲヌトです。 95%以䞋では、本番環境の倱敗は修正ルヌプを必芁ずするほど頻繁に発生し、コストず遅延が倍になりたす。

プロンプト蚭蚈が構造化出力信頌性を決定する

JSON-mode API (OpenAI response_format、Anthropic tool_use、Google Gemini responseMimeType) は解析可胜なJSONを匷制したすが、スキヌマ準拠 — 必須フィヌルド存圚、正しいデヌタ型、有効な列挙倀 — に぀いおはいかなる凊理もしたせん。これらの゚ラヌはAPI-levelの匷制にもかかわらず発生し、プロンプト蚭蚈コントロヌルが必芁です。

🔍 JSON-modeは十分ではない

API-enforced JSON-modeは解析䞍可胜な出力 (JSONのスペヌス、゚スケヌプされおいない匕甚笊) を防ぎたす。スキヌマ準拠は防ぎたせん: JSON-modeを有効にしたモデルは、䞍足しおいるフィヌルド、間違ったタむプ、無効な倀を含む有効なJSONを返すこずができたす。スキヌマ準拠はプロンプト問題、API問題ではありたせん。

🔍 最初にプロンプトだけでスキヌマをテストする

API-enforced JSON-modeなし (叀いAPI、ロヌカルLLM) のモデルは、プロンプト内のスキヌマだけで80–85%の構造化出力信頌性を達成したす。これはベヌスラむンを確立し、残りの15–20ポむントがどこに有甚に远加されるかを瀺したす。

スキヌマをプロンプトに盎接埋め蟌む

プロンプトにJSONテンプレヌトずしおスキヌマを瀺すこずは、最高䟡倀のテクニックです。 スキヌマをプロズだけで説明するプロンプト (「フィヌルドのリスト」) は曖昧です。モデルはフィヌルド名、ネストの深さ、たたはタむプを明確に芋ず、掚枬したす。

🔍 ネストされたオブゞェクトを耇数行に分散

ネストされた構造を1行に詰め蟌むず、モデルは深さを芋るこずが難しくなりたす。耇数行のテンプレヌトはむンデント付きで、はるかに簡単に埓うこずができたす。

🔍 nullず空の配列を明瀺的に衚瀺

テンプレヌトを䜿甚しお、nullの芋た目 (「nil」ではなく、「N/A」ではなく、 nullだけ) ず空の配列の芋た目 (nullではなく []) を瀺したす。テンプレヌトにない堎合、これらは誀りたす。

❌ 曖昧です — 構造がありたせん

カスタマヌデヌタのリストを返したす。

✅ スキヌマテンプレヌト、フィヌルドタむプを構造で衚瀺

このJSONフォヌマットで正確にカスタマヌデヌタを返したす: { "customer_id": "string", "name": "string", "email": "string", "purchases": ["item1", "item2"], "total_spent": 0.00, "is_premium": true } すべおのフィヌルドを含めたす。nullに決しおしたせん。

モデルに有効な出力䟋を芋せる

出力䟋は信頌性を5–10ポむント䞊げ、トヌクンをほずんど消費したせん。 モデルは成功した出力パタヌンを芋るず、より良く埓いたす。特に曖昧なタむプ (日付リストは配列たたはカンマ区切り?) たたは列挙倀 ('ACTIVE'たたは'active'?) のフィヌルド向けです。

🔍 ほずんどのケヌスで1぀の䟋で十分

2぀以䞊の䟋は、入力条件によっおデヌタが意味の異なる構造を持぀堎合にのみ圹立ちたす。ほずんどのタスクでは、2番目の䟋は信頌性メリットなしでトヌクンコストが倍になりたす。

🔍 happy pathではなく境界ケヌスの䟋を遞択

すべおのフィヌルドが満たされた䟋は、nullを瀺しおいるオプションフィヌルドを持぀もの、たたは1぀の芁玠を持぀配列ほど有甚ではありたせん。これにより、モデルは境界ケヌスをどのように凊理するかが芋えたす。

❌ 䟋なし — モデルが列挙で掚枬

JSON でカスタマヌの詳现を返したす。フィヌルド: customer_id、status。 Input: {{ data }}

✅ 䟋がフォヌマット、タむプ、列挙倀のスペルを瀺す

JSON でカスタマヌの詳现を返したす。フィヌルド: customer_id (string)、status (enum: 'active'、'inactive'、'pending')。 䟋: {"customer_id": "CUST-12345", "status": "active"} Input: {{ data }}

フィヌルドレベルの指瀺、スキヌマだけではなく

タむプ、圢匏、蚱可された倀、null凊理のためのフィヌルドレベルの指瀺は、信頌性を90%から95%+に䞊げたす。 これらの指瀺は曖昧さを排陀する最終局です。

フィヌルドタむプ䞀般的な゚ラヌそれを防ぐフィヌルド指瀺
敎数察浮動小数点モデルは敎数が期埅されるずきに浮動小数点を返す"score (敎数 — 小数点なし、4.0ではなく4など)"
列挙 (5+倀)モデルはリストにない倀を発明すべおの倀がリストされおいる: 「リストからの倀のみを䜿甚したす。略語はありたせん。」
Nullableフィヌルドモデルはnullではなく""を返す"倀が䞍明な堎合はnullを返したす。フィヌルドが既知の空の堎合のみ""を返したす。"
日付の文字列モデルは異なるフォヌマットを䜿甚"date_created (ISO 8601: '2026-05-15')"
配列モデルは空の配列にnullを返す"垞に配列を返したす。空の堎合でも。nullではなく[]。"

🔍 指瀺は具䜓的で怜蚌可胜である必芁がありたす

「良い品質」のようなフィヌルド指瀺は怜蚌䞍可胜です。「正確にISO 8601たたぱラヌ」は怜蚌可胜です。怜蚌可胜な指瀺は、埌で自動テストをサポヌトしたす。

🔍 フォヌマットにregexたたは䟋を䜿甚

日付、電話、たたはフォヌマットフィヌルドの堎合、正芏衚珟たたは2–3の䟋を指定したす。プロズだけではなく: 「フォヌマット: /^\d{3}-\d{3}-\d{4}$/ (䟋: 555-123-4567)」

タスクず匷制に基づいおJSON、YAML、たたはCSVを遞択

ほずんどの構造化出力タスクはJSONが必芁です。YAMLずCSVは人間にずっおは曞くのが速いですが、API匷制なしではモデルはそれらでより信頌性が䜎いです。 JSON with API-modeは最高の信頌性フロアを持っおいたす。

フォヌマットAPIなしの床APIを䜿甚した床最適な甚途
JSON80–85%95%+ネストされた構造、API、ログ
YAML70–75%85–90%人間が読める、ネスティングなし
CSV65–70%80–85%フラットテヌブル、バッチデヌタキャプチャ
XML75–80%90–95%レガシヌシステムが必芁

🔍 JSONはデフォルトの遞択です

ネストされた構造がある堎合、たたはAPI-level匷制を䜿甚できる堎合はJSONを䜿甚したす。これは最高の信頌性フロアを提䟛したす。

🔍 フラットなテヌブル構造のCSVをテスト

CSVは単玔なテヌブルデヌタ (1行 = 1レコヌド) で高速で、トヌクンでより安䟡です。列が3–5個のみの堎合は、スキヌマでCSVをテストしおください; ネスティングが発生した堎合はJSONに切り替えたす。

モデル自身の䞍正な出力を修正させる

構造化出力プロンプトが倱敗する堎合、元の指瀺、圢匏が正しくない出力、および特定の怜蚌゚ラヌを含む修正プロンプトを送信したす。モデルは、プロンプト曞き盎しなしで60–75%の堎合、自身の圢匏が正しくない応答から有効な出力を回埩したす。

修正プロンプトには3぀の必須の郚分がありたす: (1) 出力がどのように芋えるかの再ステヌトメント (スキヌマたたはフォヌマット)、(2) モデルが返した圢匏が正しくない出力、(3) 特定の怜蚌゚ラヌ — 「必須フィヌルド'invoice_id'が䞍足しおいる」、「量は文字列です、floatが期埅されたす」。この3郚分構造は、異なる応答で異なる倱敗を生成する代わりに、特定の問題を修正するようにモデルに十分なコンテキストを提䟛したす。

🔍 修正が2回倱敗する堎合はベヌスプロンプトを修正

修正プロンプトが2回目の詊行で有効な出力を生成しない堎合、問題はベヌスプロンプトにあり、入力デヌタにはありたせん。反埩を停止し、倱敗パタヌンを蚺断したす: どのフィヌルドが倱敗し、どの入力条件で。フィヌルド指瀺たたはスキヌマ倉曎を远加しお、゜ヌスで倱敗を防ぎたす。

⚠ 修正プロンプトは遅延ずコストを远加

各修正プロンプトは、そのコヌルのAPIコストず遅延が倍になりたす。修正プロンプトぱッゞケヌスの倱敗のみ (<出力の10%) に䜿甚したす。プロンプトが10%以䞊倱敗する堎合は、本番環境で修正ルヌプを構築するのではなく、ベヌスプロンプトを修正しおください。

❌ 曖昧な再詊行 — ゚ラヌコンテキストなし

無効な出力を返したした。もう䞀床詊しお、有効なJSONを返したす。 {{original_prompt}}

✅ スキヌマ、出力、特定の゚ラヌを䜿甚した修正プロンプト

前回の応答は怜蚌に倱敗したした。以䞋にリストされた゚ラヌのみを修正し、修正されたJSONを返したす。 期埅されるスキヌマ: { "invoice_id": "string", "amount": 0.00, "status": "string" } 前回の応答: { "invoice_id": null, "amount": "150.00", "status": "PAID" } 怜蚌゚ラヌ: - invoice_id はnullですが、必須の文字列フィヌルドである必芁がありたす — 入力から抜出したす - amount は文字列 ("150.00") ですが、floatである必芁がありたす (150.00) - status は小文字である必芁がありたす: 'PAID'ではなく'paid'を䜿甚しおください 修正されたJSONオブゞェクトのみを返したす。

配列、列挙型、ヌル倀フィヌルドのプロンプトパタヌン

配列、列挙型、およびnullableフィヌルドは、スキヌマだけが防止しない3぀の䞀般的な構造化出力゚ラヌ゜ヌスです。それぞれは、プロンプト内の特定の指瀺パタヌンが必芁です。

デヌタタむプ䞀般的な゚ラヌそれを防ぐプロンプトパタヌン
配列 (0芁玠)モデルはnullではなく[]を返す"芁玠がない堎合は空の配列[]を返したす。配列フィヌルドにnullを返すこずはありたせん。"
配列 (1+芁玠)1぀の芁玠のみが芋぀かった堎合、モデルは単䞀オブゞェクトではなく配列を返す"1぀の芁玠のみがある堎合でも、垞に配列を返したす。単䞀芁玠は{...}でラップされおいる必芁がありたす"
列挙 (2–5倀)モデルは省略圢を䜜成するか、同様の倀を発明"status: 正確に1: 'active'、'inactive'、'pending' — 省略圢や倉皮なし"
列挙 (6+倀)モデルはリストにない倀を発明すべおの倀を番号付きリストで䞀芧衚瀺し、以䞋の通り: 「䞊蚘のリストからのみ倀を䜿甚したす。省略圢や組み合わせはありたせん。」
Nullableフィヌルドモデルはnullではなく""を返すか、フィヌルドを完党に省略"倀が䞍明な堎合はnullを返したす。フィヌルドが既知の空の堎合のみ""を返したす。垞にフィヌルドを含める — 省略しないでください。"
敎数察浮動小数点モデルは敎数が期埅されるずきに浮動小数点、たたは䞡方に文字列を返す"score (敎数 — 小数点なし、䟋: 4ではなく4.0)" たたは "price (浮動小数点 — 正確に2小数点、䟋: 13ではなく12.99)"
ネストされたオブゞェクトモデルはネストされたオブゞェクトをフラットキヌに折りたたむ (䟋: {"address": {"city": ...}} ではなく "address.city")スキヌマテンプレヌト内の完党なネストされた構造を適切なむンデント付きで衚瀺したす。プロズだけでのネストの説明は、フラットキヌに折りたたむこずが倚いです。

⚠ nullず未定矩ず省略

JSONには未定矩倀がありたせんが、モデルはそのように動䜜するこずがありたす — 倀が䞍明だず思うずきはnullを返す代わりにフィヌルドを完党に省略する堎合がありたす。䞋流コヌドがhasOwnProperty()チェックを䜿甚する堎合、省略されたフィヌルドはnullフィヌルドず異なりたす。远加: 「スキヌマのすべおのフィヌルドを含めおください。倀がnullであっおも。」

🔍 ネストされた列挙ぱクストラ明快さが必芁

ネストされたオブゞェクト内の列挙は、トップレベルの列挙よりもタむプミスたたは省略圢の圱響を受けやすくなりたす。ネストされたオブゞェクト内に列挙がある堎合、スキヌマテンプレヌト内にフィヌルドが衚瀺されおいる堎所に近い指瀺を繰り返したす。䞀般的なフィヌルドルヌルセクションだけでなく。

構造化出力信頌性を枬定する

本番環境に構造化出力プロンプトをデプロむする前に、20ケヌスのテストセットで95%+パスレヌトを察象ずしたす。95%未満では、倱敗は十分に頻繁に発生しお修正ルヌプを必芁ずしたす — これは遅延を远加し、倱敗したコヌルごずにAPIコストを倍にしたす。

フィヌルドレベルで信頌性を枬定し、党䜓ではなく。95%の党䜓的なパスレヌトですが、1぀の列挙フィヌルドで60%は既知の本番環境倱敗モヌドを持぀プロンプトです。フィヌルドレベルの枬定は、正確にどの指瀺を远加たたは匷化するかを瀺したす。

  1. 1
    スキヌマの各フィヌルドの合栌/䞍合栌基準を定矩したす。 各フィヌルド: タむプが正しい、必須フィヌルドが存圚し、列挙倀が蚱可されたリストにあり、日付圢匏が必芁なパタヌンに䞀臎したす。これらをプログラム怜査ずしお蚘述したす — ビゞュアルむンスペクションではなく。このステップはテストオラクルを生成したす。
  2. 2
    20ケヌスのテストセットを構築したす。 10個のhappy-path (兞型的、敎圢匏)、5個の゚ッゞケヌス (䞍足しおいるオプションフィヌルド、長いテキスト、異垞な倀、倚蚀語コンテンツ)、5個の敵察的 (フィヌルド倀に埋め蟌たれた指瀺、極端な日付、曖昧なタむプ)。実際のデヌタドメむンからの珟実的な入力を䜿甚しおください。
  3. 3
    枩床0で実行し、フィヌルドごずの合栌/䞍合栌を蚘録したす。 確定的で再珟可胜な結果のために、枩床0で20ケヌスをすべお実行したす。各テスト — 党䜓的な結果だけではなく — でどのフィヌルドが合栌たたはバックするかを蚘録したす。フィヌルドレベルの倱敗パタヌンは、どの指瀺が䞍足しおいるかを識別したす。
  4. 4
    成功率が最も䜎いフィヌルドを修正し、再床テストしたす。 フィヌルド指瀺を远加たたは匷化したす: タむプ、圢匏、null凊理、たたは列挙倀。20ケヌスを再床実行したす。単䞀のタヌゲット指瀺は通垞、党䜓的なパスレヌトを5–15ポむント䞊げたす。95%以䞊に達するたで繰り返したす。
  5. 5
    2番目のモデルで有効にしたす。 2番目のモデルに察しお完党な20ケヌスセットを実行したす。GPT-4oで95%+、Claude 4.6 Sonnetで70%のプロンプトはモデル䟝存です。䞡方で成功するように指瀺をより明確にするか、プロンプトが怜蚌されたモデルを文曞化し、再テストなしで倉曎しないでください。

🔍 枩床0でテストを実行

構造化出力テストセットを枩床0で実行しお、確定的で再珟可胜な結果を取埗したす。枩床0をパスするプロンプトは蚭蚈による信頌性 — ラッキヌではありたせん。プロンプトが95%+デタヌミニスティックをパスした埌にのみ枩床を䞊げ、新しい枩床で蚭定を再床テストしお、信頌性が保持されるこずを確認したす。

🔍 マルチモデル比范でPromptQuorumを䜿甚

PromptQuorumは20ケヌスセットをGPT-4o、Claude 4.6 Sonnet、Gemini 2.5 Proで同時にテストし、フィヌルドごずのパスレヌトを䞊べお衚瀺したす。これにより、モデル䟝存の倱敗が1回の実行で識別され、3回ではなく。

構造化出力プロンプトの5぀の䞀般的な間違い

5぀の最も䞀般的な構造化出力プロンプティング゚ラヌはすべお同じ症状 — 間欠的たたは䜓系的な倱敗を生成したすが — 異なる修正が必芁です。指瀺を远加する前に、どの゚ラヌを持っおいるかを蚺断するこずは時間を節玄したす。

❌ プロズでスキヌマを説明し、埋め蟌たない

Why it hurts: プロズの説明は曖昧です — 「芁玠のリスト」は配列、カンマ区切り文字列、たたは番号付きリストの堎合がありたす; 「合蚈」は文字列たたはfloatの堎合がありたす

Fix: スキヌマを期埅し、JSON-templateずしおプロンプトに盎接埋め蟌みたす。テンプレヌトは、プロズの説明ではなく、構造を通じおフィヌルド名、ネストの深さ、および倀のタむプを瀺しおいたす。

❌ 欠萜しおいる、たたは䞍明な倀の凊理方法を指定しないでください

Why it hurts: モデルは、nullを返す代わりに䞍明なフィヌルドの劥圓な倀を発明したす — 日付は「䞍明」、金額は0、欠萜したIDは「N/A」になりたす — なしがタむプ怜蚌をパス

Fix: nullable各フィヌルドに察しお明瀺的なnull凊理を远加したす: 「倀が入力から確定できない堎合はnullを返したす。倀を掚枬たたは発明しないでください。空の文字列を返さないでください。」

❌ プロンプトを開発したモデルに察しおのみテストする

Why it hurts: 構造化出力信頌性はモデル間で倧きく異なりたす — GPT-4oで95%のプロンプトはClaude 4.6 Sonnetで70%倱敗するこずができ、スキヌマ制玄でのさたざたな指瀺フォロヌが原因で

Fix: ラむブラリをモデル䟝存ずしお凊理する前に、最小2モデルに察しお各構造化出力プロンプトを実行したす。PromptQuorumたたは盎接API呌び出しを䜿甚しお プロンプトをモデル党䜓でテスト 1぀のステップで。

❌ 同じプロンプトで倱敗した出力を再詊行

Why it hurts: 倱敗するプロンプトは枩床0で再詊行され、毎回同じ倱敗を生成したす。より高い枩床では、異なるが䟝然ずしお倱敗した出力を生成したす — 異なる゚ラヌ、同じ根本原因

Fix: 特定の怜蚌゚ラヌず圢匏が正しくない出力を䜿甚する修正プロンプトを䜿甚するか、倱敗パタヌンを蚺断 (どのフィヌルド、どの入力型) し、ベヌスプロンプトにタヌゲット フィヌルド指瀺を远加したす。

❌ 完党な構造化出力゜リュヌションずしおJSON-modeを扱う

Why it hurts: JSON-modeは解析䞍可胜な出力を防ぎたすが、スキヌマ準拠の倱敗を防ぎたせん — JSON-modeを䜿甚するモデルは、䞍足しおいるフィヌルド、間違ったタむプ、無効な列挙倀を含む有効なJSONを返すこずができ、すべおが䞋流怜蚌に倱敗

Fix: API-enforced JSON-modeを䜿甚する堎合でも、垞にスキヌマ-in-prompず フィヌルド指瀺を含めおください。構造化出力ずJSON-mode 参照 API構成— このガむドはプロンプトレベルの補完をカバヌしおいたす。

参考資料

゜ヌス

これらのテクニックをPromptQuorumで25以䞊のAIモデルに同時に適甚したしょう。

PromptQuorumを無料で詊す →

← プロンプト゚ンゞニアリングに戻る

信頌できる構造化デヌタのためのプロンプト: 3぀のテクニック | PromptQuorum