Vadovai

Kas yra užklausų ribojimas? Paprastas vadovas programų kūrėjams

Užklausų ribojimas – tai taisyklė, kuri riboja, kiek užklausų kažkas gali pateikti sistemai per nustatytą laiką. Pavyzdžiui, 5 prisijungimo bandymai per minutę arba 100 API iškvietimų per valandą. Pasiekus ribą, tolesnės užklausos atmetamos (paprastai su klaidos kodu 429 Too Many Requests), kol laiko langas atsinaujina. Tai apsaugo programas nuo piktnaudžiavimo, neleidžia vienam intensyviam naudotojui sulėtinti veikimo visiems ir sustabdo nekontroliuojamus kaštus.

Užklausų ribojimą matote iš dviejų pusių: paslaugos, kurias kviečiate, riboja jus, o jūsų pačios programa turėtų riboti savo naudotojus.

Kodėl užklausų ribojimas svarbus kuriant su AI

AI sukurtos programos dažnai jungiasi prie mokamų paslaugų – AI modelių, el. pašto, SMS, žemėlapių – o kiekvienas kvietimas kainuoja. Todėl užklausų ribojimas yra ir saugumo, ir biudžeto funkcija.

  • Kaštų kontrolė. Jei jūsų programoje yra laukas „paklausti AI“ ir jokios ribos, botas per naktį gali išsiųsti jam tūkstančius užklausų. Už kiekvieną iš jų mokate jūs.
  • Saugumas. Be ribos prisijungimo formoje užpuolikas gali išbandyti tūkstančius slaptažodžių vienai paskyrai. Kelių bandymų per minutę riba tai padaro nepraktišku.
  • Veikimo tęstinumas. Vienas sugedęs scenarijus – kartais ir jūsų pačių kodas, įstrigęs cikle – gali perkrauti duomenų bazę ir sustabdyti programą.
  • Kitų paslaugų ribų gerbimas. Kai jūsų programa per dažnai kviečia išorinį API, jūs gaunate 429 klaidas, o funkcijos nustoja veikti jūsų naudotojams.

AI kūrėjai sukurs tai, ko paprašote. Jei neminėsite ribų, jų dažnai nebus.

Kasdienė analogija

Pagalvokite apie kavinės nemokamo papildymo taisyklę: „Vienas nemokamas papildymas vienam klientui per apsilankymą.“

  • Ji netrukdo niekam mėgautis kava.
  • Ji neleidžia vienam žmogui visą dieną stovėti prie baro ir pilti kavą visam biurui.
  • Kai kas nors paprašo ketvirto papildymo, barista mandagiai sako „ne dabar“ – tai ir yra 429.

Gera riba yra nematoma įprastiems klientams ir pastebima tik tam, kas daro ką nors neįprasto.

Kaip veikia užklausų ribojimas

Riboto kiekio nustatytojui reikia trijų dalykų:

DalisĮ kokį klausimą atsakoPavyzdžiai
KasKieno užklausos skaičiuojamos?Pagal naudotojo paskyrą, IP adresą, API raktą
KiekKokia riba?5, 60, 1 000 užklausų
Per kokį laikąKokiame lange?Per sekundę, minutę, valandą, dieną

Atėjus užklausai, programa patikrina tam „kas“ skaičių. Jei neviršyta riba – užklausa praleidžiama ir skaičius didėja. Jei viršyta – užklausa atmetama.

Yra keli įprasti skaičiavimo būdai:

BūdasKaip veikiaKompromisas
Fiksuotas langasSkaitiklis atsistato pagal laikrodį – pvz., kiekvieną minutę pradžiojePaprasta, bet leidžia antplūdį dviejų langų sandūroje
Slenkantis langasŽiūrima į paskutines 60 sekundžių nuo dabarSklandžiau, bet skaičiuoti šiek tiek sudėtingiau
Žetonų kibirasKiekvienas naudotojas turi kibirą, kuris pildomas pastoviu greičiu; kiekviena užklausa sunaudoja žetonąLeidžia trumpus antplūdžius, bet išlaiko vidurkį pastovų

Skaitikliai turi būti saugomi greitoje bendroje vietoje. Vienam mažam serveriui pakanka atminties. Kai programa veikia keliose mašinose, skaitiklis paprastai laikomas bendroje saugykloje, pavyzdžiui, Redis arba duomenų bazėje. Kitaip kiekviena mašina skaičiuoja atskirai ir tikroji riba tampa kelis kartus didesnė.

Kaip atrodo atmesta užklausa

Kai užklausa viršija ribą, gerai veikiantis API atsako:

  • Būsenos kodu 429 Too Many Requests.
  • Dažnai antraštė Retry-After, nurodanti, kiek sekundžių reikia laukti.
  • Kartais antraštes, rodančias jūsų ribą ir kiek užklausų liko šiame lange (pavadinimai skiriasi priklausomai nuo teikėjo).

Jūsų programa, gavusi 429, turėtų palaukti ir bandyti vėliau – geriausia naudojant eksponentinį laukimą (exponential backoff), t. y. po kiekvieno nepavykusio bandymo laukiant ilgiau (1 sekundę, tada 2, tada 4), o ne daužant paslaugą iš naujo.

Darbo pavyzdys: AI rašymo asistentas

Tarkime, sukūrėte programą, kurioje naudotojai įklijuoja tekstą ir gauna AI perrašymą.

Be ribų: kažkas parašo scenarijų, kuris per naktį išsiunčia 20 000 užklausų. Jūsų AI teikėjo sąskaita pašoka, o jūsų paskyra pasiekia paties teikėjo ribą, todėl tikri naudotojai ryte mato klaidas.

Su protingomis ribomis:

  1. Prisijungusiam naudotojui: 30 perrašymų per valandą nemokamame plane, 300 mokamame. Viršijus ribą naudotojas mato: „Pasiekėte šios valandos ribą. Bandykite po 12 minučių arba atnaujinkite planą.“
  2. IP adresui registracijos formoje: 5 registracijos per valandą, kad botai neatidarytų tūkstančių nemokamų paskyrų ir neapeitų naudotojui skirtos ribos.
  3. Išlaidų riba nustatyta AI teikėjo valdymo skydelyje – paskutinė apsaugos linija, jei visa kita nepavyks.
  4. Teikėjo ribų valdymas: jei AI teikėjas grąžina 429, jūsų serveris palaukia ir pabando dar vieną ar du kartus, o paskui rodo draugišką pranešimą „užimta, bandykite dar kartą“.

Ribos tikrinamos serveryje. Riba, egzistuojanti tik naršyklėje – pavyzdžiui, mygtuko išjungimas po 30 paspaudimų – gali būti apeita bet kas, kas kviečia jūsų API tiesiogiai.

Pagrindiniai terminai

TerminasReikšmė
Užklausų riba (rate limit)Didžiausias leidžiamas užklausų skaičius laiko lange.
Kvota (quota)Didesnis leidimas, dažnai per dieną ar mėnesį, kartais susietas su mokamu planu.
429HTTP būsenos kodas „per daug užklausų“.
Retry-AfterAtsakymo antraštė, nurodanti, kiek laukti prieš bandant dar kartą.
ThrottlingUžklausų sulėtinimas ar atmetimas viršijus ribą. Dažnai vartojamas kaip sinonimas.
Eksponentinis laukimas (exponential backoff)Vis ilgesnis laukimas tarp bandymų.
Antplūdis (burst)Trumpas didelis užklausų šuolis vienu metu.
Brute-force atakaMilžiniškas slaptažodžių ar kodų bandymas, kol vienas tinka.

Dažnos klaidingos nuomonės

  • „Užklausų ribojimas skirtas tik didelėms programoms.“ Mažos programos taip pat yra taikiniai, nes botai nuskenuoja visą internetą ieškodami atvirų formų ir AI galinių taškų. Piktnaudžiavimo kaina nepriklauso nuo jūsų dydžio.
  • „Pakanka paslėpti mygtuką.“ Naršyklės pusės ribos yra mandagumas, o ne apsauga. Tikrąsias ribas būtina taikyti serveryje.
  • „IP ribos visada sąžiningos.“ Daug žmonių gali dalytis vienu IP adresu – biure, mokykloje, mobiliajame tinkle. Prisijungusiems naudotojams sąžiningesnės ribos pagal naudotoją.
  • „429 reiškia, kad paslauga sugedusi.“ Tai reiškia, kad kviečiate ją per dažnai. Patikrinkite savo kode ciklus ir talpinkite į podėlį rezultatus, kurie retai keičiasi – žr. kas yra podėlis.
  • „Užklausų ribojimas pakeičia išlaidų ribą.“ Naudokite abu. Ribos programoje gali turėti klaidų; teikėjo išlaidų riba yra jūsų atsarginis tinklas.

Ko paklausti savo AI kūrėjo

  • „Pridėk serverio pusės užklausų ribojimą prisijungimui, registracijai, slaptažodžio atkūrimui ir AI galiniam taškui. Pasiūlyk protingas ribas.“
  • „Apribok kiekvieną prisijungusį naudotoją iki [N] AI užklausų per valandą ir, kai riba pasiekiama, rodyk aiškų pranešimą su laukimo laiku.“
  • „Kai išorinis API grąžina 429, bandyk iš naujo su eksponentiniu laukimu iki 3 kartų, o tada rodyk draugišką klaidą.“
  • „Kur saugomi ribos skaitikliai? Ar jie veiks, jei programa veiks keliose mašinose?“
  • „Įrašinėk, kai naudotojas ar IP pasiekia ribą, kad galėčiau pastebėti piktnaudžiavimą.“
  • „Kokias išorines paslaugas kviečia ši programa ir kokios yra jų užklausų ribos?“

Užklausų ribojimas Mythex

Mythex dokumentacija šiuo klausimu yra aiški: AI funkcijų užklausų ribos, saugumo ir kaštų valdymas jūsų kuriamose programose yra jūsų pačių sprendžiamas dalykas – žr. Sukurkite AI programą. Prašykite agento pridėti ribas tame pačiame pranešime, kuriame prašote funkcijos. Pro plane publikuota paslauga gali veikti iki trijų mašinų, kai srautas didelis (žr. Talpinimo ribos), todėl prašykite skaitiklių, kurie laikomi duomenų bazėje, o ne vieno serverio atmintyje.

Susiję skaitiniai: kas yra API, kaip naudoti LLM API ir saugumo kontrolinis sąrašas AI sukurtoms programoms.

Klausimai

Kas yra užklausų ribojimas paprastais žodžiais?

Užklausų ribojimas – tai taisyklė, kuri riboja, kiek užklausų naudotojas, įrenginys ar programa gali pateikti per tam tikrą laikotarpį. Pavyzdžiui, 5 prisijungimo bandymai per minutę arba 100 API iškvietimų per valandą. Viršijančios ribą užklausos atmetamos, kol laiko langas atsinaujina.

Ką reiškia 429 Too Many Requests klaida?

HTTP būsenos kodas 429 reiškia, kad per trumpą laiką išsiuntėte per daug užklausų ir pasiekėte ribą. Atsakyme dažnai yra antraštė Retry-After, nurodanti, kiek reikia laukti. Problemą išspręsite sulėtindami užklausas, pakartodami po pauzės arba rečiau kviesdami paslaugą.

Kodėl mano AI programai reikia užklausų ribojimo?

Kiekviena AI užklausa kainuoja pinigus už žetonus. Be ribos vienas naudotojas ar botas gali išsiųsti tūkstančius užklausų, padidinti sąskaitą arba išnaudoti paslaugos teikėjo kvotą, ir funkcija nebeveiks visiems. Ribos kiekvienam naudotojui išlaiko kaštus prognozuojamus.

Ar užklausų ribojimas tas pats kaip throttling?

Jie glaudžiai susiję ir dažnai vartojami pakaitomis. Užklausų ribojimas paprastai reiškia viršijančių ribą užklausų atmetimą, o throttling gali reikšti ir jų sulėtinimą ar eilės formavimą, o ne tiesioginį atmetimą.

Ar užklausų ribojimas apsaugo nuo DDoS atakų?

Jis padeda nuo nedidelių antplūdžių ir piktnaudžiavimo iš atskirų naudotojų ar IP adresų, bet didelė paskirstyta ataka ateina iš daugybės adresų vienu metu. Apsauga nuo jų paprastai taikoma tinklo ar CDN lygmeniu, dar prieš srautui pasiekiant jūsų programą.

Mythex · Pricing · Kurkite bet ką su dirbtiniu intelektu · Svetainių ir programėlių šablonai · Mythex palyginimas · Programėlių kūrimo su dirbtiniu intelektu žodynėlis · Nemokami programėlių kūrimo su dirbtiniu intelektu įrankiai · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)