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 正文(表格、程式碼塊)、檔案、停止生成、複製,以及已停止、生成中斷的提示;會話列表的預覽在生成中顯示“正在回覆…”。
