0Pricing
AI Agents · บทเรียน

การจำกัดอัตราและการจัดการโควตา

กำหนดโควตาต่อผู้ใช้ ต่อองค์กร และต่อจุดเชื่อมต่อ เพื่อไม่ให้ผู้เช่ารายใดรายหนึ่งใช้ งบประมาณ 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 True

FastAPI 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การให้บริการเอเจนต์ผ่าน API
  2. เวิร์กโฟลว์แบบไม่พร้อมกันและงานเบื้องหลัง
  3. การจำกัดอัตราและการจัดการโควตา
  4. การนำเอเจนต์ขึ้นระบบแบบบลู-กรีนและคานารี
← กลับไปที่ AI Agents