0Pricing
AI Agents · درس

تحديد معدل الطلبات وإدارة الحصص

طبّق حصصًا لكل مستخدم ومؤسسة ونقطة نهاية، حتى لا يستنفد مستأجر واحد ميزانية OpenAI الخاصة بك.

تحديد معدل الطلبات وإدارة الحصص درس مجاني في AI Agents على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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.

حد المعدل العام

احموا واجهات LLM API التابعة لكم من خدمتكم نفسها:

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.

الأسئلة الشائعة

هل درس «تحديد معدل الطلبات وإدارة الحصص» مجاني؟

نعم — نص درس «تحديد معدل الطلبات وإدارة الحصص» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Agents، انتقل إلى CoddyKit PRO. تتضمن دورة AI Agents 4 دروس في المجموع.

ماذا ستتعلم في «تحديد معدل الطلبات وإدارة الحصص»؟

طبّق حصصًا لكل مستخدم ومؤسسة ونقطة نهاية، حتى لا يستنفد مستأجر واحد ميزانية OpenAI الخاصة بك. تتمرن على AI Agents مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Agents؟

لا تُشترط خبرة سابقة. AI Agents على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تحديد معدل الطلبات وإدارة الحصص»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Agents هذا؟

نعم. كل درس في AI Agents يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تقديم الوكلاء خلف API
  2. سير العمل غير المتزامن والمهام الخلفية
  3. تحديد معدل الطلبات وإدارة الحصص
  4. عمليات النشر Blue-Green وCanary للوكلاء
← العودة إلى AI Agents