Skip to Content
API 文档Audio流式语音识别

流式语音识别服务

产品简介

本服务提供基于WebSocket和SSE的高性能流式ASR(自动语音识别)能力,支持实时音频流输入并即时返回识别文字、以及一次性提交音频并流式返回识别文字。

核心特性

  • 双模式支持:提供WebSocket双向交互与SSE单向推送两种接口
  • 实时响应:支持流式音频输入与增量文本输出,低延迟体验
  • VAD检测:内置语音活动检测,精准识别语音起始与结束,支持返回时间戳
  • 多格式兼容:支持WAV, PCM, MP3, OPUS等主流格式
  • 语言支持:支持中英文,暂不支持其他语种和中文方言

同时提供两种接入模式,适配不同业务形态:

模式使用场景
双向流式(WebSocket)实时对话、语音助手、车载、会议字幕
单向流式(HTTP + SSE)语音文件转写、准实时处理、后端任务

接入方式总览

能力双向流式单向流式
音频输入流式分片一次性提交
结果返回流式增量 + 完成事件SSE 流式
连接方式WebSocketHTTP POST
是否保持会话
典型端前端 / 设备端服务端

服务地址

协议环境地址说明
WebSocket正式环境wss://api.stepfun.com/v1/realtime/asr/stream双向实时流
HTTP/SSE正式环境https://api.stepfun.com/v1/audio/asr/sse 单向流式响应

Websocket协议接口

时序图

服务端vad 开启时:

服务端 vad 未开启时:

鉴权参数

参数名必填描述示例
Authorization认证令牌Bear {token}

客户端消息类型

会话更新消息 (session.update)

用于更新会话配置,包括音频格式、转录参数等。

请求示例:

{ "event_id": "event_123", "type": "session.update", "session": { "audio": { "input": { "format": { "type": "pcm", "codec": "pcm_s16le", "rate": 16000, "bits": 16, "channel": 1 }, "transcription": { "model": "step-asr", "language": "zh", "prompt": "请记录下你所听到的语音内容。", "full_rerun_on_commit": true, "enable_itn": true }, "turn_detection": { "type": "server_vad", "silence_duration_ms": 800, "threshold": 0.5, } } } } }
参数路径类型描述示例值
formatObject音频格式配置
typeString容器格式,支持 pcm, ogg"pcm"
codecString编码格式,pcm_s16le,仅 typepcm 时需传"pcm_s16le"
rateInt采样率,默认推荐 1600016000
bitsInt位深,推荐 1616
channelInt通道数,推荐 1(单声道)1
transcriptionObject转录参数配置
modelString模型名称,目前支持 step-asr"step-asr"
languageString目标语言代码"zh"
full_rerun_on_commitbool用于判断是否开启二遍识别纠错,默认 false 关闭true
enable_itnbool是否开启 ITN,默认 true 开启true
promptString系统提示词,用于纠正专业术语或提升准确性"请记录你听到的语音内容,相关的参考文本如下:裘千仞,沪惠保是一款面向上海市基本医疗保险参保人员的商业医疗保险"
turn_detectionObjectVAD(语音活动检测)配置
typeString检测类型,支持 server_vad;如果不传则服务端不会进行 VAD,需要用户主动提交音频缓冲区提交消息(input_audio_buffer.commit"server_vad"
silence_duration_msInt静音阈值(毫秒),超过此时间判定为一句话结束700

音频数据追加消息 (input_audio_buffer.append)

发送音频数据进行实时识别。 请求示例:

{ "event_id": "event_124", "type": "input_audio_buffer.append", "audio": "base64_encoded_audio_data" }
字段类型必需描述
event_idstring事件唯一标识
audiostringbase64 编码的音频数据(WAV 格式)

音频缓冲区提交消息 (input_audio_buffer.commit)

仅在关闭了 server_vad 时,才需要提交该消息,是指要求服务端提交音频缓冲区,触发转录处理

{ "event_id": "event_125", "type": "input_audio_buffer.commit" }

字段说明

字段类型必需描述
event_idstring事件唯一标识

服务端消息类型

会话创建确认 (session.created)

确认会话创建成功。

{ "event_id": "319612d9-aede-4456-a1fd-bb9c21493cd9", "type": "session.updated", "meta": { "session_id": "test_trace_1766470129914296764", "timestamp": 1766468589040 }, "session": { "audio": { "input": { "transcription": { "language": "zh" }, "format": { "type": "pcm", "codec": "pcm_s16le", "rate": 16000, "bits": 16, "channel": 1 }, "turn_detection": { "type": "server_vad", "silence_duration_ms": 800 } } } } }

会话更新确认 (session.updated)

确认会话配置更新成功。

{ "event_id": "319612d9-aede-4456-a1fd-bb9c21493cd9", "type": "session.updated", "meta": { "session_id": "test_trace_1766470129914296764", "timestamp": 1766468589040 }, "session": { "audio": { "input": { "transcription": { "language": "zh" }, "format": { "type": "pcm", "codec": "pcm_s16le", "rate": 16000, "bits": 16, "channel": 1 }, "turn_detection": { "type": "server_vad", "silence_duration_ms": 800 } } } } }

语音开始事件 (input_audio_buffer.speech_started)

仅在开启了 server_vad 时才会返回该事件,指服务端检测到语音开始。

{ "event_id": "319612d9-aede-4456-a1fd-bb9c21493cd9", "type": "input_audio_buffer.speech_started", "meta": { "session_id": "test_trace_1766470129914296764", "timestamp": 1766470145337 }, "audio_start_ms": 15240, "item_id": "item_26cbd6a7-16e8-44c9-b6b4-d4d3b3c87b41" }

语音结束事件 (input_audio_buffer.speech_stopped)

仅在开启了 server_vad 时才会返回该事件,指服务端检测到语音结束。

{ "event_id": "406d719a-3392-4ca4-88b3-9f12d8189b74", "type": "input_audio_buffer.speech_stopped", "meta": { "session_id": "test_trace_1766470129914296764", "timestamp": 1766470143512 }, "audio_start_ms": 13480, "item_id": "item_8228b4a6-f127-4a60-8f33-20fcb7d9ff7d" }

音频缓冲区提交确认 (input_audio_buffer.committed)

确认音频缓冲区已提交。

{ "event_id": "event_xxx", "type": "input_audio_buffer.committed", "meta": { "session_id": "sess_xxx", "timestamp": 1642694400000 }, "item_id": "item_xxx", "previous_item_id": "item_yyy" }

对话项创建事件 (conversation.item.created)

新的对话项(转录结果)已创建。

{ "event_id": "event_xxx", "type": "conversation.item.created", "meta": { "session_id": "sess_xxx", "timestamp": 1642694400000 }, "previous_item_id": "item_yyy", "item": { "id": "item_xxx", "object": "realtime.item", "type": "message", "status": "in_progress", "role": "user", "content": [ { "type": "input_audio" } ] } }

转录增量事件 (conversation.item.input_audio_transcription.delta)

返回转录增量结果(流式输出)。

{ "event_id": "event_xxx", "type": "conversation.item.input_audio_transcription.delta", "meta": { "session_id": "sess_xxx", "timestamp": 1642694400000 }, "item_id": "item_xxx", "content_index": 0, "text": "你好", "start_time": 0, "end_time": 500 }

字段说明

字段类型描述
item_idstring对话项ID
content_indexint内容索引
textstring增量转录文本
start_timeint64开始时间(毫秒)
end_timeint64结束时间(毫秒)

转录完成事件 (conversation.item.input_audio_transcription.completed)

返回完整转录结果。

{ "event_id": "event_xxx", "type": "conversation.item.input_audio_transcription.completed", "meta": { "session_id": "sess_xxx", "timestamp": 1642694400000 }, "item_id": "item_xxx", "content_index": 0, "transcript": "你好,世界", "usage": { "prompt_tokens": 0, "completion_tokens": 10, "total_tokens": 10 } }

字段说明

字段类型描述
item_idstring对话项ID
content_indexint内容索引
transcriptstring完整转录文本
usageobject使用统计信息

错误消息 (error)

返回错误信息。

{ "event_id": "event_xxx", "type": "error", "meta": { "session_id": "sess_xxx", "timestamp": 1642694400000 }, "error": { "type": "invalid_request_error", "code": "invalid_value", "message": "错误描述", "param": "audio", "event_id": "event_xxx" } }

错误类型

类型描述
invalid_request_error请求参数错误
internal_error服务器内部错误
risk内容安全风险

错误码

错误码描述
invalid_value无效参数值
missing_param缺少必需参数
internal_error内部错误
max_idle_timeout空闲超时
pong_timeout心跳超时
risk_blocked内容被拦截

HTTP协议接口

时序图

鉴权参数

参数名必填描述示例
Content-Type固定为 application/jsonapplication/json
Accept固定为 text/event-streamtext/event-stream
Authorization认证令牌sk-xxxx

请求格式

{ "audio": { "data": "audioData", "input": { "transcription": { "language": "zh", "prompt": "请记录下你所听到的语音内容。相关的参考文本如下:音频转录,语音识别,实时处理,转录测试", "model": "step-asr", "full_rerun_on_commit": true, "enable_itn": true }, "format": { "type": "pcm", "codec": "pcm_s16le", "rate": 16000, "bits": 16, "channel": 1 } } } }

参数说明

参数名类型描述示例
formatObject音频格式配置
└ typeString容器格式,支持 pcm, ogg”pcm”
└ codecString编码格式,pcm_s16le,仅type为pcm时需传”pcm_s16le”
└ rateInt采样率,默认推荐 1600016000
└ bitsInt位深,推荐 1616
└ channelInt通道数,推荐 1 (单声道)1
transcriptionObject转录参数配置
└ modelString模型名称,目前支持 step-asr”step-asr”
└ languageString目标语言代码”zh”
└ full_rerun_on_commitbool用于判断是否开启二遍识别纠错,默认false关闭true
└ enable_itnbool是否开启itn,默认true开启true
└ promptString系统提示词,用于纠正专业术语或提升准确性”请记录你听到的语音内容,相关的参考文本如下:裘千仞,沪惠保是一款面向上海市基本医疗保险参保人员的商业医疗保险”

响应格式

SSE流式响应,包含以下事件类型:

Delta事件 (transcript.text.delta)

{ "type": "transcript.text.delta", "meta": { "session_id": "sse_1642694400123456789", "timestamp": 1642694400123 }, "delta": "识别的" }
字段类型描述
typestring事件类型,固定为 transcript.text.delta
meta.session_idstring会话ID
meta.timestampint64Unix时间戳(毫秒)
deltastring增量转录文本

Done事件 (transcript.text.done)

{ "type": "transcript.text.done", "meta": { "session_id": "sse_1642694400123456789", "timestamp": 1642694400456 }, "text": "识别的完整文字内容", "usage": { "type": "realtime_asr", "input_tokens": 1000, "input_token_details": { "text_tokens": 0, "audio_tokens": 1000 }, "output_tokens": 50, "total_tokens": 1050 } }
字段类型描述
typestring事件类型,固定为 transcript.text.done
meta.session_idstring会话ID
meta.timestampint64Unix时间戳(毫秒)
textstring完整转录文本
usageobject使用统计信息

错误事件 (error)

{ "type": "error", "meta": { "session_id": "sse_1642694400123456789", "timestamp": 1642694400789 }, "message": "错误描述信息" }
字段类型描述
typestring事件类型,固定为 error
meta.session_idstring会话ID
meta.timestampint64Unix时间戳(毫秒)
messagestring错误描述信息

错误处理

常见错误类型

  • invalid_request_error: 请求参数错误
  • internal_error: 服务器内部错误
  • risk: 内容安全风险

故障排除

  1. 连接失败: 检查服务是否启动,端口是否正确
  2. 音频无识别结果: 确认音频格式、编码和质量
  3. 识别准确性低: 尝试使用系统提示词或更换模型
  4. 延迟过高: 减少音频分块大小或使用轻量级模型
Last updated on