Qwen-Omni

使用 Chat Completions 处理文本与单一其他模态的组合输入,并输出文本或音频回复

概述

Qwen-Omni 模型当前通过 /v1/chat/completions 接入,典型模型包括 qwen3-omni-flashqwen-omni-turbo。Ling.AI 不会额外改写这些 Omni 专属字段,而是按 OpenAI 兼容格式原样透传给上游。

流式限制

Qwen-Omni 请求需要使用流式输出。也就是说 stream=True / stream: true 必须设置,否则通常会由上游直接返回错误。

输入限制

在单条 User Message 中,只可以包含文本和一种模态的数据。也就是文本可以和图片、音频或视频中的一种组合,但不能在同一条用户消息里同时混入多种非文本模态。

基础调用

最基础的文本或文本加语音输出场景,可以直接通过 modalitiesaudio 控制返回模态。

Python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.vip.lingapi.ai/v1",
    api_key="sk-xxxxxxxx"
)

completion = client.chat.completions.create(
    model="qwen3-omni-flash",
    messages=[
        {"role": "user", "content": "你是谁?"}
    ],
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    stream=True,
    stream_options={"include_usage": True}
)

for chunk in completion:
    print(chunk)

如果只需要文本输出,可以把 modalities 设为 ["text"]。当返回音频时,响应中的 delta.audio.data 通常为 Base64 编码音频片段,可在流结束后拼接解码。

思考模式

qwen3-omni-flash 支持通过 enable_thinking 控制是否开启思考模式;qwen-omni-turbo 不属于思考模型。需要注意的是,Qwen3 Omni 在思考模式下不支持输出音频,此时建议只请求 ["text"] 输出。

Python
completion = client.chat.completions.create(
    model="qwen3-omni-flash",
    messages=[{"role": "user", "content": "你是谁"}],
    extra_body={"enable_thinking": True},
    modalities=["text"],
    stream=True
)

多模态输入

Qwen-Omni 支持文本与图片、音频或视频中的一种组合输入。常见输入结构如下:

  • 图片:image_url + text
  • 音频:input_audio + text
  • 视频文件:video_url + text
  • 视频帧列表:video + text
Python
completion = client.chat.completions.create(
    model="qwen3-omni-flash",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "input_audio",
                    "input_audio": {
                        "data": "https://example.com/hello.wav",
                        "format": "wav"
                    }
                },
                {
                    "type": "text",
                    "text": "这段音频在说什么?"
                }
            ]
        }
    ],
    modalities=["text"],
    stream=True
)
Python
completion = client.chat.completions.create(
    model="qwen3-omni-flash",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "video_url",
                    "video_url": {
                        "url": "https://example.com/demo.mp4"
                    }
                },
                {
                    "type": "text",
                    "text": "视频的内容是什么?"
                }
            ]
        }
    ],
    modalities=["text"],
    stream=True
)

多轮对话

多轮对话时,Assistant Message 建议只保留文本内容;不同轮次的 User Message 可以分别携带不同模态,但单条用户消息仍然应遵守“文本 + 一种其他模态”的限制。

计费提示

  • Qwen-Omni 的文本、图片、音频、视频通常按各自对应的 Token 计费。
  • 如果返回音频,音频输出 Token 会进入使用量统计,例如 completion_audio_tokens
  • 视频文件输入可能同时包含视觉与音频两部分成本,具体以上游模型计费规则为准。