คู่มือ
ข้อผิดพลาด ข้อจำกัด และการลองใหม่
อ่านการตอบกลับข้อผิดพลาดและส่วนหัวข้อจำกัดอัตรา ลองใหม่อย่างปลอดภัย และวินิจฉัยปัญหาที่พบบ่อย
API ของ Felo ทุกตัวส่งเนื้อหาข้อผิดพลาดแบบ JSON พร้อมรหัสข้อผิดพลาดที่คงที่และ request ID ให้อ่านสถานะ HTTP ก่อน จากนั้นอ่าน code แล้วจึงอ่าน message
ซองข้อผิดพลาด
การตอบกลับในโปรดักชันปัจจุบันใช้สถานะ HTTP เป็น status:
{
"status": 401,
"code": "UNAUTHORIZED",
"message": "Invalid API Key",
"request_id": "202610221444486982113280416060637185"
}| ฟิลด์ | ความหมาย |
|---|---|
status | รหัสสถานะ HTTP ที่ทำซ้ำในเนื้อหาการตอบกลับ |
code | รหัสข้อผิดพลาดที่เครื่องอ่านได้ |
message | คำอธิบายที่มนุษย์อ่านได้ |
request_id | ตัวระบุแบบทึบสำหรับคำขอนี้ ให้ระบุในคำขอรับการสนับสนุน |
ตัวอย่าง endpoint รุ่นเก่าบางส่วนใช้ status: "error" และสตริงรหัสที่แตกต่างออกไป ให้แยกการทำงานตามสถานะ HTTP และ code ไม่ใช่ตามถ้อยคำที่แน่นอนของ message
รหัสที่พบบ่อย
| HTTP | รหัส | ความหมาย | สิ่งที่ควรทำ |
|---|---|---|---|
| 400 | รหัสการตรวจสอบเฉพาะ endpoint | พารามิเตอร์หายไปหรือไม่ถูกต้อง | แก้ไขคำขอ ห้ามลองใหม่โดยไม่เปลี่ยนแปลง |
| 401 | UNAUTHORIZED | คีย์ API หายไป ไม่ถูกต้อง หมดอายุ หรือถูกเพิกถอน | ส่ง Authorization: Bearer $FELO_API_KEY หมุนเวียนคีย์หากถูกเพิกถอน |
| 402 | INSUFFICIENT_CREDITS | เครดิตบริการไม่เพียงพอ | เติมเงินใน Console Billing แล้วลองใหม่ |
| 404 | เฉพาะ endpoint | ไม่รู้จักโมเดล งาน หรือเส้นทาง | ตรวจสอบ ID โมเดลหรือ ID งานและพาธของ endpoint |
| 429 | RATE_LIMITED | เกินขีดจำกัดอัตรา | รอตาม Retry-After แล้วลองใหม่ |
| 5xx | CHAT_FAILED, *_FAILED, SERVICE_UNAVAILABLE | ความล้มเหลวจากต้นทางหรือบริการ | ลองใหม่พร้อมการหน่วงแบบทวีคูณ ติดต่อฝ่ายสนับสนุนหากยังเกิดขึ้นต่อเนื่อง |
เอกสารอ้างอิงของแต่ละ endpoint จะระบุรหัสที่เฉพาะกับ endpoint นั้น เริ่มจากข้อผิดพลาดของ Chat APIหรือเอกสารอ้างอิงของ endpoint ที่คุณกำลังเรียก
Endpoint การสร้างด้วยโมเดล
POST /api/v1/images/generations และ POST /api/v1/videos/generations ส่งข้อผิดพลาดระดับ endpoint ในซองแบบ OpenAI แทนซองข้างต้น:
{
"error": {
"message": "Model kind does not match this generation endpoint",
"type": "invalid_request_error",
"param": null,
"code": "model_kind_mismatch"
}
}request ID อยู่ใน header การตอบกลับ X-Request-Id ไม่ได้อยู่ในเนื้อหาการตอบกลับ คำขอที่ถูกปฏิเสธจะไม่สร้างงาน เมื่อมีงานอยู่แล้ว ความล้มเหลวส่วนใหญ่จะมาในรูปสถานะสิ้นสุดของงานในการตอบกลับ 200 แทนที่จะเป็นข้อผิดพลาด HTTP ให้ตรวจสอบ status ว่าเป็น failed หรือ interrupted แล้วอ่าน error.message ดูการสร้างรูปภาพและงานอะซิงโครนัส
Request ID
เนื้อหาข้อผิดพลาดของ Felo มี request_id ให้บันทึกไว้พร้อม endpoint สถานะ HTTP รหัสข้อผิดพลาด ID โมเดล และ ID งาน ห้ามบันทึกคีย์ API แบบเต็ม
Model API ยังยอมรับ header คำขอ X-Request-Id แบบเลือกได้ เมื่อคุณส่งมา ระบบจะสะท้อนกลับเพื่อการวินิจฉัย ซึ่งช่วยให้เชื่อมโยงล็อกของคุณกับคำขอได้ หากคุณไม่ได้ส่งมา ให้ใช้ request_id ที่ส่งกลับ
ขีดจำกัดอัตรา
/v2/chat เป็น endpoint เดียวของ Felo ที่มีขีดจำกัดอัตราที่บังคับใช้และจัดทำเอกสารไว้:
- ต่อคีย์ API หน้าต่าง 1 นาที
- ต่อผู้ใช้ หน้าต่าง 1 นาที
- ต่อผู้ใช้ หน้าต่าง 1 ชั่วโมง
ผู้ใช้ที่มีการสมัครสมาชิก Felo แบบชำระเงินที่ใช้งานได้ รวมถึงการสมัครสมาชิกองค์กร จะได้รับการยกเว้นและไม่ได้รับ header X-RateLimit-* หากไม่สามารถตรวจสอบสถานะการสมัครสมาชิกได้ ขีดจำกัดยังคงมีผล
| Header | ความหมาย |
|---|---|
X-RateLimit-Limit | ขีดจำกัดของมิติที่เข้มงวดที่สุดที่บังคับใช้อยู่ในปัจจุบัน |
X-RateLimit-Remaining | โควตาที่เหลือน้อยที่สุดในสามมิติ |
X-RateLimit-Reset | เวลาประทับ Unix เป็นวินาทีเมื่อหน้าต่างปัจจุบันรีเซ็ต |
Retry-After | เมื่อได้รับ 429 คือระยะเวลาที่แนะนำให้รอเป็นวินาที |
endpoint /v2/** อื่น ๆ ในปัจจุบันไม่มีขีดจำกัดอัตราที่บังคับใช้ คำขอ Model API ยังอาจถูกจำกัดโดยผู้ให้บริการต้นทาง ซึ่งอาจปรากฏเป็น 429 ได้
ห้ามฝังขีดจำกัดเชิงตัวเลขแบบตายตัว ให้อ่าน header ในการตอบกลับแต่ละครั้ง
นโยบายการลองใหม่
| สถานการณ์ | ลองใหม่หรือไม่ |
|---|---|
| 400, 401, 402, 404 | ไม่ ลองแก้ไขคำขอ คีย์ หรือยอดคงเหลือก่อน |
| 429 | ใช่ หลังจาก Retry-After หรือ X-RateLimit-Reset |
| 5xx, การหมดเวลา, การรีเซ็ตการเชื่อมต่อ | ใช่ พร้อมการหน่วงแบบทวีคูณและ jitter |
| การเชื่อมต่อสตรีมหลุดกลางการตอบกลับ | ลองใหม่เฉพาะเมื่อแอปพลิเคชันของคุณทนต่อการสร้างซ้ำได้ |
ลูปที่แนะนำ:
- ลองใหม่เฉพาะคำขอที่ทำซ้ำได้หรือปลอดภัยต่อการทำซ้ำ
- ใช้การหน่วงแบบทวีคูณ: เริ่มประมาณ 1 วินาที เพิ่มเป็นสองเท่า และกำหนดเพดานที่ 30 วินาที
- เพิ่ม jitter แบบสุ่มเพื่อไม่ให้ไคลเอนต์ลองใหม่พร้อมกัน
- หยุดหลังจากพยายามไม่กี่ครั้งแล้วแสดงข้อผิดพลาด
- เมื่อได้รับ 429 ให้ปฏิบัติตาม
Retry-Afterแทนกำหนดการของคุณเอง
ลำดับการแก้ไขข้อบกพร่อง
- ตรวจสอบว่ามีคีย์และยังไม่ถูกเพิกถอน
- เรียก
GET /api/v1/modelsด้วยคีย์เดียวกันเพื่อยืนยันการรับรองความถูกต้อง - ส่งคำขอที่ถูกต้องและเล็กที่สุดไปยัง endpoint เป้าหมาย
- เพิ่มสตรีมมิ่ง เครื่องมือ หรืออินพุตขนาดใหญ่ทีละอย่าง
- สำหรับงานอะซิงโครนัส ให้ตรวจสอบสถานะงานก่อนส่งคำขอใหม่