功能描述
该功能允许用户与 AI 机器人进行对话,实时接收机器人思考过程中的部分回复(流式输出)。
核心功能包括:
1. 接收 AI 机器人的首次流式消息响应。
2. 接收 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:创建机器人
步骤2:添加机器人好友
注意:
为避免您的 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);}});});