ストリーミング
ストリーミングにより、LLMが生成するにつれてトークンごとにレスポンスを送信できます。ユーザーは完全なレスポンスを待つことなく、テキストがリアルタイムで表示されるのを確認できます。
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を通じてエラーを発行します。再開するかどうかはエージェントが判断します。
次のステップ
- アーティファクト — 構造化インタラクションの送信
- メッセージ送信 — 非ストリーミングメッセージタイプ
- WebSocketイベント — ストリームイベントフレームリファレンス