पाठ 23 / 28
असीमित खपत: Rate Limits और Denial of Wallet
Requests, tokens और ख़र्च सीमित करें ताकि दुरुपयोग सेवा या बजट खत्म न कर सके।
हर अनुरोध पैसा ख़र्चता है
LLM अनुरोध महँगे और धीमे हैं, जो उन्हें आकर्षक लक्ष्य बनाता है। हमलावर (या bug, या बेक़ाबू agent loop) विशाल prompts भेज सकता है, लंबे आउटपुट करवा सकता है, कई tool calls ट्रिगर कर सकता है, या बस endpoint में बाढ़ ला सकता है, जिससे denial of service या "denial of wallet" (बहुत बड़ा बिल) होता है। नियंत्रण: users को authenticate करें और प्रति-user rate limits (प्रति मिनट अनुरोध) व token बजट लगाएँ; इनपुट आकार, आउटपुट tokens और agent चरण सीमित करें; timeouts रखें; alerts सहित वैश्विक और प्रति-सुविधा ख़र्च सीमाएँ लगाएँ, ताकि घटना invoice से पहले समाप्त हो; queues और back-pressure उपयोग करें; दोहराए परिणाम cache करें; और अनाम endpoints के लिए CAPTCHA या मज़बूत पहचान माँगें। मॉडल निष्कर्षण (व्यवहार कॉपी करने के लिए कई जाँच-queries) और असामान्य उपयोग पैटर्न पर नज़र रखें। उदाहरण token bucket दिखाता है जो 5 का burst देकर फिर धीमा करता है, और दैनिक सीमा जो 123 अनुरोधों के बाद दुरुपयोग रोकती है।
Token bucket और दैनिक ख़र्च सीमा, चलाकर
मैंने यह सादे Python 3 (सिर्फ़ standard library) से चलाया। यहाँ सारे हमले स्थानीय डेटा पर हानिरहित प्रदर्शन हैं, कोई असली system उपयोग नहीं हुआ। 5 के burst वाला bucket 12 तेज़ अनुरोधों में से पहले 5 जाने देता है और भरने तक बाक़ी अस्वीकार करता है (दो सेकंड बाद का अनुरोध फिर स्वीकार होता है)। गढ़ी क़ीमतों के साथ $5 की दैनिक सीमा बड़े अनुरोधों की दुरुपयोग-धारा को 123 के बाद, $4.98 ख़र्च होने पर, रोक देती है।
class TokenBucket:
def __init__(self, rate_per_min, burst):
self.rate, self.burst, self.tokens, self.t = rate_per_min / 60, burst, burst, 0.0
def allow(self, now, cost=1):
self.tokens = min(self.burst, self.tokens + (now - self.t) * self.rate); self.t = now
if self.tokens >= cost: self.tokens -= cost; return True
return False
b = TokenBucket(rate_per_min=30, burst=5)
results = [b.allow(t * 0.1) for t in range(12)] # 12 requests in 1.1 seconds
print("allowed:", "".join("Y" if r else "n" for r in results), "->", sum(results), "of 12")
print("two seconds later:", b.allow(3.2))
# Spend cap: "denial of wallet" protection
price_in, price_out = 3.0, 15.0 # example USD per million tokens
daily_cap_usd, spent = 5.0, 0.0
requests = 0
while True:
cost = (6000 * price_in + 1500 * price_out) / 1e6 # a single abusive request: huge prompt + long answer
if spent + cost > daily_cap_usd: break
spent += cost; requests += 1
print(f"abusive requests served before the ${daily_cap_usd:.0f} daily cap: {requests} (spent ${spent:.2f})")
Output:
allowed: YYYYYnnnnnnn -> 5 of 12 two seconds later: True abusive requests served before the $5 daily cap: 123 (spent $4.98)
Agent loops सीमित करें
चरण सीमा उलझे agent को loop में बजट जलाने से रोकती है।
त्वरित जाँच: अलर्ट वाली ख़र्च सीमा किससे बचाती है?
- दुरुपयोग, bugs या बेक़ाबू loops से अचानक बिल
- वर्तनी की ग़लतियाँ
- धीमी टाइपिंग
- ग़ायब semicolons
Answer
दुरुपयोग, bugs या बेक़ाबू loops से अचानक बिल — बजट और rate limits दुरुपयोग के नुक़सान को बाँधते हैं।