跳转到主要内容

产品简介

本服务提供基于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-1.1-stream",
          "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-1.1-stream"step-asr-1.1-stream"
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
└ thresholdFloatVAD语音检测阈值,用于控制语音检测灵敏度,值越大检测越严格0.5

音频数据追加消息 (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-1.1-stream",
        "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-1.1-stream”step-asr-1.1-stream”
└ 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. 延迟过高: 减少音频分块大小或使用轻量级模型