AI ஸ்ட்ரீமிங்கை டீபக் செய்தல்
ஒரு AI சாட் இன்டர்ஃபேஸை (chat interface) உருவாக்க நான் மூன்று வாரங்கள் செலவிட்டேன். வார்த்தைகள் தடையின்றித் தொடர்ச்சியாக வர வேண்டும் என்று நான் விரும்பினேன். ஆனால், இணைப்புகள் துண்டிக்கப்படுவதையும் (dead connections), வாக்கியங்கள் பாதியிலேயே உடைந்து போவதையும் கண்டேன்.
எனது ஆப் FastAPI மற்றும் React ஆகியவற்றைப் பயன்படுத்தியது. குறுகிய பதில்கள் சரியாக வந்தன. ஆனால் நீண்ட பதில்கள் வார்த்தையின் நடுவிலேயே நின்றுவிட்டன. சர்வர் தரவை அனுப்புவதை நிறுத்திவிட்டது.
இதைச் சரிசெய்ய முயன்றேன். timeout அளவை அதிகரித்தேன். அது பலனளிக்கவில்லை. ஒரு retry loop-ஐச் சேர்த்தேன். இது ஒரே வார்த்தைகள் மீண்டும் மீண்டும் வருவதற்குக் காரணமாக இருந்தது.
பிரச்சனை parser-இல் இருந்தது. AI API தரவை வரிகளாக (lines) அனுப்புகிறது. எனது கோட் (code) இணைப்பை மிக விரைவாகத் துண்டித்துவிட்டது. அது இறுதி சிக்னலுக்காக (end signal) காத்திருக்கவில்லை.
இதோ அதற்கான தீர்வு:
aiter_lines-க்கு பதிலாகaiter_bytes-ஐப் பயன்படுத்தவும்.- line buffer-ஐ கைமுறையாக (manually) நிர்வகிக்கவும்.
- நிறுத்த [DONE] சிக்னலுக்காகக் காத்திருக்கவும்.
பிறகு எனது UI உறைந்து போனது (froze). சர்வர் ஒரு வினாடிக்கு 50 chunks-களை அனுப்பியது. React-ஆல் அதைத் தொடர்ந்து கையாள முடியவில்லை. தரவின் வேகத்தைக் குறைக்க (throttle) சர்வரில் ஒரு சிறிய காலதாமதத்தைச் (delay) சேர்த்தேன்.
உங்களுக்கான பாடங்கள்:
- முதலில் streaming spec-ஐப் படிக்கவும்.
- ஒரு வெற்று வரி (blank line) முடிவைக் குறிக்கிறது என்று assumptions வைத்துக்கொள்ள வேண்டாம்.
- SSE parsing-க்காக ஒரு library-ஐப் பயன்படுத்தவும்.
- chunk எண்ணிக்கையையும் காலதாமதத்தையும் (delays) கண்காணிக்கவும்.
ஸ்ட்ரீம்கள் (Streams) குழப்பமானவை. அவற்றில் பல விசித்திரமான தன்மைகள் உள்ளன. ஒரு ஸ்ட்ரீம் தானாகவே முறையாக முடிந்துவிடும் என்று ஒருபோதும் நம்பாதீர்கள்.
உங்கள் விசித்திரமான ஸ்ட்ரீமிங் பிழை (streaming bug) எது?
மூலம்: https://dev.to/__c1b9e06dc90a7e0a676b/debugging-ai-streaming-a-tale-of-chunks-and-timeouts-1p6m விருப்பமான கற்றல் சமூகம்: https://t.me/GyaanSetuAi