Відлагодження AI-стрімінгу
Я витратив три тижні на створення інтерфейсу чату з ШІ. Я хотів плавний потік слів. Натомість отримав розірвані з'єднання та незавершені речення.
Мій застосунок використовував FastAPI та React. Короткі відповіді працювали. Довгі відповіді обривалися на середині слова. Сервер переставав надсилати дані.
Я намагався це виправити. Збільшив таймаут — не допомогло. Додав цикл повторних спроб — це призвело до дублювання слів.
Проблема була в парсері. AI API надсилає рядки даних. Мій код закривав з'єднання занадто рано. Він не чекав на сигнал завершення.
Ось як я це виправив:
- Використовуйте
aiter_bytesзамістьaiter_lines. - Керуйте буфером рядків вручну.
- Шукайте сигнал
[DONE], щоб зупинитися.
Потім мій інтерфейс завис. Сервер надсилав 50 чанків на секунду. React не встигав за ними. Я додав невелику затримку на сервері, щоб обмежити швидкість передачі даних.
Уроки для вас:
- Спочатку прочитайте специфікацію стрімінгу.
- Не вважайте, що порожній рядок означає кінець.
- Використовуйте бібліотеку для парсингу SSE.
- Відстежуйте кількість чанків та затримки.
Стрімінги — це хаос. У них є свої нюанси. Ніколи не сподівайтеся, що стрім завершиться коректно.
Який ваш найдивніший баг зі стрімінгом?
Джерело: https://dev.to/__c1b9e06dc90a7e0a676b/debugging-ai-streaming-a-tale-of-chunks-and-timeouts-1p6m Додаткова спільнота для навчання: https://t.me/GyaanSetuAi