Перейти до вмісту

Streaming

Streaming дозволяє агенту надсилати відповіді токен за токеном у міру генерації 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 з повним зашифрованим payload для збереження

З 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 шифрується незалежно. Це означає, що кожен фрагмент — це самодостатній зашифрований payload. Фінальний кадр done містить повне зашифроване повідомлення для збереження на сервері.

Обмеження

ОбмеженняЗначення
Максимальна тривалість потоку5 хвилин
Тайм-аут виявлення сиріт30 секунд (без delta)
Великі групи (201-500 учасників)Streaming вимкнено

Якщо сервер виявляє тайм-аут потоку, він надсилає кадр stream.error. SDK перериває сесію та передає помилку через onEvent. Агент вирішує, чи починати заново.

Наступні кроки