阿里云智能语音交互完全对接指南:从开通服务到生产级集成
1. 产品概述:阿里云智能语音交互能做什么
阿里云智能语音交互(Intelligent Speech Interaction,简称ISI)是阿里巴巴集团基于多年技术积累推出的综合性语音AI服务平台。该平台整合了语音识别(ASR)、语音合成(TTS)、自然语言理解(NLU)等核心技术,为企业与开发者提供“能听、会说、懂你”的智能人机交互能力。其典型应用场景覆盖智能客服、语音导航、会议实时转写、庭审记录、访谈录音分析、有声读物制作、智能家居语音控制等多个领域。
从技术架构上看,智能语音交互系统通常由三个核心环节构成:首先通过语音识别技术将用户的语音输入转化为文本;其次借助自然语言处理技术理解文本意图并生成响应;最后通过语音合成技术将文本响应转化为语音输出。阿里云ISI产品将这三个环节封装为易用的API和SDK,开发者无需从头搭建复杂的语音处理流水线,即可快速为应用赋予语音交互能力。
阿里云智能语音交互提供了多种接入方式,包括RESTful API、服务端SDK(Java、Python、C++、Go、Node.js)、移动端SDK(iOS、Android、HarmonyOS Next)、微信小程序SDK以及WebSocket协议接入。开发者可以根据自身场景灵活选择——轻量级测试可从RESTful API入手,生产级应用建议使用SDK以获得更好的稳定性和开发效率。
需要先登录阿里云控制台,点击:阿里云控制台
2. 准备工作:开通服务与获取访问凭证
在使用阿里云智能语音交互服务之前,需要完成以下三个前置步骤:注册并实名认证阿里云账号、开通智能语音交互服务、创建项目并获取AppKey与AccessToken。
2.1 开通智能语音交互服务
登录阿里云官网后,在产品列表中找到“智能语音交互”产品,点击进入产品详情页并开通服务。首次使用的用户可享受一定的免费试用额度,具体额度以阿里云官网公布为准。需要注意的是,部分高级功能(如长文本语音合成、流式文本语音合成CosyVoice、录音文件识别极速版等)仅支持商用版,免费试用版调用这些接口会返回错误码40000010。
2.2 创建项目并获取AppKey
开通服务后,进入智能语音交互控制台,在“全部项目”页面点击“创建项目”。创建项目时需要选择项目类型,可选“语音识别+语音合成+语音分析”或“仅语音识别”等。项目创建成功后,系统会为每个项目分配一个唯一的AppKey,这个AppKey是调用API时必填的身份标识。
2.3 获取AccessToken
AccessToken是调用智能语音交互API的鉴权凭证。获取Token有两种方式:
方式一:控制台临时获取(仅限测试):登录智能语音交互控制台,在总览页点击“点击获取临时AccessToken”,该Token有效期为24小时。这种方式仅适合快速体验和功能验证,不建议在生产环境中使用。
方式二:通过SDK自动获取(推荐生产环境):通过nls-sdk-common(Java/C++)或阿里云公共SDK(Python/Go/Node.js等),配置AccessKey ID和AccessKey Secret后调用CreateToken接口自动获取并定期刷新Token。这种方式更为安全可靠,且能自动处理Token过期问题。
安全提醒:AccessKey ID和AccessKey Secret相当于账号密码,严禁将其硬编码在客户端代码中(如移动App、微信小程序等),建议仅在服务端使用或通过服务端下发给客户端。
3. 核心能力一:语音识别(ASR)对接
阿里云智能语音交互提供三种语音识别服务:一句话识别、实时语音识别和录音文件识别。开发者应根据实际场景选择合适的识别方式。
3.1 一句话识别
一句话识别适用于60秒以内的短语音识别场景,如语音搜索、语音指令、语音输入法等。其特点是调用简单、响应快速,支持RESTful API和SDK两种调用方式。
3.1.1 通过Curl命令快速体验
对于初次体验的开发者,阿里云官方推荐从Curl命令调用一句话识别RESTful接口开始。以下是一个完整的调用示例:
curl -X POST 'https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/asr' \
-H 'Content-Type: audio/wav' \
-H 'X-NLS-Token: YOUR_ACCESS_TOKEN' \
--data-binary @/path/to/your/audio.wav
该请求将音频文件通过POST方式发送至服务端,服务端返回识别结果的JSON格式文本。需要注意的是,音频格式需为16kHz采样率、16bit位深的PCM或WAV格式,时长不超过60秒。
3.1.2 Java SDK调用示例
在正式项目中,推荐使用SDK进行集成。以下是Java SDK的Maven依赖配置和核心调用代码:
<dependency>
<groupId>com.alibaba.nls</groupId>
<artifactId>nls-sdk-recognizer</artifactId>
<version>2.2.1</version>
</dependency>
import com.alibaba.nls.client.AccessToken;
import com.alibaba.nls.client.NlsClient;
import com.alibaba.nls.client.SpeechRecognizer;
import com.alibaba.nls.client.SpeechRecognizerListener;
public class SpeechRecognizerDemo {
private static String appKey = "YOUR_APPKEY";
private static String akId = "YOUR_ACCESS_KEY_ID";
private static String akSecret = "YOUR_ACCESS_KEY_SECRET";
public static void main(String[] args) throws Exception {
// 获取Token
AccessToken token = new AccessToken(akId, akSecret);
token.apply();
String accessToken = token.getToken();
// 创建NlsClient,建议全局仅创建一个实例
NlsClient client = new NlsClient(accessToken);
// 创建识别监听器
SpeechRecognizerListener listener = new SpeechRecognizerListener() {
@Override
public void onResult(String result) {
System.out.println("识别结果: " + result);
}
};
// 创建识别请求
SpeechRecognizer recognizer = new SpeechRecognizer(client, appKey, listener);
recognizer.setFormat("wav");
recognizer.setSampleRate(16000);
// 发送音频数据
recognizer.start();
recognizer.sendAudioFile("/path/to/audio.wav");
recognizer.stop();
client.shutdown();
}
}
关键注意事项:NlsClient是线程安全的,建议在应用程序生命周期内仅创建一次;而SpeechRecognizer对象不可复用,每个识别任务对应一个实例;SpeechRecognizerListener与SpeechRecognizer是一一对应的关系。
3.2 实时语音识别(WebSocket)
实时语音识别适用于需要“边说边出文字”的流式场景,如实时会议转写、直播字幕、语音助手等。阿里云实时语音识别基于WebSocket协议,支持接收实时音频流并实时返回转写结果。
3.2.1 WebSocket协议概述
实时语音识别通过wss://协议建立长连接。客户端与服务端的交互遵循严格的协议规范:指令和事件通过WebSocket的Text类型DataFrame传输,音频流数据通过Binary Frame发送。鉴权在WebSocket握手阶段完成,在请求头中携带Authorization字段,格式为Bearer {API_Key}。
服务端点根据地域有所不同:
- 华北2(北京):wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime?model={model_name}
- 新加坡:wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime?model={model_name}
阿里云百炼为上述地域推出了业务空间专属域名,能够提供更优的性能和更高的稳定性,建议优先使用。
3.2.2 两种交互模式
实时语音识别支持VAD模式和Manual模式两种交互流程:
VAD模式(默认):服务端通过语音活动检测(Voice Activity Detection)技术自动检测语音的起点和终点。开发者只需持续发送音频流,服务端在检测到一句话结束时自动返回最终识别结果。该模式适用于实时对话、会议记录等场景,开发工作量较小。
Manual模式:由客户端主动控制断句时机,适用于客户端能明确判断语句边界的场景,如聊天软件中的按住说话功能。
3.2.3 Java SDK实现实时语音识别
以下是基于DashScope Java SDK调用Qwen-ASR-Realtime模型的示例:
import com.alibaba.dashscope.audio.qwen_omni.OmniRealtimeConversation;
import com.alibaba.dashscope.audio.qwen_omni.OmniRealtimeParam;
import com.alibaba.dashscope.audio.qwen_omni.OmniRealtimeConfig;
import com.alibaba.dashscope.audio.qwen_omni.OmniRealtimeTranscriptionParam;
public class RealtimeASRDemo {
public static void main(String[] args) {
// 构建请求参数
OmniRealtimeParam param = OmniRealtimeParam.builder()
.model("qwen3-asr-flash-realtime")
.url("wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime")
.apikey(System.getenv("DASHSCOPE_API_KEY"))
.build();
// 配置识别参数
OmniRealtimeTranscriptionParam transcriptionParam =
new OmniRealtimeTranscriptionParam();
transcriptionParam.setLanguage("zh");
transcriptionParam.setInputSampleRate(16000);
transcriptionParam.setInputAudioFormat("pcm");
// 配置VAD参数
OmniRealtimeConfig config = OmniRealtimeConfig.builder()
.modalities(Collections.singletonList(OmniRealtimeModality.TEXT))
.enableTurnDetection(true)
.turnDetectionType("server_vad")
.turnDetectionThreshold(0.0f)
.turnDetectionSilenceDurationMs(400)
.transcriptionConfig(transcriptionParam)
.build();
// 创建会话并开始识别
OmniRealtimeConversation conversation =
new OmniRealtimeConversation(param, config);
conversation.start();
// 持续发送音频流...
// conversation.sendAudio(audioData);
// 结束识别
conversation.stop();
}
}
上述代码中,enableTurnDetection设为true开启服务端VAD,turnDetectionSilenceDurationMs控制静默时长阈值(单位毫秒),当静默超过该值时服务端自动断句。
3.2.4 Python SDK实现实时语音识别
Python开发者可以使用DashScope Python SDK:
from dashscope.audio.qwen_omni import OmniRealtimeConversation, OmniRealtimeCallback
class MyCallback(OmniRealtimeCallback):
def on_transcription_result(self, result):
print(f"识别结果: {result}")
# 创建会话
conversation = OmniRealtimeConversation(
model="qwen3-asr-flash-realtime",
url="wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime",
api_key=os.getenv("DASHSCOPE_API_KEY"),
callback=MyCallback()
)
# 配置识别参数
conversation.set_transcription_config(
language="zh",
input_sample_rate=16000,
input_audio_format="pcm"
)
# 开启VAD
conversation.enable_turn_detection(True)
# 启动会话
conversation.start()
# 发送音频数据(例如从麦克风读取)
# conversation.send_audio(audio_chunk)
# 结束会话
conversation.stop()
Python SDK同样支持VAD模式和Manual模式,enable_turn_detection参数控制是否开启服务端VAD。
3.3 录音文件识别
录音文件识别适用于对已录制好的音频文件进行离线转写,支持较长的音频文件(最长可达数小时),适用于访谈录音分析、会议纪要生成、质检等场景。录音文件识别为异步任务模式:开发者提交音频文件后获得任务ID,然后轮询查询识别结果。
录音文件识别支持多种音频格式和采样率,单个文件大小一般不超过512MB。调用方式上,各语言SDK均提供了CommonRequest或专用接口来提交识别请求和查询结果。
4. 核心能力二:语音合成(TTS)对接
语音合成(Text-to-Speech,TTS)是将文本转换为自然流畅的语音输出。阿里云智能语音交互提供多种TTS服务,包括短文本语音合成、流式文本语音合成和长文本语音合成。
4.1 短文本语音合成(RESTful API)
短文本语音合成支持通过HTTPS GET或POST请求将不超过300字符的文本合成为语音。支持PCM、WAV、MP3等多种音频格式输出。以下是一个GET请求示例:
GET https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/tts?
appkey=YOUR_APPKEY&
text=你好世界&
token=YOUR_ACCESS_TOKEN&
format=wav&
sample_rate=16000&
voice=xiaoyun&
volume=50&
speech_rate=0&
pitch_rate=0
请求参数说明:appkey为项目标识;text为待合成的UTF-8编码文本(GET请求需URL编码);token为访问令牌;format可选PCM/WAV/MP3,默认PCM;sample_rate可选8000/16000,默认16000;voice指定发音人,默认xiaoyun;volume音量范围0-100,默认50;speech_rate语速范围-500至500,默认0;pitch_rate语调范围-500至500,默认0。
服务端返回合成的音频二进制数据,开发者需要将响应体保存为音频文件或直接播放。
4.2 流式文本语音合成(CosyVoice)
流式文本语音合成可以将流式文本实时合成为语音二进制数据并流式返回。这一特性特别适用于大语言模型流式输出的场景——LLM返回的流式文本无需拼接整合,可直接送入TTS服务获得实时音频流。
流式文本语音合成仅提供商用版,不支持试用。在同一个会话中,单次合成不超过1万字符,总计不超过20万字符(1个汉字计为2个字符)。支持设置语速、语调、音量以及多种发音人。CosyVoice-V2系列提供了丰富的音色选择,如龙橙(阳光男声)、龙华(活泼女童)、龙书(新闻男声)、Bella2.0(新闻女声)、龙婉(普通话女声)等。
4.3 长文本语音合成
长文本语音合成适用于将超长文本(千字甚至万字)合成为语音,如有声书制作、在线教育配音等场景。该功能同样仅支持商用版。调用方式与短文本合成类似,但支持更大的文本输入,服务端会自动进行文本分段和拼接处理。
5. 最佳实践与性能优化
5.1 Token安全管理
AccessToken是API调用的关键凭证,其安全管理至关重要。推荐的做法是使用RAM子账号(RAM用户)来访问智能语音交互服务。RAM用户由主账号创建,并可在获得授权后登录控制台或使用API访问资源。通过RAM可以精细控制权限范围,即使密钥泄露也能将风险限制在可控范围内。
在生产环境中,Token的获取和刷新应由服务端完成。移动端或前端应用不应直接使用AccessKey ID和AccessKey Secret获取Token,而应由服务端生成Token后下发给客户端。服务端SDK内置了Token自动刷新机制,开发者只需配置好AccessKey即可。
5.2 音频格式规范
不同识别服务对音频格式有不同要求,遵循规范能显著提高识别准确率。一句话识别和实时语音识别通常要求音频为16kHz采样率、16bit位深的PCM或WAV格式。录音文件识别支持更多格式,但仍建议使用标准PCM格式以获得最佳效果。开发者在上传音频前应进行必要的格式转换和重采样处理。
5.3 网络与性能优化
对于实时语音识别等对延迟敏感的场景,网络优化尤为关键。建议采取以下措施:使用同地域的服务端点以减少网络延迟;复用WebSocket长连接避免频繁握手;合理设置VAD参数以平衡识别实时性和准确性。对于高并发场景,可考虑使用连接池和批处理传输来提升吞吐量。
5.4 成本控制
智能语音交互服务按量计费,主要费用来自API调用次数和音频处理时长。开发者应合理规划调用频率,避免不必要的重复调用。不同服务之间不共享并发额度,同一服务下的不同项目共享并发额度。建议根据业务需求选择合适的服务类型和并发数,避免资源浪费。对于非实时场景(如批量录音转写),可选择闲时版以降低成本。
6. 常见错误码与排查
智能语音交互API调用失败时,服务端会返回错误码和错误信息。以下是几个常见错误码及排查方法:
- 40000010:免费试用已过期。调用了仅支持商用版的服务(如长文本合成、流式TTS等),需在控制台升级为商用版。
- 403:AccessToken无效或已过期。检查Token是否在有效期内,或重新获取Token。
- 40000004:空闲超时。长时间(如10秒)未向服务端发送数据,建议检查网络连接或调整发送频率。
- 401/403(WebSocket握手):API Key无效或缺失。检查Authorization请求头格式是否正确。
遇到错误时,建议记录请求中的task_id(如有),便于提交工单时提供给技术支持团队快速定位问题。
7. 总结
阿里云智能语音交互为开发者提供了一套完整、易用、高性能的语音AI能力集。从短语音的快速识别到长音频的离线转写,从基础的文本合成到流式的实时语音输出,覆盖了绝大多数语音交互场景。通过本文的讲解,开发者应能掌握从服务开通、项目创建、Token获取到各类API调用的全流程。在实际集成中,建议遵循Token安全管理、音频格式规范、网络优化等最佳实践,以确保应用的稳定性、安全性和成本可控性。
常见问题问答
问1:一句话识别和实时语音识别有什么区别?
答:一句话识别针对60秒以内的短语音,采用HTTP请求-响应模式,调用简单。实时语音识别基于WebSocket长连接,支持持续发送音频流并实时返回识别结果,适用于会议转写、直播字幕等流式场景。
问2:AccessToken过期了怎么办?
答:生产环境中应使用SDK内置的Token自动获取和刷新机制。若使用控制台临时Token(有效期24小时),过期后需重新获取。建议在服务端实现Token的定期刷新逻辑,避免因Token过期导致调用失败。
问3:语音合成支持哪些发音人和语言?
答:阿里云TTS提供数十种发音人,涵盖男女声、童声、新闻播报、温柔姐姐等多种风格。支持中文、英文及中英文混合,部分音色还支持方言。具体音色列表可在语音合成产品详情页或接口文档中查询。
问4:实时语音识别的VAD模式是什么?
答:VAD(Voice Activity Detection)模式即服务端自动检测语音活动。开发者只需持续发送音频流,服务端自动判断一句话的起点和终点,在句末返回识别结果。该模式简化了客户端逻辑,适合大多数实时对话场景。
问5:免费试用版和商用版有什么区别?
答:免费试用版提供有限的服务调用额度,适合功能验证和开发测试。部分高级功能(长文本合成、流式TTS、录音文件识别极速版等)仅支持商用版。商用版需在控制台升级,按调用量或时长计费。
问6:如何在移动端集成智能语音交互?
答:阿里云提供了Android、iOS和HarmonyOS Next的移动端NUI SDK。开发者可在控制台获取对应平台的SDK和接入文档。需要注意的是,移动端不应直接使用AccessKey,而应通过服务端获取Token后下发给客户端使用。
更多推荐




所有评论(0)