本指南介绍如何在Claude中使用图像功能,包括最佳实践、代码示例以及需要注意的限制。


如何使用视觉功能

通过以下方式使用Claude的视觉功能:

  • claude.ai。像上传文件一样上传图像,或直接将图像拖放到聊天窗口中。
  • Console Workbench。如果您选择支持图像的模型(仅限Claude 3模型),每个用户消息块的右上角都会出现添加图像的按钮。
  • API请求。请参阅本指南中的示例。

上传前注意事项

评估图像大小

您可以在单个请求中包含多个图像(claude.ai最多5个,API请求最多100个)。Claude在制定回应时会分析所有提供的图像。这对于比较或对比图像很有帮助。

为获得最佳性能,如果图像超过大小或令牌限制,我们建议在上传前调整图像大小。如果您的图像长边超过1568像素,或图像超过约1,600个令牌,系统会首先按比例缩小图像,直到其符合大小限制。

如果您的输入图像太大需要调整大小,这将增加首个令牌响应时间的延迟,而不会给您带来任何额外的模型性能。任何边缘小于200像素的非常小的图像可能会降低性能。

为了改善首个令牌响应时间,我们建议将图像大小调整为不超过1.15百万像素(且两个维度都在1568像素以内)。

以下是我们的API接受的不同纵横比的最大图像尺寸表,这些图像不会被调整大小。使用Claude 3.5 Sonnet模型时,这些图像使用约1,600个令牌,每1000张图像花费约4.80美元。

纵横比图像尺寸
1:11092x1092 px
3:4951x1268 px
2:3896x1344 px
9:16819x1456 px
1:2784x1568 px

计算图像成本

您在请求中包含的每个图像都会计入您的令牌使用量。要计算大致成本,将估计的图像令牌数乘以您使用的模型的每令牌价格

如果您的图像不需要调整大小,您可以通过以下算法估算使用的令牌数:令牌数 = (宽度px * 高度px)/750

以下是基于Claude 3.5 Sonnet每百万输入令牌3美元的价格,在我们API大小限制内不同图像尺寸的大致令牌化和成本示例:

图像尺寸令牌数每张图像成本每1000张图像成本
200x200 px(0.04百万像素)~54~$0.00016~$0.16
1000x1000 px(1百万像素)~1334~$0.004~$4.00
1092x1092 px(1.19百万像素)~1590~$0.0048~$4.80

确保图像质量

向Claude提供图像时,请注意以下几点以获得最佳效果:

  • 图像格式:使用支持的图像格式:JPEG、PNG、GIF或WebP。
  • 图像清晰度:确保图像清晰,不要太模糊或像素化。
  • 文本:如果图像包含重要文本,请确保文本清晰可读且不要太小。避免为了放大文本而裁剪掉关键的视觉上下文。

提示示例

许多适用于与Claude进行基于文本交互的提示技巧也可以应用于基于图像的提示。

这些示例展示了涉及图像的最佳实践提示结构。

就像文档查询位置一样,图像放在文本之前时Claude的效果最好。图像放在文本之后或与文本交错的效果仍然不错,但如果您的用例允许,我们建议采用图像在前、文本在后的结构。

关于提示示例

这些提示示例使用Anthropic Python SDK,并使用httpx库从维基百科获取图像。您可以使用任何图像来源。

示例提示使用以下变量。

Python
import base64
import httpx

image1_url = "https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg"
image1_media_type = "image/jpeg"
image1_data = base64.standard_b64encode(httpx.get(image1_url).content).decode("utf-8")

image2_url = "https://upload.wikimedia.org/wikipedia/commons/b/b5/Iridescent.green.sweat.bee1.jpg"
image2_media_type = "image/jpeg"
image2_data = base64.standard_b64encode(httpx.get(image2_url).content).decode("utf-8")

在进行API请求时,您可以将图像作为base64编码的图像在image内容块中提供给Claude。以下是一个简单的Python示例,展示如何在Messages API请求中包含base64编码的图像:

Python
import anthropic

client = anthropic.Anthropic()
message = client.messages.create(
    model="claude-3-5-sonnet-20241022",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": image1_media_type,
                        "data": image1_data,
                    },
                },
                {
                    "type": "text",
                    "text": "描述这张图像。"
                }
            ],
        }
    ],
)
print(message)

有关更多示例代码和参数详情,请参阅Messages API示例


限制

虽然Claude的图像理解能力处于前沿水平,但仍有一些需要注意的限制:

  • 人物识别:Claude不能用于识别(即命名)图像中的人物,并且会拒绝这样做。
  • 准确性:在解释低质量、旋转或非常小(小于200像素)的图像时,Claude可能会产生幻觉或出错。
  • 空间推理:Claude的空间推理能力有限。它可能在需要精确定位或布局的任务中遇到困难,比如读取模拟时钟面或描述棋子的确切位置。
  • 计数:Claude可以给出图像中物体的大致数量,但可能并不总是精确准确,尤其是在有大量小物体时。
  • AI生成的图像:Claude不知道图像是否是AI生成的,如果被问到可能会回答错误。不要依赖它来检测假图或合成图像。
  • 不当内容:Claude不会处理违反我们可接受使用政策的不当或露骨图像。
  • 医疗应用:虽然Claude可以分析一般的医疗图像,但它并不是为解释复杂的诊断扫描(如CT或MRI)而设计的。Claude的输出不应被视为专业医疗建议或诊断的替代品。

始终仔细审查和验证Claude的图像解释,尤其是对于高风险用例。在没有人工监督的情况下,不要将Claude用于需要完美精确度或敏感图像分析的任务。


常见问题


深入了解视觉功能

准备好开始使用Claude构建图像应用了吗?以下是一些有用的资源:

如果您有任何其他问题,请随时联系我们的支持团队。您也可以加入我们的开发者社区,与其他创作者联系并获得Anthropic专家的帮助。