跳到內容

串流

串流讓你的 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 決定是否重新開始。

下一步