Qwen-Omni 模型

2025-03-24   访问量:1017


Qwen-Omni 系列模型支持输入多种模态的数据,包括视频、音频、图片、文本,并输出文本。

支持的模型

相比于 Qwen-VL 与 Qwen-Audio 模型,Qwen-Omni 模型可以:

  • 理解视频文件中的视觉与音频信息;

  • 理解多种模态的数据;

在视觉理解、音频理解等能力上,Qwen-Omni 模型也表现出色。








模型名称

版本

上下文长度

最大输入

最大输出

免费额度

(注)

(Token数)

qwen-omni-turbo

当前等同qwen-omni-turbo-2025-01-19

稳定版

32,768

30,720

2,048

100Token(不区分模态)

有效期:百炼开通后180天内

qwen-omni-turbo-latest

始终等同最新快照版

最新版

qwen-omni-turbo-2025-01-19

又称qwen-omni-turbo-0119

快照版

当免费额度用完后,输入与输出的计费规则如下:

其中,稳定版模型qwen-omni-turbo支持Batch调用,费用为以下价格的50%。注:Batch调用不支持抵扣免费额度。
输入计费项单价(每千 Token)输入:文本0.0004元输入:音频0.025元输入:图片/视频0.0015元输出计费项单价(每千 Token)输出:文本0.0016元(输入仅包含文本时)0.0045元(输入包含图片/音频/视频时)

计费示例:某次请求输入了1000 Token 的文本和1000 Token 的图片,输出了1000 Token 的文本,则该请求花费:0.0004元(文本输入)+ 0.0015元(图片输入)+ 0.0045元(文本输出)= 0.0064元。在Batch调用模式下,该请求花费按50%计收,为0.0032元。

音频与图片转换为Token数的规则

使用方法

输入

支持的输入模态

支持以下输入组合:

无法在一个 User Message中输入多种非文本模态的数据。

输入多模态数据的方式

输入的图片、音频、视频文件支持 Base64 编码与公网 URL 进行传入。以下示例代码均以传入公网 URL 为例,如果需要传入 Base64 编码,请参见输入 Base64 编码的本地文件

输出

当前仅支持以流式输出的形式调用 Qwen-Omni 模型。

支持的输出模态

重要

当前仅支持文本输出,后续会推出音频输出功能。

输出模态由modalities参数控制,当前仅支持设置为["text"]



输出模态

modalities参数值

文本

["text"](默认值)

开始使用

前提条件

Qwen-Omni 系列模型仅支持 OpenAI 兼容方式调用。您需要已获取API Key配置API Key到环境变量。如果通过 OpenAI SDK 调用,需要安装SDK(建议参考该文档安装最新SDK,否则可能运行失败)。

OpenAI Python SDK 最低版本为 1.52.0, Node.js SDK 最低版本为 4.68.0。

文本输入

Qwen-Omni 模型支持接收纯文本作为输入。当前只支持以流式输出的方式进行调用。

OpenAI 兼容

Python

Node.js

curl

 

import osfrom openai import OpenAI

client = OpenAI(    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen-omni-turbo",
    messages=[{"role": "user", "content": "你是谁"}],    # 设置输出数据的模态,当前仅支持["text"]
    modalities=["text"],    # stream 必须设置为 True,否则会报错
    stream=True,
    stream_options={"include_usage": True},
)for chunk in completion:    if chunk.choices:        print(chunk.choices[0].delta)    else:        print(chunk.usage)

图片+文本输入

Qwen-Omni 模型支持传入多张图片。对输入图片的要求如下:

  • 单个图片文件的大小不超过10 MB;

  • 图片数量受模型图文总 Token 上限(即最大输入)的限制,所有图片的总 Token 数必须小于模型的最大输入;

  • 图片的宽度和高度均应大于10像素,宽高比不应超过200:11:200。

当前只支持以流式输出的方式进行调用。

OpenAI 兼容

Python

Node.js

curl

 

import osfrom openai import OpenAI

client = OpenAI(    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen-omni-turbo",
    messages=[
        {            "role": "system",            "content": [{"type": "text", "text": "You are a helpful assistant."}],
        },
        {            "role": "user",            "content": [
                {                    "type": "image_url",                    "image_url": {                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
                    },
                },
                {"type": "text", "text": "图中描绘的是什么景象?"},
            ],
        },
    ],    # 设置输出数据的模态,当前支持["text"]
    modalities=["text"],    # stream 必须设置为 True,否则会报错
    stream=True,
    stream_options={        "include_usage": True
    }
)for chunk in completion:    if chunk.choices:        print(chunk.choices[0].delta)    else:        print(chunk.usage)

音频+文本输入

只可以输入一个音频文件,大小不能超过 10 MB,时长最长 3 分钟。当前只支持以流式输出的方式进行调用。

OpenAI 兼容

Python

Node.js

curl

 

import osfrom openai import OpenAI

client = OpenAI(    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen-omni-turbo",
    messages=[
        {            "role": "system",            "content": [{"type": "text", "text": "You are a helpful assistant."}],
        },
        {            "role": "user",            "content": [
                {                    "type": "input_audio",                    "input_audio": {                        "data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3",                        "format": "mp3",
                    },
                },
                {"type": "text", "text": "这段音频在说什么"},
            ],
        },
    ],    # 设置输出数据的模态,当前支持["text"]
    modalities=["text"],    # stream 必须设置为 True,否则会报错
    stream=True,
    stream_options={"include_usage": True},
)for chunk in completion:    if chunk.choices:        print(chunk.choices[0].delta)    else:        print(chunk.usage)

视频+文本输入

视频的传入方式可以为图片列表形式视频文件形式(可理解视频中的音频)

  • 图片列表形式

    最少传入4张图片,最多可传入80张图片。

  • 视频文件形式

    视频文件只能输入一个,大小限制为 150 MB,时长限制为 40s。

    视频文件中的视觉信息与音频信息会分开计费。
当前只支持以流式输出的方式进行调用。

图片列表形式

OpenAI 兼容

Python

Node.js

curl

 

import osfrom openai import OpenAI

client = OpenAI(    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen-omni-turbo",
    messages=[
        {            "role": "user",            "content": [
                {                    "type": "video",                    "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",
                    ],
                },
                {"type": "text", "text": "描述这个视频的具体过程"},
            ],
        }
    ],    # 设置输出数据的模态,当前支持["text"]
    modalities=["text"],    # stream 必须设置为 True,否则会报错
    stream=True,
    stream_options={"include_usage": True},
)for chunk in completion:    if chunk.choices:        print(chunk.choices[0].delta)    else:        print(chunk.usage)

视频文件形式(可理解视频中的音频)

OpenAI 兼容

Python

Node.js

curl

 

import osfrom openai import OpenAI

client = OpenAI(    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen-omni-turbo",
    messages=[
        {            "role": "system",            "content": [{"type": "text", "text": "You are a helpful assistant."}],
        },
        {            "role": "user",            "content": [
                {                    "type": "video_url",                    "video_url": {                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
                    },
                },
                {"type": "text", "text": "视频的内容是什么?"},
            ],
        },
    ],    # 设置输出数据的模态,当前支持["text"]
    modalities=["text"],    # stream 必须设置为 True,否则会报错
    stream=True,
    stream_options={"include_usage": True},
)for chunk in completion:    if chunk.choices:        print(chunk.choices[0].delta)    else:        print(chunk.usage)

多轮对话

您在使用 Qwen-Omni 模型的多轮对话功能时,需要注意:

  • User Message

    一条 User Message 只可以包含文本和一种模态的数据,在多轮对话中您可以在不同的 User Message 中输入不同模态的数据。

OpenAI 兼容

Python

Node.js

curl

 

import osfrom openai import OpenAI

client = OpenAI(    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen-omni-turbo",
    messages=[
        {            "role": "system",            "content": [{"type": "text", "text": "You are a helpful assistant."}],
        },
        {            "role": "user",            "content": [
                {                    "type": "input_audio",                    "input_audio": {                        "data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3",                        "format": "mp3",
                    },
                },
                {"type": "text", "text": "这段音频在说什么"},
            ],
        },
        {            "role": "assistant",            "content": [{"type": "text", "text": "这段音频在说:欢迎使用阿里云"}],
        },
        {            "role": "user",            "content": [{"type": "text", "text": "介绍一下这家公司?"}],
        },
    ],    # 设置输出数据的模态,当前支持["text"]
    modalities=["text"],    # stream 必须设置为 True,否则会报错
    stream=True,
    stream_options={"include_usage": True},
)for chunk in completion:    if chunk.choices:        print(chunk.choices[0].delta)    else:        print(chunk.usage)

输入 Base64 编码的本地文件

图片

音频

视频

以保存在本地的test.png为例。

Python

Node.js

 

import osfrom openai import OpenAIimport base64

client = OpenAI(    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)#  Base64 编码格式def encode_image(image_path):    with open(image_path, "rb") as image_file:        return base64.b64encode(image_file.read()).decode("utf-8")


base64_image = encode_image("test.png")

completion = client.chat.completions.create(
    model="qwen-omni-turbo",
    messages=[
        {            "role": "system",            "content": [{"type": "text", "text": "You are a helpful assistant."}],
        },
        {            "role": "user",            "content": [
                {                    "type": "image_url",                    "image_url": {"url": f"data:image/png;base64,{base64_image}"},
                },
                {"type": "text", "text": "图中描绘的是什么景象?"},
            ],
        },
    ],    # 设置输出数据的模态,当前支持["text"]
    modalities=["text"],    # stream 必须设置为 True,否则会报错
    stream=True,
    stream_options={"include_usage": True},
)for chunk in completion:    if chunk.choices:        print(chunk.choices[0].delta)    else:        print(chunk.usage)

错误码

如果模型调用失败并返回报错信息,请参见错误信息进行解决。


热门文章
更多>