Skip to content

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("流式输出完成")  # 显示程序完成信息

注意事项

  1. 请将API_KEY替换为你的有效密钥
  2. 流式输出适合需要实时显示结果的场景
  3. 响应内容为JSON格式

一个 Key 用全球大模型