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 条评论

登录 后参与评论

还没有评论,来抢沙发~