𝗗𝗲𝗯𝘂𝗴𝗴𝗶𝗻𝗴 𝗔𝗜 𝗦𝘁𝗿𝗲𝗮𝗺𝗶𝗻𝗴

ผมใช้เวลาสามสัปดาห์ในการสร้างอินเทอร์เฟซแชท 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