一、连接机器人
调用前需已通过 connect 连接该机器人,详细接入方法见:(客户端)接收 AI 机器人状态。
二、监听字幕
完成连接之后,字幕会通过 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。 |