Claude 请求格式 流式对话 API
POST 请求基础
请求方式
使用 HTTP POST 方法向 Claude API 发送请求。
请求地址
POST https://www.dmxapi.cn/v1/chat/completions请求头设置
http
Content-Type: application/json
Authorization: Bearer sk-your-api-key-here
Accept: application/json基本请求格式
json
{
"model": "claude-3-5-sonnet-20240620",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "你好,请介绍一下你自己"
}
],
"stream": false,
"max_tokens": 1000,
"temperature": 0.7
}多模态请求格式(文本+图像)
json
{
"model": "claude-3-5-sonnet-20240620",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图片里有什么?请详细描述。"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.jpg"
}
}
]
}
],
"stream": false
}流式请求格式
json
{
"model": "claude-3-5-sonnet-20240620",
"messages": [
{
"role": "user",
"content": "请写一首关于春天的诗"
}
],
"stream": true
}主要参数说明
- model: 指定使用的Claude模型版本
- messages: 对话消息数组,包含角色和内容
- stream: 是否启用流式输出(true/false)
- max_tokens: 最大生成token数量
- temperature: 控制输出随机性(0-1)
对话流式
python
"""
Claude API 图像分析流式输出程序
这个程序演示了如何使用Claude API进行图像分析,并实现流式输出功能。
程序会向指定的图像URL发送分析请求,然后实时显示AI的分析结果。
主要功能:
1. 连接Claude API服务
2. 发送图像分析请求
3. 实时流式输出分析结果
4. 处理各种异常情况
作者:DMXAPI
创建时间:2025-10-14
"""
# 导入必要的Python标准库和第三方库
import json # 用于处理JSON数据的序列化和反序列化
import requests # 用于发送HTTP请求
import sys # 用于系统相关的参数和函数
# ==================== API配置部分 ====================
# 配置Claude 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": [ # 消息数组,包含系统提示和用户请求
{
"role": "system",
"content": "You are a helpful assistant." # 系统角色设定:设置AI为有用的助手
},
{
"role": "user", # 用户角色的消息
"content": [ # 多模态内容数组,包含文本和图像
{
"type": "text",
"text": "这张图片里有什么?请详细描述。" # 文本提示:要求AI描述图像内容
},
{
"type": "image_url", # 图像URL类型的内容
"image_url": {"url": "https://dmxapi.com/111.jpg"}, # 要分析的图像URL
},
],
},
],
"stream": True # 启用流式输出模式,允许实时接收响应数据
})
# ==================== HTTP请求头设置部分 ====================
# 设置HTTP请求头,包含认证信息和内容类型
headers = {
"Accept": "application/json", # 指定接受JSON格式的响应
"Authorization": f"Bearer {API_KEY}", # Bearer token认证方式
"Content-Type": "application/json", # 指定请求体为JSON格式
}
# ==================== 程序执行开始 ====================
print("正在连接API,开始流式输出...")
print("-" * 50) # 打印分隔线,美化输出格式
try:
# ==================== 发送API请求部分 ====================
# 向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解析错误
# 这种错误通常由数据分片或不完整的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_KEY替换为你的有效密钥
- 流式输出适合需要实时显示结果的场景
- 响应内容为JSON格式
