Відлагодження 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