Skip to content

Claude 图片分析 API 文档

POST 请求说明

请求地址

POST https://www.dmxapi.cn/v1/chat/completions

请求头

http
Content-Type: application/json
Authorization: Bearer sk-your-api-key
Accept: application/json

请求体格式

json
{
  "model": "claude-3-5-sonnet-20240620",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant."
    },
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "这张图片里有什么?请详细描述。"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://dmxapi.com/111.jpg"
          }
        }
      ]
    }
  ],
  "stream": true
}

参数说明

  • model: 指定使用的Claude模型版本
  • messages: 消息数组,包含系统消息和用户消息
    • role: 消息角色,可以是 "system"、"user" 或 "assistant"
    • content: 消息内容,可以是字符串或包含文本和图像的数组
      • type: 内容类型,"text" 或 "image_url"
      • text: 文本内容
      • image_url.url: 图像的URL地址
  • stream: 是否启用流式输出,true为启用

响应格式

流式响应采用Server-Sent Events (SSE)格式:

data: {"choices":[{"delta":{"content":"分析"}}]}
data: {"choices":[{"delta":{"content":"结果"}}]}
data: [DONE]

Python调用示例

python
"""
Claude API 图像分析流式输出程序
功能:通过Claude API对指定图像进行分析,并实时流式显示分析结果
作者:DMXAPI
日期:2025-10-14
"""

# 导入必要的库
import json      # 用于处理JSON数据的序列化和反序列化
import requests  # 用于发送HTTP请求

# ==================== API配置部分 ====================
# 配置API密钥和请求URL
API_KEY = "sk-************************************"  # Claude API的访问密钥
url = "https://www.dmxapi.cn/v1/chat/completions"  # Claude API的请求端点URL

# ==================== 请求数据准备 ====================
# 构建发送给Claude API的请求负载
# 使用JSON格式组织请求数据,包含模型选择、消息内容等
payload = json.dumps({
    "model": "claude-3-5-sonnet-20240620",  # 指定使用的Claude模型版本
    "messages": [
        # 系统消息:定义AI助手的角色和行为
        {"role": "system", "content": "You are a helpful assistant."},
        {
            # 用户消息:包含文本提示和图像URL
            "role": "user",
            "content": [
                # 文本部分:要求AI分析图像内容
                {"type": "text", "text": "这张图片里有什么?请详细描述。"},
                {
                    # 图像部分:提供要分析的图像URL
                    "type": "image_url",
                    "image_url": {"url": "https://dmxapi.com/111.jpg"},
                },
            ],
        },
    ],
    "stream": True  # 启用流式输出模式,实时接收响应数据
})

# ==================== HTTP请求头设置 ====================
# 配置HTTP请求头,包含认证信息和内容类型
headers = {
    "Accept": "application/json",                    # 指定接受JSON格式的响应
    "Authorization": f"Bearer {API_KEY}",           # Bearer token认证方式
    "Content-Type": "application/json",             # 指定请求体为JSON格式
}

# ==================== 开始API调用 ====================
# 输出程序启动信息
print("正在连接API,开始流式输出...")
print("-" * 50)  # 输出分隔线,美化显示效果

try:
    # ==================== 发送HTTP POST请求 ====================
    # 向Claude API发送POST请求,启用流式传输模式
    response = requests.post(url, headers=headers, data=payload, stream=True)
    response.raise_for_status()  # 检查HTTP状态码,如果有错误会抛出异常
    
    # ==================== 流式响应处理 ====================
    # 逐行处理流式响应数据
    for line in response.iter_lines():
        if line:  # 确保当前行不为空
            try:
                # 尝试将字节数据解码为UTF-8字符串
                decoded_line = line.decode('utf-8')
            except UnicodeDecodeError:
                # 如果解码失败(可能是编码问题),跳过当前行
                continue
                
            # ==================== Server-Sent Events格式处理 ====================
            # 检查是否为SSE格式的数据行(以"data: "开头)
            if decoded_line.startswith("data: "):
                json_data = decoded_line[6:]  # 移除"data: "前缀,获取纯JSON数据
                
                # 检查是否为流式传输结束标志
                if json_data.strip() == "[DONE]":
                    break  # 结束数据处理循环
                
                # 跳过空数据行
                if not json_data.strip():
                    continue
                
                try:
                    # ==================== JSON数据解析 ====================
                    # 将JSON字符串解析为Python字典对象
                    data = json.loads(json_data)
                    
                    # ==================== 内容提取和输出 ====================
                    # 从响应数据中提取AI生成的内容
                    if "choices" in data and len(data["choices"]) > 0:
                        # 获取第一个选择项的增量数据
                        delta = data["choices"][0].get("delta", {})
                        # 提取文本内容
                        content = delta.get("content")
                        
                        if content:
                            # 实时输出内容,不换行,立即刷新缓冲区
                            # end="":不自动添加换行符
                            # flush=True:立即刷新输出缓冲区,确保内容立即显示
                            print(content, end="", flush=True)
                            
                except json.JSONDecodeError:
                    # 静默跳过JSON解析错误
                    # 这通常是由于网络传输中的数据分片导致的临时性问题
                    continue
                except KeyError:
                    # 静默跳过键错误
                    # 当响应数据结构不符合预期时可能发生
                    continue

# ==================== 异常处理 ====================
except requests.exceptions.RequestException as e:
    # 处理网络请求相关的异常(连接错误、超时等)
    print(f"请求错误: {e}")
except KeyboardInterrupt:
    # 处理用户手动中断程序(Ctrl+C)
    print("\n\n用户中断了流式输出")
except Exception as e:
    # 处理其他未预期的异常
    print(f"未知错误: {e}")

# ==================== 程序结束 ====================
# 输出程序完成信息
print("\n" + "-" * 50)  # 换行并输出分隔线
print("流式输出完成")      # 输出完成提示

注意事项

  1. 请妥善保管API密钥,不要泄露
  2. 图片URL需要可公开访问,图片网站没有做防盗链。
  3. 流式输出适合需要实时显示结果的场景

一个 Key 用全球大模型