芯剪开放平台

语音识别

音频转文字:分句 + 逐字时间戳,可选说话人区分,按音频时长计费。

POST /v1/audio/transcriptions

curl -X POST https://api.gomiservice.com/v1/audio/transcriptions \
  -H "Authorization: Bearer sk-gomi-你的Key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "volc-asr",
    "audio_url": "https://example.com/meeting.mp3",
    "request_id": "asr-20261003-0001"
  }'
字段必填说明
model是固定填 volc-asr
audio_url是音频地址,见下
request_id是幂等键,规则同提交生成:重试复用同一个值,不会重复识别、重复扣费
params否JSON 字符串,可设识别语言、识别内容、说话人等,见下

语音识别不在 GET /v1/models 的清单里,模型固定是 volc-asr。

音频要求

  • 公网可直接下载的 http(s) 地址,端口限 80 / 443 / 8080 / 8443;内网地址、带鉴权/防盗链的地址都会被拒
  • 文件在本地、没有公网地址:先上传文件,拿返回的 url 填进 audio_url
  • 只收音频:mp3、wav、m4a、aac、flac、ogg 等常见格式。视频请先抽出音轨
  • 单个文件 200 MB、2 小时以内
  • 提交时我们会先把文件下载下来量时长(这一步决定价格),所以大文件的提交请求可能要等几十秒,客户端超时请设到 2 分钟。超时了就用同一个 request_id 重试
  • 地址要在任务结束前一直可用、内容不变:执行时会再从这个地址读一次音频。读到的比提交时量的明显更长,任务会失败(INVALID_REQUEST,点数退还)

参数:params

{ "params": "{\"language\":\"en-US\",\"with_speaker_info\":true}" }
参数取值默认说明
language见下表zh-CN识别语言
caption_typespeech / singing / autospeech识别内容:只识别说话 / 只识别唱歌 / 两者都识别
with_speaker_infotrue / falsefalse区分说话人:开了之后每句、每个字带 attribute.speaker("1"、"2"…)
use_ddcoff / repeat / filleroff口语平滑标记:repeat 标记重复说的字,filler 标记语气词。被标记的字带 extra.smoothed,静音段是一句空文本、带 attribute.event: "silent"
use_punctrue / falsetrue加标点。只在 caption_type 为 speech 时生效
use_itntrue / falsetrue中文数字转阿拉伯数字(「一九七零年」→「1970年」)

布尔参数传 JSON 的 true / false,不是字符串 "true"。不认识的参数会被拒(INVALID_REQUEST),不会静默忽略。

识别语言

值语言
zh-CN(默认)普通话,含中英混合和常见方言
yue粤语
wuu上海话
nan闽南语
xghu西南官话
zgyu中原官话
ug维吾尔语
en-US英语
ja-JP日语
ko-KR韩语
es-MX西班牙语
ru-RU俄语
fr-FR法语

响应

{
  "task": {
    "task_id": "GMI-XXXXXXXXXXXXX",
    "status": "pending",
    "model": "volc-asr",
    "output_type": "transcription",
    "created_at": 1791000463,
    "urls": [],
    "cost_points": 3
  }
}

提交接口只返回一个任务(不是 tasks 数组)。拿 task_id 去查询任务,到 succeeded 后结果在 transcription 里:

{
  "task": {
    "task_id": "GMI-XXXXXXXXXXXXX",
    "status": "succeeded",
    "output_type": "transcription",
    "cost_points": 3,
    "transcription": {
      "text": "这是一次语音识别测试,看看能不能正常拿到字幕。",
      "duration_ms": 9403,
      "utterances": [
        {
          "text": "这是一次语音识别测试,", "start_ms": 120, "end_ms": 4120,
          "attribute": { "event": "speech" },
          "words": [
            { "text": "这", "start_ms": 120, "end_ms": 360, "attribute": { "event": "speech" } },
            { "text": "是", "start_ms": 360, "end_ms": 520, "attribute": { "event": "speech" } }
          ]
        },
        {
          "text": "看看能不能正常拿到字幕。", "start_ms": 4120, "end_ms": 9403,
          "attribute": { "event": "speech" },
          "words": [ { "text": "看", "start_ms": 4120, "end_ms": 4300, "attribute": { "event": "speech" } } ]
        }
      ]
    }
  }
}
字段说明
text全文,带标点,数字已转成阿拉伯数字(「一九七零年」→「1970年」)
duration_ms音频时长,毫秒
utterances分句,带起止时间(毫秒),可直接用来做字幕
utterances[].words逐字(英文是逐词)时间戳,总是有,没有就是 []。做卡拉 OK 式高亮、精确剪切点用它
utterances[].attribute厂商给的附加信息。event 一直有(speech 说话、silent 静音段);开了 with_speaker_info 多一个 speaker("1"、"2"…)。没有就没这个字段
utterances[].words[].attribute / .extra字级的附加信息,同上;开了 use_ddc 被标记的字带 extra,如 {"smoothed":"repeat"}

开了 with_speaker_info 的一句长这样:

{
  "text": "你好。", "start_ms": 0, "end_ms": 900,
  "attribute": { "event": "speech", "speaker": "1" },
  "words": [
    { "text": "你", "start_ms": 0, "end_ms": 400, "attribute": { "event": "speech", "speaker": "1" } },
    { "text": "好", "start_ms": 400, "end_ms": 900, "attribute": { "event": "speech", "speaker": "1" } }
  ]
}

attribute / extra 里的字段名是厂商原样,以后厂商多给的也会原样出现在这里。

  • 识别通常很快:几分钟的音频十几秒内出结果,建议 3–5 秒轮询一次
  • 结果体积:带逐字时间戳和附加信息后,1 小时中文约 1MB,2 小时上限约 2MB
  • 用同一个 request_id 重复提交拿回的是原来那个任务,但提交接口的响应里不带识别结果——结果一律从查询任务接口取

计费

  • 按音频时长计费,时长按秒向上取整。提交时量好、当场定价,提交响应里的 cost_points 就是这次的价格
  • 识别失败自动退还

常见错误

code何时处理
AI_AUDIO_URL_UNREACHABLE提交时 / 执行时地址下载不了:过期、404、不是公网地址、下载太慢。message 里有具体原因,换一个可直接下载的地址
AI_AUDIO_INVALID提交时 / 执行时音频本身有问题:不是音频、带视频画面、文件损坏、超过 200 MB 或 2 小时
INVALID_REQUEST提交时漏了 audio_url / request_id;params 里有不认识的参数或取值不对;或 request_id 已经用在一次生图/生视频提交上

全部错误码见错误码。

本页目录