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" ブロックの source に type: "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なら source を type: "url" にして url を渡します。
トークンとコストの考え方
PDF はページ単位でトークンを消費します。1ページあたり、そのページのテキスト分のトークンに加えて、ページを画像として解釈する分のトークンが加算されるため、テキストのみを送る場合よりコストは高くなります。ページ数が多い資料ほど入力トークンが増える点に注意してください。コストを抑えるコツは、(1)本当に必要なページだけを事前に切り出して送る、(2)同じPDFに何度も質問する場合はプロンプトキャッシュや Files API を活用して再送を避ける、(3)大量処理はメッセージバッチ処理でまとめる、です。実際のトークン数は送信前にトークンカウント用のエンドポイントで見積もれます。
Files APIとの併用
同じPDFを繰り返し使う、あるいは大きなファイルを何度も送りたくない場合は、Files API に一度アップロードして得られる file_id を参照するのが便利です。document ブロックの source を type: "file" にして file_id を指定します。
{
"type": "document",
"source": { "type": "file", "file_id": "file_abc123" }
}
アップロードは一度で済み、以降のリクエストは軽い file_id の参照だけになるため、リクエスト本文が小さくなり、同一ファイルに対する複数回の問い合わせが効率化されます。
制限と注意点
PDF入力にはページ数とファイルサイズの上限があります(目安として1リクエストあたり最大100ページ・32MB程度。最新値は公式ドキュメントで確認してください)。上限を超える場合は、ページを分割して複数リクエストに分ける、必要な章だけ抽出する、といった前処理が必要です。パスワード保護されたPDFや破損したファイルは扱えません。また、非常に細かい文字のスキャンや低解像度の画像PDFでは読み取り精度が落ちることがあるため、抽出した数値や金額など重要な情報は出力を検証してください。図表の解釈が要らない純粋なテキスト文書であれば、あらかじめテキストを抽出して渡す方が安価な場合もあります。