Fun ASR Flash API 接口、参数 & 代码示例
tongyi/fun-asr-flash
Fun-ASR-Flash 是阿里巴巴通义实验室推出的工业级端到端语音识别(ASR)大模型,全面支持汉语传统七大方言体系(官话/吴/湘/赣/客/闽/粤),并适配 20+ 地区口音官话。针对中文古诗词的韵律、节奏与文言表达特点进行专项优化,提升对古诗词内容的识别准确率,适用于文化传承、教育讲解、有声读物等场景。
- 模型 ID
- tongyi/fun-asr-flash
- 模型系列
- TongYi
- 更新日期
- 模型能力
- 语音识别、方言识别
- 模型价格(每分钟)
- ¥ 0.02
Fun ASR Flash 模型介绍:
Fun-ASR-Flash 是阿里巴巴通义实验室推出的工业级端到端语音识别(ASR)大模型,全面支持汉语传统七大方言体系(官话/吴/湘/赣/客/闽/粤),并适配 20+ 地区口音官话。模型针对中文古诗词的韵律、节奏与文言表达特点进行专项优化,提升对古诗词内容的识别准确率,适用于文化传承、教育讲解、有声读物等场景。
模型优化了标点预测与文本归一化能力,使输出文本更符合书面表达习惯,数字、日期、金额等信息自动转换为标准格式,增强内容的可读性与专业性。同时语种扩展至英语、日语、韩语、越南语、泰语、印尼语、马来语、菲律宾语、印地语、阿拉伯语、法语、德语、西班牙语、葡萄牙语、俄语、意大利语、荷兰语、瑞典语、丹麦语、芬兰语、挪威语、希腊语、波兰语、捷克语、匈牙利语、罗马尼亚、保加利亚语、克罗地亚语、斯洛伐克语等,共计30个语种。支持 Context 上下文能力,可转写 5 分钟以内的音频。
核心特性:
- 超强的上下文理解与行业适应性: 结合了大语言模型(LLM)的上下文理解能力,在教育、金融等垂直领域表现出色。能够精准识别行业专业术语、专有名词与行业特有表达,有效遏制了传统 ASR 模型容易出现的“幻觉”生成和语种混淆。
- 极强的抗噪与远场识别: 针对远距离拾音以及会议室、车载环境、工业现场等高噪声场景进行了深度优化,拥有超高的远场高噪声识别准确率。
- 丰富的中文方言与口音支持:
- 7大方言: 吴语、粤语、闽语、客家话、赣语、湘语、晋语。
- 26种地域口音: 覆盖河南、陕西、湖北、四川、重庆、云南、贵州、广东、广西、河北、山东等20多个省市的口音。
- 多语言混合识别: 支持涵盖多达 30种语言 的自由切换和混合识别(重点优化了东亚与东南亚语种)。
- 特殊场景优化: 强化了在音乐背景干扰下的识别性能,甚至支持歌词识别与说唱(Rap)语音识别。
完整的语音理解管线(One-Call 功能):
FunASR Flash 的一大优势在于它不是一个单一的字词转录工具,而是一个全栈的“语音理解流水线”。通过一次 API 调用,它能够同时完成以下任务:
- 语音识别(ASR): 文本转录与自动语种检测。
- 语音活动检测(VAD): 毫秒级自适应静音切分,精准剥离无声片段。
- 标点恢复与正规化: 自动为转录文本添加标点,并应用逆文本正则化(如将语音中的“一百”转化为数字“100”),输出规范、高可读性的文本。
- 说话人分离(Diarization): 自动识别“谁说了什么”,并为每句话标注说话人 ID(如
Speaker 0、Speaker 1),非常适合会议纪要。 - 时间戳生成: 支持句子级甚至词语级的时间戳对齐。
API 接口地址:
https://wcode.net/api/gpt/v1/audio/transcriptions
此 API 接口兼容 OpenAI 的 Speech-to-Text 接口规范,可直接使用 OpenAI 的 SDK 来调用。仅需替换以下配置即可:
base_url替换为https://wcode.net/api/gpt/v1api_key替换为从 https://platform.wcode.net 获取到的 API Key具体可参考下方的各编程语言代码示例中的 OpenAI SDK 调用示例。
请求方法:
POST
各编程语言代码示例:
# TODO: 以下代码中的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
方式一:上传本地音频文件(multipart/form-data):
curl --request POST 'https://wcode.net/api/gpt/v1/audio/transcriptions' \
--header 'Authorization: Bearer API_KEY' \
--form 'file=@/path/to/audio.mp3' \
--form 'model=tongyi/fun-asr-flash'
方式二:公网音频 URL(application/json):
curl --request POST 'https://wcode.net/api/gpt/v1/audio/transcriptions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer API_KEY' \
--data '{
"model": "tongyi/fun-asr-flash",
"file_url": "https://example.com/audio.mp3"
}'
方式三:Base64 编码音频(application/json):
curl --request POST 'https://wcode.net/api/gpt/v1/audio/transcriptions' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer API_KEY' \
--data '{
"model": "tongyi/fun-asr-flash",
"file_base64": "<BASE64_ENCODED_AUDIO>",
"file_format": "mp3"
}'
import Foundation
let url = URL(string: "https://wcode.net/api/gpt/v1/audio/transcriptions")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer API_KEY", forHTTPHeaderField: "Authorization") // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
let boundary = UUID().uuidString
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
var body = Data()
body.append("--\(boundary)
".data(using: .utf8)!)
body.append("Content-Disposition: form-data; name=\"model\"
".data(using: .utf8)!)
body.append("tongyi/fun-asr-flash
".data(using: .utf8)!)
body.append("--\(boundary)
".data(using: .utf8)!)
body.append("Content-Disposition: form-data; name=\"file\"; filename=\"audio.mp3\"
".data(using: .utf8)!)
body.append("Content-Type: audio/mpeg
".data(using: .utf8)!)
body.append(try! Data(contentsOf: URL(fileURLWithPath: "/path/to/audio.mp3")))
body.append("
--\(boundary)--
".data(using: .utf8)!)
request.httpBody = body
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let data = data {
print(String(data: data, encoding: .utf8) ?? "")
}
}
task.resume()
import 'package:http/http.dart' as http;
import 'dart:io';
Future<void> main() async {
var request = http.MultipartRequest(
'POST',
Uri.parse('https://wcode.net/api/gpt/v1/audio/transcriptions'),
);
request.headers['Authorization'] = 'Bearer API_KEY'; // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
request.fields['model'] = 'tongyi/fun-asr-flash';
request.files.add(await http.MultipartFile.fromPath('file', '/path/to/audio.mp3'));
var streamedResponse = await request.send();
var response = await http.Response.fromStream(streamedResponse);
print(response.body);
}
require 'uri'
require 'net/http'
url = URI("https://wcode.net/api/gpt/v1/audio/transcriptions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer API_KEY' # TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
form_data = [
['model', 'tongyi/fun-asr-flash'],
['file', File.open('/path/to/audio.mp3')]
]
request.set_form form_data, 'multipart/form-data'
response = http.request(request)
puts response.read_body
use reqwest::multipart;
#[tokio::main]
pub async fn main() {
let url = "https://wcode.net/api/gpt/v1/audio/transcriptions";
let file_part = multipart::Part::bytes(std::fs::read("/path/to/audio.mp3").unwrap())
.file_name("audio.mp3")
.mime_str("audio/mpeg")
.unwrap();
let form = multipart::Form::new()
.text("model", "tongyi/fun-asr-flash")
.part("file", file_part);
let client = reqwest::Client::new();
let response = client.post(url)
.header("Authorization", "Bearer API_KEY") // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
.multipart(form)
.send()
.await
.unwrap();
println!("{}", response.text().await.unwrap());
}
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_URL, "https://wcode.net/api/gpt/v1/audio/transcriptions");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer API_KEY"); // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
curl_mime *mime = curl_mime_init(hnd);
curl_mimepart *part = curl_mime_addpart(mime);
curl_mime_name(part, "model");
curl_mime_data(part, "tongyi/fun-asr-flash", CURL_ZERO_TERMINATED);
part = curl_mime_addpart(mime);
curl_mime_name(part, "file");
curl_mime_filedata(part, "/path/to/audio.mp3");
curl_easy_setopt(hnd, CURLOPT_MIMEPOST, mime);
CURLcode ret = curl_easy_perform(hnd);
package main
import (
"bytes"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
)
func main() {
url := "https://wcode.net/api/gpt/v1/audio/transcriptions"
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
_ = writer.WriteField("model", "tongyi/fun-asr-flash")
file, _ := os.Open("/path/to/audio.mp3")
defer file.Close()
part, _ := writer.CreateFormFile("file", "audio.mp3")
io.Copy(part, file)
writer.Close()
req, _ := http.NewRequest("POST", url, body)
req.Header.Add("Authorization", "Bearer API_KEY") // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
req.Header.Set("Content-Type", writer.FormDataContentType())
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
respBody, _ := io.ReadAll(res.Body)
fmt.Println(string(respBody))
}
using System.Net.Http.Headers;
var client = new HttpClient();
using var form = new MultipartFormDataContent();
form.Add(new StringContent("tongyi/fun-asr-flash"), "model");
form.Add(new ByteArrayContent(await File.ReadAllBytesAsync("/path/to/audio.mp3")), "file", "audio.mp3");
var request = new HttpRequestMessage(HttpMethod.Post, "https://wcode.net/api/gpt/v1/audio/transcriptions");
request.Headers.Add("Authorization", "Bearer API_KEY"); // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
request.Content = form;
var response = await client.SendAsync(request);
Console.WriteLine(await response.Content.ReadAsStringAsync());
var client = new RestClient("https://wcode.net/api/gpt/v1/audio/transcriptions");
var request = new RestRequest("", Method.Post);
request.AddHeader("Authorization", "Bearer API_KEY"); // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
request.AddParameter("model", "tongyi/fun-asr-flash");
request.AddFile("file", "/path/to/audio.mp3", "audio/mpeg");
var response = client.Execute(request);
Console.WriteLine(response.Content);
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
let data = new FormData();
data.append('model', 'tongyi/fun-asr-flash');
data.append('file', fs.createReadStream('/path/to/audio.mp3'));
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://wcode.net/api/gpt/v1/audio/transcriptions',
headers: {
'Authorization': 'Bearer API_KEY', // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
...data.getHeaders()
},
data : data
};
axios.request(config).then((response) => {
console.log(JSON.stringify(response.data));
}).catch((error) => {
console.log(error);
});
OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("model", "tongyi/fun-asr-flash")
.addFormDataPart("file", "audio.mp3",
RequestBody.create(MediaType.parse("audio/mpeg"), new File("/path/to/audio.mp3")))
.build();
Request request = new Request.Builder()
.url("https://wcode.net/api/gpt/v1/audio/transcriptions")
.post(requestBody)
.addHeader("Authorization", "Bearer API_KEY") // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
.build();
Response response = client.newCall(request).execute();
$client = new \GuzzleHttp\Client();
$response = $client->post('https://wcode.net/api/gpt/v1/audio/transcriptions', [
'headers' => [
'Authorization' => 'Bearer API_KEY', // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
],
'multipart' => [
['name' => 'model', 'contents' => 'tongyi/fun-asr-flash'],
['name' => 'file', 'contents' => fopen('/path/to/audio.mp3', 'r')],
],
]);
echo $response->getBody();
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://wcode.net/api/gpt/v1/audio/transcriptions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 5,
CURLOPT_TIMEOUT => 300,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => [
'model' => 'tongyi/fun-asr-flash',
'file' => new CURLFile('/path/to/audio.mp3', 'audio/mpeg', 'audio.mp3'),
],
CURLOPT_HTTPHEADER => [
"Authorization: Bearer API_KEY", // TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
],
]);
$response = curl_exec($curl);
$error = curl_error($curl);
curl_close($curl);
if ($error) {
echo "cURL Error #:" . $error;
} else {
echo $response;
}
import requests
import json
url = "https://wcode.net/api/gpt/v1/audio/transcriptions"
headers = {
"Authorization": "Bearer API_KEY", # TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
}
data = {
"model": "tongyi/fun-asr-flash",
}
with open("/path/to/audio.mp3", "rb") as audio_file:
response = requests.post(url, headers=headers, files={"file": audio_file}, data=data)
print(json.dumps(response.json(), indent=4, ensure_ascii=False))
from openai import OpenAI
client = OpenAI(
base_url="https://wcode.net/api/gpt/v1",
api_key="API_KEY" # TODO: 这里的 API_KEY 需要替换,获取 API Key 入口:https://platform.wcode.net
)
with open("/path/to/audio.mp3", "rb") as audio_file:
transcription = client.audio.transcriptions.create(
model="tongyi/fun-asr-flash",
file=audio_file,
)
print(transcription.text)
请求参数:
- model(模型 ID)
- stream(流式响应)
- file_format(音频格式)
- file_url(音频 URL)
- file_base64(音频 Base64)
- response_format(响应格式)
- file(音频文件)
重要提示:由于模型架构不同,部分参数可能仅适用于特定的模型。
model(模型 ID)
-
参数:
model -
必选,string
语音识别模型 ID。调用时使用模型详情页的模型 ID。
stream(流式响应)
-
参数:
stream -
可选,boolean
-
取值范围:
true|false -
默认:
false
是否以流式方式返回识别结果。
当前接口暂不支持流式响应;请勿设置 stream: true,否则将返回错误。
file_format(音频格式)
-
参数:
file_format -
可选,string
指定音频的格式扩展名。
file_url(音频 URL)
-
参数:
file_url -
可选,string
待识别的公网音频文件 URL。(备注:file、file_url、file_base64 三选一,使用任一方式传入音频文件均可)
file_base64(音频 Base64)
-
参数:
file_base64 -
可选,string
待识别的音频文件的 Base64 编码内容。(备注:file、file_url、file_base64 三选一,使用任一方式传入音频文件均可)
response_format(响应格式)
-
参数:
response_format -
可选,string
-
取值范围:
json|text -
默认:
json
指定接口响应的内容格式。
默认为 json,响应体含 text 与 usage 字段;设为 text 时仅返回识别结果的纯文本。
file(音频文件)
-
参数:
file -
可选,file
待识别的本地音频文件,通过 multipart/form-data 上传。(备注:file、file_url、file_base64 三选一,使用任一方式传入音频文件均可)
以上文档为标准版 API 接口文档,可直接用于项目开发和系统调用。如果标准版 API 接口无法满足您的需求,需要定制开发 API 接口,请联系我们的 IT 技术支持工程师:
(沟通需求✅ → 确认技术方案✅ → 沟通费用与工期✅ → 开发&测试✅ → 验收交付✅ → 维护升级✅)
![]()