𝗗𝗲𝗯𝘂𝗴𝗴𝗶𝗻𝗴 𝗔𝗜 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴
ผมใช้เวลาสามสัปดาห์ในการสร้างอินเทอร์เฟซแชท AI ผมต้องการให้คำต่างๆ ไหลออกมาอย่างราบรื่น แต่สิ่งที่ได้กลับเป็นคอนเนกชันที่ขาดหายและประโยคที่ขาดตอน
แอปของผมใช้ FastAPI และ React คำตอบสั้นๆ ทำงานได้ปกติ แต่คำตอบยาวๆ กลับถูกตัดกลางคำ และเซิร์ฟเวอร์ก็หยุดส่งข้อมูลไปเสียดื้อๆ
ผมพยายามแก้ไขมันแล้ว ทั้งเพิ่มค่า timeout แต่ก็ไม่ได้ผล พอเพิ่ม retry loop เข้าไป ก็กลายเป็นว่ามีคำซ้ำโผล่ขึ้นมาแทน
ปัญหาอยู่ที่ตัว parser ครับ AI API จะส่งข้อมูลมาเป็นบรรทัดๆ แต่โค้ดของผมดันไปปิดการเชื่อมต่อเร็วเกินไป โดยไม่ได้รอสัญญาณสิ้นสุด (end signal)
นี่คือวิธีแก้ไข:
- ใช้
aiter_bytesแทนaiter_lines - จัดการ line buffer ด้วยตัวเอง
- คอยตรวจหา [DONE] signal เพื่อสั่งหยุด
จากนั้น UI ของผมก็ค้าง เพราะเซิร์ฟเวอร์ส่งข้อมูลมาถึง 50 chunks ต่อวินาที จน React ประมวลผลไม่ทัน ผมเลยต้องเพิ่มดีเลย์เล็กน้อยที่ฝั่งเซิร์ฟเวอร์เพื่อ throttle ข้อมูล
บทเรียนสำหรับคุณ:
- อ่านสเปกของการสตรีมให้ละเอียดก่อน
- อย่าทึกทักเอาเองว่าบรรทัดว่างหมายถึงการสิ้นสุด
- ใช้ไลบรารีสำหรับการทำ SSE parsing
- ติดตามจำนวน chunk และดีเลย์ที่เกิดขึ้น
การสตรีมนั้นวุ่นวายและมีเรื่องแปลกๆ เสมอ อย่าไว้ใจว่าการสตรีมจะจบลงอย่างราบรื่นเสมอไป
บั๊กการสตรีมที่แปลกที่สุดที่คุณเคยเจอคืออะไร?
Source: https://dev.to/__c1b9e06dc90a7e0a676b/debugging-ai-streaming-a-tale-of-chunks-and-timeouts-1p6m Optional learning community: https://t.me/GyaanSetuAi