跳到主要内容

阿里云实时语音识别从注册到接入:百炼 ASR 实践教程

· 阅读需 16 分钟

这篇和科大讯飞教程一样,不写泛泛产品介绍,而是把一条可实践路径讲清楚:第一次使用阿里云百炼 / Model Studio,怎么开通实时语音识别,怎么确认额度和计费,怎么拿 API Key,怎么跑 DashScope SDK 或 WebSocket,最后怎么接到我们自己的网页实时字幕服务。

同主题前情
一句话结论

阿里云这条线先不要只盯 Paraformer。2026-08-10 的百炼文档里,实时 ASR 推荐入口已经包括 qwen-audio-3.0-asr-flash-streamingfun-asr-realtimeqwen3-asr-flash-realtimeparaformer-realtime-v2。如果目标是会议实时字幕,我建议第一轮优先试 qwen-audio-3.0-asr-flash-streamingfun-asr-realtime,同时把 paraformer-realtime-v2 作为稳定、便宜、传统 ASR 路线对照。

状态说明

快照时间为 2026-08-10 CST。本文基于阿里云百炼官方模型、SDK、WebSocket API、计费文档做静态实践手册;没有使用任何真实账号密钥,也没有发起付费 ASR 调用。所有真实 API Key、AccessKey、Token、密码、代理凭据都必须写成 [REDACTED],不能进入前端、博客、截图或 Git 仓库。

先分清:Token Plan 不是“ASR 已经可用”的证明

用户常见误区是:我有阿里云 / 千问的 Token Plan,是不是就包含实时 ASR?答案是:不能默认这么理解。

百炼里确实有 Token Plan、文本模型、音频模型、ASR 模型、实时多模态等多条计费线。实时语音识别在文档里属于“语音识别”模型;不少 ASR 模型按 输入音频秒数 计费,而不是按普通文本 token 计费。

所以第一步不是写代码,而是在控制台确认三件事:

1. 百炼是否已开通。
2. 目标地域 / Workspace 下是否能调用目标 ASR 模型。
3. 当前账号的免费额度、资源包、Token Plan、后付费分别能抵扣哪些模型。

更务实地说:

  • Token Plan 可以作为你已有阿里云权益的线索;
  • 但不能把它当成 qwen-audio-3.0-asr-flash-streamingparaformer-realtime-v2 一定可调用、一定免费抵扣的证明;
  • 最终以 百炼模型详情页、免费额度页、模型调用计费页、账单明细 / 用量统计 为准。

先分清几个容易混淆的模型

阿里云现在的 ASR 模型比“Paraformer”这一句话复杂得多。第一次实践可以按这个表选:

模型 / 系列模式适合什么第一轮建议
qwen-audio-3.0-asr-flash-streaming实时 WebSocket实时字幕、语音助手、会议转写;文档推荐为实时识别首选,支持热词 / Prompt 上下文、多语种及方言优先试
fun-asr-realtime实时 WebSocket专业 ASR 实时路线,支持热词、多语种及方言;DashScope SDK 可接优先试 / 对照
qwen3-asr-flash-realtime实时 WebSocket需要转写同时看情感识别时可测备选
paraformer-realtime-v2实时 WebSocket传统 Paraformer 实时路线,地域限制清晰,费用相对低价格 / 稳定性对照
qwen-audio-3.0-asr-flash-filetrans非实时 HTTP录音文件转写、访谈、播客;支持说话人分离会后转写,不是实时字幕主线
qwen-audio-3.0-asr-flash非实时 HTTP短音频识别不是会议实时主线

如果只问“会议实时字幕先测哪一个”:

实时字幕 / 边说边出字
-> qwen-audio-3.0-asr-flash-streaming
-> fun-asr-realtime
-> paraformer-realtime-v2 做价格 / 稳定性对照

录音上传后转写 / 说话人分离
-> qwen-audio-3.0-asr-flash-filetrans
-> fun-asr / fun-asr-mtl

费用先怎么看

价格会变,必须以控制台和官方计费页为准。下面是 2026-08-10 从百炼“模型调用计费”文档抽到的 ASR 快照,只用于估算第一轮 smoke test 成本。

模型计费规则页面单价折算单价免费额度口径
qwen-audio-3.0-asr-flash-streaming按输入音频秒数,输出不计费¥0.00033 / 秒约 ¥1.188 / 小时36,000 秒(10 小时),有效期以文档和控制台为准
qwen3-asr-flash-realtime按输入音频秒数,输出不计费¥0.00033 / 秒约 ¥1.188 / 小时36,000 秒(10 小时),有效期以文档和控制台为准
fun-asr-realtime按输入音频秒数,输出不计费¥0.00033 / 秒约 ¥1.188 / 小时36,000 秒(10 小时),有效期以文档和控制台为准
fun-asr-flash-8k-realtime按输入音频秒数,输出不计费¥0.00022 / 秒约 ¥0.792 / 小时36,000 秒(10 小时),有效期以文档和控制台为准
paraformer-realtime-v2按输入音频秒数,输出不计费¥0.00024 / 秒约 ¥0.864 / 小时36,000 秒(10 小时),文档写到每月自动发放、有效期 1 个月

第一轮建议:

  1. 不要先买大资源包;
  2. 先在百炼控制台确认免费额度是否存在、是否能抵扣目标地域和目标模型;
  3. 用 10–20 秒音频跑通鉴权和格式;
  4. 用 3–5 分钟真实中文口述测首字延迟、partial 抖动和 final 准确率;
  5. 用量统计里看是否扣到“语音识别 / ASR / 音频秒数”相关项,而不是想当然归到普通文本 Token Plan。

你先打开这些网页

第一次操作可以按下面顺序开网页,不需要先写代码。

步骤打开地址你要做什么
1https://aliyun.com/注册或登录阿里云账号。
2https://bailian.console.aliyun.com/进入百炼控制台,确认是否已开通服务。
3https://bailian.console.aliyun.com/?tab=model#/model-market进入模型广场,搜索 qwen-audio-3.0-asr-flash-streamingfun-asr-realtimeparaformer-realtime-v2
4https://help.aliyun.com/zh/model-studio/asr-model/看官方 ASR 选型页,确认实时 / 非实时、热词、Prompt 上下文、说话人分离、情感识别的边界。
5https://help.aliyun.com/zh/model-studio/get-api-key按文档获取百炼 API Key。
6https://help.aliyun.com/zh/model-studio/real-time-speech-recognition-user-guide看实时语音识别快速开始,里面有 Python / Java 示例。
7https://help.aliyun.com/zh/model-studio/paraformer-real-time-speech-recognition-python-sdk看 Paraformer Python SDK 文档。
8https://help.aliyun.com/zh/model-studio/websocket-for-paraformer-real-time-service如果不用 SDK,按 WebSocket 协议直连。
9https://help.aliyun.com/zh/model-studio/billing看模型调用计费,确认目标模型单价和免费额度。
10https://help.aliyun.com/zh/model-studio/list-quotas看限额查询接口,后续可自动化检查额度。

如果控制台要求实名、企业认证、协议确认、开通后付费或选择地域,正常按它的页面操作;不要把密码、验证码、API Key 或账单截图里的敏感信息发到公开聊天。

从注册到可调用:人工操作流程

1. 注册 / 登录 / 实名

  1. 打开 https://aliyun.com/。
  2. 登录或注册阿里云账号。
  3. 进入 https://bailian.console.aliyun.com/。
  4. 如果提示实名认证、企业认证或协议确认,按页面完成。

完成后只需要告诉我:

已登录阿里云 / 已进入百炼 / 是否完成实名 / 账号类型个人或企业

不要发送密码、短信验证码、身份证件、完整账单截图。

2. 开通百炼并确认地域

进入百炼后先确认:

地域:优先华北2(北京)
Workspace:default 或新建 realtime-asr-test
服务状态:百炼已开通

为什么强调地域?因为文档里多次出现“华北 2(北京)”地域和 Workspace 专属域名,例如:

wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference

这里的 {WorkspaceId} 必须替换成真实业务空间 ID。新加坡等地域有不同域名和 API Key 口径,不要混用。

3. 查模型是否可用

在模型广场搜索:

qwen-audio-3.0-asr-flash-streaming
fun-asr-realtime
qwen3-asr-flash-realtime
paraformer-realtime-v2

目标是确认:

  1. 模型能否在你的账号 / 地域 / Workspace 下使用;
  2. 是否需要单独开通;
  3. 是否有免费额度;
  4. 是否支持你要的语言、方言、热词、Prompt 上下文;
  5. 是否支持 SDK 或必须直接 WebSocket。

4. 创建 / 获取 API Key

按官方“获取 API Key”文档操作。拿到后只记录状态,不要把真实值贴出来:

DASHSCOPE_API_KEY=[REDACTED]
ALIYUN_BAILIAN_WORKSPACE_ID=[REDACTED]
ALIYUN_BAILIAN_REGION=cn-beijing

正式部署时,Key 只能放在服务器环境变量或 Secret Manager 里,浏览器不能知道它。

5. 确认额度和后付费边界

在写代码前做一次成本检查:

- 免费额度是否存在:是 / 否
- 免费额度适用地域:华北2(北京)/ 新加坡 / 其他
- 免费额度适用模型:哪些 Model ID
- Token Plan 是否明确覆盖目标 ASR:是 / 否 / 控制台未明确
- 后付费是否开启:是 / 否
- 是否有资源包:是 / 否

如果控制台没明确写 Token Plan 能抵扣目标 ASR,就按“不确定 / 不能默认抵扣”处理。

SDK 路径:先跑 DashScope Python demo

阿里云官方实时语音识别快速开始给了 DashScope SDK 示例,Python 里主包是:

pip install dashscope

如果要直接从麦克风采集,示例还会用:

pip install pyaudio

macOS 上 pyaudio 可能需要系统 PortAudio 依赖。第一轮如果装麦克风采集麻烦,可以先用本地音频文件 smoke test;真正网页产品不依赖本机 pyaudio,会由浏览器采集音频。

环境变量

不要把 Key 写进源码。最小形态:

export DASHSCOPE_API_KEY='[REDACTED]'
export ALIYUN_BAILIAN_WORKSPACE_ID='[REDACTED]'

Python 里用:

import os
import dashscope

dashscope.api_key = os.environ['DASHSCOPE_API_KEY']
dashscope.base_websocket_api_url = (
f"wss://{os.environ['ALIYUN_BAILIAN_WORKSPACE_ID']}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference"
)

文件 smoke test

如果手头已有 16k wav,可以先跑非麦克风版本验证账号、模型、Workspace 和 API Key:

from http import HTTPStatus
from dashscope.audio.asr import Recognition

recognition = Recognition(
model='paraformer-realtime-v2',
format='wav',
sample_rate=16000,
language_hints=['zh', 'en'],
callback=None,
)

result = recognition.call('sample-16k-mono.wav')
if result.status_code == HTTPStatus.OK:
for sentence in result.get_sentence():
print(sentence['text'])
else:
print('Error:', result.message)

这一步验收的是:

API Key 正确 / Workspace URL 正确 / 模型可调用 / 音频格式可识别 / 账单产生在预期模型上

麦克风实时 demo

实时 demo 的关键点是:

from dashscope.audio.asr import Recognition, RecognitionCallback, RecognitionResult

class Callback(RecognitionCallback):
def on_event(self, result: RecognitionResult) -> None:
sentence = result.get_sentence()
if 'text' in sentence:
print('text:', sentence['text'])
if RecognitionResult.is_sentence_end(sentence):
print('final sentence, usage:', result.get_usage(sentence))

recognition = Recognition(
model='qwen-audio-3.0-asr-flash-streaming',
format='pcm',
sample_rate=16000,
semantic_punctuation_enabled=False,
callback=Callback(),
)
recognition.start()
# 循环读取麦克风或文件音频:recognition.send_audio_frame(data)
# 结束时:recognition.stop()

官方文档建议流式发送时,每次音频约 100ms,数据大小保持在 1KB 到 16KB。这和讯飞的 40ms 发包不同,所以 provider adapter 里要把“发包大小 / 节奏”做成配置。

WebSocket 路径:不用 SDK 时怎么接

如果我们用 Node、Go、Rust 或浏览器 relay,不一定用 Python SDK。Paraformer WebSocket 文档给出的核心形态是:

wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference

请求头:

Authorization: Bearer [REDACTED]
X-DashScope-WorkSpace: [REDACTED] # 可选,按 Workspace 场景使用

交互流程是:

建立 WebSocket
-> 发送 run-task 开启任务
-> 收到 task-started
-> 持续发送单声道音频二进制
-> 持续接收 result-generated
-> 发送 finish-task
-> 收到 task-finished
-> 关闭连接

这适合做后端 relay。前端只连我们的服务,不直接连接阿里云:

Browser MediaRecorder / AudioWorklet
-> wss://realtime-asr.public.wzhecnu.cn/api/asr/session/{id}/stream
-> backend reads DASHSCOPE_API_KEY from env
-> backend connects Aliyun WebSocket
-> backend maps result-generated to transcript.partial / transcript.final
-> browser renders live captions

我们自己的产品配置

建议配置不要写死在代码里:

ASR_PROVIDER=aliyun
ALIYUN_ASR_MODEL=qwen-audio-3.0-asr-flash-streaming
ALIYUN_BAILIAN_REGION=cn-beijing
ALIYUN_BAILIAN_WORKSPACE_ID=[REDACTED]
DASHSCOPE_API_KEY=[REDACTED]
ALIYUN_ASR_AUDIO_FORMAT=pcm
ALIYUN_ASR_SAMPLE_RATE=16000
ALIYUN_ASR_CHUNK_MS=100

统一事件建议:

{"type":"transcript.partial","provider":"aliyun","text":"我们今天讨论","seq":12}
{"type":"transcript.final","provider":"aliyun","text":"我们今天讨论实时语音识别。","seq":13,"usage_seconds":4.2}

这样后续切科大讯飞 / 火山 / 腾讯时,前端不用改 UI,只替换 provider adapter。

实践分工:你点网页,我写代码

你先做

  1. 登录阿里云:https://aliyun.com/
  2. 打开百炼:https://bailian.console.aliyun.com/
  3. 确认百炼已开通,地域优先选华北 2(北京)。
  4. 找到或创建 Workspace,记录是否能看到 Workspace ID。
  5. 在模型广场搜索 qwen-audio-3.0-asr-flash-streamingfun-asr-realtimeparaformer-realtime-v2
  6. 按“获取 API Key”文档创建百炼 API Key。
  7. 到计费 / 免费额度 / 用量统计页面确认 ASR 是否有免费额度或资源包。
  8. 不要把真实 Key 发到聊天里;只告诉我:
- 百炼是否已开通:是/否
- 地域:华北2(北京)/ 新加坡 / 其他
- Workspace ID 是否能看到:是/否
- 模型是否可用:qwen-audio / fun-asr / qwen3-asr / paraformer 哪些可用
- 免费额度是否显示:是/否
- Token Plan 是否明确显示覆盖目标 ASR:是/否/不确定
- 后付费是否开启:是/否
- API Key 是否已创建:是/否

我来做

  1. 写最小 Python smoke 脚本,只读环境变量,不写死 Key。
  2. 准备 16k/mono wav 或 pcm 测试音频。
  3. 先跑文件识别,再跑麦克风 / 浏览器实时流。
  4. 如果 SDK 不顺,直接写 WebSocket 版客户端。
  5. result-generated 转成统一 partial/final 事件。
  6. 做网页实时字幕页:开始录音、实时上屏、停止、保存 transcript。
  7. 接 AI 纪要按钮,但不和 ASR 首轮 smoke 混在一起。

第一轮验收标准

验收项通过标准
服务开通百炼控制台显示目标 ASR 模型可用
鉴权SDK / WebSocket 不返回 401 / 403 / 无权限 / Workspace 错误
音频格式10–20 秒中文 wav/pcm 能被识别
实时性发送音频期间持续返回中间结果,而不是结束后才一次性返回
final 结果句末能拿到稳定文本,能区分 partial 与 final
成本用量记录进入预期 ASR 模型,免费额度 / 后付费扣费路径可解释
日志记录 request_id、first package delay、last package delay、错误码

常见坑

坑 1:把 Token Plan 当成 ASR 免费包

不要这么做。Token Plan 和 ASR 模型免费额度 / 秒级计费不是同一件事。以控制台模型详情和账单为准。

坑 2:地域和 API Key 混用

北京、新加坡等地域的 API Key 和域名可能不同。DASHSCOPE_API_KEY、Workspace ID、base WebSocket URL 要对应同一地域。

坑 3:Workspace ID 填错

wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference 里的 {WorkspaceId} 不是随便写的名字,要用控制台真实业务空间 ID。

坑 4:浏览器直接保存 Key

浏览器不能直接拿 DASHSCOPE_API_KEY。即使阿里有临时 Token 机制,也应该由后端签发短时访问权限并做限流、鉴权、审计。

坑 5:音频包节奏照搬其他厂商

讯飞常见 40ms,火山常见 100–200ms,阿里 SDK 文档建议约 100ms。provider adapter 要分别配置。

坑 6:只测 Paraformer,漏掉 Qwen-Audio / Fun-ASR

如果我们目标是 2026 年的中文实时转写效果,应该把 qwen-audio-3.0-asr-flash-streamingfun-asr-realtime 纳入第一轮,而不是只测传统 Paraformer。

后续更新计划

这篇先作为从零教程第一版。拿到控制台状态后继续补:

  1. 实际控制台路径截图对应的步骤;
  2. DASHSCOPE_API_KEY / Workspace 环境变量 smoke test;
  3. 10–20 秒中文文件识别结果;
  4. 麦克风实时流结果和 request_id;
  5. WebSocket relay 最小实现;
  6. 与科大讯飞 / 火山同音频 A/B 对比;
  7. 最终是否把阿里云作为主 provider 或备 provider。

参考入口