Skip to content

Openai Responses 接口 本地图片分析 API 文档

接口概述

该API允许用户上传图片并获取AI生成的详细描述,支持多种图片格式。

基础概念

  • Base64编码:将二进制图片数据转换为文本格式,便于在JSON中传输
  • MIME类型:标识图片格式的标准方式(如image/png)
  • 数据URI:包含MIME类型和Base64数据的统一格式

接口详情

请求地址

POST https://www.dmxapi.cn/v1/responses

请求头

http
Content-Type: application/json
Authorization: Bearer ******  # 替换为你的API密钥

请求参数

json
{
    "model": "gpt-4.1",
    "input": [
        {
            "role": "user",
            "content": [
                {
                    "type": "input_text",
                    "text": "图片描述提示语"
                },
                {
                    "type": "input_image",
                    "image_url": "data:image/png;base64,..."
                }
            ]
        }
    ]
}

Python 示例代码

python
import base64
import json
import os
import requests

# 配置参数
API_KEY = "sk-**************************"  # 替换为你的 DMXAPI 令牌
IMAGE_PATH = "generated_image_20251011_164143_1.png"  # 本地图片路径

def encode_image_to_base64(filepath):
    """
    将图片编码为Base64数据URI
    
    Args:
        filepath (str): 图片文件的路径
        
    Returns:
        str: 包含MIME类型的Base64数据URI字符串
    """
    # 获取文件扩展名确定MIME类型
    ext = os.path.splitext(filepath)[1].lower()
    
    # 定义文件扩展名到MIME类型的映射
    mime_map = {
        '.jpg': 'image/jpeg',
        '.jpeg': 'image/jpeg',
        '.png': 'image/png',
        '.gif': 'image/gif',
        '.webp': 'image/webp'
    }
    # 根据扩展名获取MIME类型,如果未找到则使用默认类型
    mime_type = mime_map.get(ext, 'application/octet-stream')
    
    # 读取并编码图片文件
    with open(filepath, "rb") as f:
        # 将图片文件读取为二进制数据,然后编码为Base64,最后构造数据URI
        return f"data:{mime_type};base64,{base64.b64encode(f.read()).decode('utf-8')}"


# 主程序入口
if __name__ == "__main__":
    # 步骤1: 将本地图片编码为Base64格式
    print("正在编码图片...")
    image_data = encode_image_to_base64(IMAGE_PATH)
    
    # 步骤2: 构造HTTP请求的头部和载荷
    # 设置请求头,包含内容类型和授权信息
    headers = {
        "Content-Type": "application/json",  # 指定请求体为JSON格式
        "Authorization": f"Bearer {API_KEY}"  # 使用Bearer令牌进行身份验证
    }
    
    # 构造请求载荷,包含模型名称和输入数据
    payload = {
        "model": "gpt-4.1",  # 指定使用的AI模型
        "input": [{
            "role": "user",  # 指定消息角色为用户
            "content": [
                {"type": "input_text", "text": "描述这张图片"},  # 文本输入:要求描述图片
                {"type": "input_image", "image_url": image_data}  # 图片输入:Base64编码的图片数据
            ]
        }]
    }
    
    # 步骤3: 发送HTTP请求并处理响应
    try:
        print("正在发送请求到DMXAPI...")
        # 向DMXAPI发送POST请求
        response = requests.post(
            "https://www.dmxapi.cn/v1/responses",  # API端点URL
            headers=headers,  # 请求头
            json=payload  # JSON格式的请求体
        )
        # 检查HTTP状态码,如果不是2xx则抛出异常
        response.raise_for_status()
        
        # 解析JSON响应
        result = response.json()
        print("收到API响应,正在解析...")
        
        # 检查API响应状态
        if result.get("status") == "completed":
            print("请求处理完成,正在提取结果...")
            
            # 提取输出内容
            output = result.get("output", [])
            if output and len(output) > 0:
                # 获取第一个消息的内容
                message = output[0]
                content = message.get("content", [])
                if content and len(content) > 0:
                    # 获取文本内容
                    text_content = content[0]
                    if text_content.get("type") == "output_text":
                        # 提取并显示图片描述
                        description = text_content.get("text", "")
                        print("\n" + "="*50)
                        print("图片描述:")
                        print("="*50)
                        print(description)
                        print("="*50)
                    else:
                        print("错误:响应中未找到文本内容")
                else:
                    print("错误:响应中没有内容数据")
            else:
                print("错误:响应中没有输出数据")
        else:
            # 处理非完成状态的响应
            print(f"请求状态: {result.get('status')}")
            if result.get("error"):
                print(f"API错误信息: {result.get('error')}")
            
    except requests.exceptions.RequestException as e:
        # 处理网络请求相关的异常
        print(f"网络请求失败: {str(e)}")
    except json.JSONDecodeError as e:
        # 处理JSON解析失败的异常
        print(f"JSON解析失败: {str(e)}")
    except Exception as e:
        # 处理其他未预期的异常
        print(f"其他错误: {str(e)}")

错误处理

  • 401: API密钥无效
  • 400: 请求参数错误
  • 413: 图片文件过大

一个 Key 用全球大模型