Лого на 91. НЕГ „Проф. Константин Гълъбов“

Избираем модул · Урок 17

Поточен изход

Защо отговорът се показва дума по дума: усещане за скорост, техника на предаване и какво се усложнява при запис, валидиране и прекъсване.

Едно и също време, различно усещане

Отговор от 300 токена отнема около 6 секунди. Показан наведнъж след шестата секунда, той изглежда като заседнало приложение. Показван дума по дума от първата секунда, изглежда бърз — макар да свършва по същото време.

Поточен изход (streaming)

Предаване на отговора на части, докато моделът го генерира, вместо изчакване на пълния текст.

НаведнъжНа поток
Първи знак след6 сек0.4 сек
Общо време6 сек6 сек
Усещанезаседналоживо
Отказ по средатанищо не е полученочаст от отговора е налична
Сложност на коданискапо-висока

Как се предава

Моделът връща парчета. Сървърът ги препраща на клиента, без да чака края. Обичайният начин е Server-Sent Events — еднопосочен поток от сървъра към браузъра върху обикновена HTTP заявка.

Клиент → сървър:  POST /pitay
Сървър → клиент:  Content-Type: text/event-stream

data: {"parche": "Учениците "}
data: {"parche": "влизат до "}
data: {"parche": "7:45 ч."}
data: {"gotovo": true, "iztochnici": ["Правилник, чл. 12"]}
  • Работи върху обикновен HTTP — не изисква WebSocket.
  • Еднопосочен е, което е достатъчно за отговор.
  • Всяко парче е самостоятелен ред — лесно се разчита.
  • Последното съобщение носи данните, които се знаят чак накрая: източници, разход, идентификатор на съобщението.

Какво се усложнява

Записът в базата

Отговорът е готов чак накрая. Два подхода: да се събира в паметта и да се запише един път, или да се запише празен ред и да се обнови. Първият е по-прост; вторият оцелява при прекъсване.

Валидирането

Структуриран изход и поток не се съчетават добре: половин JSON не е валиден. Затова при заявки със схема (11. клас, урок 25) потокът обикновено не се използва — там отговорът трябва да е цял, за да има смисъл.

Прекъсването

Ако потребителят затвори страницата, генерирането трябва да спре — иначе плащате за отговор, който никой няма да види. Затова се следи дали връзката е жива и се отменя заявката към модела.

Грешка по средата

Половин отговор плюс грешка е по-лош от липса на отговор. Клиентът трябва да разпознае, че потокът е прекъснат необичайно, и да покаже това ясно — не да остави половин изречение като краен резултат.

Кога поток и кога не

  • Чат и дълги обяснения → поток.
  • Структуриран изход по схема → без поток.
  • Класификация в една дума → без поток, няма какво да се показва.
  • Обработка на много документи → нито едното: отложена задача със състояние.

Не започвайте с поток

Направете първо работеща синхронна версия и я измерете. Потокът е подобрение на усещането, а не на резултата — добавя се, когато останалото работи.