Claude APIでPDFを扱う

Claude API API 6分で読めます

Claude は PDF を直接入力として受け取り、本文テキストだけでなく図・表・レイアウトも合わせて理解できます。契約書の要約、請求書からの項目抽出、論文の質疑応答、レポートの表の読み取りなどに使えます。本記事では Claude API(Messages API)で PDF を扱う方法を、渡し方・トークンとコスト・Files API との併用・制限まで解説します。これは Anthropic 公式ドキュメントの非公式日本語訳です。最新の仕様は公式ドキュメントをご確認ください。

PDF入力の概要

PDF は「ドキュメントコンテンツブロック」としてメッセージに含めて渡します。Claude は各ページを「そのページのテキスト」と「そのページの見た目(画像)」の両方として取り込むため、単純なテキスト抽出では失われがちな表組み・図・チャート・レイアウトも含めて理解できます。このため、スキャンされた画像PDFでも図表を含むPDFでも扱いやすいのが特徴です。テキストと同じ content 配列に document ブロックとテキスト指示を並べて、「この資料の要点を3つに要約して」「3ページ目の表をJSONにして」のように依頼します。

PDFの渡し方

渡し方は画像と同様に、Base64 で埋め込む方法・URL を指定する方法・Files API にアップロードして参照する方法の3通りです。Base64 の場合は type: "document" ブロックの sourcetype: "base64"media_type: "application/pdf"data を指定します。

{
  "role": "user",
  "content": [
    {
      "type": "document",
      "source": {
        "type": "base64",
        "media_type": "application/pdf",
        "data": "JVBERi0xLjc..."
      }
    },
    { "type": "text", "text": "この資料の要点を箇条書きで要約してください。" }
  ]
}

公開URLのPDFなら sourcetype: "url" にして url を渡します。

トークンとコストの考え方

PDF はページ単位でトークンを消費します。1ページあたり、そのページのテキスト分のトークンに加えて、ページを画像として解釈する分のトークンが加算されるため、テキストのみを送る場合よりコストは高くなります。ページ数が多い資料ほど入力トークンが増える点に注意してください。コストを抑えるコツは、(1)本当に必要なページだけを事前に切り出して送る、(2)同じPDFに何度も質問する場合はプロンプトキャッシュや Files API を活用して再送を避ける、(3)大量処理はメッセージバッチ処理でまとめる、です。実際のトークン数は送信前にトークンカウント用のエンドポイントで見積もれます。

Files APIとの併用

同じPDFを繰り返し使う、あるいは大きなファイルを何度も送りたくない場合は、Files API に一度アップロードして得られる file_id を参照するのが便利です。document ブロックの sourcetype: "file" にして file_id を指定します。

{
  "type": "document",
  "source": { "type": "file", "file_id": "file_abc123" }
}

アップロードは一度で済み、以降のリクエストは軽い file_id の参照だけになるため、リクエスト本文が小さくなり、同一ファイルに対する複数回の問い合わせが効率化されます。

制限と注意点

PDF入力にはページ数とファイルサイズの上限があります(目安として1リクエストあたり最大100ページ・32MB程度。最新値は公式ドキュメントで確認してください)。上限を超える場合は、ページを分割して複数リクエストに分ける、必要な章だけ抽出する、といった前処理が必要です。パスワード保護されたPDFや破損したファイルは扱えません。また、非常に細かい文字のスキャンや低解像度の画像PDFでは読み取り精度が落ちることがあるため、抽出した数値や金額など重要な情報は出力を検証してください。図表の解釈が要らない純粋なテキスト文書であれば、あらかじめテキストを抽出して渡す方が安価な場合もあります。