新規 無料登録で、呼び出し 10 回分(最大 $1)をお試しいただけます。カード登録は不要です。

PDF は何トークン?4 社の課金ルール、1 ページ 15-2,100

目次
  1. 文書をモデルに送る方法は?
  2. モデルが本当にファイルを読んだか確認するには?
  3. PDF ファイルのトークン数は各社でどう計算される?
  4. 抽出テキストでは回答できないのはどんな場合?
  5. 文書入力のコストを下げるには?
  6. Word ファイルはどう扱う?
  7. 測定方法
  8. よくある質問
  9. PDF の 1 ページは何トークン?
  10. PDF と抽出テキストはどちらが安い?
  11. LLM はスキャンした PDF を読める?
  12. PDF ファイルを直接受け付けるモデルは?
  13. 長い PDF のコストを減らすには?
  14. 関連記事

PDF をファイルとしてモデルに送ると、ベンダーごとに異なるルールで課金されます。GPT-6 はページの本文のトークン数に、1 ページあたり約 15 を加算します。Claude は本文に 1 ページあたり 1,558 トークンを加算します。Gemini は 1 ページあたり 515 トークンで、本文はカウントしません。Qwen 3.8 は本文に 1 ページあたり 2,098 を加算します。同じページの文字量を増やしながら送信して、このルールを測定しました。さらに 10 文書を 15 モデルに送り、正しく回答できる範囲で、文書の種類ごとに最も安い送信方法を調べました。

TL;DR

  • PDF をファイルとして送ると、1 ページあたり本文に GPT-6 は 15 トークン、Claude は 1,558、Qwen 3.8 は 2,098 を加算します。Gemini は一律 515 で、本文は無料です。
  • 抽出したテキストでは、グラフに関する 150 問とスキャン文書に関する 105 問のどちらも正答数は 0 でした。
  • ページごとに送信方法を切り替えると、Claude Sonnet 5.5 で混在文書の入力が 17,228 トークンから 6,543 に減り、12 問すべてに正答しました。
  • 120 ページの PDF から必要な 4 ページだけを送ると、Claude Sonnet 5.5 の入力は 253,822 トークンから 8,758 に減りました。

文書をモデルに送る方法は?

ファイルとして送る、各ページを画像にして送る、先にテキストを抽出して送る、の 3 通りです。

import base64
import pymupdf  # pip install pymupdf

doc = pymupdf.open("report.pdf")
b64 = lambda data: base64.b64encode(data).decode()   # binary written as text, so it fits in JSON

# 1. As a file. The vendor decides how to read it.
as_file = [{"type": "file", "file": {"filename": "report.pdf",                # OpenAI-compatible chat
            "file_data": "data:application/pdf;base64," + b64(open("report.pdf", "rb").read())}}]
as_document = [{"type": "document", "source": {"type": "base64",              # Anthropic Messages API
                "media_type": "application/pdf", "data": b64(open("report.pdf", "rb").read())}}]

# 2. As page images. You render each page; any model that accepts images takes these.
as_images = [{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64," +
              b64(page.get_pixmap(dpi=72).tobytes("jpeg"))}} for page in doc]

# 3. As text. The text layer is the selectable text stored in a PDF. A scan has none.
as_text = "\n\n".join(page.get_text() for page in doc)

chat エンドポイントで 15 モデルが受け付けた入力は次のとおりです。

モデルPDF ファイルページ画像テキスト
GPT-6.1 Sol、GPT-6 Luna対応対応、1 リクエストあたり最大 50 枚対応
Claude Opus 5.5、Sonnet 5.5、Haiku 5.5対応対応対応
Gemini 3.1 Pro、Gemini 3.8 Flash対応対応対応
Qwen 3.8 Max、Qwen 3.8 Flash対応対応対応
Qwen 3.6 35B(重み公開)、DeepSeek V4.1 Flash、GLM 5.3 Flash、Kimi K3非対応対応対応
GLM 5.3、DeepSeek V4 Pro非対応非対応対応

ページ画像は、すべての視覚対応モデルが受け付けます。重みが公開されていて、ファイル入力には対応しない 4 モデルも同様です。今回のエンドポイントでは、Gemini に PDF を画像パート内の data URL として渡しました。Google 自身の API ではインラインデータとして渡します。

モデルが本当にファイルを読んだか確認するには?

ファイルにしかない情報を質問し、入力トークン数も確認します。非対応の入力は 400 エラーになる場合もあれば、無視されたままモデルが回答する場合もあります。今回の検証では、視覚非対応の 2 モデルは画像パートを無視し、2 ページの文書に対して入力トークン数 27 と 98 で回答しました。また、ファイルの代わりに URL を渡したあるモデルは、内容を捏造して回答しました。

r = client.chat.completions.create(model=model, messages=[{"role": "user", "content": as_file + [question]}])
read_it = "MF-OPS-2291" in r.choices[0].message.content   # a string found only in the document
plausible = r.usage.prompt_tokens > 200 * len(doc)        # a dropped file leaves a few dozen tokens

ページの種類を判定するのにモデルは不要です。後述する送信方法の振り分けでは、この判定を使います。

def kind(page) -> str:
    if len(page.get_text().strip()) < 40:
        return "scan"        # no text layer: needs OCR or an image
    if page.get_images() or len(page.get_drawings()) > 60:
        return "visual"      # a picture or a chart drawn on the page
    return "text"

PDF ファイルのトークン数は各社でどう計算される?

4 社それぞれルールが異なります。各ページの単語数を 0、80、250、500、約 670 とした 6 ページの PDF を作成しました。各ページにグラフを追加した版も作り、それぞれファイルと抽出テキストの両方で送信しました。

PDF の 1 ページあたりの入力トークン数と単語数の関係を示す折れ線グラフ。Qwen 3.8 は 2,098、Claude は 1,558 から始まり、どちらも本文量に応じて増加する。GPT-6 は 14 から始まり、抽出テキストを示す破線に沿う。Gemini は 515 で一定

ベンダーPDF をファイルとして送った場合のトークン数
GPT-6本文のトークン数に 1 ページあたり 14.5 を加算。画像のあるページでは約 650-1,700 を追加
Claude本文のトークン数に 1 ページあたり正確に 1,558 を加算。グラフがあっても追加なし
Gemini内容に関係なく 1 ページあたり 515。本文はカウントしない
Qwen 3.8本文のトークン数の約 0.94 倍に、1 ページあたり 2,098 を加算。グラフがあると約 770 を追加

トークンはモデルの課金単位で、英語の単語の約 4 分の 3 に相当します。同じ系列のモデルでは、カウントの差は数トークン以内でした。

少なくとも今回測定した経路では、2 社のルールが公開情報と異なりました。Google のドキュメントでは 1 ページ 258 トークンで、PDF 内のテキストには課金しないとしています。実測は 1 ページ 515 でしたが、本文が無料という点は記載どおりでした。OpenAI は PDF を抽出テキストとページ画像としてモデルに渡すとしていますが、今回、テキストだけのページには画像分のコストがありませんでした。Anthropic は各ページをテキストと画像として処理し、通常 1,500-3,000 トークンとしています。これは実測と一致します。

このルールから、次のことが分かります。

  • Claude と Qwen では、文字の少ないページほど割高です。1 行だけのページでも、ファイルなら 1,558 または 2,098 トークン、テキストなら十数トークンです。
  • Gemini では、文字の多いページが割安です。約 670 単語のページも白紙と同じ 515 トークンです。本文だけを送ると約 800 トークンになります。
  • GPT-6 では、画像のないページはファイルでもテキストと同じコストです。ページ全体が画像であるスキャンページは、実測で 2,868 トークンでした。

1 ページ約 250 単語のテキストだけで構成された 12 ページのレポートをファイルで送ると、GPT-6.1 Sol では 6,028 トークン、Gemini 3.8 Flash では 6,441、Claude Sonnet 5.5 では 27,297、Qwen 3.8 Flash では 30,934 でした。抽出テキストは、15 モデル全体で 5,924-8,716 トークンでした。

抽出テキストでは回答できないのはどんな場合?

テキストレイヤーにない情報が必要な場合です。各質問を回答に必要な情報で分類し、15 モデルの結果を合算しました。

送信方法本文表のセルグラフスキャンページ
抽出テキスト300 問中 297170 問中 168150 問中 0105 問中 0
OCR 後にテキスト送信105 問中 104
PDF ファイル186 問中 186103 問中 10390 問中 9063 問中 62
ページ画像、110 dpi260 問中 258148 問中 148130 問中 13091 問中 89
ページ画像、72 dpi260 問中 257148 問中 142130 問中 13091 問中 88

dpi は 1 インチあたりのドット数で、ページを画像化する際の解像度です。72 dpi では、US Letter のページは 612 × 792 ピクセルになります。OCR は光学文字認識で、画像から文字を読み取るソフトウェアです。今回はオープンソースの Tesseract をローカルで実行しました。

抽出テキストでは、すべてのモデルでグラフとスキャン文書の正答数が 0 でした。数値がテキストに含まれていないためです。OCR を使えばスキャンしたレポートをテキストの料金で読めましたが、グラフは読めませんでした。グラフを含む 15 枚のスライドを OCR にかけた結果は、試した 2 モデルとも 7 問中 0 問でした。今回の表は単純な格子状だったため、テキスト抽出後も情報が保たれました。結合セルや、列内で折り返されたテキストは難しくなるので、実際に使う文書で検証してください。

文書入力のコストを下げるには?

方法は 7 つあり、そのうち 6 つを測定しました。

1. 課金ルールに合わせて送信方法を選ぶ。テキストだけのページはテキストで送ります。それ以外は Gemini ならファイル、他社なら 72 dpi のページ画像を使います。ページ画像のコストは、ページ内の文字量に左右されないためです。文字の多い 6 ページの IRS 書式は、Claude Sonnet 5.5 でテキストなら 13,635 トークン、ファイルなら 22,871、72 dpi の画像なら 4,015 でした。どの方法でも 3 問すべてに正答しました。

2. ページごとに送信方法を切り替える。実際の文書には複数の種類のページが混在します。上の kind 関数で分類し、テキストページはテキスト、画像のあるページは 72 dpi の画像、スキャンページは OCR を通して送ります。9 ページの文書(テキスト 4 ページ、グラフ 3 ページ、スキャン 2 ページ)に対する 12 問の結果は次のとおりです。

モデルファイルページごとに振り分け全ページを 72 dpi の画像で送信
GPT-6 Luna15,106、12 問正答5,140、12 問正答5,750、9 問正答
Claude Sonnet 5.517,228、12 問正答6,543、12 問正答6,257、12 問正答
Qwen 3.8 Flash25,036、12 問正答5,313、12 問正答4,710、12 問正答
Gemini 3.8 Flash5,043、12 問正答7,110、12 問正答10,278、12 問正答

3 社では、ファイル送信に比べて入力を 62%-79% 削減し、全問正答を維持できました。Gemini は元からファイルが最安です。

3. 画像の解像度を下げる。ただし本文には使わない。ページ画像のトークン数はピクセル数を減らすと下がります。例外は Gemini で、どのサイズでも同じ課金でした。ラベルの大きいグラフのスライドは 36 dpi でも読め、試した 6 モデルすべてが 7 問中 6 問以上に正答しました。Claude Haiku 5.5 では 15 枚で 2,874 トークンとなり、ファイルの 23,949 より少なくなりました。本文には 72 dpi が必要でした。50 dpi でも Claude Haiku 5.5 と Gemini は 7 問すべてに正答しましたが、GLM 5.3 Flash は 7 問中 2 問に落ちました。GPT-6 Luna は 96 dpi 未満のどのサイズでもページ画像で正答を取りこぼしたため、ファイルかテキストを渡してください。

4. OpenAI では、画像のあるページに detail の low を指定する。Responses API は PDF ファイルに detail フィールドを指定できます。GPT-6 Luna に low を指定すると、15 枚のスライドはデフォルトの 22,155 トークンから 9,985 に、スキャンしたレポートは 34,396 から 11,387 に減り、すべての質問に正答しました。テキストだけのページは変わりませんでした。

5. 必要なページだけを送る。120 ページのマニュアルについて、まず GPT-6 Luna に抽出テキスト(46,420 トークン)を読ませ、4 つの質問それぞれに必要なページを特定させました。次に、その 4 ページだけの PDF を Claude Sonnet 5.5 に送り、8,758 トークンで 4 問すべてに正答しました。ファイル全体は Claude で 253,822 トークンになるため、最初の処理を含めても入力コストは $0.508 から $0.022 に下がりました。

6. 安いモデルで文字起こしし、大きなモデルで推論する。安い視覚対応モデルで、15 枚のグラフのスライドを Markdown の表に変換しました。費用は $0.002-$0.011 でした。その後、Claude Opus 5.5 は約 2,000 トークンの文字起こし結果から、$0.010 で 7 問すべてに正答しました。ファイルで送ると入力は 23,949 トークン、$0.096 です。文字起こし結果は保存して、後の質問にも使えます。

7. 文書をキャッシュし、待てる処理はバッチにする。PDF にキャッシュの区切り(Anthropic の API の cache_control マーカー)を設定すると、Claude Sonnet 5.5 への 6 回の質問は $0.461 から $0.117 に下がりました。最初に 38,364 トークンをキャッシュへ書き込み、続く 5 回はそれを 1 回約 $0.004 で読み込みました。バッチ処理だけは測定していません。OpenAI、Anthropic、Google はいずれも、24 時間以内に結果を返すバッチ API を半額としています。Anthropic はキャッシュの割引と併用できるとしています。

注意したい料金の境界があります。120 ページの PDF は Claude で 250,000 トークンを超えます。Claude Haiku 5.5 では、100,000 トークンを超えるプロンプトは 5 倍の料金 で課金されます。同じマニュアルの抽出テキストは 68,382 トークンです。

Word ファイルはどう扱う?

変換します。試した 6 モデルのうち、.docx をファイルとして受け付けたのは GPT-6.1 Sol と GPT-6 Luna だけでした。どちらもテキストしか読みません。これは、PDF 以外のファイルについての OpenAI のドキュメントどおりです。テキストと表なら pandoc で Markdown に変換すれば十分です。9 ページの契約書は 3,144 トークンになり、すべてのモデルが 7 問すべてに正答しました。グラフを埋め込んだメモは、この方法では 5 問中 2 問でしたが、LibreOffice で PDF に変換すると 5 問すべてに正答しました。入力は Gemini 3.8 Flash で 1,217 トークン、Claude Sonnet 5.5 で 3,827 でした。

測定方法

対象は 10 文書です。7 つは生成した文書(12 ページのレポート、8 ページの財務表、グラフを含む 15 枚のスライド、レポートのスキャン版、120 ページのマニュアル、Word の契約書、Word のメモ)、3 つは公開文書(論文「Attention Is All You Need」、IRS Form W-9、NIST の AI リスク管理フレームワーク)です。それぞれに、答えが一意に検証できる質問を 3-7 問用意しました。

主測定では、各文書を各送信方法で各モデルに、1 リクエストで送信しました。2026 年 10 月 10 日に 568 リクエストを実行し、566 件が成功しました(GPT-6 Luna が 120 枚のページ画像を 2 回拒否しました)。課金ルールとコストの測定では、同日に各社の低価格モデルを 1 つずつ使い、さらに 176 リクエストを実行しました。キャッシュのテスト(Messages API)と detail のテスト(Responses API)を除き、すべて Synthorai ゲートウェイの OpenAI 互換 chat エンドポイントを通しました。金額には定価を使っています。

トークン数は、今回の経路でエンドポイントが返した値です。同じモデルでも、提供元によってファイルの前処理が異なることがあります。このルールを前提にする前に、自分の経路で 6 ページのテストを実行してください。質問数は文書あたり 3-7 問なので、全問正答した方法でも、読めることを確認しただけで、情報が一切失われないと証明したわけではありません。

よくある質問

PDF の 1 ページは何トークン?

ベンダーによります。ファイルとして送ると、GPT-6 は本文に約 15 トークン、Claude は本文に 1,558、Gemini は本文無料で一律 515、Qwen 3.8 は本文に約 2,098 を加算します。スキャンページの実測は、GPT-6.1 Sol で 2,868 トークン、Claude Sonnet 5.5 で 1,579 でした。

PDF と抽出テキストはどちらが安い?

テキストだけのページでは、Gemini 以外はすべて、抽出テキストのほうが安いか同額です。Gemini は本文をカウントしないため、文字の多いページはファイルのほうが少ないトークンで済みます。GPT-6.1 Sol では、ファイルとテキストのコストはほぼ同じです。抽出テキストでは、グラフやスキャンページに関する質問には回答できません。

LLM はスキャンした PDF を読める?

ファイルかページ画像として渡せば読めます。スキャンから抽出したテキストは空になり、今回のテストでは 105 問中 0 問でした。ローカルで OCR を実行して結果を送ると、テキストの料金で 105 問中 104 問に正答しました。印刷された文字のスキャンには最も安い方法です。

PDF ファイルを直接受け付けるモデルは?

今回のテストでは、GPT-6.1 Sol、GPT-6 Luna、Claude 5.5 の 3 モデル、Gemini 3.1 Pro、Gemini 3.8 Flash、Qwen 3.8 Max、Qwen 3.8 Flash です。DeepSeek V4.1 Flash、GLM 5.3 Flash、Kimi K3、Qwen 3.6 35B はページ画像を受け付けましたが、ファイルは受け付けませんでした。

長い PDF のコストを減らすには?

送るページを絞り、各ページを最も安い方法で送り、送った内容を再利用します。安いモデルで必要なページを選ぶと、Claude Sonnet 5.5 の 120 ページのリクエストは、入力 253,822 トークンから 8,758 に減りました。種類ごとにページの送信方法を切り替えると、混在文書の入力を 62%-79% 削減できました。キャッシュを使うと、同じ文書に対する 6 回の質問は $0.461 から $0.117 に下がりました。

関連記事

← ブログに戻る