การจำกัดอัตราและการจัดการโควตา
กำหนดโควตาต่อผู้ใช้ ต่อองค์กร และต่อจุดเชื่อมต่อ เพื่อไม่ให้ผู้เช่ารายใดรายหนึ่งใช้ งบประมาณ OpenAI ของคุณจนหมด
การจำกัดอัตราและการจัดการโควตา เป็นบทเรียน AI Agents ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน AI Agents และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
เหตุใดจึงต้องมีขีดจำกัด
หากไม่มีขีดจำกัด ไคลเอนต์ที่ใช้งานในทางที่ผิดเพียงรายเดียวอาจ:
- ใช้จ่ายงบประมาณ OpenAI ของคุณจนหมด
- แย่งทรัพยากรจากผู้ใช้รายอื่น
- ทำให้บริการของคุณถูกรบกวนแบบ DDoS
ขีดจำกัดอัตราและโควตาช่วยปกป้องค่าใช้จ่าย เวลาแฝง และความเป็นธรรม
ขีดจำกัดอัตรากับโควตา
- ขีดจำกัดอัตรา — จำนวนคำขอต่อวินาทีหรือต่อนาที (ระยะสั้น)
- โควตา — งบประมาณรวมต่อวันหรือต่อเดือน (ระยะยาว)
คุณต้องมีทั้งสองอย่าง
อัลกอริทึมถังโทเค็น
อัลกอริทึมแบบดั้งเดิม: ผู้ใช้แต่ละรายมี "ถัง" ที่เติมโทเค็นด้วยอัตราคงที่ แต่ละคำขอจะใช้หนึ่งโทเค็น หากไม่มีโทเค็น ก็จะไม่ให้บริการ
Redis Token Bucket Example
def allow(user_id, rate=10, capacity=30):
key = f'rate:{user_id}'
now = time.time()
pipe = redis.pipeline()
pipe.hgetall(key)
state, _ = pipe.execute()
tokens = float(state.get('tokens', capacity))
last = float(state.get('last', now))
tokens = min(capacity, tokens + (now - last) * rate)
if tokens < 1:
return False
tokens -= 1
redis.hset(key, mapping={'tokens': tokens, 'last': now})
redis.expire(key, 60)
return TrueFastAPI Integration with slowapi
# pip install slowapi
from slowapi import Limiter
from slowapi.util import get_remote_address
limiter = Limiter(key_func=get_remote_address)
app.state.limiter = limiter
@app.post('/agents/qa')
@limiter.limit('10/minute')
def qa(req: AgentRequest):
...Different Limits Per Tier
class User:
def __init__(self, is_pro):
self.is_pro = is_pro
class State:
def __init__(self, is_pro):
self.user = User(is_pro)
class Req:
def __init__(self, is_pro):
self.state = State(is_pro)
def limit_for(req):
return '100/minute' if req.state.user.is_pro else '10/minute'
def qa(req):
limit = limit_for(req)
print(f'user is_pro={req.state.user.is_pro} -> rate limit {limit}')
return limit
qa(Req(is_pro=True))
qa(Req(is_pro=False))
โควตาตามค่าใช้จ่าย
จำกัดจำนวนเงิน ไม่ใช่เพียงจำนวนคำขอ:
def check_budget(user_id, predicted_cost):
key = f'cost:{user_id}:{date.today()}'
spent = float(redis.get(key) or 0)
if spent + predicted_cost > daily_budget(user_id):
raise HTTPException(429, 'Daily budget exceeded')
# After the call:
redis.incrbyfloat(key, actual_cost)
redis.expireat(key, midnight_tomorrow_ts)ขีดจำกัดการทำงานพร้อมกัน
จำกัดจำนวนคำขอที่กำลังดำเนินการของผู้ใช้แต่ละรายด้วย:
key = f'inflight:{user_id}'
redis.sadd(key, request_id)
if redis.scard(key) > 3:
raise HTTPException(429, 'Too many concurrent requests')
# Remove from set when the request finishes.ขีดจำกัดอัตราระดับส่วนกลาง
ปกป้อง API ของ LLM ปลายทางจากบริการของคุณเอง:
global_key = 'rate:global:llm'
if redis.incr(global_key) > 60: # 60 calls per second
raise HTTPException(503, 'Service overloaded')
redis.expire(global_key, 1)Return Useful Errors
headers = {
'X-RateLimit-Limit': '60',
'X-RateLimit-Remaining': '0',
'X-RateLimit-Reset': str(reset_time),
'Retry-After': '30'
}
return JSONResponse({'error': 'rate-limited'}, status_code=429, headers=headers)ขีดจำกัดอัตราแบบกระจาย
หากคุณใช้งานเซิร์ฟเวอร์ API หลายเครื่อง ขีดจำกัดอัตราต้องใช้ร่วมกัน Redis เป็นแบ็กเอนด์มาตรฐาน ส่วน Cloudflare และ Kong มีทางเลือกแบบจัดการให้บริการ
การรองรับการพุ่งขึ้นของปริมาณงาน
การใช้งานจริงมักเพิ่มขึ้นเป็นช่วง ๆ โปรดรองรับการพุ่งขึ้นเล็กน้อย เช่น อนุญาต 30 คำขอพร้อมกันเมื่ออัตราคือ 10 คำขอต่อวินาที การใช้งานถังโทเค็นรองรับกรณีนี้ได้โดยธรรมชาติด้วยค่า capacity ที่สูงขึ้น
การแจ้งเตือน
โปรดแจ้งเตือนเมื่อ:
- การทริกเกอร์ขีดจำกัดอัตราระดับส่วนกลางเกิดขึ้นมากกว่า X ครั้งต่อนาที
- ผู้ใช้รายใดใช้ขีดจำกัดของตนอย่างต่อเนื่อง (อาจต้องอัปเกรดหรือระบบอาจมีข้อผิดพลาด)
- งบประมาณรายวันเข้าใกล้ 80%
การป้องกันสองชั้น
เหตุใดจึงต้องมีทั้งขีดจำกัดอัตราและโควตา
สรุปทบทวน
ใช้ถังโทเค็นสำหรับขีดจำกัดอัตรา ใช้ตัวนับค่าใช้จ่ายสำหรับโควตา จำกัดการทำงานพร้อมกันต่อผู้ใช้ ใช้ตัวตัดวงจรระดับส่วนกลาง และส่งการตอบกลับ 429 ที่เป็นประโยชน์พร้อม Retry-After
คำถามที่พบบ่อย
บทเรียน “การจำกัดอัตราและการจัดการโควตา” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจำกัดอัตราและการจัดการโควตา” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส AI Agents ให้อัปเกรดเป็น CoddyKit PRO คอร์ส AI Agents มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจำกัดอัตราและการจัดการโควตา”
กำหนดโควตาต่อผู้ใช้ ต่อองค์กร และต่อจุดเชื่อมต่อ เพื่อไม่ให้ผู้เช่ารายใดรายหนึ่งใช้ งบประมาณ OpenAI ของคุณจนหมด คุณปฏิบัติ AI Agents ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน AI Agents หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน AI Agents บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การจำกัดอัตราและการจัดการโควตา” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน AI Agents นี้ได้ไหม
ได้ บทเรียน AI Agents ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การให้บริการเอเจนต์ผ่าน API
- เวิร์กโฟลว์แบบไม่พร้อมกันและงานเบื้องหลัง
- การจำกัดอัตราและการจัดการโควตา
- การนำเอเจนต์ขึ้นระบบแบบบลู-กรีนและคานารี