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("流式输出完成") # 输出完成提示注意事项
- 请妥善保管API密钥,不要泄露
- 图片URL需要可公开访问,图片网站没有做防盗链。
- 流式输出适合需要实时显示结果的场景
