Qwen-Omni 系列模型支持输入多种模态的数据,包括视频、音频、图片、文本,并输出文本。
相比于 Qwen-VL 与 Qwen-Audio 模型,Qwen-Omni 模型可以: 理解视频文件中的视觉与音频信息; 理解多种模态的数据; 在视觉理解、音频理解等能力上,Qwen-Omni 模型也表现出色。 模型名称 版本 上下文长度 最大输入 最大输出 免费额度 (Token数) qwen-omni-turbo 稳定版 32,768 30,720 2,048 各100万Token(不区分模态) 有效期:百炼开通后180天内 qwen-omni-turbo-latest 最新版 qwen-omni-turbo-2025-01-19 快照版 当免费额度用完后,输入与输出的计费规则如下: 计费示例:某次请求输入了1000 Token 的文本和1000 Token 的图片,输出了1000 Token 的文本,则该请求花费:0.0004元(文本输入)+ 0.0015元(图片输入)+ 0.0045元(文本输出)= 0.0064元。在Batch调用模式下,该请求花费按50%计收,为0.0032元。 支持以下输入组合: 输入的图片、音频、视频文件支持 Base64 编码与公网 URL 进行传入。以下示例代码均以传入公网 URL 为例,如果需要传入 Base64 编码,请参见输入 Base64 编码的本地文件。 当前仅支持以流式输出的形式调用 Qwen-Omni 模型。 重要 当前仅支持文本输出,后续会推出音频输出功能。 输出模态由 输出模态 文本 ["text"](默认值) Qwen-Omni 系列模型仅支持 OpenAI 兼容方式调用。您需要已获取API Key并配置API Key到环境变量。如果通过 OpenAI SDK 调用,需要安装SDK(建议参考该文档安装最新SDK,否则可能运行失败)。 Qwen-Omni 模型支持接收纯文本作为输入。当前只支持以流式输出的方式进行调用。 OpenAI 兼容 Python Node.js curl Qwen-Omni 模型支持传入多张图片。对输入图片的要求如下: 单个图片文件的大小不超过10 MB; 图片数量受模型图文总 Token 上限(即最大输入)的限制,所有图片的总 Token 数必须小于模型的最大输入; 图片的宽度和高度均应大于10像素,宽高比不应超过200:1或1:200。 当前只支持以流式输出的方式进行调用。 OpenAI 兼容 Python Node.js curl 只可以输入一个音频文件,大小不能超过 10 MB,时长最长 3 分钟。当前只支持以流式输出的方式进行调用。 OpenAI 兼容 Python Node.js curl 视频的传入方式可以为图片列表形式或视频文件形式(可理解视频中的音频)。 图片列表形式 最少传入4张图片,最多可传入80张图片。 视频文件形式 视频文件只能输入一个,大小限制为 150 MB,时长限制为 40s。 OpenAI 兼容 Python Node.js curl OpenAI 兼容 Python Node.js curl 您在使用 Qwen-Omni 模型的多轮对话功能时,需要注意: User Message 一条 User Message 只可以包含文本和一种模态的数据,在多轮对话中您可以在不同的 User Message 中输入不同模态的数据。 OpenAI 兼容 Python Node.js curl 图片 音频 视频 以保存在本地的test.png为例。 Python Node.js 如果模型调用失败并返回报错信息,请参见错误信息进行解决。支持的模型
当前等同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元(输入包含图片/音频/视频时) 使用方法
输入
支持的输入模态
无法在一个 User Message中输入多种非文本模态的数据。
输入多模态数据的方式
输出
支持的输出模态
modalities
参数控制,当前仅支持设置为["text"]
。modalities
参数值开始使用
前提条件
OpenAI Python SDK 最低版本为 1.52.0, Node.js SDK 最低版本为 4.68.0。
文本输入
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)
图片+文本输入
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)
音频+文本输入
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)
视频+文本输入
视频文件中的视觉信息与音频信息会分开计费。
当前只支持以流式输出的方式进行调用。
图片列表形式
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)
视频文件形式(可理解视频中的音频)
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)
多轮对话
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 编码的本地文件
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)
错误码