【AI】Claude APIでPDFを読み込んで質問する方法

当ページのリンクには広告が含まれています。
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

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向けの案件が豊富。公式
執筆者/監修者
  • フリーランスエンジニア(保有資格個、企業と直接契約
  • ブログ・アフィリエイト歴7年(2018年〜)
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資(仮想通貨・FX)歴7年(2018年〜)
  • X(旧Twitter)フォロワー約1,900人
  • 運営者情報はこちら
いずみです
目次

【AI】Claude APIでPDFを読み込んで質問する方法

早速ですが、Claude APIでPDFを読み込んで質問する方法を解説します。

PDFを渡す3つの方法

Claude APIにPDFを渡す方法は3種類あります。

  • 公開URLを指定する
  • PDFをbase64エンコードして送る
  • Files APIで事前にアップロードしてfile_idで参照する

いずれもメッセージのcontentdocument ブロックを追加する形で、書き方はほぼ共通です。

base64エンコードしたPDFを送る

ローカルにあるPDFを送る場合は、base64エンコードしてdocument ブロックに埋め込みます。

STEP
anthropicライブラリを入れる

公式のPython向けSDKをインストールします。

pip install anthropic
STEP
PDFをbase64にして送信する
import 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 で行い、返ってきたiddocument ブロックの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つのエージェントを使い回していますよ。

フリーランスを始めるなら「

案件数マージン率単価
約88,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 業界最大級の案件数。
  • 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
  • 案件参画中のフォローの充実。

※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。

は業界最大手のフリーランスエージェントです。

とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!

いずみ

僕もはじめてフリーランスの案件を貰ったのはです。

保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。

手厚い保障を重視したいなら「

案件数マージン率単価
約10,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 手厚い保障で正社員並みの安心感。
  • 還元率60%超え&単価公開でクリアな契約。
  • 給与保障制度(審査あり)。

は手厚い保障が特徴のフリーランスエージェントです。

フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。

いずみ

僕も何度か案件を紹介してもらいました。

自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。

週2〜3日の案件探しなら「

案件数マージン率単価
約5,000件非公開
初心者福利厚生申し込み
経験者向け無料
Good Point
  • 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を読み込んで質問する方法について解説しました。

以下が本記事のまとめになります。

まとめ
  • Claude APIはURL・base64・Files APIの3通りでPDFを渡せる。
  • メッセージのcontentdocument ブロックを足すだけで要約や質問応答ができる。
  • citations を有効にすると回答の根拠ページを取得できる。
  • 1リクエスト32MBの上限があり、大きいPDFは分割して送る。
まとめ
いずみ

最後までお読みいただき、ありがとうございました!

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
  • クソおすすめ本
¥4,480 (2024/06/01 23:28時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場
いずみ

海外のエンジニアがどういった思考で働いているかが理解できます。

海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。

この記事が気に入ったら
フォローしてね!

シェアしてね!
  • URLをコピーしました!
目次