Web

最近更新时间:2025-07-30 17:53:21

我的收藏

功能描述

该功能允许用户与 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:创建机器人

集成 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);
}
});
});