Claude API 怎麼讀 PDF:document 塊的 url、base64、file_id 寫法,600 頁和 128 MB 限制,token 怎麼估

想讓 Claude 讀合同、論文、財報 PDF?在 content 裏放 type 為 document 的塊,來源可以是 url、base64 或 file_id。本文講三種寫法、128 MB 與頁數上限、每頁轉圖像加提取文字的原理、token 估算,以及緩存與批量處理的用法。

NNathaniel bigo··原創首發·AI 輔助撰寫
9 分鐘讀完
資料核對於 2026-11-05 · 依據官方文檔與公開資料整理 其他 帳號
本文根據 Claude 官方《PDF support》整理,資料核對於 2026-11-05。配圖為本站整理的示意圖,不是介面截圖。代碼裏的模型名取自官方當天示例,請以官方模型頁為準。本站(bigolab.com)不是 Anthropic 官方網站。API 是按用量計費的獨立服務,與 Claude 訂閱分開計算,Key 的獲取見 /guides/claude-api-key-console。

適用於誰

  • 想讓 Claude 總結合同、論文、財報、說明書,或者從 PDF 裏抽取字段的開發者;
  • 網頁版能拖文件,卻不知道 API 裏怎麼傳的人(網頁端文件限制見 /guides/claude-file-upload-limits);
  • 想估算一份 PDF 要花多少 token 的人。

結論先說

  1. PDF 用 document 內容塊傳,和 text 塊一起放在用戶消息的 content 裏。
  2. 三種來源:url(公開網址)、base64(把文件編碼進請求,media_type 寫 application/pdf)、file(先傳到 Files API,再用 file_id 引用)。
  3. 限制:第一方 Claude API 請求總大小 128 MB;每個請求最多 600 頁,上下文窗口小於 1M token 的請求最多 100 頁;PDF 不能有密碼或加密。
  4. Claude 同時看文字和圖像:每頁會轉成圖像,再配上提取出的文字,所以能讀懂圖表、示意圖。
  5. 官方給的估算:每頁文字大約 1500 到 3000 token,另加圖像的 token;沒有額外的 PDF 附加費。

PDF 在 Claude 裏怎麼被處理

圖:本站根據 Claude 官方《PDF support》 整理的示意圖

一、方式一:url

PDF 已經在公開網址上時,最省事:

python
import anthropic

client = anthropic.Anthropic()

message = client.messages.create(
    model="claude-opus-5-5",  # 以官方模型頁當天為準
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "document",
                    "source": {"type": "url", "url": "https://example.com/report.pdf"},
                },
                {"type": "text", "text": "這份文件的主要結論是什麼?"},
            ],
        }
    ],
)
print(message.content[0].text)

網址必須是伺服器能訪問到的公開地址。

二、方式二:base64

文件在本地時,讀取後編碼:

python
import base64

with open("report.pdf", "rb") as f:
    pdf_base64 = base64.standard_b64encode(f.read()).decode("utf-8")

message = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "document",
                    "source": {
                        "type": "base64",
                        "media_type": "application/pdf",
                        "data": pdf_base64,
                    },
                },
                {"type": "text", "text": "請列出文件中所有的日期和金額。"},
            ],
        }
    ],
)

TypeScript 裏讀文件的寫法是 await readFile("report.pdf", { encoding: "base64" })(來自 node:fs/promises),請求結構完全一樣。注意 base64 會讓請求體變大,要留意前面說的 128 MB 總量。

三、方式三:先上載,再引用 file_id

同一份 PDF 要問很多次,或者文件很大時,官方建議用 Files API 先上載,之後只引用編號:

python
uploaded = client.files.upload(
    file=("report.pdf", open("report.pdf", "rb"), "application/pdf"),
)

message = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "document", "source": {"type": "file", "file_id": uploaded.id}},
                {"type": "text", "text": "請總結這份文件。"},
            ],
        }
    ],
)

上載、刪除、過期等管理方法見 /guides/claude-api-files-api。

四、它到底“看”到了什麼

PDF 的限制與費用

圖:本站根據 Claude 官方《PDF support》 整理的示意圖

官方描述的處理過程有三步:

  1. 系統把 PDF 的每一頁轉成一張圖像,同時提取每頁的文字;
  2. 文字和圖像一起交給 Claude,所以圖表、示意圖、版面也能被理解;
  3. Claude 回答時可以引用文字內容,也可以引用視覺內容。

這帶來兩個直接後果:

  • 費用是兩部分之和:文字 token(官方估算每頁約 1500 到 3000,看內容密度)加上圖像 token(按圖片規則計算,見 /guides/claude-api-image-input)。官方強調標準 API 價格適用,沒有額外的 PDF 費用;
  • 文字多、圖表多的 PDF 會很快佔滿上下文窗口,可能還沒到頁數上限就失敗。官方的建議是把大文件拆成幾段;每頁都按圖像處理,所以降低內嵌圖片的解像度也有幫助。

想事先知道一份 PDF 會用多少 token,可以用 token 計數接口,但它對 PDF 只接受 base64 來源,不接受 url 或 file,詳見 /guides/claude-api-count-tokens。

五、官方的幾條性能建議

  • 把 PDF 放在文字提問之前;
  • 使用標準字體,文字要清晰可讀;
  • 頁面方向要擺正,掃描件先把頁面旋轉好;
  • 在提示詞裏用 PDF 閱讀器裏顯示的“邏輯頁碼”來指頁,不要用印在頁面上的頁碼;
  • 大文件分塊處理;
  • 重複分析同一份文件時開啟提示詞緩存。

六、規模化:緩存與批量

  • 提示詞緩存:對同一份 PDF 多次提問,可以給 document 塊加緩存標記,之後的請求讀緩存,節省輸入成本和延遲。緩存的完整寫法見 /guides/claude-prompt-caching;
  • 批量處理:幾百份 PDF 要一起處理又不趕時間,可以用 Message Batches,官方文檔裏有現成的 PDF 批量示例,批量接口的用法見 /guides/claude-api-message-batches。

七、不是 PDF 的文件怎麼辦

document 塊不接受 xlsx、docx 這類二進制格式。官方的建議:

  • txt、csv、md 這類純文本,可以直接讀出文字放進 text 塊,或用 text/plain 上載到 Files API 後引用;
  • docx、xlsx 先轉成文字,或者轉成 PDF;官方特別提醒,含圖片的 docx 先轉 PDF,才能用上 PDF 的圖像解析和引用功能。

八、一個實用的小流程

把上面的內容串起來,處理一份新 PDF 時可以這樣走:

  1. 先看文件大小和頁數,超過限制就先拆分;
  2. 只問一次的小文件用 url 或 base64,要反覆提問的大文件先傳到 Files API;
  3. 請求裏把 document 塊放在 text 塊之前,問題裏用邏輯頁碼指明範圍,例如“只看第 3 到 5 頁”;
  4. 先在少量樣本上試,用返回的 usage 字段核對實際 token 用量,再決定要不要批量跑;
  5. 同一份文件的後續提問加上緩存標記,省下重複讀取的成本。

這些都是把官方各條建議串起來的做法,不是官方規定的固定流程,你可以按自己的文件情況調整。

常見問題

Q:為什麼提示請求太大或頁數超限?

對照上面的限制:128 MB、600 頁(窗口小於 1M token 的請求是 100 頁)。拆分文件,或改用 Files API 減小請求體。整體排查見 /guides/claude-api-error-codes。

Q:加密或設了密碼的 PDF 能讀嗎?

官方要求是標準 PDF,不能有密碼或加密。

Q:能讓回答附上出處嗎?

document 塊有可選的 citations 字段,啟用後可以獲得引用,細節官方有專門頁面,本文不展開。

Q:費用怎麼算?

文字和圖像都按輸入 token 計,價格以官方價格頁當天為準。

參考資料

  • Claude 官方:PDF support — https://platform.claude.com/docs/en/build-with-claude/pdf-support
  • Claude 官方:Files API — https://platform.claude.com/docs/en/build-with-claude/files
  • Claude 官方:Token counting — https://platform.claude.com/docs/en/build-with-claude/token-counting

Nathaniel 的更多內容

  1. 01

    Claude Code 處理大倉庫:怎麼讓它只看需要的目錄(子目錄 CLAUDE.md、claudeMdExcludes、deny 規則)

    倉庫太大,Claude Code 總在讀無關文件、讀進別的包的規則?本文按官方大倉庫指南講:從哪個目錄啟動、子目錄 CLAUDE.md、claudeMdExcludes、Read 的 deny 規則、worktree.sparsePaths、additionalDirectories,以及一份合併後的配置示例。

    Claude0
  2. 02

    Claude Code 在 CI 裏跑:從本機 claude -p 到 GitHub Actions 的完整例子(自動審 PR、控成本)

    一條線走完 Claude Code 的 CI 用法:先在本機用 claude --bare -p 配 --json-schema 跑通,再寫進 GitHub Actions 用 claude-code-action@v1 自動審 PR,最後加上 --max-turns、超時、並發限制來控成本,並附上常見故障的排查順序。

    Claude0
  3. 03

    Claude Code 自定義 subagent 實例:測試員、調試員、只讀調研員、只讀數據庫員怎麼寫

    四個可直接改的 subagent 實例:跑測試的 test-runner、找根因的 debugger、只讀調研員、用 PreToolUse hook 限成只讀 SQL 的 db-reader;講 tools、disallowedTools、model、maxTurns 怎麼配,怎麼點名調用。

    Claude0
  4. 04

    Claude Code 的 CLAUDE.md 模板:前端、後端、數據分析各一份,附拆分與自檢方法

    直接拿去改的三份 CLAUDE.md 模板(前端、後端、數據分析),每份都控制在官方建議的 200 行以內;再講怎麼用 .claude/rules 的 paths 拆出專屬規則、用 @ 導入長文檔,以及用 /context all 和 /doctor prompt-audit 檢查是否生效。

    Claude0
  5. 05

    Claude Code 自己寫一個插件並發布到 marketplace:plugin.json、marketplace.json、validate 到團隊安裝的完整流程

    想把自己寫的 Skill、Hook 打包給團隊用?按 Claude Code 官方 Plugins 文檔,從目錄結構、plugin.json、claude plugin validate,到寫 marketplace.json、推到 Git、讓同事一條命令安裝,再到版本更新,走完一遍完整流程。

    Claude0
  6. 06

    Claude Code 寫一個會自動觸發的 Skill:從需求到觸發,用 description、when_to_use 和 paths 控制它什麼時候出場

    寫好的 Skill 總是不觸發,或者什麼都觸發?本文按 Claude Code 官方「Extend Claude with skills」走一遍完整實例:把「改數據庫遷移前先檢查」寫成一個會自動出場的 Skill,包含 description、when_to_use、paths、附帶腳本、觸發測試和評估。

    Claude0

同產品的其他教學

  1. 01

    Claude Code 配 Sentry MCP 排查線上報錯:添加命令、瀏覽器授權、貼 issue 連結修 bug 和插件子智能體

    線上報錯只能手動複製堆棧給 Claude Code?Sentry 官方提供 MCP 服務,可以讓它直接讀 issue、堆棧和 trace。本文按 Claude Code 官方 MCP 文檔和 Sentry MCP 官方說明,講添加命令、/mcp 授權、典型排查流程、插件方式和自託管注意事項。

    Claude0
  2. 02

    Claude Code 配 Context7 MCP 查最新文檔:兩種安裝方式、use context7 怎麼寫、指定庫和版本

    Claude Code 寫出來的代碼用了舊版 API?Context7 是一個把庫的最新文檔餵給編程助手的 MCP 服務。本文按 Context7 官方倉庫和文檔,講兩種安裝方式、在 Claude Code 裏的添加命令、use context7 與 library ID 的寫法,以及使用時的注意事項。

    Claude0
  3. 03

    Claude API 用量層級與速率限制:Evaluation / Start / Build / Scale 怎麼分、月度花費上限、自設上限和怎麼申請提額

    Claude API 的限額到底按什麼算?按官方《Rate limits》講清用量層級、RPM / ITPM / OTPM、緩存讀取為何不佔 ITPM、各層級月度花費上限、自設花費上限的 400、工作區限額、響應頭,以及在 Console 裏 Request tier increase 提額。

    Claude0
  4. 04

    Claude API 模型 ID 怎麼寫、怎麼查可用模型:dateless 命名、別名區別、Models API 的 lifecycle 和 capabilities

    model 參數該填什麼?按官方《Models overview》《Model IDs and versioning》《List Models》講清 Claude 模型 ID 的格式、4.6 之前帶日期與之後不帶日期的區別、別名是什麼,以及用 GET /v1/models 查可用模型、生命週期和能力字段。

    Claude0
  5. 05

    Claude API 代碼執行工具(code execution)怎麼用:tools 寫法、上載文件分析、取回生成文件、容器限制和計費

    想讓 Claude API 真的跑代碼做數據分析、生成圖表和文件?按官方《Code execution tool》講清三個工具版本、最小請求、上載 CSV 分析、$OUTPUT_DIR 取回文件、容器內存與聯網限制、錯誤碼、容器複用和計費規則。

    Claude0
  6. 06

    Claude API 聯網搜尋工具(web search tool)怎麼用:tools 寫法、max_uses、域名過濾、引用字段和計費

    想讓 Claude API 回答帶最新資訊?按官方《Web search tool》講清 web_search 工具的三個版本、請求寫法、max_uses、域名過濾、引用字段、錯誤碼和計費,附排查表。

    Claude0

0 條評論

登入 後參與評論

還沒有評論,來搶沙發~