Web&小程序&uni-app

最近更新时间:2026-05-21 10:52:31

我的收藏

功能描述

流式消息(Stream Message)是即时通信 IM SDK 提供的一种特殊消息类型,专为 AI 对话等场景设计。在这类场景中,消息内容由服务端逐步生成,SDK 会实时接收内容分片并累加,直到整条消息生成完毕。客户端通过监听消息修改事件,即可实时获取流式消息的最新内容,实现类似 ChatGPT 的逐字输出效果。
说明:
流式消息功能在 V4.2.4 及以上版本支持。
SDK 内部自动完成流拉取、分片排序、ACK 确认等操作,无需手动调用额外接口。
流式消息通过 MESSAGE_MODIFIED 事件持续通知 UI 层更新内容。

接口说明

流式消息 payload 数据结构

属性
含义
说明
markdown
流式消息文本内容
随着分片到达逐步累加的文本内容,只读。
isStreamEnded
流式消息是否结束
为 true 时表示服务端已完成所有内容推送。
说明:
markdown 为只读属性,其内容由 SDK 内部自动维护和累加,客户端只需读取即可。
监听 MESSAGE_MODIFIED 事件获取到的 markdown 已是累加后的完整内容,无需客户端自行拼接。

发送流式消息

流式消息只能通过 REST API 发送,具体参考 发送 C2C 流式消息发送群流式消息

接收流式消息

当收到一条新的流式消息时,SDK 会通过 MESSAGE_RECEIVED 事件通知。此时消息中的 payload 内容可能还不完整(isStreamEndedfalse)。
示例代码如下:

let onMessageReceived = function(event) {
event.data.forEach((message) => {
if (message.type === TencentCloudChat.TYPES.MSG_STREAM) {
// 在 UI 上展示消息,后续内容会通过 MESSAGE_MODIFIED 事件持续更新
const {
markdown, // 流式消息内容
isStreamEnded, // 流式消息是否结束
} = message.payload;
}
})
};
chat.on(TencentCloudChat.EVENT.MESSAGE_RECEIVED, onMessageReceived);

监听流式消息内容更新

SDK 收到新的分片数据后,会自动将内容累加到 payload 中,并通过 MESSAGE_MODIFIED 事件通知上层。只需在该回调中读取最新的 markdown 内容并刷新 UI 即可。
说明:
MESSAGE_MODIFIED 事件可能触发多次,每收到一批有效分片都会触发一次,请确保 UI 刷新逻辑高效。
当 isStreamEnded 为 true 时,表示流式消息已结束,可以停止加载动画等 UI 状态。
示例代码如下:

let onMessageModified = function(event) {
event.data.forEach((message) => {
if (message.type === TencentCloudChat.TYPES.MSG_STREAM) {
const {
markdown, // 流式消息内容
isStreamEnded, // 流式消息是否结束
} = message.payload;
// 通过 message.ID 更新消息内容

if (isStreamEnded) {
// 流式消息已结束,可以做最终处理
}
}
})
};
chat.on(TencentCloudChat.EVENT.MESSAGE_MODIFIED, onMessageModified);


历史消息中的流式消息

当拉取历史消息时:
若消息中包含未完成的流式消息,SDK 会自动恢复拉流操作,继续通过 MESSAGE_MODIFIED 事件更新内容,客户端无需额外处理。
若消息中的流式消息已全部拉取完毕,拉取历史消息后可直接展示完整内容,且不会再次触发 MESSAGE_MODIFIED 事件。