一、功能描述
核心功能包括:
1. 接收 AI 机器人的首次流式消息响应。
3. 用户中断正在生成中的流式消息。
4. 接收 AI 机器人的错误信息反馈。
所有相关消息均通过自定义消息(Custom Message) 类型传输,消息内容为特定结构的 JSON 字符串。
二、1. 首次响应
用户发起问题后,AI 机器人开始生成回复。当生成出第一段有效内容时,会立即通过一条新的自定义消息发送给用户,触发 TencentCloudChat.EVENT.MESSAGE_RECEIVED。
三、2. 流式更新
AI 机器人持续生成内容。每当有新内容片段产生,它不会发送新消息,而是修改之前发送的那条自定义消息,会触发 TencentCloudChat.EVENT.MESSAGE_MODIFIED。接收方看到的是同一消息的内容在不断追加更新。
四、3. 完成标志
当 AI 机器人完成整个回复的生成,会在最后一次更新(或唯一一次消息,如果流很短)时,将消息中的 isFinished 标志置为1。
五、4. 用户中断
用户在消息生成过程中可以主动中断。需发送一条特定格式的自定义消息到该 AI 机器人。
六、5. 错误反馈
如果 AI 机器人在处理请求或生成流式消息过程中发生错误,将会通过 TencentCloudChat.EVENT.MESSAGE_RECEIVED,发送给用户一条特定格式的错误消息。
七、步骤1:创建机器人
集成 AI 聊天机器人组件之前,请先在控制台 创建机器人。
八、步骤2:添加机器人好友
使用 REST API 添加上一步创建的机器人为好友。
注意:为避免你的 AI 资源被恶意消耗,现只支持使用 REST API 添加机器人好友,用户无法主动添加 AI 机器人为好友。
九、步骤3:向机器人发送文本消息
注意:说明:
注意:RBT_ID 为上一步添加的机器人好友的 ID;text 为向机器人发送的文本内容。
const message = chat.createTextMessage({ to: RBT_ID, // 机器人的userID,也可以通过创建机器人时获取。 payload: { text: 'Hello robot!' // 向机器人发送的文本内容 } }); return chat.sendMessage(message);
十、步骤4:接收到的 AI 流式消息
自定义消息包体内容
| 字段 | 类型 | 说明 |
| chatbotPlugin | number | 固定值 2,标识聊天机器人消息。 |
| src | number | 自定义消息类型 2:流式消息类型。 |
| chunks | Array | 流式消息内容。 |
| isFinished | number | 流式消息是否完结,0:未发送完 1:已发送完。 |
自定义消息包体示例如下:
let messageList = [];// 首次通过 MESSAGE_RECEIVED, 接收 AI 流式消息chat.on(TencentCloudChat.EVENT.MESSAGE_RECEIVED, function(event) { event.data.forEach((message) => { const { type, payload } = message; const isCustomMessage = type === TUIChatEngine.TYPES.MSG_CUSTOM; if (isCustomMessage) { const { chatbotPlugin, // 标识聊天机器人消息 src, // 消息类型 chunks, // 流式消息内容 isFinished, // 流式消息是否完结 } = JSON.parse(payload.data); } }); messageList.push(…event.data);});// 持续通过 MESSAGE_MODIFIED, 接收 AI 流式消息chat.on(TencentCloudChat.EVENT.MESSAGE_MODIFIED, function(event) { messageList = messageList.map((preMessage) => { const newMessage = event.data.find((message)=> preMessage.ID === message.ID); if(newMessage) { const { type, payload } = message; const isCustomMessage = type === TUIChatEngine.TYPES.MSG_CUSTOM; if (isCustomMessage) { const { chatbotPlugin, // 标识聊天机器人消息 src, // 消息类型 chunks, // 流式消息内容 isFinished, // 流式消息是否完结 } = JSON.parse(payload.data); } return newMessage; } return preMessage; })});
十一、步骤5:发送给 AI 的中断消息
自定义消息包体内容:
| 字段 | 类型 | 说明 |
| chatbotPlugin | Integer | 固定值 2,标识聊天机器人消息。 |
| src | Integer | 自定义消息类型 22:中断流式消息。 |
| msgKey | String | 消息的唯一标识 seq_random_serverTime。 |
自定义消息包体示例如下:
// 中断对话, message 是机器人回复的流式消息。function breakConversation(message) { const breakPayload = { chatbotPlugin: 2, // 识聊天机器人消息 src: 22, // 中断消息标识 msgKey: generateMessageKey(message) //消息的唯一标识 }; const breakMessage = chat.createCustomMessage({ to: message.from, // 机器人的userID,也可以通过创建机器人时获取。 payload: { data: JSON.stringify(breakPayload) } }); return chat.sendMessage(breakMessage);}// 生成消息键function generateMessageKey(message) { const { sequence, random, time } = message; return `${sequence}_${random}_${time}`;}
十二、步骤6:接收到的 AI 报错消息
自定义消息包体内容:
| 字段 | 类型 | 说明 |
| chatbotPlugin | Integer | 固定值 2,标识聊天机器人消息。 |
| src | Integer | 自定义消息类型 23:发消息或者配置 LLM 报错。 |
| errorInfo | String | 报错详细信息。 |
自定义消息包体示例如下:
chat.on(TencentCloudChat.EVENT.MESSAGE_RECEIVED, function(event) { event.data.forEach((message) => { const { type, payload } = message; const isCustomMessage = type === TUIChatEngine.TYPES.MSG_CUSTOM; if (isCustomMessage) { const { chatbotPlugin, // 标识聊天机器人消息 src, // 消息类型 errorInfo, // 报错详细信息 } = JSON.parse(payload.data); } });});