เอกสาร API Hop
รหัสข้อผิดพลาดและการแก้ปัญหา
>-
ระบุสิ่งที่ล้มเหลว
- บันทึกสถานะ HTTP เมธอดคำขอ และเส้นทางจริง สถานะ HTTP และรหัสข้อผิดพลาดแอปพลิเคชันอธิบายคนละชั้น อย่าใช้แทนกัน
- อ่านฟิลด์ข้อผิดพลาดตามโปรโตคอลที่เรียก การตอบกลับดั้งเดิม OpenAI Claude และ Gemini ไม่ได้มีโครงสร้างเดียวกันทั้งหมด
- สำหรับคำขอสตรีม ตรวจเหตุการณ์ข้อผิดพลาดและสถานะสิ้นสุดด้วย สำหรับงานอะซิงโครนัส ตรวจ
statusของงาน HTTP200ไม่รับประกันว่าสร้างสำเร็จ - ใช้ตารางด้านล่างแก้คำขอหรือตัดสินใจลองซ้ำ
messageเป็นข้อความอธิบาย ไม่ใช่ enum คงที่ อย่าแยกตรรกะตามถ้อยคำ
Enum รหัสข้อผิดพลาดแพลตฟอร์ม
นี่คือ enum รหัสข้อผิดพลาดแอปพลิเคชันแพลตฟอร์มทั้งหมด ชื่อเป็นป้ายอ้างอิง ค่า code ในการตอบกลับเป็นตัวเลข “HTTP ที่พบบ่อย” เป็นแนวทางแก้ปัญหา ไม่ใช่การจับคู่ตายตัวทุกเอนด์พอยต์ ใช้สถานะ HTTP และเนื้อหาตอบกลับจริง code ที่ส่งผ่านจากต้นทางอาจไม่อยู่ใน enum นี้
code ตัวเลข | ชื่อ | HTTP ที่พบบ่อย | ความหมายและการดำเนินการ |
|---|---|---|---|
10000 | BAD_REQUEST | 400 | รูปแบบคำขอ เส้นทาง หรือพารามิเตอร์พื้นฐานไม่ถูกต้อง ตรวจเมธอด เส้นทาง ไวยากรณ์ JSON และชื่อพารามิเตอร์ |
10001 | VALIDATION_ERROR | 400 / 422 | ตรวจพารามิเตอร์ไม่ผ่าน ตรวจฟิลด์บังคับ ชนิด ช่วง และชุดพารามิเตอร์ |
20000 | AUTH_ERROR | 401 | ยืนยันตัวตนล้มเหลว ตรวจความถูกต้อง วันหมดอายุ และรูปแบบเฮดเดอร์ยืนยันตัวตนของคีย์ API |
20001 | FORBIDDEN | 403 | ปฏิเสธการเข้าถึงหรือบัญชีถูกจำกัด ตรวจสิทธิ์บัญชีและเจ้าของทรัพยากร |
30000 | NOT_FOUND | 404 | ไม่มีเส้นทาง โมเดล หรือทรัพยากร ตรวจเส้นทางเอนด์พอยต์ model และ ID งานเทียบกับทรัพยากรที่คีย์ API ปัจจุบันมองเห็น |
30001 | CONFLICT | 409 | การดำเนินการขัดกับสถานะทรัพยากรปัจจุบัน อ่านสถานะปัจจุบันก่อนปรับการดำเนินการ หลีกเลี่ยงส่งซ้ำ |
40000 | INSUFFICIENT_CREDIT | 402 | ยอดคงเหลือไม่พอ ตรวจและเติมยอดก่อนเรียกอีกครั้ง |
40001 | RATE_LIMIT | 429 | คำขอถี่เกินไป ลดอัตราคำขอและหน่วงการลองซ้ำ |
40002 | CONCURRENCY_LIMIT | 429 | มีคำขอทำงานพร้อมกันมากเกินไป ลดจำนวนพร้อมกันและรอคำขอเดิมเสร็จ |
50000 | PROVIDER_ERROR | 502 | เรียกต้นทางล้มเหลวหรือไม่ส่งผลที่ถูกต้อง ตรวจว่ามีผลเกิดขึ้นหรือไม่ก่อนพิจารณาลองซ้ำแบบจำกัด |
50001 | SERVICE_UNAVAILABLE | 503 | บริการไม่พร้อมชั่วคราว ลองภายหลังแบบจำกัด หากยังล้มเหลวให้รวบรวมข้อมูลวินิจฉัย |
50002 | GATEWAY_TIMEOUT | 504 | ประมวลผลหมดเวลา ผลอาจไม่แน่นอน ตรวจว่ามีการดำเนินการแล้วหรือไม่ก่อนลองซ้ำ |
50003 | INTERNAL_ERROR | 500 | เกิดข้อผิดพลาดเซิร์ฟเวอร์ที่ยังไม่จัดประเภท ลองซ้ำแบบจำกัด หากยังล้มเหลวให้รวบรวมข้อมูลวินิจฉัย |
HTTP 429 เพียงอย่างเดียวแยกข้อจำกัดอัตรากับจำนวนพร้อมกันอย่างน่าเชื่อถือไม่ได้ แยกเมื่อมีรหัสข้อผิดพลาดตัวเลขชัดเจนเท่านั้น ตรวจตัวระบุโมเดลในรายการโมเดล อย่าเขียนค่า model ใหม่เอง
อ่านข้อผิดพลาดตามโปรโตคอล
ตัวอย่างด้านล่างแสดงโครงสร้างทั่วไปที่แพลตฟอร์มสร้าง ไม่ใช่รูปแบบเดียวที่รับประกันทุกความล้มเหลว ข้อผิดพลาดยืนยันตัวตนอาจส่งจากชั้นประมวลผลต่างกัน การส่งผ่านต้นทางอาจคงโครงสร้าง รหัสสตริง หรือชนิดของตน ระบุรูปแบบจริงก่อนแยกวิเคราะห์ หากไม่รู้จัก ให้เก็บฟิลด์เดิมและสถานะ HTTP แทนการบังคับแปลง
API ดั้งเดิมของแพลตฟอร์ม
โดยทั่วไปอ่าน error.code และ error.message อาจไม่มี requestId
{
"success": false,
"error": {
"code": 10000,
"message": "Bad request"
},
"requestId": "req_example"
}บางข้อผิดพลาดอาจใช้ code และ message ระดับบน ไคลเอนต์ควรรองรับความต่างนี้ และห้ามถือว่าการไม่มีออบเจ็กต์ error พิสูจน์ความสำเร็จ การตอบกลับตรวจพารามิเตอร์อาจไม่มีรหัสตัวเลข ให้ถือรหัสที่ขาดว่าไม่ทราบแทนการสร้างขึ้นเอง
API ที่เข้ากันได้กับ OpenAI
ข้อผิดพลาดทั่วไปที่แพลตฟอร์มสร้างใช้ code, message และ type ระดับบน ไม่จำเป็นต้องอยู่ใน error
{
"code": 40000,
"message": "Insufficient credit",
"type": "api_error"
}type เป็นหมวดโปรโตคอล ส่วน code เป็นรหัสข้อผิดพลาดตัวเลขแพลตฟอร์มในโครงสร้างนี้ api_error อย่างเดียวไม่บอกว่าควรลองซ้ำหรือไม่ ข้อผิดพลาดจากการส่งผ่านต้นทางและสตรีมอาจมี error ซ้อนอยู่ จัดการตามการตอบกลับโปรโตคอลจริง ดู Chat Completions และ Responses
API ที่เข้ากันได้กับ Claude
ในโครงสร้างทั่วไป type ระดับบนเป็น error หมวดเฉพาะคือ error.type และคำอธิบายคือ error.message โครงสร้างนี้ไม่มี code ตัวเลขแพลตฟอร์ม อย่าสร้างขึ้นเอง
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "max_tokens must be a positive safe integer"
}
}แพลตฟอร์มสร้างชนิดข้อผิดพลาด Claude ต่อไปนี้ภายใน นี่ไม่ใช่ enum ชนิดข้อผิดพลาดต้นทางทั้งหมด
error.type | การจับคู่ HTTP ภายใน | สิ่งที่ควรตรวจ |
|---|---|---|
invalid_request_error | 400 | ตรวจรูปแบบคำขอและพารามิเตอร์ |
authentication_error | 401 | ตรวจข้อมูลรับรองยืนยันตัวตน |
api_error | สถานะ HTTP อื่น | ข้อผิดพลาด API ทั่วไป ตรวจสถานะ HTTP และคำอธิบายจริง ไม่จำเป็นว่าจะลองซ้ำได้ |
ข้อผิดพลาดรูปแบบ Gemini
เมื่อได้รับการตอบกลับรูปแบบ Gemini ให้อ่าน error.code, error.message และ error.status ในที่นี้ status เป็นหมวดสตริง ไม่ใช่สถานะ HTTP หรือสถานะงานอะซิงโครนัส
{
"error": {
"code": 10000,
"message": "Bad request",
"status": "INVALID_ARGUMENT"
}
}ข้อผิดพลาดรูปแบบนี้ที่แพลตฟอร์มสร้างใช้ค่า code ตัวเลขแพลตฟอร์ม การจับคู่ status สตริงภายในอยู่ด้านล่าง ไม่ใช่ enum สถานะต้นทางทั้งหมด
error.status | การจับคู่ HTTP ภายใน | สิ่งที่ควรตรวจ |
|---|---|---|
UNAUTHENTICATED | 401 | ตรวจข้อมูลรับรองยืนยันตัวตน |
RESOURCE_EXHAUSTED | 402 / 429 | ตรวจยอดหรือขีดจำกัดใช้งาน สตริงเพียงอย่างเดียวแยกไม่ได้ |
PERMISSION_DENIED | 403 | ตรวจสิทธิ์และเจ้าของทรัพยากร |
NOT_FOUND | 404 | ตรวจเส้นทาง โมเดล หรือทรัพยากร |
UNAVAILABLE | 503 | บริการไม่พร้อมชั่วคราว |
INTERNAL | >= 500 ยกเว้น 503 | ข้อผิดพลาดเซิร์ฟเวอร์ 504 ใช้ค่านี้ด้วย |
INVALID_ARGUMENT | สถานะ HTTP อื่น | ตรวจสถานะ HTTP และคำขอจริง 409 ใช้ค่านี้ด้วย |
503 มีลำดับก่อนและใช้ UNAVAILABLE ไม่ใช่ INTERNAL การตอบกลับต้นทางอาจใช้ความหมาย code และ status ต่างกัน อย่าใช้ตารางรหัสแพลตฟอร์มกับทุกโค้ดตัวเลข Gemini
ลองซ้ำอย่างปลอดภัย
| สถานการณ์ | การดำเนินการที่แนะนำ |
|---|---|
400 / 401 / 402 / 403 / 404 / 409 / 422 | แก้คำขอ ข้อมูลรับรอง ยอด สิทธิ์ หรือสถานะทรัพยากรก่อน อย่าส่งคำขอเดิมซ้ำโดยไม่เปลี่ยน ส่งคีย์ API ในเฮดเดอร์เท่านั้น ห้ามในพารามิเตอร์คิวรี URL |
429 | ลดอัตราและจำนวนพร้อมกัน แล้วรอก่อนลองซ้ำ เพิ่มจำนวนลองซ้ำอย่างเดียวมักทำให้จำกัดอัตราหนักขึ้น |
500 / 502 / 503 / 504 | ประเมินความเสี่ยงดำเนินการซ้ำก่อน แล้วใช้การหน่วงแบบทวีคูณมีความสุ่มและขอบเขต เช่น ลองซ้ำไม่เกิน 3 ครั้งพร้อมจำกัดเวลารอรวม |
| เครือข่ายหลุดหรือไคลเอนต์หมดเวลา | ไม่ได้รับผลไม่ได้หมายความว่าเซิร์ฟเวอร์ไม่ได้ทำงาน ระบุผลว่าไม่ทราบ แทนประกาศว่าล้มเหลวหรือสร้างคำขอใหม่ทันที |
ปฏิบัติตามเฮดเดอร์ Retry-After ที่ถูกต้องเมื่อมี อย่าคิดว่าทุกข้อผิดพลาดมี การลองคำขอสร้างที่ไม่เป็น idempotent ซ้ำอัตโนมัติอาจดำเนินการอีกและเกิดค่าใช้จ่ายเพิ่ม หน้านี้ไม่รับรองการรองรับคีย์ idempotency ทั่วไป การเพิ่ม Idempotency-Key เองไม่รับประกันป้องกันซ้ำ
หากมี jobId แล้ว ตรวจงานนั้นก่อนสร้างใหม่ หากไม่มี jobId และผลไม่แน่นอน เก็บตัวระบุคำขอและเวลาไว้สืบค้น
สตรีมและงานอะซิงโครนัส
คำขอ SSE
หลัง SSE เริ่ม สถานะ HTTP อาจคง 200 ขณะที่ความล้มเหลวภายหลังรายงานผ่านเหตุการณ์ข้อผิดพลาดหรือข้อมูลในสตรีม แยกเหตุการณ์และข้อมูลตามโปรโตคอลที่เลือกและตรวจการจบปกติ เมื่อมีข้อผิดพลาดหรือหลุดผิดคาด อย่าถือข้อความหรือภาพบางส่วนเป็นผลสำเร็จสมบูรณ์ ชื่อเหตุการณ์และข้อมูลต่างกันตามเอนด์พอยต์ อย่าตรวจเพียงฟิลด์ error คงที่หรือใช้ “ได้รับข้อความอะไรก็ได้” เป็นเงื่อนไขสำเร็จ
งานอะซิงโครนัส
การตอบกลับสร้างที่มี data.jobId หมายถึงรับคำขอแล้ว ไม่ใช่สร้างเสร็จ การตอบกลับ HTTP สำเร็จเมื่อตรวจงาน หมายถึงการตรวจสำเร็จ ยังต้องตรวจ data.status ของงาน:
PENDING,CONNECT,PROCESSING: ตรวจสถานะต่อไปตามเอกสาร JobsCOMPLETED: อ่านoutputResultFAILED,CANCELLED: หยุดตรวจและเก็บ ID งานกับข้อมูลตอบกลับที่ลบข้อมูลอ่อนไหวแล้วไว้สืบค้น
รายละเอียดล้มเหลวอาจปรากฏใน data.outputResult.error ฟิลด์นี้เป็นตัวเลือก ไม่รับประกันทุกงานล้มเหลว ใช้ Jobs เมื่อการตอบกลับสร้างส่ง jobId ชัดเจนเท่านั้น อย่าใช้การตรวจงานกับเอนด์พอยต์ที่ส่งผลโดยตรงผ่าน JSON หรือ SSE
ข้อมูลวินิจฉัยสำหรับผู้ใช้และผู้ช่วย AI
ส่งข้อมูลต่อไปนี้ที่ลบข้อมูลอ่อนไหวแล้วให้ฝ่ายสนับสนุนหรือผู้ช่วย AI ใช้ unknown สำหรับฟิลด์ที่ไม่มี ใช้ unknown สำหรับสถานะ HTTP หากไม่ได้รับการตอบกลับ HTTP เก็บเส้นทางฟิลด์และชนิดค่าดั้งเดิม เช่น error.code: 10000 (number) หรือ error.code: "invalid_api_key" (string) อย่าแปลง code สตริงเป็นรหัสตัวเลขแพลตฟอร์มอัตโนมัติหรือสร้างฟิลด์ที่ขาดจาก message สถานะ HTTP หรือชื่อโมเดล
time_with_timezone: unknown
method: unknown
path_without_query: unknown
model: unknown
stream: unknown
http_status: unknown
error_code_path_value_and_type: unknown
error_type_path_and_value: unknown
protocol_status_path_and_value: unknown
sanitized_message: unknown
request_id_from_body_or_X-Request-ID: unknown
job_id: unknown
job_status: unknown
retry_after: unknown
retry_count_and_delays: unknown
received_partial_output: unknownอ่าน requestId จากเนื้อหาตอบกลับหรือเฮดเดอร์ตอบกลับ X-Request-ID เมื่อมี เก็บ jobId เป็นสตริงเพื่อไม่เสียความแม่นยำตัวเลขยาว ให้พารามิเตอร์คำขอเท่าที่จำเป็นและลบข้อมูลอ่อนไหวแล้ว ลบคีย์ API โทเคน คุกกี้ เฮดเดอร์ยืนยันตัวตนเต็ม ข้อมูลส่วนบุคคล พรอมต์ส่วนตัว และเนื้อหาไฟล์อินพุต ลบพารามิเตอร์คิวรี URL และ URL อินพุตหรือเอาต์พุตที่มีลายเซ็นหรือข้อมูลรับรอง อย่าวางบันทึกคำขอทั้งหมดโดยไม่ตรวจ
ผู้ช่วย AI ควรแยกฟิลด์ที่สังเกตได้จากสาเหตุที่เป็นไปได้และระบุข้อมูลที่ขาด หลักฐานไม่พอต้องไม่ถูกถือว่าพิสูจน์คำขอสำเร็จ ไม่ได้ดำเนินการ หรือไม่มีค่าใช้จ่าย