API Hop

เอกสาร

เอกสาร API Hop

รหัสข้อผิดพลาดและการแก้ปัญหา

>-

ระบุสิ่งที่ล้มเหลว

  1. บันทึกสถานะ HTTP เมธอดคำขอ และเส้นทางจริง สถานะ HTTP และรหัสข้อผิดพลาดแอปพลิเคชันอธิบายคนละชั้น อย่าใช้แทนกัน
  2. อ่านฟิลด์ข้อผิดพลาดตามโปรโตคอลที่เรียก การตอบกลับดั้งเดิม OpenAI Claude และ Gemini ไม่ได้มีโครงสร้างเดียวกันทั้งหมด
  3. สำหรับคำขอสตรีม ตรวจเหตุการณ์ข้อผิดพลาดและสถานะสิ้นสุดด้วย สำหรับงานอะซิงโครนัส ตรวจ status ของงาน HTTP 200 ไม่รับประกันว่าสร้างสำเร็จ
  4. ใช้ตารางด้านล่างแก้คำขอหรือตัดสินใจลองซ้ำ message เป็นข้อความอธิบาย ไม่ใช่ enum คงที่ อย่าแยกตรรกะตามถ้อยคำ

Enum รหัสข้อผิดพลาดแพลตฟอร์ม

นี่คือ enum รหัสข้อผิดพลาดแอปพลิเคชันแพลตฟอร์มทั้งหมด ชื่อเป็นป้ายอ้างอิง ค่า code ในการตอบกลับเป็นตัวเลข “HTTP ที่พบบ่อย” เป็นแนวทางแก้ปัญหา ไม่ใช่การจับคู่ตายตัวทุกเอนด์พอยต์ ใช้สถานะ HTTP และเนื้อหาตอบกลับจริง code ที่ส่งผ่านจากต้นทางอาจไม่อยู่ใน enum นี้

code ตัวเลขชื่อHTTP ที่พบบ่อยความหมายและการดำเนินการ
10000BAD_REQUEST400รูปแบบคำขอ เส้นทาง หรือพารามิเตอร์พื้นฐานไม่ถูกต้อง ตรวจเมธอด เส้นทาง ไวยากรณ์ JSON และชื่อพารามิเตอร์
10001VALIDATION_ERROR400 / 422ตรวจพารามิเตอร์ไม่ผ่าน ตรวจฟิลด์บังคับ ชนิด ช่วง และชุดพารามิเตอร์
20000AUTH_ERROR401ยืนยันตัวตนล้มเหลว ตรวจความถูกต้อง วันหมดอายุ และรูปแบบเฮดเดอร์ยืนยันตัวตนของคีย์ API
20001FORBIDDEN403ปฏิเสธการเข้าถึงหรือบัญชีถูกจำกัด ตรวจสิทธิ์บัญชีและเจ้าของทรัพยากร
30000NOT_FOUND404ไม่มีเส้นทาง โมเดล หรือทรัพยากร ตรวจเส้นทางเอนด์พอยต์ model และ ID งานเทียบกับทรัพยากรที่คีย์ API ปัจจุบันมองเห็น
30001CONFLICT409การดำเนินการขัดกับสถานะทรัพยากรปัจจุบัน อ่านสถานะปัจจุบันก่อนปรับการดำเนินการ หลีกเลี่ยงส่งซ้ำ
40000INSUFFICIENT_CREDIT402ยอดคงเหลือไม่พอ ตรวจและเติมยอดก่อนเรียกอีกครั้ง
40001RATE_LIMIT429คำขอถี่เกินไป ลดอัตราคำขอและหน่วงการลองซ้ำ
40002CONCURRENCY_LIMIT429มีคำขอทำงานพร้อมกันมากเกินไป ลดจำนวนพร้อมกันและรอคำขอเดิมเสร็จ
50000PROVIDER_ERROR502เรียกต้นทางล้มเหลวหรือไม่ส่งผลที่ถูกต้อง ตรวจว่ามีผลเกิดขึ้นหรือไม่ก่อนพิจารณาลองซ้ำแบบจำกัด
50001SERVICE_UNAVAILABLE503บริการไม่พร้อมชั่วคราว ลองภายหลังแบบจำกัด หากยังล้มเหลวให้รวบรวมข้อมูลวินิจฉัย
50002GATEWAY_TIMEOUT504ประมวลผลหมดเวลา ผลอาจไม่แน่นอน ตรวจว่ามีการดำเนินการแล้วหรือไม่ก่อนลองซ้ำ
50003INTERNAL_ERROR500เกิดข้อผิดพลาดเซิร์ฟเวอร์ที่ยังไม่จัดประเภท ลองซ้ำแบบจำกัด หากยังล้มเหลวให้รวบรวมข้อมูลวินิจฉัย

HTTP 429 เพียงอย่างเดียวแยกข้อจำกัดอัตรากับจำนวนพร้อมกันอย่างน่าเชื่อถือไม่ได้ แยกเมื่อมีรหัสข้อผิดพลาดตัวเลขชัดเจนเท่านั้น ตรวจตัวระบุโมเดลในรายการโมเดล อย่าเขียนค่า model ใหม่เอง

อ่านข้อผิดพลาดตามโปรโตคอล

ตัวอย่างด้านล่างแสดงโครงสร้างทั่วไปที่แพลตฟอร์มสร้าง ไม่ใช่รูปแบบเดียวที่รับประกันทุกความล้มเหลว ข้อผิดพลาดยืนยันตัวตนอาจส่งจากชั้นประมวลผลต่างกัน การส่งผ่านต้นทางอาจคงโครงสร้าง รหัสสตริง หรือชนิดของตน ระบุรูปแบบจริงก่อนแยกวิเคราะห์ หากไม่รู้จัก ให้เก็บฟิลด์เดิมและสถานะ HTTP แทนการบังคับแปลง

API ดั้งเดิมของแพลตฟอร์ม

โดยทั่วไปอ่าน error.code และ error.message อาจไม่มี requestId

json
{
  "success": false,
  "error": {
    "code": 10000,
    "message": "Bad request"
  },
  "requestId": "req_example"
}

บางข้อผิดพลาดอาจใช้ code และ message ระดับบน ไคลเอนต์ควรรองรับความต่างนี้ และห้ามถือว่าการไม่มีออบเจ็กต์ error พิสูจน์ความสำเร็จ การตอบกลับตรวจพารามิเตอร์อาจไม่มีรหัสตัวเลข ให้ถือรหัสที่ขาดว่าไม่ทราบแทนการสร้างขึ้นเอง

API ที่เข้ากันได้กับ OpenAI

ข้อผิดพลาดทั่วไปที่แพลตฟอร์มสร้างใช้ code, message และ type ระดับบน ไม่จำเป็นต้องอยู่ใน error

json
{
  "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 ตัวเลขแพลตฟอร์ม อย่าสร้างขึ้นเอง

json
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "max_tokens must be a positive safe integer"
  }
}

แพลตฟอร์มสร้างชนิดข้อผิดพลาด Claude ต่อไปนี้ภายใน นี่ไม่ใช่ enum ชนิดข้อผิดพลาดต้นทางทั้งหมด

error.typeการจับคู่ HTTP ภายในสิ่งที่ควรตรวจ
invalid_request_error400ตรวจรูปแบบคำขอและพารามิเตอร์
authentication_error401ตรวจข้อมูลรับรองยืนยันตัวตน
api_errorสถานะ HTTP อื่นข้อผิดพลาด API ทั่วไป ตรวจสถานะ HTTP และคำอธิบายจริง ไม่จำเป็นว่าจะลองซ้ำได้

ดู Claude Messages

ข้อผิดพลาดรูปแบบ Gemini

เมื่อได้รับการตอบกลับรูปแบบ Gemini ให้อ่าน error.code, error.message และ error.status ในที่นี้ status เป็นหมวดสตริง ไม่ใช่สถานะ HTTP หรือสถานะงานอะซิงโครนัส

json
{
  "error": {
    "code": 10000,
    "message": "Bad request",
    "status": "INVALID_ARGUMENT"
  }
}

ข้อผิดพลาดรูปแบบนี้ที่แพลตฟอร์มสร้างใช้ค่า code ตัวเลขแพลตฟอร์ม การจับคู่ status สตริงภายในอยู่ด้านล่าง ไม่ใช่ enum สถานะต้นทางทั้งหมด

error.statusการจับคู่ HTTP ภายในสิ่งที่ควรตรวจ
UNAUTHENTICATED401ตรวจข้อมูลรับรองยืนยันตัวตน
RESOURCE_EXHAUSTED402 / 429ตรวจยอดหรือขีดจำกัดใช้งาน สตริงเพียงอย่างเดียวแยกไม่ได้
PERMISSION_DENIED403ตรวจสิทธิ์และเจ้าของทรัพยากร
NOT_FOUND404ตรวจเส้นทาง โมเดล หรือทรัพยากร
UNAVAILABLE503บริการไม่พร้อมชั่วคราว
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: ตรวจสถานะต่อไปตามเอกสาร Jobs
  • COMPLETED: อ่าน outputResult
  • FAILED, 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 หรือชื่อโมเดล

text
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 ควรแยกฟิลด์ที่สังเกตได้จากสาเหตุที่เป็นไปได้และระบุข้อมูลที่ขาด หลักฐานไม่พอต้องไม่ถูกถือว่าพิสูจน์คำขอสำเร็จ ไม่ได้ดำเนินการ หรือไม่มีค่าใช้จ่าย