AGTCloud API Docs
文档指南API Reference集成与资源更新与帮助
实时交互

实时转录

通过 Realtime WebSocket 持续发送音频并接收增量及最终转录文本。

实时转录通过持久 WebSocket 连接接收连续音频,并按音频项返回增量文本和最终转录结果。它适合实时字幕、会议速记、通话转写和语音输入;如需一次上传完整录音文件,请使用音频转写接口。

gpt-live-transcribe 适合低延迟增量转录;gpt-transcribe 适合提交完整语音段后进行高准确度转录,并可在最终事件中返回检测到的语言。连接和会话中的模型应保持一致。

WSS
wss://api.agtcloud.cn/v1/realtime?model=MODEL_ID

认证与连接

服务端应用应在 WebSocket 握手中使用 Bearer API Key:

项目值
连接地址wss://api.agtcloud.cn/v1/realtime?model=MODEL_ID
AuthorizationBearer your-api-key
OpenAI-Safety-Identifier可选的脱敏终端用户标识

普通浏览器的 WebSocket API 不能自定义 Authorization Header,因此不要把长期 API Key 写入前端 HTML、JavaScript 或客户端包。浏览器产品应由可信后端建立连接或提供受控的短期凭证机制。

音频输入要求

本文档中的输入音频采用 PCM16 little-endian、24 kHz、单声道,不包含 WAV 或其他容器文件头。input_audio_buffer.append 中的 audio 是原始 PCM 字节的 Base64 字符串。

实时发送时建议使用较小且稳定的音频片段;单个事件不应超过 15 MiB。音频格式、采样率或容器处理错误会导致转录失败。

会话配置

session.update 的 session.type 固定为 transcription。转录配置位于 session.audio.input.transcription:

字段说明
model与连接 URL 一致的转录模型
prompt业务场景、说话环境和上下文提示
keywords专名、缩写和产品名提示,不保证强制输出
languages预期语言列表,例如 zh-cn、en
delay实时模型的延迟设置,例如 low

noise_reduction.type=near_field 适合耳麦,far_field 适合会议室或笔记本麦克风;设为 null 可关闭降噪。

手动提交与服务端 VAD

  • turn_detection: null:客户端发送音频后调用 input_audio_buffer.commit,适合由业务明确控制分段。
  • 服务端 VAD:配置阈值、语音前缀和静音时长,由服务端自动识别语音开始与结束。

手动模式下不要提交空缓冲区。启用 VAD 时,可根据 speech_started 和 speech_stopped 更新录音界面,但最终转录仍应以 completed 事件为准。

连接示例

以下示例假设 audio.pcm 已转换为 PCM16、24 kHz、单声道原始音频。实际实时应用应持续发送较小音频块,而不是一次读取完整录音。

WSS实时转录连接与音频发送
import fs from 'node:fs';
import WebSocket from 'ws';

const ws = new WebSocket('wss://api.agtcloud.cn/v1/realtime?model=MODEL_ID', {
  headers: {
    Authorization: 'Bearer your-api-key',
  },
});

ws.on('open', async () => {
  ws.send(JSON.stringify({
  "type": "session.update",
  "session": {
    "type": "transcription",
    "audio": {
      "input": {
        "format": { "type": "audio/pcm", "rate": 24000 },
        "noise_reduction": { "type": "near_field" },
        "transcription": {
          "model": "MODEL_ID",
          "prompt": "中文客服通话",
          "keywords": ["AGTCloud", "API 网关"],
          "languages": ["zh-cn", "en"]
        },
        "turn_detection": null
      }
    }
  }
}));

  const audio = fs.createReadStream('audio.pcm', { highWaterMark: 4800 });
  for await (const chunk of audio) {
    ws.send(JSON.stringify({
      type: 'input_audio_buffer.append',
      audio: chunk.toString('base64'),
    }));
    await new Promise((resolve) => setTimeout(resolve, 100));
  }
  ws.send(JSON.stringify({ type: 'input_audio_buffer.commit' }));
});

ws.on('message', (message) => {
  const event = JSON.parse(message.toString());
  if (event.type.endsWith('.delta')) process.stdout.write(event.delta);
  if (event.type.endsWith('.completed')) console.log('\n', event.transcript);
});

事件 Reference

客户端使用会话和音频缓冲区事件控制输入;服务端使用 Item ID 关联增量文本、最终文本和错误。不同音频项的完成顺序可能不同,因此应按 item_id 聚合文本。

客户端事件 · Session

session.update

配置实时转录会话、输入音频和分段方式。

字段类型必填说明示例值
event_id字符串否客户端生成的事件 ID。evt_session_001
type字符串是固定为 session.update。session.update
session.type字符串是固定为 transcription。transcription
session.audio.input.format.type字符串是本文使用 PCM16 little-endian。audio/pcm
session.audio.input.format.rate整数是PCM 输入采样率。24000
session.audio.input.noise_reduction.type字符串否近场或远场降噪。near_field
session.audio.input.transcription.model字符串是与连接 URL 一致的转录模型。MODEL_ID
session.audio.input.transcription.prompt字符串否转录场景和上下文提示。中文客服通话
session.audio.input.transcription.keywords字符串数组否专名、缩写或产品名提示。["AGTCloud", "API 网关"]
session.audio.input.transcription.languages字符串数组否预期语言列表。["zh-cn", "en"]
session.audio.input.transcription.delay字符串否实时模型延迟设置。low
session.audio.input.turn_detection对象或 null是null 使用手动提交;对象启用服务端 VAD。null
JSON 示例
{
  "event_id": "evt_session_001",
  "type": "session.update",
  "session": {
    "type": "transcription",
    "audio": {
      "input": {
        "format": {
          "type": "audio/pcm",
          "rate": 24000
        },
        "noise_reduction": {
          "type": "near_field"
        },
        "transcription": {
          "model": "MODEL_ID",
          "prompt": "中文客服通话",
          "keywords": [
            "AGTCloud",
            "API 网关"
          ],
          "languages": [
            "zh-cn",
            "en"
          ],
          "delay": "low"
        },
        "turn_detection": null
      }
    }
  }
}

错误处理与恢复

类型常见原因处理方式
握手失败WSS 地址、API Key 或请求 Header 错误修正连接参数后重新建立连接
参数错误会话层级、字段值或模型不一致读取 error.event_id 并修正对应客户端事件
音频错误格式、采样率、Base64 或文件头不符合要求重新转换音频并清空缓冲区
转录失败音频不可辨识或当前音频项处理失败记录失败 Item ID,只重试对应语音段
连接中断网络中断或会话失效停止发送音频,有限重连并重新创建会话

增量文本可能被后续结果修订,不应在收到 delta 时写入不可变记录;只有 completed 中的 transcript 应作为当前音频项的最终文本。