第3章 / Domain 4 全6項目+導入レッスン / 配点20%(3番目)

プロンプトエンジニアリングと
構造化出力(配点20%)

「言うことを聞かせる」ではなく「本番システムとして信頼できる出力を作る」ためのプロンプト工学。曖昧語の禁止・few-shot・JSONスキーマ強制・検証リトライ・バッチ・多段レビューの6本柱を、「導入レッスン(コードで裏技と型を理解する)」→「タスクステートメント4.1〜4.6」→「演習」→「章末ミニクイズ」の順で、この1ページで学びきる。

この章の流れ(レッスン約60〜90分+演習2〜3時間)

第1章の土台レッスン(tool use の往復・エージェントループ)が前提。ことば図鑑のJSON・JSONスキーマの項も随時参照。

導入レッスン 1構造化出力の裏技 — 実在しないツールを呼ばせる

第1章で学んだ tool use には有名な副産物がある。「実在しないツール」を定義して無理やり呼ばせると、確実にスキーマ通りのJSONが手に入る。この章の全テーマ(構造化出力)の入口になる技なので、まずコードで見る。

# 「抽出結果を記録する」という体のツールを定義し、
# tool_choice で強制的に呼ばせる → 出力は必ずこのスキーマに従う
response = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    tools=[{
        "name": "record_invoice",
        "description": "請求書から抽出した情報を記録する",
        "input_schema": {
            "type": "object",
            "properties": {
                "issuer":  {"type": "string"},
                "total":   {"type": "number"},
                "due_date": {"type": ["string", "null"]},  # ←無いかもしれない欄はnull許容(捏造防止)
            },
            "required": ["issuer", "total"],
        },
    }],
    tool_choice={"type": "tool", "name": "record_invoice"},   # ← 必ずこのツールを呼べ
    messages=[{"role": "user", "content": f"この請求書から情報を抽出して: {document}"}],
)
# response.content の tool_use ブロックの input が、そのまま検証済みJSONになっている

種明かし:record_invoice というツールは実行されない(する必要がない)。欲しいのはClaudeがツールを呼ぼうとして組み立てた引数(input)で、これはツール定義のJSONスキーマ(ことば図鑑参照:記入例つき申込用紙)に必ず従う。「JSONで返して」とプロンプトでお願いする方式だと、返事の前後に「以下が抽出結果です」のような文が混ざったり、JSONが壊れたりする——ツール強制ならそれが起きない。

tool_choice は3段階の強さがある。ここは4.3で試験がそのまま問う:

指定意味使いどころ
{"type": "auto"}ツールを使うかどうかClaudeが判断(テキストで返す可能性が残る通常のエージェント動作
{"type": "any"}どれかのツールを必ず呼ぶ(どれを呼ぶかは選ばせる)文書タイプが不明で、複数の抽出スキーマから選ばせたいとき
{"type": "tool", "name": "…"}指定した特定のツールを必ず呼ぶ走らせたい抽出が決まっているとき(上のコード)

ただし重要な限界がある。これは形式の保証であって中身の保証ではない(合計が合わない等の意味エラーは残る)。この区別が4.3の最頻出論点で、意味の検証は導入レッスン3のリトライループが受け持つ。

導入レッスン 2スキーマ設計の3つの知恵

レッスン1の input_schema をどう設計するかで、抽出の信頼性が大きく変わる。試験ポイントは3つ:

  1. 無いかもしれない欄は nullable"due_date": {"type": ["string", "null"]}。requiredにすると、モデルが「埋めなきゃ」と値を捏造する。「無いものは無い」と言える設計が捏造防止。人間でも「全欄必須の申込用紙」を渡されると、分からない欄に適当な値を書きたくなる——モデルはその圧力にもっと弱い
  2. enumには "other"+詳細文字列の逃げ道"category": {"enum": ["請求", "返品", "other"]}"category_detail": {"type": "string"}。想定外を無理やり既存カテゴリに押し込ませない。曖昧ケース用に "unclear" を足すのも同じ発想
  3. スキーマは構文を保証するが意味は保証しない:形式は完璧でも「明細の合計≠総額」「値が隣の欄に入る」は起きる。→ 意味の検証は次のレッスン3で

補足:日付や金額の表記ゆれ(「2026年8月」vs「2026-08」)をどの形式に正規化するかのルールは、スキーマではなくプロンプト側に書く。スキーマは「型」の担当、プロンプトは「変換ルール」の担当という分業。

導入レッスン 3検証リトライループ — 失敗を「言葉にして」突き返す

スキーマで防げない意味エラーは、抽出のに検証ロジックで捕まえて、失敗内容を添えて再依頼する。この型を retry-with-error-feedback と呼ぶ。

# retry-with-error-feedback の骨格
def extract_with_retry(document, max_retries=2):
    result = extract(document)                    # tool_choice強制で抽出(レッスン1)
    for _ in range(max_retries):
        errors = validate(result)                 # Pydantic等で意味の検証
        if not errors:
            return result
        # ★ 具体的なエラー内容を添えて再依頼するのが肝
        result = extract(
            document,
            feedback=f"前回の抽出はこの検証に失敗した: {errors}。"
                     f"前回の出力: {result}。エラーを修正して再抽出せよ。"
        )
    return flag_for_human_review(result)          # 直らなければ人間レビュー行き
  • リトライが効く失敗:フォーマット不一致・構造ミス/効かない失敗:情報がそもそも文書に無い(何度やっても出ない。nullを許して先へ)。この見分けが4.4の本題
  • 自己検証の仕込み:「stated_total(記載の総額)」と「calculated_total(明細から計算)」を両方抽出させ、不一致なら conflict_detected: true を立てる——うちの data-accuracy ルールの合計突合と同じ技
  • 誤検知の分析用に detected_pattern(何を根拠に判定したか)を出力に含めると、後で「どのパターンが誤検知源か」を集計できる

導入レッスン 4バッチ処理 — 「待てる仕事」は半額で流す

抽出パイプラインを1000件の文書に回すとき、1件ずつ同期APIを叩く必要はない。Message Batches API に一括で預けて、後で結果を回収する。

# Message Batches API の骨格
batch = client.messages.batches.create(
    requests=[
        {
            "custom_id": f"doc-{i}",              # ★ 結果との対応付けに必須
            "params": { "model": "claude-haiku-4-5", "max_tokens": 1024,
                        "messages": [...], "tools": [...], "tool_choice": {...} },
        }
        for i, doc in enumerate(documents)        # 100件まとめて投入
    ]
)
# → 後でポーリングして結果回収。失敗した custom_id だけ修正して再投入

暗記3点セット+判断1つ:

  • 50%引き/最大24時間/レイテンシ保証なし
  • 制約:バッチ内では多ターンのツール往復ができない(途中でツールを実行して結果を返す、が不可)
  • 判断:人が待つ処理(マージ前チェック)は同期API、待てる処理(夜間レポート・週次監査)はバッチ——「両方バッチ」「両方同期」は誤答
  • 大量投入の前にサンプル数件でプロンプトを磨く(一発成功率を上げて再投入コストを抑える)

ここまでの4レッスンが、この章の「型」の全部。ここから先は、その型を試験が問う形(タスクステートメント)で1つずつ整理していく。

Task Statement 4.1明示的基準の設計(曖昧な指示は精度を上げない)

「慎重に」「高信頼のものだけ報告して」は精度を改善しない。効くのは「コメントの主張がコードの実挙動と矛盾する場合のみフラグ」のようなカテゴリー別の具体的基準。誤検知(false positive)が多いと、正しい指摘まで信用されなくなる。

身近な例で考える。新人に書類チェックを頼むとき「慎重に確認して」と言うのと、「金額欄と明細合計の不一致・押印漏れ・日付の未来日、この3つだけを見て」と言うのでは、後者の方が明らかに結果が安定する。前者では新人が「慎重」の意味を自分で解釈するしかなく、人によって(AIなら実行のたびに)基準が揺れる。プロンプトも同じで、「be conservative(慎重に)」「check that comments are accurate(コメントが正確か確認して)」のような曖昧語は、モデルに解釈の自由を丸投げしている。効くのは「claimed behavior contradicts actual code behavior の場合のみ報告」のように、該当/非該当を機械的に判定できる基準の列挙。

なぜここまで基準にこだわるのか。誤検知は「その1件が無駄」では済まず、システム全体の信用を壊すからだ。コードレビューBotが的外れな指摘を10件並べると、開発者は11件目の本物のバグ指摘も読み飛ばすようになる——オオカミ少年と同じ構造で、誤検知の多いカテゴリが、正確なカテゴリの信用まで巻き添えにする。だから対処も「もっと慎重にと指示を足す」ではなく構造的に行う:報告する問題(バグ・セキュリティ)とスキップする問題(軽微なスタイル・そのリポジトリのローカル慣習)をカテゴリで定義し、誤検知の多いカテゴリは一時的に無効化して信頼を回復させ、その間にプロンプトを改善する。

重大度(severity)の判定も同じ発想で安定させる。「criticalは深刻なもの」ではなく、各レベルに具体的なコード例を付けて定義する(例:critical=「認証チェックの欠落。例: このコード」)。基準に実物を添えると分類のブレが減る——これは次の4.2(few-shot)へそのままつながる話でもある。

試験が問うこと
  • 曖昧指示("be conservative", "check that comments are accurate")vs 明示基準("claimed behavior contradicts actual code behavior の場合のみ")の対比
  • 誤検知率が開発者の信頼を壊す構造:誤検知の多いカテゴリが、正確なカテゴリの信用まで巻き添えにする
  • 対処:報告する問題(バグ・セキュリティ)とスキップする問題(軽微なスタイル・ローカル慣習)をカテゴリで定義する。「確信度でフィルタ」に頼らない
  • 誤検知の多いカテゴリは一時的に無効化して信頼を回復し、その間にプロンプトを改善する
  • 重大度(severity)の判定基準は、各レベルに具体的なコード例を付けて定義→分類が安定する
うちの組織の実物(任意読み物)

rules/output-quality.md の抽象表現禁止テーブル(「適切に処理する」→「Try/exceptでログ出力し再raise」)と、feedback-quality-bar「抽象語は具体化しろ」が完全に同じ思想。「AIへの指示も、AIからの出力も、曖昧語を潰す」——組織の品質バーがそのまま答案になる。

ひっかけ(誤答として出るパターン)
  • 「プロンプトに『高信頼のもののみ報告』と足す」→ 一般的注意は具体的カテゴリ基準に勝てない
  • 「確信度スコアでフィルタする」→ LLMの自己申告確信度は較正されていない(第5章 D5でも同じ論点が出る)

Task Statement 4.2few-shot プロンプティング(例で教える)

詳細な指示文でも出力がブレるとき、最も効くのは狙いを定めた実例2〜4個。特に「曖昧なケースでどう判断すべきか」を、なぜその選択をしたかの理由付きで見せると、モデルは新規パターンにも判断を汎化できる。

few-shot(フューショット)とは、指示文に加えて「入力と正解出力の実例」を数個見せる技法。名前は仰々しいが、やっていることは新人教育の「口で説明するより、良い見本を2〜3件見せる」と同じだ。問い合わせメールの分類エージェントを例にすると——「請求に関する問い合わせは billing に分類」と指示文をいくら詳しく書いても、「解約したいが返金はあるか」のような複数カテゴリにまたがる曖昧ケースで分類がブレる。ここに「入力: 『解約したいが返金はあるか』→ 出力: cancellation(理由: 主目的は解約で、返金はその帰結の確認だから)」という例を1個足すと、モデルは「主目的で分類する」という判断軸を読み取り、見たことのない曖昧ケースにも同じ軸を適用できるようになる。例に「理由」を添えるのが汎化の鍵——答えだけの例は「その1問の暗記」にしかならないが、理由付きの例は「判断のしかた」を教える。

数は2〜4個が推奨。ここは直感に反するので注意する——「例は多いほど良い」ではない。例を8個10個と積むと、トークンコストが膨らむ(毎リクエストに全例文が同封される。第1章の「手紙」の比喩を思い出す:手紙が分厚くなる)割に精度はほぼ伸びず、モデルの注意が薄く分散する。効くのは数ではなく狙いで、「モデルが実際に間違えた曖昧ケース」「境界がまぎらわしいケース」をピンポイントで例にする。指示文の詳細化で直らないブレは、指示をさらに盛るのではなく例を足す——4.1(基準の明示)と4.2(例示)は「曖昧さを潰す」同じ目的の2つの道具で、ルールで書ける境界は4.1、ルール化しにくい判断は4.2と使い分ける。

抽出タスクでも同じことが起きる。論文PDFの参考文献抽出で、インライン引用の文書と巻末文献リストの文書で抽出のされ方がブレる場合、形式ごとの正しい抽出例(この形式ならこう取る、存在しない欄はこうnullにする)を見せると、空欄・null処理が安定してハルシネーションが減る。例には出力フォーマットの実物(場所・問題・重大度・修正案が全部埋まった1件)を含めること——形式まで含めて「見本」になる。

試験が問うこと
  • few-shot=一貫したフォーマット・実行可能な出力を得る最有効テクニック(指示文だけで不安定なとき)
  • 曖昧ケースの扱いを例で示す:あいまいな依頼でのツール選択、ブランチレベルのテストカバレッジの穴、など
  • 「許容されるコードパターン」と「本物の問題」を区別する例→誤検知を減らしつつ汎化を保つ
  • 抽出タスクのハルシネーション対策:形式が多様な文書(インライン引用vs巻末文献、本文埋め込みvs構造化表)の正しい抽出例を見せる→空欄・null処理が安定
  • 例には「出力フォーマットの実物」(場所・問題・重大度・修正案)を含める→形式が揃う
うちの組織の実物(任意読み物)

skills/agents のプロンプトに Good/Bad 例を書き込む流儀(editorial系スキルの文例、copywriting系のNG/OK対比)がこれ。empirical-prompt-tuning スキルは「few-shotを足した後に効果を実測する」工程で、試験の一歩先を行く運用。

ひっかけ
  • 「指示文をさらに詳しく書き足す」→ ブレの根治は例示の方が効く(4.1と同じ対比構造)
  • 「例は多いほどよい(5〜8個以上)」→ 2〜4個の狙いを定めた例が推奨。数はトークンコストとのトレード

Task Statement 4.3tool_use と JSONスキーマによる構造化出力の強制

「JSONで返して」とお願いするより、ツール定義のJSONスキーマを入力パラメータとして使い、tool_use で呼ばせるのが最も確実。構文エラー(壊れたJSON)は消える。ただし意味エラー(合計が合わない・値が違う欄に入る)は消えない——この区別が頻出。

仕組みは導入レッスン1でコードごと見た通り。試験では「最も信頼できる構造化出力の方法はどれか」の形で問われ、正解は常に「tool_use+JSONスキーマ」。tool_choice の3段階(auto / any / 特定強制)の使い分けと、スキーマ設計の知恵(導入レッスン2)がセットで出る。

試験が問うこと
  • tool_use+JSONスキーマ=スキーマ準拠を保証する最も信頼できる構造化出力の方法
  • tool_choice の使い分け(第4章 D2と共通):"auto"はテキストで返す可能性が残る/"any"でツール呼び出しを保証/文書タイプ不明で複数の抽出スキーマがあるなら"any"、特定の抽出を先に走らせたいなら強制指定
  • 構文エラーは消えるが意味エラーは残る:明細の合計が総額と合わない、値が誤った欄に入る——スキーマでは防げない
  • スキーマ設計の考えどころ:required vs optional/enumに "other"+詳細文字列のペアで拡張性を持たせる/元文書に無い情報の欄は nullable にする(必須にするとモデルが値を捏造して埋める)
  • 曖昧ケース用に "unclear" のようなenum値を用意する/フォーマット正規化ルールはプロンプト側に書く
うちの組織の実物(任意読み物)

Workflow ツールの schema オプション(サブエージェントにStructuredOutputを強制)が日常の実物。「必須欄が捏造を誘発する→nullable設計」は rules/data-accuracy.md の捏造防止と同じ問題意識をスキーマ設計で解いたもの。「東京院に実在しないドメインを書いた事故」は、まさに required 欄を埋めたがる性質の現れ。

ひっかけ
  • 「strictスキーマにすれば抽出の正確性が保証される」→ 構文の保証であって意味の保証ではない
  • 「欠けているかもしれない情報も required にして完全なデータを強制」→ 捏造の温床。nullable が正解
  • 「プロンプトで『必ずJSONで』と念押し」→ tool_use による強制の方が確実

Task Statement 4.4検証・リトライ・フィードバックループ

検証に落ちたら、元文書+失敗した抽出結果+具体的な検証エラーを付けて再依頼する(retry-with-error-feedback)。ただし「情報がそもそも文書に無い」失敗はリトライしても直らない——リトライが効く失敗と効かない失敗を見分けるのが本題。

コードの骨格は導入レッスン3で見た。試験で問われるのは「どの失敗にリトライを使い、どの失敗に使わないか」の判断。合計が合わない・欄がずれた、のような出力の作り方の失敗はエラー内容を伝えれば直る見込みがある。一方「支払期日が文書のどこにも書かれていない」のような入力に情報が無い失敗は、何回リトライしても出てこない——nullを許して先に進むか、人間レビューに回すのが正解になる。

試験が問うこと
  • リトライが効く:フォーマット不一致・構造的な出力エラー/効かない:必要な情報が元文書に存在しない(外部文書にしかない等)
  • 意味エラー(値が合計と合わない・欄違い)と構文エラー(tool_useで既に消えている)の区別——4.3の続き
  • 自己修正フローの設計:「stated_total(記載の総額)」と別に「calculated_total(明細から計算した総額)」を抽出させ、不一致なら conflict_detected フラグを立てる
  • フィードバックループ:どのコード構造が指摘を発生させたかを detected_pattern 欄で記録→開発者が却下した指摘のパターン分析→プロンプト改善につなげる
うちの組織の実物(任意読み物)

rules/data-accuracy.md の「合計突合+書き込み後の計算列検証」は calculated vs stated の照合そのもの。memory/pii-mask-false-positives.md(誤検知を記録して後でルール調整)は detected_pattern によるフィードバックループの運用版。

ひっかけ
  • 「検証失敗は常にリトライで解決」→ 情報が無いものは何度やっても出ない。失敗の種類を見てから
  • 「エラー内容を伝えず『やり直して』とだけ再依頼」→ 具体的な検証エラーを渡さないと同じ失敗を繰り返す

Task Statement 4.5バッチ処理の設計(Message Batches API)

Message Batches API は50%引き・最大24時間・遅延保証なし。人が待つ処理(マージ前チェック)には使えず、夜間レポートや週次監査のような待てる仕事に使う。「どちらのAPIをどの業務に当てるか」のマッチング問題として出る。
試験が問うこと
  • 3つの特性の暗記必須:コスト50%減/処理窓 最大24時間/レイテンシSLAなし
  • 適する:夜間レポート・週次監査・夜間テスト生成(ブロックしない・遅延許容)/適さない:マージ前チェック(人が待つ)——サンプル問題Q11そのもの
  • 制約:バッチ内では複数ターンのツール呼び出しができない(実行途中でツールを走らせて結果を返せない)
  • custom_id でリクエストとレスポンスを対応付ける→失敗した文書だけを特定して修正(例:コンテキスト超過はチャンク分割)して再投入
  • SLA逆算:24時間処理+30時間SLAなら4時間おきに投入、のような算数
  • 大量投入の前にサンプルでプロンプトを磨いて一発成功率を上げ、再投入コストを減らす
うちの組織の実物(任意読み物)

「同期かバッチか」の判断軸は、BQの「5MB超はload job必須」(feedback-bq-batch-vs-loadjob)と同じ「処理特性でAPIを選ぶ」型。週次レポート自動配信(セミナー・rehab)は、まさにバッチ向きワークロードの実例。

ひっかけ
  • 「両方バッチにしてポーリングで待つ」→ 『だいたい速く終わる』は人が待つ処理の設計根拠にならない(Q11誤答B)
  • 「バッチは結果の順序が壊れるから使わない」→ custom_id で対応付けられる。誤解として出題される(Q11誤答C)
  • 「タイムアウトしたらリアルタイムにフォールバック」→ 不要な複雑化。適材適所が正解(Q11誤答D)

Task Statement 4.6多重インスタンス・多段パスのレビュー設計

自分で生成したコードを同じセッションでレビューさせると、生成時の思考の文脈を引きずって自分の判断を疑えない。独立した第2インスタンスに見せる。大きなレビューは「ファイル別の局所パス+横断の統合パス」に分割して注意力の希釈を防ぐ。

ここには独立した2つの問題があり、それぞれに対処が違う。1つ目は自己レビューの限界。自分が書いた文章の誤字は自分では見つけにくい——「こう書いたはず」という記憶が目を曇らせるからだ。モデルも同じで、コードを生成した同じセッションでレビューを指示すると、生成時の推論コンテキスト(「この設計で正しい」と判断した思考の跡)が会話履歴に残っているため、その判断自体を疑えない。「もっと批判的に見て」と指示を足しても、思考時間を延ばしても直らない。効くのは文脈を持たない独立した第2インスタンスに見せること——第1章で学んだ「サブエージェントは親の文脈を継承しない」という性質が、ここでは品質保証の武器になる。

2つ目は注意力の希釈(attention dilution)。14ファイルのPRを1回のプロンプトで全部見せると、最初の数ファイルは深く分析されるのに後半は浅くなり、同じコードパターンにファイルによって矛盾した判定が出る。人間が書類30件を流れ作業で見ると後半が雑になるのと同じ現象。対処は「もっと大きなコンテキストウィンドウのモデルに替える」ではない——窓が広くても注意の総量は増えない。レビューを多段パスに分割する:まずファイル別の局所パスで1ファイルずつ深く見て、最後にクロスファイルの統合パスを1回流して横断的な問題(重複・不整合)を拾う。第1章1.6のプロンプトチェイニングを、レビュー品質のために使う形。

試験が問うこと
  • 自己レビューの限界:生成時の推論コンテキストが残るため、同一セッションでは自分の決定を疑いにくい。self-review指示や思考時間の延長より、文脈を持たない独立インスタンスが効く
  • 多段パスレビュー:14ファイルのPRを1回で見せると、詳細な指摘と浅い指摘が混在し、同じパターンに矛盾した判定が出る(注意力の希釈)→ ファイル別パス+クロスファイル統合パスに分割(サンプル問題Q12)
  • 確信度の自己申告を検証パスに添えさせ、レビューのルーティング(人が見るべきもの)の材料にする——ただし較正が前提(第5章 D5.5と接続)
うちの組織の実物(任意読み物)

組織の十八番。rules/audit-independence.md(盲検・独立コンテキスト・Generator-Evaluator分離)と lead-worker の Two-Reviewer Pattern(仕様準拠と品質を別々に独立起動)が、このタスクステートメントの完全な実装。「editorial-checker と geo-auditor を統合しない」円卓会議の結論は、試験の言う self-review threat の回避そのもの。

ひっかけ
  • 「コンテキストウィンドウの大きい上位モデルに替えて1回で見る」→ 窓の大きさは注意力の質を解決しない(Q12誤答C)
  • 「3回独立レビューして2回以上出た指摘だけ採用」→ 間欠的にしか検出されない本物のバグを合議が握りつぶす(Q12誤答D)
  • 「開発者にPRを小さく割らせる」→ システム改善ではなく負担転嫁(Q12誤答B)

公式コースで補強Claude Academy の対応レッスン

Anthropic 公式の無料学習サイト Claude Academy(2026-08-20 公開、/ja/ で日本語版)のうち、第3章(ドメイン4: プロンプト設計と構造化出力)に対応するレッスン。ほぼ全部が「Claude APIを使った構築」の「プロンプトエンジニアリング技術」「プロンプト評価」「ツール使用」の3セクションに収まる。使い方は「この章を読み終えてから、同じテーマを公式がどう説明しているかを確かめる」の一方向。先に公式を読む必要はない。レッスン本文の閲覧には無料アカウントでのサインインが必要。

この章で使うコース: Claude APIを使った構築

この章の項目対応する公式レッスン
導入レッスン1〜3 構造化出力・スキーマ設計・検証リトライClaude APIを使った構築 › 構造化データ
Claude APIを使った構築 › ツールスキーマ
4.1 明示的基準の設計Claude APIを使った構築 › プロンプトエンジニアリング
Claude APIを使った構築 › 明確で直接的であること
Claude APIを使った構築 › 具体的であること
Claude APIを使った構築 › XMLタグで構造化する
4.2 few-shot プロンプティングClaude APIを使った構築 › 例を提供する
4.3 tool_use と JSONスキーマによる構造化出力Claude APIを使った構築 › 構造化データ
Claude APIを使った構築 › ツールスキーマ
Claude APIを使った構築 › 細粒度のツール呼び出し
4.4 検証・リトライ・フィードバックループClaude APIを使った構築 › プロンプト評価
Claude APIを使った構築 › 典型的な評価ワークフロー
Claude APIを使った構築 › コードベースの採点
Claude APIを使った構築 › モデルベースの採点
4.5 バッチ処理(Message Batches API)
Claude Academy に該当レッスンは無い(2026-08-25 時点)。この章の導入レッスン4とタスクステートメント4.5で足りる。
4.6 多重インスタンス・多段パスのレビュー設計Claude APIを使った構築 › モデルベースの採点
Claude APIを使った構築 › 並列化ワークフロー
深掘り(任意)Claude APIを使った構築 › 拡張思考
Claude APIを使った構築 › プロンプトキャッシング

対応付けはレッスン題名とコース説明文から行った(2026-08-25 時点)。レッスン本文までは精査していないので、読んでみて「この章の項目とずれている」と感じたら、その節は公式を優先せずこの章の記述で答える(試験ガイドのタスクステートメントに合わせて書いてあるため)。

演習手を動かして確かめる(公式演習4の日本語版・2〜3時間)

この試験にコードを書く場面はない。写経(見ながら書き写して動かす)で十分——やり方は第1章の「写経の作法」を参照(「1行写すごとに何をする行か声に出す」🥈方式を推奨)。Claudeに「c3演習やる」と言えば環境準備から伴走してもらえる。

  1. 抽出パイプライン:領収書テキスト5件(うち1件は日付欠落、1件は合計不一致)を用意し、nullable スキーマ+検証リトライで処理。日付欠落が null になり(捏造しない)、合計不一致に conflict_detected が立つことを確認する(→導入レッスン1〜3の総合演習)
  2. few-shot の効果測定:形式の違う文書2種で抽出がブレたら、few-shot例を2個足して安定するかを比較する(→4.2の体験。「足す前」と「足した後」を同じ入力で見比べるのが肝)
  3. (任意)バッチ:同じ抽出を Batches API で10件投入し、custom_id で結果を回収する。1件をわざと失敗させ(極端に長い文書等)、その custom_id だけ再投入する流れまでやると4.5が体に入る

壊し学習のおすすめポイント(この章版)

  • "due_date" の null 許容を外して required に入れる → 日付の無い領収書でそれらしい日付が捏造されるのを実際に見る。「nullable が捏造防止」が一発で腹落ちする
  • リトライ時の feedback からエラー内容を消して「やり直して」だけにする → 同じ失敗が繰り返されるのを見る
  • tool_choice を "auto" に戻す → たまにJSONではなく「抽出しました。発行者は…」というテキストが返るのを見る

用語ミニ辞書(第3章)

明示的基準 / explicit criteria

「慎重に」ではなく「XがYと矛盾する場合のみ報告」のような、該当/非該当を機械的に判定できる基準。誤検知削減の第一手。

few-shot プロンプティング

入出力の実例を2〜4個見せて出力の形式と判断基準を教える技法。曖昧ケースの判断理由まで例に含めると新規パターンへ汎化する。

tool_use による構造化出力

出力スキーマをツールの入力パラメータとして定義し、そのツールを呼ばせることでJSON構文の正しさを保証する方式。「JSONで返して」より確実。

tool_choice(auto / any / 特定強制)

ツールを呼ばせる強さの指定。auto=呼ぶかどうか任せる(テキストで返る可能性が残る)、any=どれかを必ず呼ぶ(文書タイプ不明で複数スキーマから選ばせるとき)、{"type":"tool","name":…}=特定のツールを必ず呼ぶ(走らせたい抽出が決まっているとき)。

構文エラー vs 意味エラー

構文=JSONとして壊れている(tool_useで解消)。意味=形式は正しいが中身が間違い(合計不一致・欄違い。スキーマでは防げず、検証ロジックで捕まえる)。

nullable設計(捏造防止)

元文書に存在しない可能性がある欄を必須にすると、モデルが値をでっち上げて埋める。省略可能(null許容)にして「無いものは無い」と言える設計にする。

retry-with-error-feedback

検証に落ちたら「元文書+失敗した出力+具体的なエラー内容」を付けて再依頼する型。情報がそもそも無い失敗には効かない。

Message Batches API

非同期の一括処理API。50%引き・最大24時間・SLAなし・バッチ内での多ターンツール呼び出し不可・custom_idで結果を対応付け。待てる仕事専用。

注意力の希釈 / attention dilution

一度に多くの対象を見せると1つあたりの分析が浅く・不安定になる現象。ファイル別パス+統合パスへの分割で対処。「大きい窓のモデルに替える」では直らない。

独立レビューインスタンス

生成時の推論文脈を持たない別セッション/別エージェントにレビューさせる設計。自己レビュー指示・拡張思考より効く。

章末ミニクイズ(5問)

本番形式の4択。この章で学んだことの思い出す練習(読み直しの3倍効く)。4問がこの章(D4)、1問は第2章(D3)の復習。総合模試とは別シナリオで、4.2・4.4・4.6を厚めに問う。

MQ1 — 4.2 few-shot
問い合わせメール分類エージェントの指示文をかなり詳細に書いたが、「解約したいが返金はあるか」のような複数カテゴリにまたがるメールで分類が安定しない。最も効果的な改善は?
指示文の詳細化(A)で直らないブレは例示で直すのが定石。例は「多いほど良い」ではなく、狙いを定めた2〜4個+判断理由付きが推奨(Cはトークンコストの割に伸びない)。モデル変更(D)は根本原因(判断軸が伝わっていない)に向かわない。→ 4.2
MQ2 — 4.4 検証リトライ
領収書の一括抽出で検証エラーが2種類出た。①明細の合計と総額欄の値が一致しない ②支払期日がどうしても抽出されない(原本を確認すると、そもそも期日の記載が無い)。正しい設計は?
リトライが効くのは「出力の作り方の失敗」(①)だけ。情報が元文書に無い失敗(②)は何度やっても出ない——nullable設計で「無い」と言わせて先へ進む。Cは具体的なエラーを渡さないので同じ失敗を繰り返す。Dはリトライで直る①まで人間に回す過剰反応。→ 4.4 / 導入レッスン3
MQ3 — 第2章の復習(D3 CI/CD統合)
PRが出るたびにClaude Codeで自動レビューを走らせるCIジョブを組んだところ、ジョブが応答待ちのまま永久にハングすることがある。正しい修正は?
CI/CDには人間がいないので、聞き返しなしの一発実行(headless)である claude -p が鉄則。タイムアウト延長(A)はハングの発生自体を直さない。自動Enter(B)は何を承認しているか分からない危険な回避。plan mode(D)は承認する人間がいる対話用。→ 第2章 / D3 3.6
MQ4 — 4.6 多段レビュー
エージェントに機能を実装させた後、同じセッションで「いま書いたコードを批判的にレビューして」と指示しているが、後から見つかるバグを毎回見逃す。最も効果的な改善は?
同一セッションには「この設計で正しい」と判断した生成時の推論文脈が残っており、その判断自体を疑えない。指示の強化(A)・思考時間(B)・同一文脈での反復(D)はどれもこの構造を変えない。文脈を持たない独立インスタンスが効く。→ 4.6
MQ5 — 4.3 tool_choice
請求書・領収書・契約書が混在する書類の山を処理する。文書タイプごとに別の抽出スキーマ(ツール)を定義済みで、どの文書でも必ず構造化JSONで結果を受け取りたい(タイプ判定はモデルに任せたい)。正しい設定は?
「必ずツール経由(=構造化保証)」かつ「どのツールかは選ばせる」の組み合わせは "any"。auto(A)はプロンプトで念押ししてもテキストで返る可能性が残る。特定強制(C)は文書タイプ不明の場面に合わない。D は壊れたJSONのリスクが残る最弱の方式。→ 4.3 / 導入レッスン1

仕上げチェックリスト(30秒で説明できたらチェック)

← 第2章(D3 Claude Codeの設定) 第4章へ(D2 ツール設計とMCP)→