双向流式语音识别 WebSocket 接口
支持音频流式输入,实时返回识别结果,实现边说边出字。识别延迟低,适用于实时会议字幕、直播字幕、智能外呼等低延迟场景。
WebSocket wss://ai-tokenhub.com/api/v3/asr/stream?model=doubao-seedasr-2-0-duration
请求参数
接口说明
| 项 | 值 |
|---|---|
| 请求方法 | WebSocket |
| 请求地址 | wss://ai-tokenhub.com/api/v3/asr/stream?model=doubao-seedasr-2-0-duration |
| 鉴权方式 | Bearer Token(Authorization 请求头) |
| 传输方式 | 双向流式 |
| 模型名称 | doubao-seedasr-2-0-duration(通过 URL query 参数 model 指定) |
请求头
Authorization string 必选
格式:Bearer <token>,其中 <token> 为您在 TokenHub 平台获取的 API 密钥。
URL 参数
model string 必选
模型标识,固定值:doubao-seedasr-2-0-duration
二进制协议
WebSocket 消息采用自定义二进制协议,每条消息由消息头和消息体组成。
消息头结构(4 字节)
| 字节 | 位 | 说明 |
|---|---|---|
| 第 1 字节 | 全部 | 固定为 0x11 |
| 第 2 字节 | 高 4 位 | 消息类型(mt):0x01=全量请求,0x02=音频帧,0x09=服务端事件,0x0F=错误响应 |
| 第 2 字节 | 低 4 位 | 标志位(flags):bit0=有序号,bit1=最后一包,bit2=有时间戳 |
| 第 3 字节 | 高 4 位 | 序列号(ser) |
| 第 3 字节 | 低 4 位 | 压缩方式(comp):0x00=不压缩,0x01=gzip |
| 第 4 字节 | 全部 | 保留,固定为 0x00 |
客户端发送消息
建立连接后,客户端按顺序发送:全量请求 → 音频帧 → 结束帧。
1. 全量请求(mt=0x01)
第一条消息,包含完整的配置参数。消息体为 JSON 字符串。
audio object 必选
音频配置。
format string 必选
指定音频格式。可选值:wav / mp3 / ogg / pcm / spx / amr / aac / m4a
codec string
指定音频编码格式,默认为 raw(pcm)。可选值:raw / opus
rate int
指定音频采样率,默认值为 16000
bits int
指定音频采样点位数,默认值为 16
channel int
指定音频声道数,默认值为 1。可选值:1(mono)/ 2(stereo)
request object
识别请求参数。
model_name string 必选
指定模型名称,目前仅支持 bigmodel
enable_nonstream bool
开启二遍识别模式,默认为 false。开启后,在双向流式实时识别的基础上,对每个分句额外使用非流式模型进行二次识别,提升分句的最终准确率。
开启后的行为:
- 自动启用语音活动检测(VAD)进行分句,默认静音时长达到 800ms 判定为一句结束,可通过
end_window_size参数调整 - 每次 VAD 检测到分句结束时,使用非流式模型对该分句音频重新识别
- 仅非流式模型的二次识别结果会携带
"definite": true字段
enable_speaker_info bool
启用说话人分离参数,默认为 false。开启后需启用 show_utterances 参数,才能获取到说话人分离结果。
enable_itn bool
启用将语音识别结果转换为规范的书面格式,默认为 true。开启后,系统会将语音里口语化的数字、金额及日期等自动转成阿拉伯数字和符号形式。
enable_ddc bool
启用语义顺滑,默认为 false。开启后,系统会删除或修正识别结果中的停顿词、语气词、语义重复词等不流畅内容。
output_zh_variant string
将识别结果输出为繁体中文。可选值:
traditional:简体 → 繁体(大陆)tw:简体 → 台湾正体hk:简体 → 香港繁体
show_utterances bool
启用输出分句、分词、说话人及语音停顿信息,默认为 false
show_speech_rate bool
启用分句信息携带语速,默认为 false。开启后,系统将在分句 additions 中返回语速信息,单位为 token/s。
show_volume bool
启用分句信息携带音量,默认 false。开启后,系统将在分句 additions 中返回音量信息,单位为 dB。
enable_lid bool
启用中英文及方言识别,默认 false。支持识别以下语种:中文、英文、上海话、闽南话、四川话、陕西话、粤语。
开启后,系统将在 additions 中返回语种/场景标签。
enable_emotion_detection bool
启用情绪检测,默认为 false。开启后,系统将在分句 additions 中返回对应的情绪标签。支持的情绪标签:angry / happy / neutral / sad / surprise
enable_gender_detection bool
启用性别检测,默认为 false。开启后,系统将在分句 additions 中返回性别标签(male/female)
enable_age_detection bool
启用年龄检测,默认为 false。开启后,系统将在分句 additions 中返回说话人的年龄(age),返回值为字符串类型的浮点数。
result_type string
指定识别结果的返回方式,默认值为 full。可选值:
full:全量返回single:增量结果返回,即不返回之前分句的结果
enable_accelerate_text bool
启用首字返回加速,默认值为 false。启用后将尽量加速首字返回,但同时可能会降低首字准确率。
accelerate_score int
指定首字返回加速率,默认值为 0,表示不加速。设置的值越大,首字出字越快。该参数需同时开启 enable_accelerate_text 参数。
vad_segment_duration int
指定语义分句的最大静音阈值,默认值为 3000,单位为 ms。当静音时长超过该值时,识别结果在此处分句。
end_window_size int
指定语音活动检测 (VAD) 的静音判停阈值,默认值为 800,单位 ms。取值范围:[300, 5000],推荐值:[800, 1000]
force_to_speech_time int
设置音频流起始阶段强制按有声处理的时长,默认值为 0,单位为 ms。推荐值:1000
sensitive_words_filter string
启用敏感词过滤功能。开启后,可对识别结果中的敏感词做屏蔽或替换处理。
示例:
"sensitive_words_filter":"{\"system_reserved_filter\":true,\"filter_with_empty\":[\"敏感词\"],\"filter_with_signed\":[\"敏感词\"]}"system_reserved_filter bool
启用系统内置敏感词库,默认为 false,启用后,命中的系统敏感词会被替换为 *
filter_with_empty string
设置需替换为空字符串的自定义敏感词列表
filter_with_signed string
设置需替换为 * 的自定义敏感词列表
enable_poi_fc bool
启用 POI Function Call,默认为 false,启用后可调用专业的地图领域推荐词服务辅助识别。使用该能力时,需要将 enable_nonstream 设置为 true。
enable_music_fc bool
启用 Music Function Call,默认为 false,开启后,对于语音识别困难的词语,能调用专业的音乐领域推荐词服务辅助识别。使用该能力时,需要将 enable_nonstream 设置为 true。
corpus object
配置语境词典,可自定义配置热词、替换词和上下文信息,配置后可提高特定语境下的词语识别准确率。
boosting_table_name string
热词词表名称,配置热词后获取
boosting_table_id string
热词词表 id。若传入的 boosting_table_name 和 boosting_table_id 对应的热词词表不一致,则以 boosting_table_id 为准。
correct_table_name string
替换词词表名称,配置替换词后获取。配置后,可将模型识别出的特定词汇替换为目标词汇
correct_table_id string
替换词词表 id。若传入的 correct_table_name 和 correct_table_id 对应的热词词表不一致,则以 correct_table_id 为准。
regex_correct_table_name string
正则替换词表名称,配置正则替换词后获取。相较于替换词的精确匹配替换,正则替换词适合批量格式转换、模糊模式匹配等复杂场景。
regex_correct_table_id string
正则替换词表 id
context string
上下文功能。在识别请求中传入辅助上下文信息,帮助模型结合语境提升识别准确率。支持传入热词、对话历史、场景描述等多种类型的上下文信息。
context需序列化为 JSON 字符串传入
示例:
{
"hotwords": [
{ "word": "自定义热词A" },
{ "word": "自定义热词B" }
],
"context_type": "dialog_ctx",
"context_data": [
{ "speaker": "user", "text": "你能帮我查一下资料吗?" },
{ "speaker": "bot", "text": "当然可以,请问您需要查什么资料?" }
]
}hotwords array:热词列表直传,用于提升指定词汇的识别准确率
- word
string:热词内容
context_type string:上下文类型,目前仅支持 dialog_ctx
context_data array:上下文数据列表,用于传入历史对话等语境信息
- text
string:历史对话文本 - image_url
string:图片 URL,用于提供视觉上下文(仅开启enable_nonstream时支持,最多 1 张,单张不超过 500 KB,支持 jpeg/jpg/png)
2. 音频帧(mt=0x02)
持续发送音频数据,每条消息包含一段音频帧。消息体结构:
| 偏移 | 长度 | 说明 |
|---|---|---|
| 0 | 4 字节 | 帧序号(大端有符号整数),从 2 开始递增 |
| 4 | 4 字节 | 音频数据长度(大端无符号整数) |
| 8 | N 字节 | 音频二进制数据 |
结束标识:发送帧序号为负数(绝对值为已发送的总帧数)的空音频帧,表示音频流结束。
响应参数
响应为 WebSocket 二进制消息流,客户端需持续接收并解析每个消息包。
响应处理逻辑
- 建立 WebSocket 连接
- 发送全量请求配置(mt=0x01)
- 循环发送音频帧(mt=0x02)
- 同时接收服务端返回的识别结果
- 音频发送完毕后,发送结束帧(负序号空帧)
- 收到最后一包结果(is_last_package=true)后关闭连接
响应字段说明
code int
请求状态码。0 表示识别成功,非 0 表示识别失败
event int
会话事件类型标识
is_last_package bool
是否为最后一个响应包。true 表示识别结果已全部返回
payload_sequence int
响应数据包的序号
payload_size int
响应数据 payload 的字节大小
payload_msg object
响应数据主体,包含音频信息与识别结果
audio_info object
音频相关信息
duration int
音频时长,单位为毫秒(ms)
result object
识别结果,识别成功后返回
additions object
附加信息
log_id string:服务端返回的 logid,方便定位问题
text string
音频识别结果文本,识别成功后返回
utterances array
语音分句信息。请求参数 show_utterances 设置为 true 且识别成功时返回。
definite bool:当前分句结果是否为最终确定结果。true 表示该分句不再变化
additions object:附加信息
- fixed_prefix_result
string:已确定的前缀识别结果 - source
string:分句结果来源 - speaker_id
string:说话人 ID。开启说话人分离enable_speaker_info=true后返回
text string:分句文本内容
end_time int:分句结束时间戳(毫秒)
start_time int:分句起始时间戳(毫秒)
words array:词级时间戳列表
- text
string:词文本 - start_time
int:词开始时间(毫秒) - end_time
int:词结束时间(毫秒)
