功能概述
TRTC AI 实时对话 2.0 提供了显示实时字幕的能力。实时字幕通过 TRTC 的自定义消息发送,可以实现与音频对话毫秒级别的同步。
字幕接收
连接机器人
监听字幕
完成连接之后,字幕会通过
onExperimentalEvent 实时回调,eventName 为 onAIConversationEvent。params.event 为 asrSubtitle 时是用户说话的识别结果,为 llmSubtitle 时是机器人的回复文本。字幕模式
机器人侧字幕的出现时机由创建任务时的
AgentConfig.SubtitleMode 决定。SubtitleMode | 说明 |
0(默认) | 尽快显示。LLM 文本生成后即回调,不与音频播放同步,字幕会先于声音出现。 |
1 | 句子级同步。按当前正在播放的句子回调已播报的完整回复文本;当前句播完、开始播下一句时,再更新文本。 |
ASR 字幕
用户说话的识别结果。
text 为这一句截至当前的完整文本,end 为 true 表示该句识别完成。{"event": "asrSubtitle","robotid": "ai_bot_001","data": {"type": 10100,"robotid": "ai_bot_001","sender": "user_001","payload": {"text": "你好。","start_time_ms": 4446039,"end_time_ms": 4456039,"start_utc_ms": 1785396254452,"end_utc_ms": 1785396264452,"end": false,"roundid": "D7E2053C-6E1F-4941-9761-FEE0407016EF","taskid": "task-id"}}}
字段 | 类型 | 说明 |
event | String | 固定为 asrSubtitle。 |
robotid | String | 当前连接的 AI 机器人 UserId。 |
data.type | Number | 消息类型,ASR 字幕为 10100。 |
data.robotid | String | AI 对话机器人 UserId。 |
data.sender | String | 被识别的用户 UserId。 |
data.payload.text | String | 该句截至当前的完整识别文本。 |
data.payload.start_time_ms | Number | 该句语音在音频流中的起始时间,相对时间,单位毫秒。 |
data.payload.end_time_ms | Number | 该句语音在音频流中的结束时间,相对时间,单位毫秒。 |
data.payload.start_utc_ms | Number | 该句语音起始的 UTC 时间戳,单位毫秒。 |
data.payload.end_utc_ms | Number | 该句语音结束的 UTC 时间戳,单位毫秒。 |
data.payload.end | Boolean | false 为中间结果,true 为该句识别完成。 |
data.payload.roundid | String | 对话轮次 ID,同一轮的 ASR、LLM 字幕用它关联。 |
data.payload.taskid | String | AI 对话任务 ID。 |
说明:
做字幕与音频对齐时,同一路音频流内的句子直接用
start_time_ms 排序对齐即可;需要与业务侧绝对时间(如消息发送时间)对齐时,使用 start_utc_ms。LLM 字幕
机器人的回复文本。
text 为本轮回复截至当前的完整文本,end 为 true 表示本轮回复结束。roundid 与触发本轮回复的 ASR 字幕相同。{"event": "llmSubtitle","robotid": "ai_bot_001","data": {"type": 10101,"robotid": "ai_bot_001","sender": "tts_bot_001","payload": {"text": "你好,有什么可以帮你的?","end": false,"roundid": "D7E2053C-6E1F-4941-9761-FEE0407016EF","taskid": "task-id"}}}
字段 | 类型 | 说明 |
event | String | 固定为 llmSubtitle。 |
robotid | String | 当前连接的 AI 机器人 UserId。 |
data.type | Number | 消息类型,LLM 字幕为 10101。 |
data.robotid | String | AI 对话机器人 UserId。 |
data.sender | String | 对应的 TTS 机器人 UserId。 |
data.payload.text | String | 本轮回复截至当前的完整文本。 |
data.payload.end | Boolean | false 为中间结果,true 为本轮回复结束。 |
data.payload.roundid | String | 对话轮次 ID,与触发本轮回复的 ASR 字幕相同。 |
data.payload.taskid | String | AI 对话任务 ID。 |