AI 回复
用户和 AI 机器人单聊时,机器人的回复是一条 type 为 ai 的消息,内容边生成边推送过来。界面窗口中的客户端提供与 Web SDK 相同的 client.ai:实时内容由引擎接收、按顺序拼接、断线后续传,再转给各个界面窗口;回复结束后以消息正文为准。接口、字段和事件的完整说明见 Web SDK 的 AI 回复。机器人和回复由你的服务端创建,见 AI 对话。
版本
AI 回复由 @deeprespond/im-web 1.0.6 起提供。@deeprespond/im-tauri 1.1.1 依赖 @deeprespond/im-web 的 ~1.1.1 范围,npm 包与 Rust 插件都升级到 1.1.1 即可使用。
在界面窗口中显示
ts
import { aiView } from '@deeprespond/im-web/render';
function renderAI(message: MessageView) {
const body = client.ai.bodyOf(message);
if (!body) return;
// 生成中取实时内容,结束后取消息正文
const live = body.status === 'streaming' ? client.ai.state(body.stream_id) : null;
const view = aiView(message, live);
draw(view); // 思考过程、工具调用、正文块(rich-text 节点)、附件、错误说明
}
client.on('ai.streamUpdated', (state) => redrawByStream(state.stream_id));
client.on('ai.streamEnded', ({ stream_id }) => redrawByStream(stream_id));
// 停止生成:只有接收回复的用户可以停止;已结束的返回当前状态,不报错
await client.ai.stop(body.stream_id);aiView 的字段见小程序 SDK 的 AI 回复。WebView 可以渲染 HTML 时,也可以直接用自己的 Markdown 组件渲染 parts 中的文字。
- 每个界面窗口都可以订阅
ai.*事件;断线重连后,SDK 自动补齐正在生成的内容。 - 生成中只重画这一条消息,不要每次更新都重建整个消息列表;推送合并为每 50 毫秒或 2 KB 一次。
- 重新生成:再发一次被回复的问题,机器人的服务端会开始一条新的回复。
示例 App
示例 App 的聊天页已显示 AI 回复(src/features/ai.ts):思考过程、工具调用的进度、Markdown 正文(表格、代码块)、文件、停止生成、复制,以及已停止、生成中断的提示;会话列表的预览在生成中显示“正在回复…”。
