精准国际传播系统 API文档

该API通过WebSocket连接提供VAD、ASR、TTS、CTT多模式下实时和离线融合的语音识别。

基本URL

ws://<HOST>:<PORT>

鉴权

  • Bearer Token: JWT秘钥。
  • 需要在请求中加入 Authorization 头,携带Bearer Token。

支持的协议

  • 上传语音数据包: {code:"101",data:"binary"}
  • Ping间隔: 自动Ping保持连接

初始语音请求

语音格式初始化请求示例 (WebSocket)

发送到WebSocket服务器的消息应为JSON格式。客户端通过发送JSON消息控制 WebSocket 连接的行为,并通过二进制音频数据发送音频流。以下是常见的请求参数:

{
"code":"100",
"is_speaking": true,
"chunk_interval": 10,
"wav_name": "microphone",
"chunk_size": [0,10,5],
"encoder_chunk_look_back": 1,
"decoder_chunk_look_back": 0,
"hotword": ["对华态度","美国对华"],
"mode": "2pass"
}
  • is_speaking: (可选)表示用户当前是否正在讲话的布尔值。
  • chunk_interval: (可选)处理音频块的间隔(音频帧数)。
  • wav_name: (可选)音频流的名称。
  • chunk_size: (可选)用于VAD和ASR的音频块大小(帧数)。
  • encoder_chunk_look_back: (可选)流式ASR的编码器回看设置。
  • decoder_chunk_look_back: (可选)流式ASR的解码器回看设置。
  • hotword: (可选)用于ASR识别的热词。
  • mode: (可选)操作模式。可选值:"2pass"(双通识别)、"online"(流式)、"offline"(录音后处理)。

WebSocket API 功能说明

1. 实时语音识别(ASR)

客户端可以通过 WebSocket 发送音频流(以二进制形式传输)以获取实时语音识别结果。

  • 音频格式: 16kHz 采样率,单声道,PCM格式
  • 传输方式: 通过 WebSocket 二进制数据块发送音频。

请求示例:

  • 发送音频块(以二进制格式发送,非JSON)。
  • 发送控制参数:
{
"is_speaking": true,
"mode": "online",
"chunk_size": [320, 160]
}

响应示例:

{
"mode": "online",
"text": "识别到的文本",
"wav_name": "microphone",
"is_final": true
}
  • text字段包含 ASR 模型识别的文本。
  • is_final为 true 时表示该段音频已处理完成。

2. 调用大语言模型(LLM)

识别后的文本可以通过 WebSocket 调用大模型接口进行处理,生成进一步的语义分析或应答。

响应示例:

{
"mode": "llm",
"text": "大模型生成的回答"
}
  • text字段包含大模型生成的文本。

3. 文本转语音(TTS)

大语言模型生成的文本可以通过TTS接口转换为语音,语音将以base64编码的音频块形式通过 WebSocket 发送。

请求示例:

在 WebSocket 处理过程中,系统会自动调用TTS生成语音,客户端不需要额外请求。

响应示例:

{
“code”: "203",
"mode": "voice",
"text": "base64编码的音频数据"
}
  • mode为 "voice" 表示该响应为TTS生成的音频数据。
  • text字段为经过 base64 编码的音频块,客户端需解码为PCM或播放格式。

错误处理

当发生错误时,服务器将返回如下格式的错误信息:

{
“code”: "400",
"error": "详细的错误信息"
}

WebSocket 使用流程

  1. 建立连接: 客户端连接到服务器。
  2. 发送音频流: 通过 WebSocket 发送音频块(以二进制格式),并可选发送JSON控制参数(如 is_speaking 和 mode)。
  3. ASR识别结果: 服务器返回语音识别结果文本。
  4. 调用大模型(可选): 识别文本发送给大模型接口,生成进一步的回答。
  5. TTS语音合成(可选): 大模型生成的文本转换为语音,流式传输回客户端。
  6. 处理结束: 当 is_final 为 true 时,表示一次会话的结束。

示例请求流程

  1. 客户端通过 WebSocket 发送控制消息:
{
"is_speaking": true,
"mode": "2pass-online"
}
  1. 客户端开始发送音频块(通过二进制消息)到服务器。
  2. 服务器返回 ASR 识别结果:
{
“code”: "200",
"mode": "online",
"text": "你好,今天的天气如何?",
"is_final": true
}
  1. 服务器调用大语言模型,返回模型生成的应答:
{
“code”: "202",
"mode": "llm",
"text": "今天天气晴朗,适合出行。"
}
  1. 服务器调用TTS接口,将文本转换为语音:
{
“code”: "203",
"mode": "voice",
"text": "base64编码的语音数据"
}

客户端可以解码 base64 音频数据并播放。


在线ASR响应示例 (WebSocket)

{
“code”: "200",
"mode": "2pass-online",
"text": "识别到的文本",
"wav_name": "microphone",
"is_final": true
}
  • mode: 用于ASR处理的操作模式。
  • text: ASR模型识别的文本。
  • wav_name: 当前音频流的名称。
  • is_final: 布尔值,表示是否为最终结果。

离线ASR+CTT响应示例 (WebSocket)

{
"code": "201",
"mode": "2pass-offline",
"text": "识别到的文本",
"wav_name": "microphone",
"is_final": true
}
  • mode: 用于ASR处理的操作模式。
  • text: ASR模型识别的文本。
  • wav_name: 当前音频流的名称。
  • is_final: 布尔值,表示是否为最终结果。

常见问题

  • ConnectionClosed: 如果连接关闭,请检查网络问题或WebSocket处理是否正确。
  • InvalidState: 确保WebSocket连接已正确打开并未中断。