ความล้มเหลวของ AI API ในระบบ Production

ข้อความแสดงข้อผิดพลาด (Error messages) มักจะไม่บอกรายละเอียดทั้งหมดเมื่อฟีเจอร์ AI ของคุณพังตอนตี 2 ผมได้ดูแลการเชื่อมต่อกับ OpenAI และ Anthropic มาเป็นเวลาหนึ่งปี และได้เรียนรู้ที่จะจัดกลุ่มความล้มเหลวตามความหมายของมันเพื่อความสะดวกในการดีบั๊ก (debugging)

การจัดการ Rate Limits

ข้อผิดพลาด 429 ของ OpenAI มีสาเหตุที่แตกต่างกัน คุณต้องตรวจสอบรหัสข้อผิดพลาด (error code) เพื่อให้ทราบวิธีตอบสนอง

  • ขีดจำกัด Requests-per-minute (RPM) จะกลับมาใช้งานได้ภายในไม่กี่วินาที
  • ขีดจำกัด Tokens-per-minute (TPM) จะกลับมาใช้งานได้ภายใน 60 วินาที
  • การใช้โควตารายเดือนจนหมด จะยังคงใช้งานไม่ได้จนกว่าคุณจะเติมเครดิตหรือจนกว่าจะถึงรอบการเรียกเก็บเงินใหม่

อย่าใช้ exponential backoff สำหรับปัญหาเรื่องโควตา เพราะมันจะทำให้คุณเสียเวลาเปล่า

ข้อผิดพลาด 529 ของ Anthropic หมายความว่าผู้ให้บริการกำลังทำงานหนักเกินไป (overloaded) ให้ปฏิบัติเหมือนเป็นข้อผิดพลาด 503 ปัญหานี้อยู่ที่ฝั่งของพวกเขา ให้หยุดส่งคำขอ (back off) และแจ้งทีมของคุณ

การจัดการข้อผิดพลาด 400

ความล้มเหลวเหล่านี้มักเกิดจากความผิดพลาดของคุณเอง ให้ระวังรูปแบบสามอย่างนี้:

  • เวอร์ชันของโมเดลไม่ตรงกัน (Model version mismatches): คุณอัปเดตชื่อในที่หนึ่งแต่ไม่ได้อัปเดตในตัวจัดการการลองใหม่ (retry handler)
  • Context window เต็ม (Context window overflow): ประวัติการสนทนายาวเกินไป ซึ่งมักเกิดจากตรรกะการตัดข้อความ (truncation logic) ที่ไม่ดี
  • การตรวจสอบ Schema ล้มเหลว (Schema validation failures): โครงสร้าง JSON ของคุณมีประเภทข้อมูลที่ไม่รองรับหรือมีการอ้างอิงแบบวนซ้ำ (recursive references)

เพื่อแก้ไขสิ่งเหล่านี้ ให้บันทึก (log) request payload ฉบับเต็มสำหรับข้อผิดพลาด 400 โดยต้องปิดบังข้อมูลผู้ใช้ (redact user data) ก่อน ส่วน response body จะบอกคุณอย่างชัดเจนว่าฟิลด์ไหนที่ผิดพลาด

การจัดการ Timeouts

Timeouts เป็นสิ่งที่ติดตามได้ยาก เพราะผู้ให้บริการจะไม่เห็นความผิดปกติใดๆ

  • Connect timeout: การทำ handshake ล้มเหลว สิ่งนี้เกิดขึ้นระหว่างช่วงที่ผู้ให้บริการมีปัญหาชั่วคราว (brownouts) หรือปัญหา DNS ให้ตรวจสอบเครือข่ายขาออก (outbound network) ของคุณ
  • Read timeout: โมเดลเริ่มทำงานแล้วแต่ยังไม่เสร็จสิ้น แอปของคุณต้องสามารถจัดการกับผลลัพธ์แบบ streaming บางส่วนได้
  • Gateway timeout (504): Proxy ของคุณหมดเวลาเสียก่อน คำขออาจจะยังคงทำงานอยู่ที่ฝั่งผู้ให้บริการ ให้ใช้การทำ deduplication ก่อนที่คุณจะลองใหม่ (retry)

ในการดีบั๊ก ให้แยก connect timeout ออกจาก read timeout และบันทึกค่า time-to-first-token เพื่อดูว่าความหน่วง (latency) เกิดขึ้นที่จุดใด

การจัดการปัญหาจากผู้ให้บริการ

  • ข้อผิดพลาด 500 มักจะแก้ไขได้ด้วยการลองใหม่ (retry) หนึ่งครั้งหลังจากผ่านไปสองวินาที
  • ข้อผิดพลาด 503 หมายความว่าบริการกำลังทำงานได้ไม่เต็มประสิทธิภาพ หากหน้าสถานะ (status page) ของผู้ให้บริการแสดงว่ามีเหตุการณ์ผิดปกติ ให้ใช้ circuit breaker
  • บันทึกเวอร์ชันของโมเดลที่ล้มเหลวไว้เสมอ เพราะโมเดลที่ต่างกันมีระดับความน่าเชื่อถือที่ต่างกัน

เลิกสลับไปมาระหว่าง log กับ Slack ให้ตรวจสอบหน้าสถานะของผู้ให้บริการก่อน มันจะช่วยประหยัดเวลาที่คุณต้องตื่นตระหนกไปได้ถึง 20 นาที

Source: https://dev.to/void_stitch/production-ai-api-failures-by-category-what-429s-529s-and-timeouts-are-actually-telling-you-5bo1

Optional learning community: https://t.me/GyaanSetuAi