เมื่อเช้าวันจันทร์ที่ผ่านมา ทีมของผมเจอ log สีแดงใน Datadog ที่ทำให้หัวใจหยุดเต้น: ConnectionError: HTTPSConnectionPool(host='api.openai.com', port=443): Read timed out. (read timeout=600) — คำขอ batch ขนาด 500 รายการที่กำลังประมวลผลเอกสาร PDF ทั้งคืน ล้มเหลวเกือบ 80% เพราะเราเรียก API แบบ synchronous ติดกัน 500 ครั้ง ภายใน 30 นาทีหลังจากนั้น ผมได้เรียนรู้บทเรียนราคาแพง: การเลือกระหว่าง Batch กับ Streaming ไม่ใช่แค่เรื่อง UX แต่เป็นเรื่องของการอยู่รอดของโครงการ
บทความนี้มาจากประสบการณ์ตรงของผมในการ migrate ระบบ RAG pipeline ขนาด 12 ล้านเอกสาร ที่ใช้งบไปกว่า $48,000/เดือน บน OpenAI direct ก่อนจะลดเหลือ $19,200/เดือน หลังย้ายมาใช้ async batch + HolySheep AI เป็น gateway
Streaming กับ Batch: ความแตกต่างที่ส่งผลต่อบิล
ก่อนจะลงลึก เรามาทำความเข้าใจก่อนว่า 2 รูปแบบนี้ต่างกันอย่างไรในแง่โครงสร้างต้นทุน
- Streaming Output (Server-Sent Events) — ส่ง token กลับทีละ chunk ผ่าน HTTP chunked transfer เหมาะกับ UI แบบ real-time chat แต่เปลือง connection เพราะ connection ต้องเปิดค้างไว้ 30-120 ว