Skip to content

Qwen 语音识别 ​

使用本接口将音频文件转写为文本,支持通过音频 URL 或 Base64 Data URI 传入音频,可返回句级、词级时间戳,并支持上下文增强、热词与说话人分离等能力。

接口地址 ​

http
POST /v1/audio/transcriptions

认证 ​

方式说明
Bearer Token在请求头中携带 Authorization: Bearer <API Key> 用于验证账户信息。

请求头 ​

参数名类型必填说明
Content-Typestring是请求体的媒介类型,请设置为 application/json
Authorizationstring是Bearer API Key,用于验证账户信息
X-DashScope-SSEstring否是否以 SSE 流式返回:enable 开启,disable 关闭(默认)

说明:本接口仅接受 JSON 请求体,不支持 multipart/form-data 文件上传;使用 multipart 时将返回 400 错误。请通过音频 URL 或 Base64 Data URI 传入音频。

请求体 ​

参数名类型必填默认值说明
modelstring是-模型 ID,可用值见文末的支持模型列表
inputobject是-输入信息,详见「input 详细参数」
parametersobject是-模型参数,详见「parameters 详细参数」

input 详细参数 ​

参数名类型必填默认值说明
input.messagesarray<object>是-消息列表,包含当前待识别的音频以及可选的对话上下文;至少包含一条 input_audio 类型的消息

messages 元素 ​

参数名类型必填默认值说明
rolestring是-消息角色:user 或 assistant;assistant 仅用于上下文
contentarray<object>是-消息内容列表

content 元素 ​

参数名类型必填默认值说明
typestring是-内容类型:input_audio、input_text 或 text
input_audioobject否-当 type 为 input_audio 时必填
textstring否-当 type 为 input_text 或 text 时必填

input_audio 对象 ​

参数名类型必填默认值说明
input_audio.datastring是-音频文件 URL,或 data:{MIME_TYPE};base64,{BASE64_DATA} 格式的 Base64 Data URI

parameters 详细参数 ​

参数名类型必填默认值说明
parameters.formatstring是-音频格式,需与实际音频格式一致,如 wav、mp3、opus
parameters.sample_ratestring否-音频采样率,单位 Hz,如 16000 表示 16kHz
parameters.vocabulary_idstring否-预编译热词列表 ID。目前平台暂不支持该功能,请使用即时热词 vocabulary
parameters.vocabularyobject否-即时热词,键为热词文本、值为权重,详见「热词说明」
parameters.language_hintsarray<string>否-待识别语言代码,最多设置 4 个,超出时仅前 4 个生效;不设置时由模型自动识别语种
parameters.speaker_diarization_enabledboolean否false是否启用说话人分离,仅 qwen-audio-3.1-asr-flash 支持;开启后通过 speaker_id 区分说话人并返回 output.sentences,此时 keep_dialect 与 language_hints 不生效
parameters.keep_dialectboolean否false是否保留方言表达,仅 qwen-audio-3.1-asr-flash 支持;false 时转写为普通话文本

音频输入说明 ​

  • 单个音频文件大小不超过 10MB,时长不超过 5 分钟。
  • 支持通过公网可访问的音频 URL 或 Base64 Data URI 传入音频。
  • Base64 Data URI 格式为 data:{MIME_TYPE};base64,{BASE64_DATA},MIME 类型需与音频格式一致,例如 WAV 使用 audio/wav、MP3 使用 audio/mpeg。
  • Base64 编码会增大体积,请控制原文件大小,确保编码后仍符合 10MB 的输入限制。
  • 支持 wav、mp3、opus 等格式,实际支持范围以模型音频规格为准。

上下文增强说明 ​

上下文字段用于提升专有词汇的识别准确率,可传入前几轮对话内容:

  • 上下文消息(input_text 和 text 类型)各最多 5 条,超出时仅保留最近的 5 条。
  • 每轮上下文文本总长度(user 与 assistant 的 text 字段长度之和)不超过 400 个字符,超出部分从末尾截断。
  • 消息必须按对话轮次排列:每轮中 user(input_text)须在对应的 assistant(text)之前;包含 input_audio 的 user 消息必须放在 messages 数组最后。

热词说明 ​

说明:目前平台支持即时热词 vocabulary,暂不支持预编译热词 vocabulary_id。

  • vocabulary_id:预编译热词列表 ID。目前平台暂不支持该功能,请使用即时热词 vocabulary。
  • vocabulary:即时热词,以键值对形式传入,无需预先创建,适合临时性、会话级别的热词优化。
  • 权重取 [1, 5] 时,值越大模型越倾向输出该词;取 50 时为超级热词,召回率大幅提升,超级热词最多 50 个。
  • 两类热词同时配置时会合并使用;合并后超过 2000 个时,随机选择 2000 个使用。当前平台暂不支持预编译热词,实际仅即时热词生效。
  • 即时热词仅 qwen-audio-3.1-asr-flash、qwen-audio-3.0-asr-flash 支持。

支持的语言代码 ​

代码语言代码语言代码语言
zh中文en英文ja日语
ko韩语vi越南语th泰语
id印尼语ms马来语tl菲律宾语
hi印地语ar阿拉伯语fr法语
de德语es西班牙语pt葡萄牙语
ru俄语it意大利语nl荷兰语
sv瑞典语da丹麦语fi芬兰语
no挪威语el希腊语pl波兰语
cs捷克语hu匈牙利语ro罗马尼亚语
bg保加利亚语hr克罗地亚语sk斯洛伐克语

模型差异 ​

模型说话人分离保留方言即时热词用量返回
qwen-audio-3.1-asr-flash支持支持支持usage.duration、usage.input_tokens、usage.output_tokens、usage.total_tokens
qwen-audio-3.0-asr-flash不支持不支持支持usage.duration

请求示例 ​

bash
curl --location --request POST 'https://neolink.com/api/v1/audio/transcriptions' \
     --header 'Content-Type: application/json' \
     --header 'Authorization: Bearer <API Key>' \
     --data-raw '{
         "model": "qwen-audio-3.0-asr-flash",
         "input": {
             "messages": [
                 {
                     "role": "user",
                     "content": [
                         {
                             "type": "input_audio",
                             "input_audio": {
                                 "data": "https://example.com/audio/sample.wav"
                             }
                         }
                     ]
                 }
             ]
         },
         "parameters": {
             "format": "wav",
             "sample_rate": "16000"
         }
     }'
python
import requests

url = "https://neolink.com/api/v1/audio/transcriptions"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <API Key>",
}
payload = {
    "model": "qwen-audio-3.0-asr-flash",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": "https://example.com/audio/sample.wav"
                        }
                    }
                ]
            }
        ]
    },
    "parameters": {
        "format": "wav",
        "sample_rate": "16000"
    }
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
print(response.json())
javascript
import https from 'https'

const data = JSON.stringify({
  model: 'qwen-audio-3.0-asr-flash',
  input: {
    messages: [
      {
        role: 'user',
        content: [
          {
            type: 'input_audio',
            input_audio: {
              data: 'https://example.com/audio/sample.wav'
            }
          }
        ]
      }
    ]
  },
  parameters: {
    format: 'wav',
    sample_rate: '16000'
  }
})

const req = https.request('https://neolink.com/api/v1/audio/transcriptions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer <API Key>',
    'Content-Length': Buffer.byteLength(data)
  }
}, res => {
  let body = ''
  res.on('data', chunk => body += chunk)
  res.on('end', () => console.log(JSON.parse(body)))
})
req.write(data)
req.end()

流式返回 ​

在请求头中设置 X-DashScope-SSE: enable 即可开启流式返回。

bash
curl --location --request POST 'https://neolink.com/api/v1/audio/transcriptions' \
     --header 'Content-Type: application/json' \
     --header 'Authorization: Bearer <API Key>' \
     --header 'X-DashScope-SSE: enable' \
     --data-raw '{
         "model": "qwen-audio-3.0-asr-flash",
         "input": {
             "messages": [
                 {
                     "role": "user",
                     "content": [
                         {
                             "type": "input_audio",
                             "input_audio": {
                                 "data": "https://example.com/audio/sample.wav"
                             }
                         }
                     ]
                 }
             ]
         },
         "parameters": {
             "format": "wav",
             "sample_rate": "16000"
         }
     }'
python
import requests

url = "https://neolink.com/api/v1/audio/transcriptions"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <API Key>",
    "X-DashScope-SSE": "enable",
}
payload = {
    "model": "qwen-audio-3.0-asr-flash",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {
                            "data": "https://example.com/audio/sample.wav"
                        }
                    }
                ]
            }
        ]
    },
    "parameters": {
        "format": "wav",
        "sample_rate": "16000"
    }
}

with requests.post(url, headers=headers, json=payload, stream=True, timeout=300) as response:
    for raw_line in response.iter_lines():
        if not raw_line:
            continue
        line = raw_line.decode("utf-8")
        if not line.startswith("data:"):
            continue
        print(line[len("data:"):].strip())

使用 Base64 传入音频 ​

python
import base64
import pathlib

import requests

audio_path = pathlib.Path("sample.wav")
data_uri = "data:audio/wav;base64," + base64.b64encode(audio_path.read_bytes()).decode()

url = "https://neolink.com/api/v1/audio/transcriptions"
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer <API Key>",
}
payload = {
    "model": "qwen-audio-3.0-asr-flash",
    "input": {
        "messages": [
            {
                "role": "user",
                "content": [
                    {
                        "type": "input_audio",
                        "input_audio": {"data": data_uri}
                    }
                ]
            }
        ]
    },
    "parameters": {
        "format": "wav",
        "sample_rate": "16000"
    }
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
print(response.json())

携带上下文增强识别 ​

bash
curl --location --request POST 'https://neolink.com/api/v1/audio/transcriptions' \
     --header 'Content-Type: application/json' \
     --header 'Authorization: Bearer <API Key>' \
     --data-raw '{
         "model": "qwen-audio-3.0-asr-flash",
         "input": {
             "messages": [
                 {
                     "role": "user",
                     "content": [
                         {
                             "type": "input_text",
                             "text": "你好啊"
                         }
                     ]
                 },
                 {
                     "role": "assistant",
                     "content": [
                         {
                             "type": "text",
                             "text": "你好啊,我是通义千问,有什么可以帮助你的?"
                         }
                     ]
                 },
                 {
                     "role": "user",
                     "content": [
                         {
                             "type": "input_audio",
                             "input_audio": {
                                 "data": "https://example.com/audio/sample.wav"
                             }
                         }
                     ]
                 }
             ]
         },
         "parameters": {
             "format": "wav",
             "sample_rate": "16000"
         }
     }'

使用即时热词 ​

bash
curl --location --request POST 'https://neolink.com/api/v1/audio/transcriptions' \
     --header 'Content-Type: application/json' \
     --header 'Authorization: Bearer <API Key>' \
     --data-raw '{
         "model": "qwen-audio-3.0-asr-flash",
         "input": {
             "messages": [
                 {
                     "role": "user",
                     "content": [
                         {
                             "type": "input_audio",
                             "input_audio": {
                                 "data": "https://example.com/audio/sample.wav"
                             }
                         }
                     ]
                 }
             ]
         },
         "parameters": {
             "format": "wav",
             "sample_rate": "16000",
             "vocabulary": {
                 "张三": 5,
                 "李四": 5
             }
         }
     }'

响应体 ​

参数名类型说明
request_idstring本次请求的唯一标识
output.textstring当前累积的完整识别文本
output.sentenceobject当前句子的详细信息
output.sentence.speaker_idinteger / null说话人编号;仅 qwen-audio-3.1-asr-flash 开启说话人分离时返回编号,否则为 null
output.sentence.sentence_idinteger句子编号,从 1 开始
output.sentence.sentence_endboolean是否为该句的最终结果,true 表示该句识别完成
output.sentence.begin_timeinteger句子开始时间,单位毫秒
output.sentence.end_timeinteger句子结束时间,单位毫秒,仅在 sentence_end 为 true 时返回
output.sentence.textstring当前句子的识别文本
output.sentence.channel_idinteger声道编号,从 0 开始
output.sentence.wordsarray<object>词级别时间戳列表
output.sentence.words[].speaker_idinteger / null词对应的说话人编号,仅 qwen-audio-3.1-asr-flash 开启说话人分离时返回编号,否则为 null
output.sentence.words[].textstring词文本
output.sentence.words[].begin_timeinteger词开始时间,单位毫秒
output.sentence.words[].end_timeinteger词结束时间,单位毫秒
output.sentence.words[].punctuationstring词后的标点符号,无标点时为空字符串
output.sentence.words[].fixedboolean词是否已稳定,false 表示后续事件中该词的时间戳可能调整
output.sentencesarray<object>当前及历史句子的识别结果,每个元素的结构与 output.sentence 相同;仅 qwen-audio-3.1-asr-flash 开启说话人分离时返回
usage.durationinteger已处理的音频时长,单位秒,仅在 sentence_end 为 true 时返回
usage.input_tokensinteger本次调用消耗的输入 Token 数,仅 qwen-audio-3.1-asr-flash 返回
usage.output_tokensinteger本次调用消耗的输出 Token 数,仅 qwen-audio-3.1-asr-flash 返回
usage.total_tokensinteger本次调用消耗的总 Token 数,等于 input_tokens 与 output_tokens 之和,仅 qwen-audio-3.1-asr-flash 返回

响应示例 ​

json
{
  "output": {
    "sentence": {
      "begin_time": 760,
      "channel_id": 0,
      "end_time": 3800,
      "sentence_end": true,
      "sentence_id": 1,
      "text": "Hello World,这里是阿里巴巴语音实验室。",
      "words": [
        {
          "begin_time": 760,
          "end_time": 1040,
          "fixed": true,
          "punctuation": "",
          "text": "Hello"
        },
        {
          "begin_time": 1040,
          "end_time": 1240,
          "fixed": true,
          "punctuation": ",",
          "text": " World"
        },
        {
          "begin_time": 1360,
          "end_time": 1880,
          "fixed": true,
          "punctuation": "",
          "text": "这里是"
        },
        {
          "begin_time": 1880,
          "end_time": 2520,
          "fixed": true,
          "punctuation": "",
          "text": "阿里巴巴"
        },
        {
          "begin_time": 2520,
          "end_time": 2840,
          "fixed": true,
          "punctuation": "",
          "text": "语音"
        },
        {
          "begin_time": 2840,
          "end_time": 3800,
          "fixed": true,
          "punctuation": "。",
          "text": "实验室"
        }
      ]
    },
    "text": "Hello World,这里是阿里巴巴语音实验室。"
  },
  "usage": {
    "duration": 4
  },
  "request_id": "40e0734d-096f-9ae3-86c1-a8c013287561"
}

说明:部分上游版本可能将句子信息嵌套在 output.output.sentence 中;无论采用哪种结构,完整识别文本均可通过 output.text 获取。

流式响应 ​

当请求头 X-DashScope-SSE: enable 时,服务端以 Server-Sent Events(SSE)协议返回识别结果。仅当音频时长不少于 1 分钟时,服务端才会分多次返回中间识别结果和最终结果。

上游 SSE 事件格式:

plaintext
id:{序列号}
event:result
:HTTP_STATUS/200
data:{JSON数据}

上游返回示例:

plaintext
id:1
event:result
:HTTP_STATUS/200
data:{"output":{"sentence":{"sentence_id":1,"sentence_end":true,"end_time":3800,"words":[{"end_time":1040,"punctuation":"","begin_time":760,"fixed":true,"text":"Hello"},{"end_time":1240,"punctuation":",","begin_time":1040,"fixed":true,"text":" World"},{"end_time":1880,"punctuation":"","begin_time":1360,"fixed":true,"text":"这里是"},{"end_time":2520,"punctuation":"","begin_time":1880,"fixed":true,"text":"阿里巴巴"},{"end_time":2840,"punctuation":"","begin_time":2520,"fixed":true,"text":"语音"},{"end_time":3800,"punctuation":"。","begin_time":2840,"fixed":true,"text":"实验室"}],"begin_time":760,"text":"Hello World,这里是阿里巴巴语音实验室。","channel_id":0},"text":"Hello World,这里是阿里巴巴语音实验室。"},"usage":{"duration":4},"request_id":"fc1582e4-935c-9fc2-a482-a98bf43daa69"}

经网关转发时,id、event 等控制行会被过滤,客户端只需按 data: 行解析 JSON。

处理要点:

  1. 每收到一个 SSE 事件,解析 data 字段中的 JSON。
  2. 通过 output.sentence.sentence_end 判断当前句子是否结束:为 true 时该句识别完成,词级时间戳已稳定,可作为最终结果使用;为 false 时识别仍在进行中,文本和时间戳可能在后续事件中更新。
  3. usage 仅在句子结束事件中返回,可用于计量音频处理时长。
  4. qwen-audio-3.1-asr-flash 开启说话人分离时,应读取 output.sentences 获取当前及历史句子的结果。

支持模型 ​

支持模型Id:

  • qwen-audio-3.1-asr-flash
  • qwen-audio-3.0-asr-flash