Dify 的最新版本仍然不支持视频上传吗?

目前的情况可以分两层来看:模型是否支持视频Dify 前端/接口是否接受视频文件类型

首先,关于文件上传是否支持,要看 features 是否选择了视频类型的 files。

其次,对于 GLM 来说,根据官方手册,示范代码如下:

#视频理解示例、上传视频URL
from zhipuai import ZhipuAI

client = ZhipuAI(api_key="YOUR API KEY") # 填写您自己的APIKey
response = client.chat.completions.create(
    model="glm-4v-plus-0111",  # 填写需要调用的模型名称
    messages=[
      {
        "role": "user",
        "content": [
          {
            "type": "video_url",
            "video_url": {
                "url" : "https://sfile.chatglm.cn/testpath/video/xxxxx.mp4"
            }
          },
          {
            "type": "text",
            "text": "请仔细描述这个视频"
          }
        ]
      }
    ]
)
print(response.choices[0].message)

可知对于 GLM 模型,用户只需正确传入视频 url 即可分析视频。

@Abyssedge 使用的是 Qwen 系列的模型,根据 Qwen 官方 API 文档:

通义千问VL 模型通过从视频中提取帧序列进行内容分析,抽帧的频率决定了模型分析的精细度,不同 SDK 抽帧频率不同,模型支持通过 fps参数来控制抽帧频率(每隔 fps1​秒抽取一帧,取值范围为[0.1, 10],默认值为2.0)。建议为高速运动场景设置较高 fps,为静态或长视频设置较低 fps

import dashscope
import os

# 以下为新加坡地域base_url,若使用弗吉尼亚地域模型,需要将base_url换成 https://dashscope-us.aliyuncs.com/api/v1
# 若使用北京地域的模型,需将base_url替换为:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [
    {"role": "user",
        "content": [
            # fps 可参数控制视频抽帧频率,表示每隔 1/fps 秒抽取一帧,完整用法请参见:https://www.alibabacloud.com/help/zh/model-studio/use-qwen-by-calling-api?#2ed5ee7377fum
            {"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
            {"text": "这段视频的内容是什么?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
    # 各地域的API Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若没有配置环境变量, 请用百炼API Key将下行替换为: api_key ="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-vl-plus',
    messages=messages
)

print(response.output.choices[0].message.content[0]["text"])

另一种写法,根据 Alibaba 官方手册

import os
# dashscope版本需要不低于1.20.10
import dashscope

dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{"role": "user",
             "content": [
                  # 若模型属于Qwen2.5-VL系列且传入的是图像列表时,可设置fps参数,表示图像列表是由原视频每隔 1/fps 秒抽取的
                 {"video":["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
                   "fps":2},
                 {"text": "描述这个视频的具体过程"}]}]
response = dashscope.MultiModalConversation.call(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    # 新加坡/弗吉尼亚和北京地域的API Key不同。获取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen2.5-vl-72b-instruct',  # 此处以qwen2.5-vl-72b-instruct为例,可按需更换模型名称。模型列表:https://www.alibabacloud.com/help/zh/model-studio/models
    messages=messages
)
print(response["output"]["choices"][0]["message"].content[0]["text"])

根据截图可知,关键不在于用户使用的是 GLM 系列还是 Qwen 系列,而是因为用户使用的是 SiliconFlow Plugin,根据 SiliconFlow 官方文档,其 API 对于视觉的处理方式如下:

2. 使用方式

对于 VLM 模型,可在调用**/chat/completions接口时,构造包含图片 urlbase64 编码图片message消息内容进行调用。通过detail**参数控制对图像的预处理方式。

2.1 关于图片细节控制参数说明

SiliconFlow 提供**lowhighauto三个detail参数选项。 对于目前支持的模型,detail不指定或指定为high时会采用high(“高分辨率”)模式,而指定为low或者auto时会采用low**(“低分辨率”)模式。

4. 视觉输入内容计费方式

对于图片等视觉输入内容,模型会将其转化为 tokens,与文本信息一并作为模型输出的上下文信息,因此也会一并进行计费。不同模型的视觉内容转化方式不同,以下为目前支持模型的转化方式。

4.1 Qwen 系列

规则:

Qwen最高支持像素是3584 * 3584= 12845056,最低支持像素是**56 * 56 = 3136,会对先对每张图片长短边均放缩至 28 的倍数(h * 28) * (w * 28)**。如果不在最小像素和最大像素区间内,再等比缩放至该区间。

  1. detail=low 时将所有图片 resize 成 448 * 448 尺寸,最终对应 256 tokens

  2. detail=high 时等比缩放,首先将长宽按照最近的 28 倍数向上取整,然后再等比缩放至像素区间 (3136, 12845056),并保证长宽均为 28 整数倍。

示例:

  • 224 * 4481024 x 10243172 x 4096 的图片,选择 detail=low 时,均消耗 256 tokens

  • 224 * 448 的图片,选择 detail=high 时,因为 224 * 448 在像素区间内,且长宽均为 28 倍数,消耗 (224/28) * (448/28) = 8 * 16 = 128 tokens

  • 1024 * 1024 的图片,选择 detail=high 时,将长宽按照 28 的倍数向上取整至 1036 * 1036,该数值在像素区间内,消耗 (1036/28) * (1036/28) = 1369 tokens

  • 3172 * 4096 的图片,选择 detail=high 时,将长宽按照 28 的倍数向上取整至 3192 * 4116,该值超过最大像素,再将长宽等比例缩小至 3136 * 4060,消耗 (3136/28) * (4060/28) = 16240 tokens

官方接口文档中并未提及对于视频的处理,可见本主题的关键问题不在于 Dify,而在于 SiliconFlow 本身不支持视频处理。这也是为什么 @Abyssedge 提到手动做了抽帧处理。

解决方法是:

  1. 等待 SiliconFlow 官方支持视频流的处理,并通知 Dify 维护 SiliconFlow Plugin 作者更新插件。
  2. 更换为 Dify Tongyi Plugin,使用阿里云百炼平台 API Key