この機能はZero Data Retention(ZDR)の対象です。組織がZDR契約を締結している場合、この機能を通じて送信されたデータは、APIレスポンスが返された後に保存されることはありません。
提供したPDF内のテキスト、画像、チャート、表についてClaudeに質問できます。ユースケースの例:
Claudeは標準的なPDFであれば処理できます。リクエストサイズが以下の要件を満たしていることを確認してください:
| 要件 | 制限 |
|---|---|
| 最大リクエストサイズ | 32 MB(プラットフォームによって異なります) |
| リクエストあたりの最大ページ数 | 600(200kトークンのコンテキストウィンドウを持つモデルの場合は100) |
| フォーマット | 標準PDF(パスワード/暗号化なし) |
両方の制限は、PDFと一緒に送信される他のコンテンツを含むリクエストペイロード全体に適用されます。大きなPDFの場合は、Files APIでアップロードし、file_idで参照することでリクエストペイロードを小さく保つことを検討してください。
密度の高いPDF(小さなフォントのページが多い、複雑な表、大量のグラフィックなど)は、ページ制限に達する前にコンテキストウィンドウを埋めてしまう可能性があります。大きなPDFを含むリクエストは、Files APIを使用している場合でも、ページ制限に達する前に失敗することがあります。ドキュメントをセクションに分割してみてください。大きなファイルの場合、各ページは画像として処理されるため、埋め込み画像をダウンサンプリングすることも有効です。
PDFサポートはClaudeのビジョン機能に依存しているため、他のビジョンタスクと同じ制限事項と考慮事項が適用されます。
PDFサポートは、Claude API、Claude Platform on AWS、Amazon Bedrock(Amazon BedrockのPDFサポートを参照)、Vertex AI、およびMicrosoft Foundryで利用できます。すべてのアクティブなモデルがPDF処理をサポートしています。
BedrockのConverse APIを通じてPDFサポートを使用する場合、2つの異なるドキュメント処理モードがあります:
重要: Converse APIでClaudeの完全な視覚的PDF理解機能にアクセスするには、引用(citations)を有効にする必要があります。引用が有効になっていない場合、APIは基本的なテキスト抽出のみにフォールバックします。引用の使用方法について詳しくはこちらをご覧ください。
Converse Document Chat(元のモード - テキスト抽出のみ)
Claude PDF Chat(新しいモード - 完全な視覚的理解)
Converse APIを使用しているときにClaudeがPDF内の画像やチャートを認識していない場合は、引用フラグを有効にする必要がある可能性があります。これがないと、Converseは基本的なテキスト抽出のみにフォールバックします。
これはConverse APIの既知の制約です。引用なしで視覚的PDF分析が必要なアプリケーションの場合は、代わりにInvokeModel APIの使用を検討してください。
.csv、.xlsx、.docx、.md、.txtファイルなどのPDF以外のファイルについては、他のファイル形式の処理を参照してください。
Messages APIを使用した簡単な例から始めましょう。PDFをClaudeに提供する方法は3つあります:
documentコンテンツブロック内のbase64エンコードされたPDFとしてfile_idによってAmazon BedrockおよびVertex AIでは、現在base64エンコードされたソースのみが利用可能です。
最も簡単なアプローチは、URLから直接PDFを参照することです:
ローカルシステムからPDFを送信する必要がある場合、またはURLが利用できない場合:
繰り返し使用するPDFの場合、またはエンコードのオーバーヘッドを避けたい場合は、Files APIを使用します:
PDFをClaudeに送信すると、以下のステップが実行されます:
システムがドキュメントの内容を抽出します。
Claudeはテキストと画像の両方を分析してドキュメントをより深く理解します。
Claudeは関連する場合、PDFの内容を参照して応答します。
Claudeは応答時にテキストと視覚的コンテンツの両方を参照できます。PDFサポートを以下と統合することで、パフォーマンスをさらに向上させることができます:
PDFファイルのトークン数は、ドキュメントから抽出されたテキストの総量とページ数によって異なります:
トークンカウントを使用して、特定のPDFのコストを見積もることができます。
最適な結果を得るために、以下のベストプラクティスに従ってください:
大量処理の場合は、以下のアプローチを検討してください:
繰り返しクエリのパフォーマンスを向上させるためにPDFをキャッシュします:
大量のワークフローにはMessage Batches APIを使用します:
Was this page helpful?
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "url",
"url": "https://assets.anthropic.com/m/1cd9d098ac3e6467/original/Claude-3-Model-Card-October-Addendum.pdf",
},
},
{"type": "text", "text": "What are the key findings in this document?"},
],
}
],
)
print(message.content)import base64
import httpx
# まず、PDFを読み込んでエンコードします
pdf_url = "https://assets.anthropic.com/m/1cd9d098ac3e6467/original/Claude-3-Model-Card-October-Addendum.pdf"
pdf_data = base64.standard_b64encode(httpx.get(pdf_url).content).decode("utf-8")
# 別の方法:ローカルファイルから読み込む
# with open("document.pdf", "rb") as f:
# pdf_data = base64.standard_b64encode(f.read()).decode("utf-8")
# base64エンコーディングを使用してClaudeに送信します
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": pdf_data,
},
},
{"type": "text", "text": "What are the key findings in this document?"},
],
}
],
)
print(message.content)client = anthropic.Anthropic()
# PDFファイルをアップロードします
with open("document.pdf", "rb") as f:
file_upload = client.beta.files.upload(file=("document.pdf", f, "application/pdf"))
# アップロードしたファイルをメッセージで使用します
message = client.beta.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
betas=["files-api-2025-04-14"],
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {"type": "file", "file_id": file_upload.id},
},
{"type": "text", "text": "What are the key findings in this document?"},
],
}
],
)
print(message.content)client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": pdf_data,
},
"cache_control": {"type": "ephemeral"},
},
{"type": "text", "text": "Analyze this document."},
],
}
],
)client = anthropic.Anthropic()
message_batch = client.messages.batches.create(
requests=[
{
"custom_id": "doc1",
"params": {
"model": "claude-opus-4-8",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": pdf_data,
},
},
{"type": "text", "text": "Summarize this document."},
],
}
],
},
}
]
)