いずみこんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「Claude APIにPDFファイルを渡して、中身について質問したい」とお考えではありませんか?
請求書や契約書、論文などをPDFのままClaudeに読ませたい場面は多いです。
Claude APIにはPDFをそのまま送れるドキュメント入力機能があり、テキスト抽出ライブラリを挟まずに要約や質問応答ができます。



PythonのSDKだけで完結するので、意外と簡単です。
ということで、本記事ではClaude APIでPDFを読み込んで質問する方法を解説します。



すぐ読み終わるので、ぜひ最後まで読んでくださいませ。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【AI】Claude APIでPDFを読み込んで質問する方法
早速ですが、Claude APIでPDFを読み込んで質問する方法を解説します。
PDFを渡す3つの方法
Claude APIにPDFを渡す方法は3種類あります。
- 公開URLを指定する
- PDFをbase64エンコードして送る
- Files APIで事前にアップロードして
file_idで参照する
いずれもメッセージのcontent にdocument ブロックを追加する形で、書き方はほぼ共通です。
base64エンコードしたPDFを送る
ローカルにあるPDFを送る場合は、base64エンコードしてdocument ブロックに埋め込みます。
公式のPython向けSDKをインストールします。
pip install anthropicimport base64
import anthropic
client = anthropic.Anthropic()
with open("report.pdf", "rb") as f:
pdf_data = base64.standard_b64encode(f.read()).decode("utf-8")
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "base64",
"media_type": "application/pdf",
"data": pdf_data,
},
},
{"type": "text", "text": "PDFの内容を3行で要約してください。"},
],
}
],
)
text = next(b.text for b in response.content if b.type == "text")
print(text)media_type にはapplication/pdf を指定します。
document ブロックを先に置き、質問文のtext ブロックを後ろに並べるのがポイントです。



PDFのテキストだけでなく、表や図の見た目も踏まえて回答してくれます。
URLで公開PDFを指定する
Web上に公開されているPDFなら、URLを指定するだけで読み込めます。
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {
"type": "url",
"url": "https://example.com/report.pdf",
},
},
{"type": "text", "text": "結論だけ日本語で教えてください。"},
],
}
],
)base64エンコードの手間がなく、コードもすっきりします。
社外に出せないファイルや認証が必要なURLでは使えないため、代わりにbase64かFiles APIを選びます。
Files APIで一度アップロードして使い回す
同じPDFに何度も質問するなら、Files APIで一度だけアップロードしてfile_id で参照すると効率的です。
import anthropic
client = anthropic.Anthropic()
uploaded = client.files.upload(
file=("contract.pdf", open("contract.pdf", "rb"), "application/pdf"),
)
questions = [
"解約条件をまとめてください。",
"支払いスケジュールを箇条書きにしてください。",
]
for q in questions:
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {"type": "file", "file_id": uploaded.id},
},
{"type": "text", "text": q},
],
}
],
)
text = next(b.text for b in response.content if b.type == "text")
print(text)アップロードはclient.files.upload で行い、返ってきたid をdocument ブロックのsource に渡します。
同じPDFを毎回base64で送り直さずに済むため、リクエストのペイロードが軽くなります。



ファイルのアップロード自体は無料で、課金対象は入力トークンだけです。
回答に引用元(Citations)を付ける
document ブロックでcitations を有効化すると、回答のどの部分がPDFのどこを根拠にしているかを返してくれます。
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "document",
"source": {"type": "file", "file_id": uploaded.id},
"citations": {"enabled": True},
},
{"type": "text", "text": "第2四半期の売上高を引用付きで答えてください。"},
],
}
],
)
for block in response.content:
if block.type == "text":
print(block.text)
for citation in getattr(block, "citations", None) or []:
print("根拠:", citation.cited_text)cited_text にPDF内の該当箇所、start_page_number にページ番号が入ります。
回答の根拠を人間が確認したいレビュー用途で役立ちます。
プロンプトキャッシュでコストを抑える
長いPDFに複数回質問する場合、document ブロックにcache_control を付けるとキャッシュが効きます。
{
"type": "document",
"source": {"type": "file", "file_id": uploaded.id},
"cache_control": {"type": "ephemeral"},
}2回目以降のリクエストでは、キャッシュ済みのPDF部分の入力トークン単価が大きく下がります。
扱えるPDFの制限
1リクエストあたりのサイズ上限は32MBです。
base64エンコードするとデータ量が約1.3倍になるため、元ファイルはさらに小さめに抑える必要があります。
ページ数が非常に多いPDFは、図や画像を解析せずテキストのみの読み取りになる場合があります。
サイズの大きいPDFは、章ごとに分割してから送ると安定します。



スキャンしただけの画像PDFでも、Claudeは中の文字を読み取れます。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【厳選】フリーランスエンジニアにおすすめなエージェント3選


フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。
僕が実際に利用しているおすすめエージェントを紹介しますね。



エージェントは必ず複数登録してください。
担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…
僕は実際に5つのエージェントを使い回していますよ。
フリーランスを始めるなら「レバテックフリーランス


」
- 業界最大級の案件数。
- 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
- 案件参画中のフォローの充実。
※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。
レバテックフリーランス
![]()
![]()
とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!



僕もはじめてフリーランスの案件を貰ったのはレバテックフリーランス
![]()
![]()
保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。
手厚い保障を重視したいなら「Midworks


」
- 手厚い保障で正社員並みの安心感。
- 還元率60%超え&単価公開でクリアな契約。
- 給与保障制度(審査あり)。
Midworks
![]()
![]()
フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。



僕も何度か案件を紹介してもらいました。
自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。
週2〜3日の案件探しなら「ITプロパートナーズ


」
- IT案件に特化したフリーランスエージェント。
- 週2〜3日の案件が豊富。
- リモート案件が多く、直エンドなので単価も高い。
※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。
ITプロパートナーズ
![]()
![]()
週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。



週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。
とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!
よくある質問
PDF以外のファイルも読み込めますか?
document ブロックはPDFとプレーンテキスト、画像に対応しています。
WordやExcelは事前にPDFへ変換してから渡します。
PDFの読み取りミスはありますか?
テキストが埋め込まれたPDFなら、ほぼ正確に読み取れます。
複雑なレイアウトや手書き文字では、抽出精度が落ちることがあります。
日本語のPDFも問題なく読めますか?
日本語のPDFも読み込めます。
縦書きや特殊なフォントの場合は、要約結果を一度目視で確認することをおすすめします。
まとめ
今回は、Claude APIでPDFを読み込んで質問する方法について解説しました。
以下が本記事のまとめになります。



最後までお読みいただき、ありがとうございました!
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。








