การจัดการข้อผิดพลาดและขีดจำกัดอัตราการเรียกใช้
จัดการข้อผิดพลาด API ที่พบบ่อย เช่น ข้อยกเว้นจากขีดจำกัดอัตราการเรียกใช้ ข้อผิดพลาดการยืนยันตัวตน และหมดเวลา ด้วยตรรกะการลองใหม่และรูปแบบการหน่วงเวลาแบบทวีคูณ
การจัดการข้อผิดพลาดและขีดจำกัดอัตราการเรียกใช้ เป็นบทเรียน AI Engineering Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Engineering Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงเกิดข้อผิดพลาดของ API
การเรียกใช้ API อาจเกิดปัญหาได้หลายอย่าง เช่น ระบบทำงานหนักเกินไป โควตาต่ำ เครือข่ายขาดหาย หรือคำขอไม่ถูกต้อง การถือว่าการเรียกใช้ไม่มีทางผิดพลาดจะทำให้โค้ดเปราะบาง ควรทำความเข้าใจประเภทข้อผิดพลาดก่อน
ภาพรวมประเภทข้อผิดพลาดของ OpenAI
SDK จะแจ้งข้อยกเว้นเฉพาะประเภท เช่น RateLimitError และ AuthenticationError ควรลองใหม่เฉพาะข้อผิดพลาดชั่วคราว เช่น การจำกัดอัตราหรือเครือข่ายขาดหาย ส่วนข้อผิดพลาดประเภทอื่นจะไม่หายไปเอง
การดักจับข้อผิดพลาดด้วย Try-Except
ห่อการเรียกใช้แต่ละครั้งด้วย try-except และดักจับข้อยกเว้นเฉพาะประเภท ไม่ใช่ except เปล่า วิธีนี้ช่วยให้คุณตอบสนองต่อความล้มเหลวแต่ละแบบได้อย่างเหมาะสม แทนที่จะซ่อนข้อผิดพลาดไว้ ดูวิธีการได้ในโค้ด
import openai
client = openai.OpenAI()
try:
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Hello!'}]
)
print(response.choices[0].message.content)
except openai.AuthenticationError as e:
print('Bad API key. Check OPENAI_API_KEY environment variable.')
raise # do not retry
except openai.RateLimitError as e:
print('Rate limited. Back off and retry.')
except openai.APIConnectionError as e:
print('Network error:', e)
except openai.APIStatusError as e:
print('Server error', e.status_code, e.message)ทำความเข้าใจการจำกัดอัตรา
OpenAI บังคับใช้การจำกัดอัตราสองแบบพร้อมกัน ได้แก่ จำนวนคำขอต่อนาที (RPM) และจำนวนโทเคนต่อนาที (TPM) พรอมต์ขนาดใหญ่มากเพียงครั้งเดียวอาจใช้ TPM จนหมดได้ ทั้งสองกรณีจะส่งสถานะ 429 กลับมา
การหน่วงเวลาแบบทวีคูณ: กลยุทธ์การลองใหม่ที่เหมาะสม
ถูกจำกัดอัตราใช่ไหมครับ/คะ ให้รอแล้วลองใหม่ด้วยการหน่วงเวลาแบบทวีคูณ: 1 วินาที, 2 วินาที, 4 วินาที โดยเพิ่มเป็นสองเท่าทุกครั้ง เพิ่มความคลาดเคลื่อนแบบสุ่มเล็กน้อยและกำหนดจำนวนครั้งสูงสุด เพื่อไม่ให้ลูปทำงานไม่สิ้นสุด ดูโค้ดได้เลย
import time
import random
import openai
client = openai.OpenAI()
def call_with_backoff(messages, max_retries=5):
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model='gpt-4o-mini',
messages=messages
)
except openai.RateLimitError:
if attempt == max_retries - 1:
raise
wait = (2 ** attempt) + random.uniform(0, 1)
print(f'Rate limited. Waiting {wait:.1f}s (attempt {attempt+1})')
time.sleep(wait)
except (openai.APIConnectionError, openai.APIStatusError):
if attempt == max_retries - 1:
raise
time.sleep(2 ** attempt)การใช้ไลบรารี tenacity
อย่าเขียนระบบลองใหม่เอง เพราะไลบรารี tenacity จัดการเรื่องนี้ได้อย่างเป็นระเบียบ ตกแต่งฟังก์ชันของคุณด้วย @retry แล้วระบบจะจัดการการหน่วงเวลาแบบทวีคูณ ความคลาดเคลื่อนแบบสุ่ม และเงื่อนไขการลองใหม่ให้
from tenacity import retry, wait_random_exponential, stop_after_attempt
import openai
client = openai.OpenAI()
@retry(
wait=wait_random_exponential(min=1, max=60),
stop=stop_after_attempt(6)
)
def completion_with_backoff(**kwargs):
return client.chat.completions.create(**kwargs)
response = completion_with_backoff(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Tell me a joke.'}]
)
print(response.choices[0].message.content)การกำหนดค่า Timeout
คำขอที่ค้างอยู่อาจทำให้แอปหยุดทำงานตลอดไป ดังนั้นควรกำหนดระยะหมดเวลาเสมอ SDK รับค่าระยะหมดเวลาเป็นวินาทีได้ทั้งในไคลเอ็นต์หรือการเรียกใช้แต่ละครั้ง เลือกค่าให้เหมาะกับความยาวคำตอบที่คาดไว้
import openai
# Set a default timeout for all requests from this client
client = openai.OpenAI(timeout=30.0)
# Or override per request
try:
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Summarize the French Revolution.'}],
timeout=60.0
)
except openai.APITimeoutError:
print('Request timed out. Try a shorter prompt or increase timeout.')การจัดการข้อผิดพลาดด้านการยืนยันตัวตน
AuthenticationError (401) หมายความว่าคีย์ของคุณไม่ถูกต้อง หมดอายุ หรือถูกเพิกถอน การลองใหม่จะไม่ช่วยอะไร ควรบันทึกข้อผิดพลาด แจ้งเตือน และหยุดการทำงานทันที แทนที่จะใช้โควตาการลองใหม่จนหมด
import os
import openai
api_key = os.environ.get('OPENAI_API_KEY')
if not api_key:
raise EnvironmentError(
'OPENAI_API_KEY not set. Export it before running.'
)
client = openai.OpenAI(api_key=api_key)
try:
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': 'Hello'}]
)
except openai.AuthenticationError:
# Do NOT retry - the key itself is invalid
raise RuntimeError('Invalid API key. Check OPENAI_API_KEY.')โควตากับการจำกัดอัตรา
ทั้งสองอย่างอาจดูเหมือน RateLimitError แต่แตกต่างกัน: การจำกัดอัตราคือการจำกัดต่อนาทีซึ่งจะรีเซ็ตเอง ส่วนข้อจำกัดโควตาคือเพดานค่าใช้จ่ายที่ต้องเติมเครดิตเพิ่มเติม
การบันทึกข้อผิดพลาดเพื่อแก้ไขปัญหา
ในระบบจริง ควรบันทึกข้อผิดพลาดทุกครั้งพร้อมบริบท ได้แก่ ประเภท โมเดล พารามิเตอร์ จำนวนโทเคน เวลา และรหัสคำขอ รหัสคำขอนี้เป็นข้อมูลที่ฝ่ายสนับสนุนของ OpenAI ต้องใช้ ดูโค้ดได้เลย
import logging
import openai
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
client = openai.OpenAI()
def safe_completion(model, messages):
try:
response = client.chat.completions.create(
model=model, messages=messages
)
return response
except openai.RateLimitError as e:
logger.warning(
'Rate limit hit',
extra={'model': model, 'error': str(e)}
)
raise
except openai.APIStatusError as e:
logger.error(
'API server error',
extra={
'status_code': e.status_code,
'request_id': e.request_id,
'model': model
}
)
raiseการจัดการข้อผิดพลาดในแอปจริง
กลยุทธ์ที่มั่นคงสำหรับระบบจริงคือ หยุดการทำงานทันทีเมื่อพบข้อผิดพลาดที่กู้คืนไม่ได้ ลองใหม่สำหรับข้อผิดพลาดชั่วคราวโดยใช้การหน่วงเวลาแบบทวีคูณ และจัดเตรียมทางเลือกสำรองที่ทำงานได้อย่างราบรื่น อย่าปล่อยให้ข้อผิดพลาดจาก API ครั้งเดียวทำให้เซิร์ฟเวอร์ทั้งหมดหยุดทำงาน
ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจแนวคิดวิศวกรรม AI จากบทเรียนนี้
ทบทวนบทเรียน
คุณได้เรียนรู้วิธีจัดการความล้มเหลวแล้ว: OpenAI จะแจ้งข้อยกเว้นเฉพาะประเภท การจำกัดอัตราต้องใช้การหน่วงเวลาแบบทวีคูณร่วมกับความคลาดเคลื่อนแบบสุ่ม และข้อผิดพลาดด้านการยืนยันตัวตนควรทำให้ระบบหยุดทันที ขั้นต่อไป: การเขียนพรอมต์ที่ทรงพลัง
คำถามที่พบบ่อย
บทเรียน “การจัดการข้อผิดพลาดและขีดจำกัดอัตราการเรียกใช้” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจัดการข้อผิดพลาดและขีดจำกัดอัตราการเรียกใช้” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Engineering Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Engineering Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจัดการข้อผิดพลาดและขีดจำกัดอัตราการเรียกใช้”
จัดการข้อผิดพลาด API ที่พบบ่อย เช่น ข้อยกเว้นจากขีดจำกัดอัตราการเรียกใช้ ข้อผิดพลาดการยืนยันตัวตน และหมดเวลา ด้วยตรรกะการลองใหม่และรูปแบบการหน่วงเวลาแบบทวีคูณ คุณปฏิบัติ AI Engineering Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Engineering Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Engineering Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การจัดการข้อผิดพลาดและขีดจำกัดอัตราการเรียกใช้” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Engineering Academy นี้ได้ไหม
ได้ บทเรียน AI Engineering Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตั้งค่าสภาพแวดล้อม Python
- ปลายทางการเติมข้อความสนทนา
- ควบคุมพฤติกรรมของโมเดลด้วยพารามิเตอร์
- การจัดการข้อผิดพลาดและขีดจำกัดอัตราการเรียกใช้