पाठ 9 / 25
Rate Limiting और दुरुपयोग नियंत्रण
Token bucket जैसी प्रति-user सीमाओं से budget और उपलब्धता की रक्षा करें।
सीमाएँ सबकी रक्षा करती हैं
हर model call पैसा और compute ख़र्च करती है। सीमाओं के बिना एक script बड़ा बिल बना सकती है या दूसरे users को भूखा रख सकती है। अनुरोधों, tokens या ख़र्च पर प्रति-user और प्रति-IP सीमाएँ लगाएँ, अधिकतम input और output लंबाई तय करें, और महँगे features के लिए sign-in माँगें। Token bucket छोटे उफान की अनुमति देता है पर औसत दर स्थिर रखता है: tokens समय के साथ भरते हैं और हर अनुरोध एक ख़र्च करता है।
Token bucket, चलाकर
मैंने यह 3 tokens की bucket से चलाया जो प्रति सेकंड 1 भरती है। समय 0 पर तीन अनुरोध पास होते हैं, चौथा और 0.5 s वाला अस्वीकार होते हैं, फिर bucket भरने पर 1.0 s और 2.0 s के अनुरोध फिर पास होते हैं।
class Bucket:
def __init__(self, cap, rate):
self.cap, self.rate, self.tokens, self.t = cap, rate, cap, 0.0
def allow(self, now, cost=1):
self.tokens = min(self.cap, self.tokens + (now - self.t) * self.rate)
self.t = now
if self.tokens >= cost:
self.tokens -= cost
return True
return False
b = Bucket(3, 1.0)
print([b.allow(t) for t in (0, 0, 0, 0, 0.5, 1.0, 2.0)])
Output:
[True, True, True, False, False, True, True]
सिर्फ़ requests नहीं, tokens सीमित करें
100,000-token दस्तावेज़ वाला एक अनुरोध छोटे सवाल वाले अनुरोध से कहीं महँगा है। Tokens (या अनुमानित ख़र्च) से मापें ताकि सीमाएँ असली ख़र्च के अनुरूप हों।
त्वरित जाँच: Token bucket क्या अनुमति देता है?
- कभी सिर्फ़ एक अनुरोध
- असीमित अनुरोध
- स्थिर औसत दर के साथ छोटे उफान
- कोई अनुरोध नहीं
Answer
स्थिर औसत दर के साथ छोटे उफान — क्षमता उफान की अनुमति देती है; भरने की दर लंबी अवधि का औसत बाँधती है।