串流
串流讓你的 Agent 在 LLM 產生內容時逐 Token 傳送回應。使用者會看到文字即時出現,而非等待完整回應。
StreamSession API
以 agent.stream() 開始串流:
interface StreamSession { delta(chunk: string): Promise<void>; // 傳送一段內容 done(finalPayload: SendPayload): Promise<void>; // 完成串流 abort(): void; // 取消串流}基本用法
const session = agent.stream(conversationId);// SDK 傳送帶有冪等鍵的 stream.start 訊框
for await (const chunk of llmStream) { await session.delta(chunk); // 每個 delta 獨立加密並傳送}
await session.done({ type: "text", content: fullText,});// SDK 傳送 stream.done,附帶完整加密載荷以供持久化搭配 OpenAI 使用
agent.onMessage(async (msg) => { const session = agent.stream(msg.conversation_id);
const stream = await openai.chat.completions.create({ model: "gpt-4o", messages: [{ role: "user", content: msg.content }], stream: true, });
let fullText = "";
for await (const chunk of stream) { const delta = chunk.choices[0]?.delta?.content ?? ""; if (delta) { fullText += delta; await session.delta(delta); } }
await session.done({ type: "text", content: fullText, });});中止串流
當使用者傳送新訊息或發生錯誤時取消串流:
session.abort();// SDK 傳送 stream.abort 訊框;客戶端丟棄部分內容加密
每個 delta 訊框獨立加密。這表示每段內容都是一個自包含的加密載荷。最終的 done 訊框攜帶完整的加密訊息,用於伺服器端持久化。
限制
| 約束 | 值 |
|---|---|
| 最大串流持續時間 | 5 分鐘 |
| 孤立偵測逾時 | 30 秒(無 delta) |
| 大群組(201-500 成員) | 串流停用 |
如果伺服器偵測到串流逾時,它會傳送 stream.error 訊框。SDK 中止工作階段並透過 onEvent 發出錯誤。Agent 決定是否重新開始。
下一步
- Artifact — 傳送結構化互動
- 傳送訊息 — 非串流訊息類型
- WebSocket 事件 — 串流事件訊框參考