Skip to content
Request

双向流式语音识别 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 ​

启用敏感词过滤功能。开启后,可对识别结果中的敏感词做屏蔽或替换处理。

示例:

json
"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 字符串传入

示例:

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) ​

持续发送音频数据,每条消息包含一段音频帧。消息体结构:

偏移长度说明
04 字节帧序号(大端有符号整数),从 2 开始递增
44 字节音频数据长度(大端无符号整数)
8N 字节音频二进制数据

结束标识:发送帧序号为负数(绝对值为已发送的总帧数)的空音频帧,表示音频流结束。

响应参数 ​

响应为 WebSocket 二进制消息流,客户端需持续接收并解析每个消息包。

响应处理逻辑 ​

  1. 建立 WebSocket 连接
  2. 发送全量请求配置(mt=0x01)
  3. 循环发送音频帧(mt=0x02)
  4. 同时接收服务端返回的识别结果
  5. 音频发送完毕后,发送结束帧(负序号空帧)
  6. 收到最后一包结果(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:词结束时间(毫秒)