สตรีมมิ่ง
스트리밍을 사용하면 에이전트가 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 이벤트 — 스트림 이벤트 프레임 레퍼런스