在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
官方指导方案:

豆包实时语音大模型 API 官方指导文档

文档来源:端到端实时语音大模型API接入文档 – 豆包语音-火山引擎
整理时间:2026年4月10日


目录


1. 概述

豆包实时语音大模型提供端到端实时语音交互能力,支持:

  • 实时语音识别(ASR):将用户的语音实时转换为文本
  • 大模型推理(Chat):基于对话历史生成智能回复
  • 实时语音合成(TTS):将大模型回复实时转换为语音

采用 WebSocket 长连接,二进制协议通信,延迟低、响应快。


2. 音频格式要求

2.1 客户端上传音频格式

参数 要求
格式 PCM(脉冲编码调制,未经压缩的音频格式)
声道 单声道
采样率 16000 Hz
位深 int16
字节序 小端序(Little-Endian)

2.2 服务端返回音频格式

模式 格式 说明
默认 OGG 封装的 Opus 音频 兼顾压缩效率与传输性能
自定义 PCM 格式 需在 StartSession 事件中配置 TTS audio_config

PCM 格式详细参数:

  • 单声道
  • 24000 Hz 采样率
  • 16 bit 位深
  • 字节序为小端序

3. 交互流程

3.1 标准交互流程(server_vad 模式)

RealtimeAPI 的交互流程目前只支持 server_vad 模式,该模式的交互流程如下:

  1. 客户端发送 StartSession 事件:初始化会话,配置音频格式、模型参数等
  2. 客户端持续发送 TaskRequest 事件:将音频流发送到服务端
    • 可以发送完整的音频流(包括静音部分)
    • 服务端通过 VAD(Voice Activity Detection)自动检测语音活动
  3. 服务端返回事件
    • ASRInfo(Event 450):模型识别出音频流中的首字时返回
    • ASRResponse(Event 451):模型识别出用户说话的文本内容(可能包含中间结果)
    • ASREnded(Event 459):模型认为用户说话结束时返回
    • TTSResponse(Event 352):返回模型生成的音频数据
    • ChatResponse(Event 550):返回模型回复的文本内容
  4. 客户端发送 FinishSession 事件(可选):结束当前会话

3.2 交互流程图

┌──────────┐                              ┌─────────────┐
│  客户端   │                              │ RealtimeAPI │
└─────┬────┘                              └──────┬──────┘
      │                                          │
      │ ───────── StartSession ────────────────> │  (1) 初始化会话
      │                                          │
      │ ◄──────── SessionStarted ─────────────── │  (2) 会话建立成功
      │                                          │
      │ ───────── TaskRequest ─────────────────> │  (3) 持续发送音频流
      │    (可多次发送,包含静音数据)             │
      │                                          │
      │ ◄──────── ASRInfo ────────────────────── │  (4) 检测到首字
      │ ◄──────── ASRResponse ────────────────── │  (5) ASR 识别结果
      │ ◄──────── ASREnded ───────────────────── │  (6) 用户说话结束
      │                                          │
      │ ◄──────── TTSResponse ────────────────── │  (7) 返回 TTS 音频
      │ ◄──────── ChatResponse ───────────────── │  (8) 返回文本回复
      │                                          │
      │ ───────── FinishSession ───────────────> │  (9) 结束会话(可选)
      │ ◄──────── SessionFinished ────────────── │  (10) 会话结束确认
      │                                          │

关键说明:

  • 客户端应持续发送音频流,即使没有说话(静音数据)
  • 服务端通过 server_vad 自动检测语音活动
  • ASR 和 TTS 事件可能交替返回,客户端需正确处理

4. 消息头格式

4.1 消息头结构

所有消息均采用二进制格式,消息头固定为 4 字节

字节偏移 长度 字段 说明
0 4 bits Protocol Version 协议版本(当前为 1)
0 4 bits Header Size 消息头大小(当前为 1,表示 4 字节)
1 4 bits Message Type 消息类型(见下表)
1 4 bits Flags 标志位
2 4 bits Serialization 序列化方式(0x01=JSON, 0x02=Protobuf)
2 4 bits Compression 压缩方式(0x00=无压缩)
3 8 bits Reserved 保留字段

4.2 Message Type(消息类型)

值(十六进制) 说明 方向
0x01 Full-client request 客户端 → 服务端
0x02 Audio-only request (TaskRequest) 客户端 → 服务端
0x09 Full-server response 服务端 → 客户端
0x0B Audio-only response (TTSResponse) 服务端 → 客户端
0x0F Error information 服务端 → 客户端

4.3 Flags(标志位)

含义
bit 0 保留
bit 1 保留
bit 2 1 表示包含 Event ID
bit 3 1 表示包含 Session ID

4.4 消息结构

客户端请求消息(Full-client request)
┌─────────────────────────────────────────┐
│           Message Header (4 bytes)      │
├─────────────────────────────────────────┤
│         Event ID (4 bytes, optional)    │  ← 当 Flags bit 2 = 1
├─────────────────────────────────────────┤
│      Session ID Size (4 bytes)          │  ← 当 Flags bit 3 = 1
├─────────────────────────────────────────┤
│       Session ID (variable length)      │  ← 当 Flags bit 3 = 1
├─────────────────────────────────────────┤
│      Payload Size (4 bytes)             │
├─────────────────────────────────────────┤
│           Payload (variable)            │
└─────────────────────────────────────────┘
服务端响应消息(Full-server response)
┌─────────────────────────────────────────┐
│           Message Header (4 bytes)      │
├─────────────────────────────────────────┤
│         Event ID (4 bytes, optional)    │  ← 当 Flags bit 2 = 1
├─────────────────────────────────────────┤
│      Session ID Size (4 bytes)          │  ← 当 Flags bit 3 = 1
├─────────────────────────────────────────┤
│       Session ID (variable length)      │  ← 当 Flags bit 3 = 1
├─────────────────────────────────────────┤
│      Payload Size (4 bytes)             │
├─────────────────────────────────────────┤
│           Payload (variable)            │
└─────────────────────────────────────────┘

注意: 服务端响应消息中也包含 Session ID,用于标识该响应属于哪个会话。


5. 事件定义

5.1 客户端事件

Event ID 事件名称 说明 Payload 格式
50 StartConnection 建立连接 {}
100 StartSession 初始化会话 JSON 配置对象
200 TaskRequest 发送音频数据 二进制音频数据(PCM)
150 FinishSession 结束会话 {}

5.2 服务端事件

Event ID 事件名称 说明 Payload 格式
50 ConnectionStarted 连接建立成功 Session ID(字符串)
150 SessionStarted 会话建立成功 Session ID(字符串)
350 TTSSentenceStart AI 开始说话 {}
352 TTSResponse 返回 TTS 音频数据 二进制音频数据
359 TTSEnded TTS 播放结束 {}
450 ASRInfo 识别到首字 {"question_id": STRING}
451 ASRResponse ASR 识别结果 {"results": [{"text": STRING, "is_interim": BOOLEAN}]}
459 ASREnded 用户说话结束 {}
550 ChatResponse 模型文本回复 {"content": STRING, "question_id": STRING, "reply_id": STRING}
600 SessionFinished 会话结束 {}
0x0F Error 错误信息 {"code": INT, "message": STRING}

5.3 StartSession 事件配置

StartSession 事件的 Payload 是一个 JSON 对象,包含以下字段:

{
  "user": {
    "uid": "user_unique_id"
  },
  "audio": {
    "format": "pcm",
    "sample_rate": 16000,
    "channels": 1,
    "codec": "raw"
  },
  "request": {
    "model_name": "O2.0",
    "model_version": "1.2.1.1",
    "speaker": "zh_female_vv_jupiter_bigtts",
    "work_mode": "pure-end-to-end",
    "output_mode": 0,
    "bot_name": "AI助手",
    "system_role": "你是一个专业、友好的 AI 销售助手",
    "speaking_style": "自然、亲切、口语化",
    "asr": {
      "extra": {
        "end_smooth_window_ms": 1500,
        "enable_custom_vad": false,
        "enable_asr_twopass": false,
        "context": {}
      }
    },
    "tts": {
      "speaker": "zh_female_vv_jupiter_bigtts",
      "audio_config": {
        "channel": 1,
        "format": "pcm_s16le",
        "sample_rate": 24000
      },
      "extra": {
        "speech_rate": 0,
        "loudness_rate": 0
      }
    },
    "dialog": {
      "extra": {
        "strict_audit": true,
        "input_mod": "keep_alive",
        "enable_music": false
      }
    }
  }
}

6. Session 管理

6.1 Session 生命周期

┌──────────────┐
│   空闲状态    │
└──────┬───────┘
       │
       │ StartSession
       ▼
┌──────────────┐
│  会话进行中   │ ◄─── 持续通信(TaskRequest → ASR/TTS/Chat)
└─────────────┘
       │
       │ FinishSession 或 异常断开
       ▼
┌──────────────┐
│  会话已结束   │
└──────────────┘

6.2 Session 复用

重要规则:

  1. 在客户端发送 FinishSession 事件后,系统将不再返回任何事件
  2. 但客户端仍可复用与火山语音网关之间的 WebSocket 连接
  3. 若需发起新的会话,客户端需重新从 StartSession 事件开始
  4. 同一 WebSocket 连接可以支持多个 Session(按顺序)

6.3 Session 复用流程图

┌────────────┐                      ┌─────────────┐
│   客户端    │                      │ RealtimeAPI │
└──────┬─────┘                      └────────────┘
       │                                   │
       │ ────── 停止发送客户端事件 ──────> │
       │                                   │
       │ ──────── FinishSession ─────────> │
       │                                   │
       │  ◄──── ASR事件 ❌ ─────────────── │
       │  ◄──── TTS事件 ❌ ────────────── │  服务端正在按顺序返回事件
       │  ◄──── Chat事件 ❌ ────────────── │
       │                                   │
       │  ◄──── SessionFinished ───────── │
       │                                   │
       │  ──────── StartSession ─────────> │  (复用同一连接)
       │  ──────── 其他客户端事件 ───────> │
       │                                   │

说明:

  • FinishSession 后,服务端会按顺序返回所有待处理的事件
  • 收到 SessionFinished 后,该 Session 完全结束
  • 可以在同一 WebSocket 连接上发起新的 StartSession

7. 服务端返回机制

7.1 事件返回顺序

服务端按照以下顺序返回事件:

  1. ASR 相关事件(按时间顺序)

    • ASRInfo → ASRResponse(可能多次) → ASREnded
  2. TTS 相关事件(按时间顺序)

    • TTSSentenceStart → TTSResponse(可能多次) → TTSEnded
  3. Chat 事件

    • ChatResponse(可能多次,流式返回)
  4. Session 控制事件

    • SessionStarted / SessionFinished

7.2 并发处理

  • 客户端可以并发处理多个事件流
  • ASR 和 TTS 事件可能交叉出现
  • 建议客户端使用事件队列异步处理机制

7.3 错误处理

  • 遇到 Error 事件(0x0F)时,客户端应记录错误信息
  • 严重错误可能导致 WebSocket 连接断开
  • 建议实现自动重连机制

附录:开发注意事项

A1. 音频发送频率

  • 建议每次发送 20-50ms 的音频数据
  • 采样率 16kHz、单声道、int16 格式下,20ms 约 640 bytes
  • 保持稳定的发送频率,避免突发大量数据

A2. 静音数据处理

  • 即使没有说话,也应持续发送静音数据
  • 静音数据帮助服务端维持 VAD 状态
  • 避免长时间不发送数据导致超时断开

A3. TTS 音频播放

  • TTSResponse 返回的是 PCM 音频块
  • 需要累积多个音频块后连续播放
  • 注意音频格式:24kHz、单声道、int16、小端序
  • 播放时注意音频增益降噪处理

A4. 网络延迟优化

  • 使用 WebSocket 长连接,避免频繁建立连接
  • 复用 Session 减少初始化开销
  • 合理设置超时时间(建议 30-60 秒)

A5. 错误恢复

  • 实现断线重连机制
  • 保存 Session 状态以便恢复
  • 记录关键事件日志便于排查问题

版本信息

  • 文档版本: v1.0
  • 协议版本: v1
  • API 版本: 豆包实时语音大模型 v1.2.1.1
  • 整理日期: 2026-04-10

参考资源

  • 原始文档:端到端实时语音大模型API接入文档 – 豆包语音-火山引擎
  • 服务提供商:火山引擎
  • 技术支持:豆包语音 API 文档中心
Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐