Claude API 图片输入(vision)怎么传:base64、url、file_id 三种写法,数量、大小和 token 怎么算

想让 Claude 看图?在 content 里放 image 块,来源可以是 base64、url 或 file_id。本文讲三种写法、支持的格式、数量和 10 MB 单图限制、按 28 乘 28 补丁估算 token,以及官方列出的识图局限。

NNathaniel bigo··原创首发·AI 辅助撰写
8 分钟读完
资料核对于 2026-11-05 · 依据官方文档与公开资料整理 其他 账号
本文根据 Claude 官方《Vision》整理,资料核对于 2026-11-05。配图为本站整理的示意图,不是界面截图。代码里的模型名取自官方当天示例,请以官方模型页为准。本站(bigolab.com)不是 Anthropic 官方网站。API 是按用量计费的独立服务,与 Claude 订阅分开计算,Key 的获取见 /guides/claude-api-key-console。

适用于谁

  • 想让 Claude 识别截图、票据、图表、照片的开发者;
  • 在网页或应用里的 Claude 能看图,却不知道 API 里怎么传的人;
  • 图片多、请求慢或报错,想弄清上限和 token 的人。

在 claude.ai 里直接上传图片的说明,不属于本文范围,网页端文件限制见 /guides/claude-file-upload-limits。

结论先说

  1. 图片放进 image 内容块,和 text 块一起放在用户消息的 content 数组里。
  2. 三种来源:base64(把图片编码进请求)、url(给一个公开图片网址)、file(用 Files API 先上传,再引用 file_id)。
  3. 支持 JPEG、PNG、GIF、WebP。 GIF 动图只用第一帧。
  4. 数量:每个请求最多 100 张(上下文窗口为 200k token 的模型)或 600 张(其他模型);单张在 Claude API 上最大 10 MB(base64 编码后)。
  5. 图片放在文字前面,官方说这样效果更好。

三种传图方式

图:本站根据 Claude 官方《Vision》 整理的示意图

一、方式一:base64

把图片读成字节、编码成 base64 字符串,放进请求。Python:

python
import base64
import anthropic

client = anthropic.Anthropic()

with open("chart.png", "rb") as f:
    image_data = 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": "image",
                    "source": {
                        "type": "base64",
                        "media_type": "image/png",
                        "data": image_data,
                    },
                },
                {"type": "text", "text": "请描述这张图里的主要信息。"},
            ],
        }
    ],
)
print(message.content[0].text)

media_type 要和图片真实格式一致:PNG 写 image/png,JPEG 写 image/jpeg。TypeScript 里把文件读成 base64 的写法是 fs.readFileSync("chart.png").toString("base64"),其余结构完全相同。

二、方式二:url

图片已经在公开网址上,就不必自己编码:

python
message = client.messages.create(
    model="claude-opus-5-5",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {"type": "url", "url": "https://example.com/chart.png"},
                },
                {"type": "text", "text": "这张图表说明了什么?"},
            ],
        }
    ],
)

官方提示:如果你用的是 Amazon Bedrock 或 Google 托管的 Claude 模型,这些平台只支持 base64 来源。所以代码要换平台时,不要默认 url 一定能用。网址必须是服务器能访问到的公开地址。

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

多轮对话里,每一轮请求都会把完整历史重发一遍。如果图片是 base64,图片字节就会在每一轮重复发送,请求会越来越大、越来越慢。官方的建议是用 Files API 上传一次,之后只引用 file_id:

python
{"type": "image", "source": {"type": "file", "file_id": "file_xxx"}}

上传、管理、限制等细节见 /guides/claude-api-files-api。

四、多张图、顺序和提示词

一个 content 数组里可以放多个 image 块。本站的建议是在每张图前面用文字标一下,例如“图 1:”,再放图片,最后写问题,这样模型更容易分清哪句话指哪张图。这只是一种写法习惯,官方没有强制要求。

提醒两点:

  • 官方建议“先图后文”,但先文后图也能正常工作;
  • Claude 不会读取图片的元数据(比如拍摄时间、位置),只看画面内容。

五、数量和大小限制

项目官方限制
每个请求的图片数200k 窗口的模型 100 张,其他模型 600 张
单张尺寸最大 8000 乘 8000 像素
单张体积Claude API 上 10 MB(base64 编码后)
请求总大小128 MB(第一方 Claude API)

两点补充:

  • 超过 20 张图时有更严格的单图尺寸限制。 它按请求里所有 image 块算,包括你重发的历史轮次里的图。被拒绝时错误信息会提到 “many-image requests”。官方给的避免办法是每边缩到 3000 像素以内,或把图片与文档块控制在 20 个以内;
  • 图多时请求总大小常比张数先到上限,这时用 Files API 引用 file_id 可以让请求体变小。

六、token 怎么估算

图片 token 的估算方法

图:本站根据 Claude 官方《Vision》 整理的示意图

官方的算法:图片按 28 乘 28 像素的补丁处理,每个补丁算一个视觉 token,所以一张图约等于

向上取整(宽 ÷ 28)× 向上取整(高 ÷ 28)个 token。

每个模型有“长边上限”和“视觉 token 上限”,超过任一个,图片会先按比例缩小。官方分了两档:

档位适用模型长边上限视觉 token 上限
高分辨率Claude 4.7 及之后的模型2576 像素4784
标准其他模型1568 像素1568

官方表格里的例子:1000 乘 1000 像素的图,两档都是 1296 个 token,不会缩小;1920 乘 1080 的图,标准档缩到 1456 乘 819,约 1560 个 token,高分辨率档不缩小,约 2691 个 token。官方还提醒:高分辨率档同一张图可能比标准档多用约三倍视觉 token,不需要那么高保真时,先自己缩小再发,能省 token、降延迟。

真实费用请用官方的 token 计数接口先量一下,见 /guides/claude-api-count-tokens,价格以官方价格页当天为准。

七、官方列出的局限

  • 低质量、旋转过、小于 200 像素的图,容易出错甚至“幻觉”;
  • 位置和坐标是近似值,使用前要自己核对;
  • 数物体的个数只能给近似值,物体多又小时容易不准;
  • 不能判断一张图是不是 AI 生成的,别依赖它做这件事;
  • 复杂的医学影像(如 CT、MRI)不是它的设计用途,输出不能替代专业诊断。

压缩图片会减小请求,但 JPEG 压缩过重会让文字难以辨认,官方建议检查实际发出的图片。

常见问题

Q:图片能和 PDF 一起发吗?

可以。PDF 用 document 块,写法见 /guides/claude-api-pdf-support。

Q:同一张图反复问,能省钱吗?

可以配合提示词缓存,见 /guides/claude-prompt-caching。

Q:报错 400 或 413?

图片过大、格式不对、数量超限都可能触发,整体排查见 /guides/claude-api-error-codes。

参考资料

  • Claude 官方:Vision — https://platform.claude.com/docs/en/build-with-claude/vision

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

登录 后参与评论

还没有评论,来抢沙发~