本指南介绍如何向 Claude 发送图像、适用的限制和成本,以及在哪里可以找到基于坐标的工作流的指导。
通过以下方式使用 Claude 的视觉能力:
在 API 上,使用以下三种源类型之一,以 image 内容块的形式向 Claude 提供图像:
file_id(上传一次,多次引用)在 Amazon Bedrock 和 Google Cloud 上,目前仅支持 base64 编码的源。
正如将长文档放在查询之前可以改善文本提示的结果一样,当图像位于文本之前时,Claude 的表现最佳。放在文本之后或与文本穿插的图像仍然表现良好,但如果您的用例允许,请优先采用先图像后文本的结构。
image1_data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4z8AAAAMBAQDJ/pLvAAAAAElFTkSuQmCC"
image1_media_type = "image/png"
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": image1_media_type,
"data": image1_data,
},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message)client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "url",
"url": "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg",
},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message)对于需要重复使用的图像,或者当您希望避免编码开销时,请使用 Files API。上传图像一次,然后在后续消息中引用返回的 file_id,而不是重新发送 base64 数据。
在多轮对话和代理式工作流中,每个请求都会重新发送完整的对话历史。如果图像是 base64 编码的,则每一轮的有效负载中都会包含完整的图像字节,随着对话的增长,这会显著增加请求大小和延迟。将图像上传到 Files API 并通过 file_id 引用它们,可以使请求有效负载保持较小,无论对话历史中累积了多少图像。
client = anthropic.Anthropic()
# 上传图像文件
with open("image.jpg", "rb") as f:
file_upload = client.beta.files.upload(file=("image.jpg", f, "image/jpeg"))
# 在消息中使用已上传的文件
message = client.beta.messages.create(
model="claude-opus-5",
max_tokens=1024,
betas=["files-api-2025-04-14"],
messages=[
{
"role": "user",
"content": [
{
"type": "image",
"source": {"type": "file", "file_id": file_upload.id},
},
{"type": "text", "text": "Describe this image."},
],
}
],
)
print(message.content)请参阅 Messages API 示例了解更多示例代码和参数详情。
您可以在单个请求中包含多张图像,Claude 会联合分析它们。这对于比较图像、询问差异或处理诸如文档页面之类的序列非常有用。发送多张图像时,请用简短的文本标签(Image 1:、Image 2: 等)介绍每张图像,以便您可以在提示和后续轮次中按名称引用它们。
image1_data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4z8AAAAMBAQDJ/pLvAAAAAElFTkSuQmCC"
image2_data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGNgYPgPAAEDAQAIicLsAAAAAElFTkSuQmCC"
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-5",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Image 1:"},
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": image1_data,
},
},
{"type": "text", "text": "Image 2:"},
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": image2_data,
},
},
{"type": "text", "text": "How are these images different?"},
],
}
],
)
print(message)在多轮对话中,以相同的方式在后续的 user 轮次中添加新图像。Claude 可以访问之前轮次中的每张图像,因此诸如"这些与前两张相似吗?"之类的后续问题无需在新轮次的内容中再次包含之前的图像即可正常工作。
每条消息或每个请求的最大图像数量为:
每张图像的最大尺寸为 8000x8000 像素。
如果单个 API 请求包含超过 20 张图像,则会应用更严格的单图像尺寸限制。在 Amazon Bedrock 和 Google Cloud 上,诸如 PDF 之类的文档块也计入此阈值。超过更严格限制的图像将被拒绝,并返回 invalid_request_error,其消息会提及"many-image requests"并说明当前的像素限制。要在所有平台上保持在限制之内,请调整每张图像的大小,使其任一维度都不超过 2000 像素,或者将请求保持在 20 个或更少的图像和文档块。
每张图像的最大大小为:
Claude 支持 JPEG、PNG、GIF 和 WebP 图像(image/jpeg、image/png、image/gif、image/webp)。不支持动画,仅使用第一帧。
Claude 以图块(patch)而非像素的方式查看图像。每个图块是图像中一个 28×28 像素的块,称为视觉令牌(visual token)。因此,一张图像的成本为 ⌈width / 28⌉ × ⌈height / 28⌉ 个视觉令牌。
每个模型都有一个最大原生图像分辨率,以长边限制和视觉令牌限制表示。大于任一限制的图像在处理前会被缩小;有关确切规则,请参阅 Claude 如何调整图像大小和填充图像。
| 分辨率层级 | 模型 | 最大长边 | 最大视觉令牌数 |
|---|---|---|---|
| 高分辨率 | Claude 4.7 及更高版本的模型 | 2576 像素 | 4784 |
| 标准 | 所有其他模型 | 1568 像素 | 1568 |
高分辨率支持在所列模型上是自动的,不需要 beta 标头或客户端选择启用。
下表显示了每个层级上几种图像尺寸的缩小后分辨率和视觉令牌成本:
| 图像尺寸 | 标准层级:缩小至 | 标准层级:令牌数 | 高分辨率层级:缩小至 | 高分辨率层级:令牌数 |
|---|---|---|---|---|
| 200x200 像素(0.04 百万像素) | 不调整大小 | 64 | 不调整大小 | 64 |
| 1000x1000 像素(1 百万像素) | 不调整大小 | 1296 | 不调整大小 | 1296 |
| 1092x1092 像素(1.19 百万像素) | 不调整大小 | 1521 | 不调整大小 | 1521 |
| 1920x1080 像素(2.07 百万像素) | 1456x819 像素 | 1560 | 不调整大小 | 2691 |
| 2000x1500 像素(3 百万像素) | 1269x952 像素 | 1564 | 不调整大小 | 3888 |
| 3840x2160 像素(8.29 百万像素) | 1456x819 像素 | 1560 | 2576x1449 像素 | 4784 |
当图像被缩小时,Claude 会在保持其宽高比的同时将其缩放到符合该层级限制的最大尺寸。这限制了令牌成本的上限。有关精确规则和参考实现,请参阅 Claude 如何调整图像大小和填充图像。
要估算成本,请将令牌数乘以您所使用模型的每令牌价格。例如,按 Claude Haiku 4.5 每百万输入令牌 1 美元(标准层级)计算,1000×1000 的图像每千张约花费 $1.30。按 Claude Opus 5 每百万 5 美元(高分辨率层级)计算,同一图像每千张约花费 $6.48,而 4K 图像每千张约花费 $23.92。
高分辨率图像使用的视觉令牌数量可能比同一图像在标准层级模型上多出大约三倍。如果您不需要高分辨率为计算机使用、屏幕截图理解和密集文档提供的额外保真度,请在发送前对图像进行降采样以控制令牌成本。为了最大限度地减少延迟并简化基于坐标的工作流,请优先在上传图像之前调整其大小。
向 Claude 提供图像时,请牢记以下几点以获得最佳结果:
有关边界框、点和像素坐标,请参阅坐标和边界框。Claude 返回的是相对于其在调整大小后所看到的图像的绝对像素坐标;该指南介绍了 Claude 如何调整图像大小和填充图像,以及如何预先调整大小或重新缩放,以使坐标与您的原始图像对齐。
尽管 Claude 的图像理解能力处于前沿水平,但仍有一些需要注意的局限性:
请始终仔细审查和验证 Claude 的图像解读,尤其是对于高风险用例。在没有人工监督的情况下,请勿将 Claude 用于需要完美精度或敏感图像分析的任务。
获取有关解读图表和从表单中提取内容等任务的技巧和最佳实践技术。
查看 Messages API 文档,包括涉及图像的示例 API 调用。
Was this page helpful?