Lỗi
Mọi mã trạng thái mà gateway trả về, nguyên nhân thực tế và cách khắc phục.
Lỗi trả về JSON kèm theo một type và một thông báo dễ đọc message. Mã trạng thái tuân theo quy ước của Anthropic và OpenAI.
{"type": "error", "error": {"type": "authentication_error", "message": "invalid api key"}}
Mã trạng thái
| Mã | Ý nghĩa | Nguyên nhân thực tế thường gặp nhất | Cách khắc phục |
|---|---|---|---|
400 | Yêu cầu không hợp lệ | Thiếu max_tokens trong Messages, hoặc có một giá trị sai định dạng messages mảng | Đối chiếu phần thân yêu cầu với Messages |
401 | Chưa xác thực | Khóa được gửi trong header không phù hợp với định dạng | x-api-key cho Messages, Bearer cho Chat Completions |
402 | Yêu cầu thanh toán | Số dư đã hết hoặc gói đã hết hạn | Nạp tiền hoặc mua gói |
403 | Bị cấm truy cập | Khóa đã bị thu hồi, hoặc mô hình chưa được bật cho tài khoản | Tạo khóa mới; kiểm tra /v1/models |
404 | Không tìm thấy | Sai URL cơ sở — thường do lặp hoặc thiếu /v1 | Xem URL cơ sở |
429 | Bị giới hạn tốc độ | Quá nhiều yêu cầu đồng thời | Tăng thời gian chờ theo cấp số nhân trước mỗi lần thử lại; xem Giới hạn tốc độ |
500 | Lỗi cổng kết nối | Lỗi nội bộ ngoài dự kiến | Thử lại một lần; nếu lỗi vẫn tiếp diễn, liên hệ bộ phận hỗ trợ kèm mã định danh yêu cầu |
529 | Dịch vụ thượng nguồn quá tải | Do năng lực xử lý của nhà cung cấp, không phải do tài khoản của bạn | Thử lại với thời gian chờ tăng dần — thường hết lỗi sau vài giây |
Loại lỗi
| loại | Ý nghĩa |
|---|---|
invalid_request_error | Phần thân yêu cầu sai định dạng hoặc thiếu trường bắt buộc |
authentication_error | Khóa bị thiếu, sai định dạng hoặc đã bị thu hồi |
permission_error | Khóa hợp lệ nhưng không được phép sử dụng mô hình đó |
not_found_error | Đường dẫn hoặc mã định danh mô hình không xác định |
rate_limit_error | Bị hạn chế tốc độ |
api_error | Lỗi nội bộ |
overloaded_error | Năng lực xử lý của dịch vụ thượng nguồn đã cạn |
Thử lại đúng cách
Thử lại 429, 500, 502, 503 và 529. Không bao giờ thử lại một cách mù quáng 400, 401, 402 hoặc 403 — cùng một yêu cầu sẽ thất bại theo cùng một cách, và với phản hồi đã được tạo một phần, bạn có thể phải trả phí hai lần.
import time, httpx
def call(body, key, tries=4):
for i in range(tries):
r = httpx.post(class="s">"https://aiprimetech.io/v1/messages", json=body, timeout=120,
headers={class="s">"x-api-key": key,
class="s">"anthropic-version": class="s">"2023-06-01"})
if r.status_code in (429, 500, 502, 503, 529):
time.sleep(2 ** i) class=class="s">"c"># 1s, 2s, 4s, 8s
continue
r.raise_for_status()
return r.json()
raise RuntimeError(class="s">"upstream unavailable after retries")
Thêm độ ngẫu nhiên vào thời gian chờ trong môi trường vận hành thực tế. Khi nhiều tiến trình xử lý đồng loạt thử lại, một trục trặc nhỏ sẽ biến thành một đợt yêu cầu dồn dập tới cùng dịch vụ thượng nguồn.