Skip to Content
API 文档Audio语音识别

产品简介

本服务提供音频文件中人声对应的语音内容识别为文本的能力,识别过程为异步进行。

核心特性:

  • 支持中英文识别,暂不支持中文方言和其他语种
  • 暂不支持热词

提交任务

用于创建一个新的语音识别任务。

请求说明

  • 请求方法:POST
  • 请求地址https://api.stepfun.com/v1/audio/asr/file/submit
  • Content-Typeapplication/json

请求头

参数名必填类型说明
Authorizationstring认证 Token,格式:Bearer {API_KEY}
X-Trace-Idstring调用方自定义 trace id;不传则服务端生成
X-Request-Idstring调用方自定义 request id;不传则服务端生成

请求参数 (Body)

字段说明层级类型必填备注
audio音频流配置1dict可选PCM 格式必填,其他格式使用识别的结果
└ format音频容器格式2string音频文件的容器格式。由文件上传服务识别。支持格式:wav, mp3, pcm, ogg
└ codec音频编码格式2string可选:raw / opus,默认为 raw (pcm)。
└ rate音频采样率2intPCM必填
└ bits音频采样点位数2int默认为 16,暂只支持 16bits。
└ url访问的公网文件地址2file支持格式: wav、mp3、ogg和pcm。文件大小限制:小于 100MB
└ channel音频声道数2int1 (单声道) / 2 (双声道),默认为 1。必须准确填写音频文件的实际声道数。
request识别请求配置1dict核心层:用于配置模型能力和输出格式。
└ model_name模型名称2string例如:step-asr。
└ enable_channel_split启用双声道识别2bool默认为 false。前提条件:音频声道数channel 必须为 2。
└ show_utterances输出语音停顿、分句、分词信息及时间戳信息2bool

请求示例

POST https://api.stepfun.com/v1/audio/asr/file/submit Content-Type: application/json Authorization: Bearer sk-xxxxxxxxxxxx
{ "audio": { "format": "wav", "codec": "pcm", "rate": 16000, "bits": 16, "channel": 1, "url": "https://example.com/audio.wav" }, "request": { "model_name": "step-asr", "enable_channel_split": false, "show_utterances": false } }

返回结果

Response Body 包含任务的核心信息:

参数名类型描述
task_idstring任务 ID,用于后续查询结果。

返回示例:

{ "task_id": "018f2f1a-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }

查询结果

根据任务 ID 查询识别进度或获取最终结果。

请求说明

  • 请求方法:POST
  • 请求路径https://api.stepfun.com/v1/audio/asr/file/query{task_id}

请求参数

参数名必选类型描述
task_idstring提交任务时返回的任务 ID。

返回参数

参数名层级类型描述状态依赖
result1list识别结果仅当识别成功时填写
└ text2string整个音频的识别结果文本仅当识别成功时填写。
└ utterances2list识别结果语音分句信息仅当识别成功且开启show_utterances时填写。
   └ text3stringutterance级的文本内容仅当识别成功且开启show_utterances时填写。
   └ start_time3int起始时间(毫秒)仅当识别成功且开启show_utterances时填写。
   └ end_time3int结束时间(毫秒)仅当识别成功且开启show_utterances时填写。
   └ words3list词/字级别的文本内容
      └ text4string识别的文本内容
      └ start_time3int起始时间(毫秒)
      └ end_time3int结束时间(毫秒)

返回示例

示例 1:处理中

当任务处于排队/运行中时,服务端返回 200,但响应体通常为 {}(不包含 result 字段)。

示例 2:处理成功

{ "result": [ { "text": "识别出的完整文本", "utterances": [ { "text": "你好", "start_time": 0, "end_time": 500, "words": [ {"text": "你", "start_time": 0, "end_time": 200}, {"text": "好", "start_time": 200, "end_time": 500} ] } ] } ] }

声道拆分说明

enable_channel_split=true 且输入为立体声时,服务端会拆分为多个声道分别识别,result 数组长度可能为 2,每个元素对应一个声道的输出。


错误处理

接口会以标准 JSON 错误响应返回失败原因(HTTP 状态码与错误结构以网关/服务端实现为准)。常见错误场景:

  • 鉴权失败:未提供或提供了错误的 StepAI-UID / StepAI-KeyID
  • 模型不支持request.model_namestep-asr
  • 限流/白名单限制:请求被限流或不在白名单
  • 任务不存在task_id 不存在或不属于当前 uid
  • 任务失败:后台处理失败(下载失败/转码失败/识别失败等)

使用示例

Curl

提交任务

curl -sS -X POST "http://localhost:8000/v1/audio/asr/file/submit" \ -H 'Content-Type: application/json' \ -H 'StepAI-UID: 123' \ -H 'StepAI-KeyID: 456' \ -d '{ "audio": { "format": "wav", "codec": "pcm", "rate": 16000, "bits": 16, "channel": 1, "url": "https://example.com/audio.wav" }, "request": { "model_name": "step-asr", "enable_channel_split": false, "show_utterances": true } }'

返回:

{"task_id":"018f2f1a-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}

轮询查询

curl -sS -X POST "http://localhost:8000/v1/audio/asr/file/query" \ -H 'Content-Type: application/json' \ -H 'StepAI-UID: 123' \ -H 'StepAI-KeyID: 456' \ -d '{"task_id":"018f2f1a-xxxx-xxxx-xxxx-xxxxxxxxxxxx"}'

最佳实践

  1. 轮询节流:建议 1s~3s 轮询一次,避免过于频繁造成限流
  2. 超时控制:客户端设置总体超时,避免无限等待
  3. URL 可达性:确保 audio.url 可被服务端直接下载(建议 HTTPS、可公网访问或在服务网络可访问)
  4. 结果粒度
    • 只需要整段文本:show_utterances=false
    • 需要时间戳/字幕对齐:show_utterances=true
  5. 声道拆分:双人对话/左右声道分别录制场景可开启 enable_channel_split=true

音频要求(建议)

  • 优先使用清晰语音、较少背景噪音的录音
  • 若可控制录制格式,建议:16kHz / 16bit / mono
  • 立体声场景如需分别识别两路说话人,可启用声道拆分
Last updated on