Skip to content

Qwen3-VL-235B-A22B-Thinking 网络视频分析 API 文档

📖 接口说明

通过多模态 AI 模型分析图片内容,理解视频内容、提取视频信息。

✨模型名称

Qwen3-VL-235B-A22B-Thinking

🔗 接口地址

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

💻 Python 调用示例

python

"""
╔══════════════════════════════════════════════════════════════════════════════╗
║                     DMX API 多模态视频识别示例                                ║
║                  Qwen3-VL-235B-A22B-Thinking 模型调用                         ║
╚══════════════════════════════════════════════════════════════════════════════╝

【功能说明】
    本脚本演示如何使用 DMX API 的 chat/completions 接口进行视频内容识别。
    通过调用 Qwen3-VL (Vision-Language) 多模态大模型,实现对视频内容的
    智能分析与描述。该模型支持"思维链"推理,会输出推理过程。

【支持的输入类型】
    - 文本 (text)           : 用户的文字提示或问题
    - 图片 (image_url)      : 通过 URL 传入的图片
    - 视频 (video_url)      : 通过 URL 传入的视频
    - 模型名称              : Qwen3-VL-235B-A22B-Thinking

【API 端点】
    - 地址      : https://www.dmxapi.cn/v1/chat/completions
    - 方法      : POST
    - 格式      : OpenAI 兼容格式

【使用方法】
    1. 将 API_KEY 替换为您的真实密钥
    2. 修改 video_url 为目标视频地址

══════════════════════════════════════════════════════════════════════════════
"""

# ╔══════════════════════════════════════════════════════════════════════════╗
# ║                              导入依赖库                                   ║
# ╚══════════════════════════════════════════════════════════════════════════╝

import json      # JSON 编码/解码,用于构建请求体和解析响应
import sys       # 系统相关功能,用于配置输出编码
import requests  # HTTP 请求库,用于调用 API 接口

# ────────────────────────────────────────────────────────────────────────────
# 配置标准输出编码为 UTF-8,解决 Windows 终端中文显示乱码问题
# ────────────────────────────────────────────────────────────────────────────
sys.stdout.reconfigure(encoding='utf-8')


# ╔══════════════════════════════════════════════════════════════════════════╗
# ║                            API 配置信息                                   ║
# ╚══════════════════════════════════════════════════════════════════════════╝

# ────────────────────────────────────────────────────────────────────────────
# API 密钥 (API Key)
# ────────────────────────────────────────────────────────────────────────────
# 说明    : 用于身份验证的密钥,请替换为您自己的密钥
# 获取    : 登录 https://www.dmxapi.cn 控制台获取
# 安全    : 请勿将密钥提交到公开代码仓库
# ────────────────────────────────────────────────────────────────────────────
API_KEY = "sk-**********************************"

# ────────────────────────────────────────────────────────────────────────────
# API 请求地址 (Endpoint)
# ────────────────────────────────────────────────────────────────────────────
# 说明    : DMX API 的 chat/completions 端点,兼容 OpenAI 格式
# 协议    : HTTPS (加密传输)
# 版本    : v1
# ────────────────────────────────────────────────────────────────────────────
API_URL = "https://www.dmxapi.cn/v1/chat/completions"


# ╔══════════════════════════════════════════════════════════════════════════╗
# ║                            构建请求头                                     ║
# ╚══════════════════════════════════════════════════════════════════════════╝

# ────────────────────────────────────────────────────────────────────────────
# HTTP 请求头 (Headers)
# ────────────────────────────────────────────────────────────────────────────
# Content-Type   : 指定请求体的数据格式为 JSON
# Authorization  : Token 认证方式,携带 API 密钥
# ────────────────────────────────────────────────────────────────────────────
headers = {
    "Content-Type": "application/json",      # 请求体格式:JSON
    "Authorization": f"{API_KEY}"     # 认证方式:Token
}


# ╔══════════════════════════════════════════════════════════════════════════╗
# ║                            构建请求体                                     ║
# ╚══════════════════════════════════════════════════════════════════════════╝

# ────────────────────────────────────────────────────────────────────────────
# 请求体结构说明 (Payload Structure)
# ────────────────────────────────────────────────────────────────────────────
# {
#     "model": "模型名称",
#     "messages": [
#         {
#             "role": "user",              # 角色:user / assistant / system
#             "content": [                 # 多模态内容数组
#                 { "type": "text", "text": "..." },           # 文本内容
#                 { "type": "video_url", "video_url": {...} }  # 视频内容
#             ]
#         }
#     ]
# }
# ────────────────────────────────────────────────────────────────────────────

payload = {
    # ========================================================================
    # 模型选择 (Model Selection)
    # ========================================================================
    # Qwen3-VL-235B-A22B-Thinking:
    # ========================================================================
    "model": "Qwen3-VL-235B-A22B-Thinking",

    # ========================================================================
    # 消息数组 (Messages Array)
    # ========================================================================
    # 采用 OpenAI 兼容的消息格式,支持多轮对话
    # ========================================================================
    "messages": [
        {
            # ----------------------------------------------------------------
            # 消息角色 (Role)
            # ----------------------------------------------------------------
            # - user      : 用户消息
            # - assistant : AI 助手回复
            # - system    : 系统提示词
            # ----------------------------------------------------------------
            "role": "user",
            # ----------------------------------------------------------------
            "content": [
                # ============================================================
                # 文本内容 (Text Content)
                # ============================================================
                # type : 内容类型标识
                # text : 用户的文字提示,引导模型分析视频
                # ============================================================
                {
                    "type": "text",
                    "text": "描述这个视频中的内容"
                },

                # ============================================================
                # 视频内容 (Video Content)
                # ============================================================
                # type      : 内容类型标识,视频使用 "video_url"
                # video_url : 视频 URL 配置对象
                #   └─ url  : 视频的完整 URL 地址
                #
                # ============================================================
                {
                    "type": "video_url",
                    "video_url": {
                        "url": "https://doc.dmxapi.cn/0_fenxiang/aa.mp4"
                    }
                },
            ],
        }
    ],
}


# ╔══════════════════════════════════════════════════════════════════════════╗
# ║                         发送请求 & 处理响应                               ║
# ╚══════════════════════════════════════════════════════════════════════════╝

try:
    # ========================================================================
    # 步骤 1: 发送 POST 请求
    # ========================================================================
    # 使用 requests.post() 发送 HTTP POST 请求
    # - url     : API 端点地址
    # - headers : 请求头(包含认证信息)
    # - data    : 请求体(JSON 格式的字符串)
    # ========================================================================
    print("正在分析视频,请稍候...")
    print("─" * 60)

    response = requests.post(
        url=API_URL,
        headers=headers,
        data=json.dumps(payload)  # 将字典转换为 JSON 字符串
    )

    # ========================================================================
    # 步骤 2: 检查响应状态
    # ========================================================================
    # raise_for_status() 会在 HTTP 状态码表示错误时抛出异常
    # - 4xx : 客户端错误(如 401 未授权、404 未找到)
    # - 5xx : 服务器错误(如 500 内部错误、503 服务不可用)
    # ========================================================================
    response.raise_for_status()

    # ========================================================================
    # 步骤 3: 解析 JSON 响应
    # ========================================================================
    # API 返回的响应体为 JSON 格式,需解析为 Python 字典
    # ========================================================================
    result = response.json()

    # ========================================================================
    # 步骤 4: 输出结果
    # ========================================================================
    print("请求成功!")
    print("═" * 60)

    # ------------------------------------------------------------------------
    # 4.1 输出推理过程 (Reasoning Content)
    # ------------------------------------------------------------------------
    # Thinking 系列模型特有的输出,展示模型的思考过程
    # 字段路径: result['choices'][0]['message']['reasoning_content']
    # ------------------------------------------------------------------------
    reasoning = result['choices'][0]['message'].get('reasoning_content', '')
    if reasoning:
        print()
        print("┌─────────────────────────────────────────────────────────────┐")
        print("│                        【推理过程】                          │")
        print("└─────────────────────────────────────────────────────────────┘")
        print(reasoning)
        print()

    # ------------------------------------------------------------------------
    # 4.2 输出分析结果 (Content)
    # ------------------------------------------------------------------------
    # 模型对视频内容的最终分析描述
    # 字段路径: result['choices'][0]['message']['content']
    # ------------------------------------------------------------------------
    content = result['choices'][0]['message']['content']
    print("┌─────────────────────────────────────────────────────────────┐")
    print("│                        【分析结果】                          │")
    print("└─────────────────────────────────────────────────────────────┘")
    print(content)
    print()

    # ------------------------------------------------------------------------
    # 4.3 输出 Token 使用统计 (Usage Statistics)
    # ------------------------------------------------------------------------
    # Token 是模型处理文本的基本单位,用于计费和限制
    # - prompt_tokens     : 输入消耗的 Token 数(包含视频帧)
    # - completion_tokens : 输出消耗的 Token 数
    # - total_tokens      : 总计消耗的 Token 数
    # ------------------------------------------------------------------------
    print("═" * 60)
    print("┌─────────────────────────────────────────────────────────────┐")
    print("│                     【Token 使用统计】                       │")
    print("└─────────────────────────────────────────────────────────────┘")
    usage = result['usage']
    print(f"  ● 输入 Token (Prompt)     : {usage['prompt_tokens']:,}")
    print(f"  ● 输出 Token (Completion) : {usage['completion_tokens']:,}")
    print(f"  ● 合计 Token (Total)      : {usage['total_tokens']:,}")
    print("═" * 60)


# ╔══════════════════════════════════════════════════════════════════════════╗
# ║                              异常处理                                     ║
# ╚══════════════════════════════════════════════════════════════════════════╝

except requests.exceptions.RequestException as e:
    # ========================================================================
    # 网络请求异常 (Request Exception)
    # ========================================================================
    # 捕获所有 requests 库可能抛出的异常,包括:
    # - ConnectionError : 网络连接失败
    # - Timeout         : 请求超时
    # - HTTPError       : HTTP 状态码错误 (4xx, 5xx)
    # - TooManyRedirects: 重定向次数过多
    # ========================================================================
    print("═" * 60)
    print("【请求失败】")
    print(f"  错误类型: {type(e).__name__}")
    print(f"  错误信息: {e}")

    # 如果响应对象存在,尝试输出详细错误信息
    if hasattr(e, 'response') and e.response is not None:
        print(f"  状态码  : {e.response.status_code}")
        print(f"  响应内容: {e.response.text}")
    print("═" * 60)

except ValueError as e:
    # ========================================================================
    # JSON 解析异常 (Value Error)
    # ========================================================================
    # 当响应内容不是有效的 JSON 格式时抛出
    # ========================================================================
    print("═" * 60)
    print("【数据解析错误】")
    print(f"  错误信息: {e}")
    print("═" * 60)

except KeyError as e:
    # ========================================================================
    # 键值缺失异常 (Key Error)
    # ========================================================================
    # 当响应 JSON 中缺少预期的字段时抛出
    # ========================================================================
    print("═" * 60)
    print("【响应格式错误】")
    print(f"  缺少字段: {e}")
    print("═" * 60)

📤 返回示例

json
正在分析视频,请稍候...
请求成功!
============================================================
【推理过程】
------------------------------------------------------------
用户让我描述视频中的内容,但提供的其实是几张图片,不是视频。首先我需要确认用户的需求,可能他们误将图片序列当作视频。接下来,我需要分析每张图片的内容,然后按顺序描述。

首先看图片1:这是《复仇者联盟4》的中文海报,有“逆转无限”和“不惜一切代价”的标语,底部有上映日期424日,漫威标志,还有众多角色的剪影和形象,比如钢铁侠、美国队长、雷神等,背景是宇宙星空,上方有灭霸的剪影。

图片2:美国队长和黑寡妇并肩站立,背景是星空和山脉,美国队长穿蓝红制服,黑寡妇穿黑色紧身衣,两人表情严肃。

图片3:美国队长和黑寡妇的特写,美国队长的制服细节更清晰,黑寡妇手持盾牌,背景是星空,氛围紧张。

图片4:雷神的特写,手持雷神之锤,锤子有闪电,他穿着战甲,红色披风,表情坚定。

图片5:黑寡妇的特写,戴着红色发光的耳机,表情专注,背景是星空和黄昏的天空。

图片6:和图片5类似,但可能光线有变化,黑寡妇的耳机发光,表情严肃。

图片7:另一张海报,顶部有“DMXAPI”字样,角色排列类似图片1,但可能是不同版本,背景是紫色星空,角色更多。

图片8:和图片7类似,可能细节略有不同,但同样有“DMXAPI”标题。

图片9:和图片78相似,也是“DMXAPI”海报,角色位置可能调整。

需要注意到用户可能混淆了视频和图片序列,所以描述时要说明这是多张图片组成的序列,按顺序描述每张的内容,重点在角色、场景、文字信息等。

需要注意图片中的角色:钢铁侠、美国队长、雷神、黑寡妇、鹰眼、惊奇队长等,还有灭霸的剪影。文字方面有中文标语、上映日期、DMXAPI(可能是个错误或自定义标题)。

可能用户提供的图片序列是模拟视频帧,所以描述时按时间顺序列出每张图的关键元素,指出可能的错误,比如“DMXAPI”可能是AI生成的错误标题,而原版是“复仇者联盟4”。

需要确认是否有重复或相似的图片,比如图片7-9都是类似海报,可能只是微调。重点描述主要角色和场景变化,以及文字信息的变化。


【分析结果】
------------------------------------------------------------
你提供的内容并非视频,而是**9张静态图片组成的序列**(可能是模拟视频帧的图片集)。以下是按顺序对每张图片的详细描述:

---

### **图片1:《复仇者联盟4》中文官方海报**
- **核心内容**:漫威电影《复仇者联盟4:终局之战》的官方中文海报。
- **视觉元素**:
  - 顶部有中文标语“**逆转无限**”“**不惜一切代价**”,背景是巨大的灭霸剪影(紫色皮肤、头盔)。
  - 中间密集排列主要角色:钢铁侠(胸前反应堆发光)、美国队长(持盾)、雷神(持斧)、黑寡妇、鹰眼、惊奇队长、蚁人等,角色姿态充满战斗感。
  - 底部有“**复仇者联盟4 终局之战**”的金色标题,以及“**424日 最后集结**”的上映信息,还有“MARVEL STUDIOS”标志和IMAX/3D等技术标识。
- **氛围**:宇宙星空背景,整体色调偏蓝紫,充满史诗感与紧张感。

---

### **图片2:美国队长与黑寡妇的双人特写**
- **场景**:两人并肩站立于荒凉的星球表面,背景是星空与山脉。
- **角色细节**:
  - 美国队长身穿蓝红相间的“新战衣”(胸前有白色星形标志),表情坚毅。
  - 黑寡妇穿黑色紧身战斗服,红发随风飘动,手持美国队长的盾牌(红白蓝配色)。
- **氛围**:冷色调星空与暖色地平线对比,突出角色的决绝感。

---

### **图片3:美国队长与黑寡妇的近景特写**
- **细节强化**:
  - 美国队长战衣的纹理、腰带装备清晰可见;黑寡妇的盾牌边缘反光明显。
  - 背景星空更暗,突出人物轮廓,两人眼神锐利,仿佛正在准备战斗。
- **与图片2差异**:镜头拉近,聚焦角色上半身,光影更强烈。

---

### **图片4:雷神索尔的特写**
- **角色形象**:
  - 雷神身穿银色战甲(肩甲有圆形纹路),红色披风,手持“雷神之锤”(锤头有闪电特效)。
  - 面部有胡须,眼神凌厉,嘴角微张,似在呐喊。
- **背景**:深蓝色星空,闪电环绕锤子,强调神力。

---

### **图片5:黑寡妇的面部特写**
- **细节**:
  - 红发被风吹起,佩戴红色发光的战术耳机(耳侧有“88”数字标识)。
  - 眼神专注,嘴唇微张,似乎在接收指令或准备行动。
- **背景**:黄昏与星空交界,色调偏冷,突出科技感与紧张感。

---

### **图片6:黑寡妇特写的微调版本**
- **变化**:与图片5几乎相同,但光影更柔和,耳机红色光芒略微减弱,人物表情稍显沉静。

---

### **图片7-9:AI生成的“DMXAPI”主题海报**
- **共同特征**:
  - 顶部有醒目的蓝色3D文字“**DMXAPI**”(非官方标题,可能是AI生成错误或自定义标识)。
  - 角色阵容与图片1类似,但部分角色位置调整(如钢铁侠战衣更暗,灭霸剪影更模糊)。
  - 背景为紫色星云,整体风格更偏向赛博朋克,而非原版电影海报的写实风格。
- **差异**:
  - 图片7-9的“DMXAPI”文字大小、角色光影细节略有不同(如图片9中角色更明亮)。
  - **注意**:这些并非官方海报,可能是AI根据原版海报生成的变体,标题“DMXAPI”无实际电影关联。

---

### **关键说明**
1. **非视频内容**:所有内容为静态图片,无动态镜头或情节推进。
2. **官方与AI生成内容混杂**:
   - 图片12-6是基于《复联4》的官方或粉丝创作内容;
   - 图片7-9为AI生成的“伪海报”,标题“DMXAPI”可能是模型错误输出(类似“乱码标题”)。
3. **核心主题**:围绕《复仇者联盟4》的角色集结、战斗氛围,突出英雄的使命感与宇宙级危机。

如果需要分析视频(而非图片序列),请提供真实视频片段或更明确的描述。

============================================================
【Token 使用统计】
  Prompt tokens: 6022
  Completion tokens: 1617
  Total tokens: 7639

© 2025 DMXAPI Openai 网络图片分析

一个 Key 用全球大模型