本指南介绍如何向 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-4-8",
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-4-8",
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-4-8",
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: 等),以便您在提示和后续轮次中按名称引用它们。
client = anthropic.Anthropic()
message = client.messages.create(
model="claude-opus-4-8",
max_tokens=1024,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "Image 1:"},
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4z8AAAAMBAQDJ/pLvAAAAAElFTkSuQmCC",
},
},
{"type": "text", "text": "Image 2:"},
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGNgYPgPAAEDAQAIicLsAAAAAElFTkSuQmCC",
},
},
{"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)。因此,一张图像的成本为 ⌈宽度 / 28⌉ × ⌈高度 / 28⌉ 个视觉令牌。
每个模型都有一个最大原生图像分辨率,以长边限制和视觉令牌限制表示。超过任一限制的图像会在处理前被缩小;确切规则请参阅 Claude 如何调整图像大小和填充。
| 分辨率层级 | 模型 | 最大长边 | 最大视觉令牌数 |
|---|---|---|---|
| 高分辨率 | Claude Fable 5、Claude Mythos 5、Claude Opus 4.8、Claude Opus 4.7、Claude Sonnet 5 | 2576 像素 | 4784 |
| 标准 | 所有其他模型 | 1568 像素 | 1568 |
所列模型会自动启用高分辨率支持,无需 beta 标头或客户端选择加入。
下表显示了每个层级下几种图像尺寸的视觉令牌成本:
| 图像尺寸 | 标准层级令牌数 | 高分辨率层级令牌数 |
|---|---|---|
| 200x200 像素(0.04 百万像素) | 64 | 64 |
| 1000x1000 像素(1 百万像素) | 1296 | 1296 |
| 1092x1092 像素(1.19 百万像素) | 1521 | 1521 |
| 1920x1080 像素(2.07 百万像素) | 1560 | 2691 |
| 2000x1500 像素(3 百万像素) | 1564 | 3888 |
| 3840x2160 像素(8.29 百万像素) | 1560 | 4784 |
要估算成本,请将令牌数乘以您所使用模型的每令牌价格。例如,按 Claude Haiku 4.5 每百万输入令牌 1 美元(标准层级)计算,1000×1000 的图像每千张约花费 $1.30。按 Claude Opus 4.8 每百万 5 美元(高分辨率层级)计算,同样的图像每千张约花费 $6.48,4K 图像每千张约花费 $23.92。
高分辨率图像使用的视觉令牌最多可达标准层级模型上同一图像的约三倍。如果您不需要高分辨率为计算机使用、屏幕截图理解和密集文档提供的额外保真度,请在发送前对图像进行降采样以控制令牌成本。为了最小化延迟并简化基于坐标的工作流,建议在上传图像之前调整其大小。
向 Claude 提供图像时,请牢记以下几点以获得最佳结果:
有关边界框、点和像素坐标的信息,请参阅坐标和边界框。Claude 返回的是相对于其调整大小后所看到的图像的绝对像素坐标;该指南介绍了 Claude 如何调整图像大小和填充,以及如何预先调整大小或重新缩放,使坐标与您的原始图像对齐。
尽管 Claude 的图像理解能力处于领先水平,但仍有一些需要注意的局限性:
请始终仔细审查和验证 Claude 的图像解读结果,尤其是在高风险用例中。对于需要完美精度或敏感图像分析的任务,请勿在没有人工监督的情况下使用 Claude。
Was this page helpful?