AI API pristupnici koji su svjesni ograničenja brzine: oblik RPM-a, TPM-a, burstova i pravednosti stanara prije 429s hita
Praktična pristupna arhitektura za sprječavanje kaskadnih LLM API 429: normalizirajte ograničenja pružatelja usluga, procijenite pritisak tokena prije slanja, rezervirajte kvotu po stanarima, ugladite prometne rampe i omogućite reviziju prigušivanja.
429 od pružatelja LLM-a nije samo signal za ponovni pokušaj. U produkciji je to često dokaz da je vaša aplikacija već izgubila kontrolu nad pristupom, pravednošću zakupca, kašnjenjem ili obračunom kvota specifičnih za pružatelja usluga.
Uobičajeni popravak—eksponencijalni backoff—potreban je, ali nepotpun. Backoff reagira nakon što pružatelj odbije promet. AI API pristupnik koji je svjestan ograničenja brzine trebao bi oblikovati promet prije nego što zahtjevi napuste vaš sustav: procijeniti pritisak tokena, rezervirati kvotu, izolirati zakupce, staviti pravi rad u red čekanja, odbiti pogrešan rad i prilagoditi se kada se promijene ograničenja pružatelja.
Ovaj članak opisuje praktični regulator kvote pristupnika za timove koji šalju radna opterećenja proizvodnje višestrukim pružateljima LLM-a putem jedinstvenog API-ja.
Problem s čitačem: 429 su višedimenzionalni
Mnogi timovi tretiraju ograničenja stope kao da se radi o jednom broju zahtjeva po minuti. Ta se pretpostavka brzo razbija s LLM API-jima.
Činjenice iz trenutne dokumentacije pružatelja usluge:
- OpenAI dokumentira da se ograničenja mogu provoditi na kraće prozore od oglašenog ograničenja po minuti, tako da kratki nizovi mogu zakazati čak i kada prosječna minuta izgleda sigurno.
- Azure OpenAI kvota dodjeljuje se prema pretplati, regiji, modelu i vrsti implementacije u tokenima po minuti. Dodjeljivanje TPM-a implementaciji također određuje ograničenja RPM-a prinudnog zaključivanja, a omjeri RPM-a-TPM-a razlikuju se ovisno o modelu.
- Azure OpenAI također napominje da se izračuni tokena za ograničenje brzine procjenjuju kada se primi zahtjev i nisu isti kao konačni brojevi tokena za naplatu.
- Antropski dokumenti odvajaju ograničenja zahtjeva po minuti, ulaznih tokena po minuti i izlaznih tokena po minuti. Prekoračenje ograničenja vraća 429 sa zaglavljem ponovnog pokušaja.
- Anthropic upozorava da oštro povećanje prometa može dosegnuti ograničenja ubrzanja i preporučuje postupno povećanje.
- Za većinu Claude modela, dokumenti Anthropic koji ulazne tokene za čitanje predmemoriraju ne ubrajaju se u ograničenja unosa tokena po minuti, što znači da brzo spremanje u predmemoriju može promijeniti efektivni prostor.
- Ograničenja stopa Google Gemini API-ja povezana su s razinama korištenja projekta, s višim razinama ovisno o postavkama naplate, kumulativnoj potrošnji i proteklom vremenu nakon prekretnica plaćanja.
Operativna lekcija je jasna: oblik zahtjeva kompatibilan s OpenAI-jem ne podrazumijeva ponašanje kvote kompatibilno s OpenAI-jem. Pristupnik s više pružatelja usluga treba interni model kvote koji je bogatiji od "pokušaj ponovo ako 429."
Cilj dizajna: učiniti kontrolu pristupa odgovornošću pristupnika
Gateway svjestan ograničenja brzine trebao bi odgovoriti na pet pitanja prije slanja zahtjeva:
- Koji će pružatelj, model, implementacija, regija, projekt ili radni prostor primiti zahtjev?
- Koliko zahtjeva, ulaznog tokena, izlaznog tokena i kapaciteta paralelnosti može potrošiti?
- Koji zakupac, tim, API ključ, korisnik ili klasa radnog opterećenja trebaju biti naplaćeni prema zajedničkom kapacitetu?
- Treba li zahtjev sada prihvatiti, nakratko staviti u red čekanja, vratiti na nižu razinu, preusmjeriti drugamo ili odbiti?
- Kako treba uskladiti rezervaciju nakon što pružatelj vrati stvarnu upotrebu?
Gateway postaje regulator kvote. Ne zamjenjuje ograničenja pružatelja usluga. Čini ograničenja pružatelja usluga vidljivima, predvidljivima i pravednima unutar vašeg sustava.
Izradite normalizirani model kvota
Započnite definiranjem unutarnjih dimenzija ograničenja koje mogu predstavljati glavne pružatelje bez da ih tjeraju u jednu zavaravajuću kantu.
Preporučene dimenzije graničnika
- RPM: zahtjeva po minuti.
- Ulazni TPM: upit, poruka, alat i tokeni konteksta po minuti.
- Izlazni TPM: tokeni završetka po minuti, odvojeno rezervirani za strujanje i duge generacije.
- Ukupni TPM: korisno za pružatelje usluga ili implementacije koje izlažu kombinirani pritisak tokena.
- Podudarnost: aktivni zahtjevi, aktivni tokovi ili poslovi u letu.
- Trajanje strujanja: dugotrajni streamovi mogu zauzeti prostor za vezu i izlazni token čak i kada je RPM nizak.
- Opseg specifičan za pružatelja usluga: Azure pretplata/regija/uvođenje, Anthropic radni prostor/klasa modela, Google projekt/razina ili OpenAI organizacija/projekt/grupa modela.
Ne skrivajte dimenzije specifične za pružatelja usluga. Normalizirajte ih u zajedničku shemu, ali sačuvajte dovoljno detalja da kasnije objasnite odbijanje.
{
"provider": "provider_a",
"model_profile": "brzi chat",
"provider_scope": {
"projekt": "proizvod",
"regija": "us-istok",
"deployment": "chat-large-01"
},
"ograničenja": {
"rpm": 1200,
"input_tpm": 800000,
"output_tpm": 250000,
"istodobnost": 200
}
}Ovaj interni objekt treba konfigurirati eksplicitno, a ne zaključivati samo iz naziva modela. Nadzorne ploče pružatelja usluga, razine računa, regionalne implementacije i postavke radnog prostora mogu promijeniti efektivni kapacitet iste obitelji modela.
Procijenite pritisak tokena prije otpreme
Ograničenje stope na strani pružatelja često se događa prije nego što se sazna konačna naplata. Vaš pristupnik trebao bi napraviti istu vrstu konzervativne procjene prije slanja prometa.
Unosi rezervacija prije leta
- Serializirani upit i duljina poruke.
- Tokenizacija specifična za model i režijski troškovi za uloge, alate, slike ili upute za strukturirani izlaz.
max_completion_tokensili ekvivalentno izlazno ograničenje.- Povijesni omjer završetka za ovu krajnju točku, stanara, profil modela i klasu zahtjeva.
- Očekivani tokeni za čitanje predmemorije ako je brzo predmemoriranje dostupno i mjerljivo.
- Oznaka strujanja i očekivano trajanje strujanja.
Jednostavno pravilo rezervacije često je dovoljno za početak:
estimated_input_tokens = tokenize(request_messages) + model_overhead
procijenjeni_izlazni_tokeni = min(
max_completion_tokens,
p95_historical_output_tokens_for_route
)
rezervirani_totalni_tokeni = procijenjeni_input_tokeni + procijenjeni_izlazni_tokeni
Za nepoznate rute upotrijebite konzervativnu zadanu vrijednost. Za stabilne proizvodne rute kontinuirano ažurirajte procjene prema stvarnoj upotrebi.
Rezerviraj, pa uskladi
Rezervacije kvota ne bi trebale postati stalne naknade. Tretirajte ih kao zadržavanja:
- Citat: procijenite ulazni i izlazni tlak.
- Rezerviraj: odbij od relevantnih žetona prije otpreme.
- Nagodba: zamijenite procjenu s upotrebom koju je prijavio davatelj usluga kada je dostupna.
- Povrat novca ili zaduženje: vratite neiskorišteni rezervirani kapacitet ili naplatite višak u sljedećem prozoru ako je potrebno.
Ovo je najvažnije za pozive dugog konteksta i strujanje. Ako provjerite samo ulazni TPM prije slanja, tok se može uspješno pokrenuti, a kasnije naići na pritisak izlaznog tokena. Zasebno rezerviranje prostora za visinu izlaza smanjuje kvar srednjeg toka i rizik od zastoja.
Koristite hijerarhijske spremnike tokena za pravednost stanara
Jedan globalni limiter štiti račun pružatelja usluga, ali ne štiti stanare jedne od drugih. Jedan skupni posao dugog konteksta može potrošiti dijeljeni TPM i uzrokovati neuspjeh interaktivnih zahtjeva drugih timova.
Koristite hijerarhijske spremnike tokena:
organizacija
└── podstanar
└── tim
└── api_ključ
└── profil_modela
└── provider_deployment
Zahtjev mora proći svaki relevantni spremnik. To vam omogućuje da nametnete nekoliko pravila odjednom:
- Organizacija ne može premašiti kapacitet pružatelja.
- Zakupac ne može trošiti više od svog ugovorenog udjela.
- API ključ ne može premašiti predviđeno okruženje ili ograničenje aplikacije.
- Profil skupnog modela ne može izgladnjeti profil interaktivnog modela.
- Implementacija pružatelja usluga ne može se preopteretiti čak i ako druga implementacija ima rezervnu kvotu.
Pošteno dijeljenje nasuprot korištenju
Preporuka: koristite ponderirano pravedno dijeljenje s kontroliranim burst posuđivanjem.
Stroga ograničenja po stanarima lako je objasniti, ali mogu dovesti do gubitka neiskorištenog kapaciteta. Burst borrowing poboljšava iskorištenost dopuštajući zakupcu da privremeno koristi neaktivnu kvotu iz zajedničkog skupa. Kompromis je složenost: nadzorne ploče moraju prikazivati što je zajamčeno, što je posuđeno i kada je posudba opozvana.
Praktično pravilo:
- Dajte svakom zakupcu zajamčenu osnovnu vrijednost.
- Dopusti brzo posuđivanje iz neiskorištenog zajedničkog kapaciteta.
- Povratite posuđeni kapacitet kada se pojavi promet višeg prioriteta ili zajamčeni promet.
- Nikada ne dopustite da posuđeni promet stvara 429 na razini pružatelja usluga za zajamčeni promet.
Razdvojite prometne klase prije nego što se bore
Ne zaslužuju svi zahtjevi isto ponašanje u redu čekanja. Stavite promet u profile modela s odvojenim redovima čekanja i skupovima kvota.
Stavljanje u red čekanja poboljšava stopu uspjeha, ali povećava latenciju repa. Gateway bi trebao učiniti taj kompromis eksplicitnim. Na primjer, interaktivni zahtjev može čekati do 300 milisekundi za kvotu, a zatim se poništi ili ne uspije. Noćni skupni posao može čekati 20 minuta i još uvijek se smatra uspješnim.
Normalizirajte 429 u jednu shemu pogreške
Čak i uz dobru kontrolu pristupa, davatelji 429 će se i dalje javljati. Ograničenja se mogu promijeniti, procjene pružatelja mogu se razlikovati od vaših, a promet može stizati u oštrijim naletima od očekivanog.
Normalizirajte svakog pružatelja 429 u objekt pogreške pristupnika:
{
"greška": {
"type": "rate_limited",
"limiter": "output_tpm",
"provider": "provider_a",
"model_profile": "brzi chat",
"provider_model": "model-x",
"ponovi_nakon_ms": 2400,
"stanar_id": "stanar_123",
"api_key_id": "ključ_456",
"request_class": "interaktivan",
"estimated_input_tokens": 4200,
"estimated_output_tokens": 800,
"gateway_decision": "prihvaćen_zatim_provider_odbijen",
"fallback_allowed": netočno,
"trace_id": "trace_abc"
}
}
Ključno polje je gateway_decision. 429 nakon što je pristupnik prihvatio zahtjev razlikuje se od zahtjeva koji je pristupnik lokalno odbio prije slanja. Prvo ukazuje na problem s kalibracijom limitera. Drugi označava namjernu zaštitu.
Prilagodi se zaglavljima pružatelja usluga, ali ne ovisi o njima
Neki pružatelji usluga vraćaju korisna zaglavlja kao što su indikatori ponovnog pokušaja ili preostalog kapaciteta. Koristite ih kada su dostupni.
Preporuka: zaglavlja pružatelja usluga trebaju prilagoditi vašeg lokalnog upravitelja, a ne zamijeniti ga.
Razlozi:
- Dostupnost zaglavlja razlikuje se ovisno o pružatelju i krajnjoj točki.
- Zaglavlja možda neće otkriti svaku dimenziju ograničenja.
- Retry-after govori vam kada da pokušate ponovno, a ne koji zakupac sljedeći treba dobiti kapacitet.
- Procjene tokena na strani pružatelja mogu se razlikovati od vaše naplate ili internog računovodstva.
Robusna implementacija ažurira lokalne stope ponovnog punjenja spremnika i hlađenja na temelju zaglavlja, dok još uvijek provodi zakupca, API ključ, prometnu klasu i ograničenja implementacije pružatelja unutar pristupnika.
Dodaj regulatore rampe za migracije i zakazane poslove
Mnogi incidenti s ograničenjima brzine događaju se tijekom planiranih promjena: prelazak s jednog modela na drugi, promjena pružatelja usluga, omogućavanje novog tijeka rada agenta ili pokretanje zakazanog izvođenja procjene.
Preporuka: rast prometa tretirajte kao kontrolirano uvođenje.
- Migracije modela zastavica značajki prema zakupcu, ruti ili postotku prometa.
- Postavite gornje granice rasta po minuti za nove implementacije pružatelja usluga.
- Zagrijte promet postupno tijekom sati umjesto da odmah prebacite sav promet.
- Pauziraj uvođenje kada stopa 429, stopa prelaska na stariju verziju, dubina čekanja ili kašnjenje p95 prijeđe prag.
- Zadržite rutu hitnog vraćanja s politikom kompatibilnosti, a ne samo rezervnim modelom.
Predviđanje: kako načini usmjeravanja pružatelja, razine prioriteta i kontrole na razini radnog prostora postaju sve češći, upravljanje rampom postat će standardna značajka pristupnika, a ne skripta za odgovor na incident.
Zamjena je politička odluka, a ne samo odluka o kapacitetu
Kada jedan pružatelj usluga vrati 429, usmjeravanje na drugog pružatelja usluga može biti pravi odgovor. Također može biti nesigurno.
Zamjena se može promijeniti:
- Kvaliteta izlaza i slijedeće upute.
- Duljina konteksta.
- Ponašanje poziva alata.
- Pouzdanost strukturiranog izlaza.
- Zadržavanje podataka i držanje boravka.
- Cijena i kašnjenje.
Guverner kvote trebao bi pitati sloj kompatibilnosti je li zamjena dopuštena za ovu klasu zahtjeva. Ako nije, trebao bi stati u red ili biti neuspješan s jasnim odgovorom o lokalnom ograničenju brzine umjesto tihe promjene semantike.
Izložite nadzorne ploče kvota koje objašnjavaju odluke
Sustav kvota koji nitko ne može razumjeti bit će zaobiđen. Izgradite nadzorne ploče oko operativnih pitanja:
- Koji stanari troše najviše RPM-a, ulaznog TPM-a i izlaznog TPM-a?
- Koji profili modela čekaju, odbijaju ili se vraćaju?
- Koji je opseg pružatelja usko grlo: projekt, regija, implementacija, radni prostor, klasa modela ili razina računa?
- Koliko se često procjene pristupnika razlikuju od upotrebe pružatelja?
- Što je distribucija ponovnog pokušaja prema pružatelju i vrsti limitera?
- Koliko se učinkovitog prostora stvara brzim čitanjem predmemorije?
- Koje prometne klase posuđuju burst kapacitet?
Za proizvode namijenjene kupcima ili partnerima, izložite sigurne kontrole:
- Ograničenja stope po ključu.
- Ograničenja pucanja po timu.
- Dnevna ograničenja po kupcu.
- Hitna pauza za stanara ili ključ.
- Upozorenja za 429 skokova, rast reda čekanja i abnormalni pritisak tokena.
- Partner API krajnje točke za upravljanje kvotama preprodavača.
Ovo pretvara ograničavanje stope iz misteriozne pogreške pružatelja u revizijski dio timskog upravljanja API-jem.
Popis za provjeru implementacije
1. faza: promatrati i klasificirati
- Dobavljač dnevnika, model, implementacija, regija, radni prostor, projekt, stanar, API ključ i klasa zahtjeva za svaki poziv.
- Snimite 429 davatelja usluga s metapodacima o ponovnim pokušajima i sirovim metapodacima o pogrešci.
- Odvojeno zabilježite procijenjene i stvarne ulazno/izlazne tokene.
- Odvojite interaktivni, batch, eval i pozadinski promet u telemetriji.
Faza 2: lokalna kontrola prijema
- Stvorite interne objekte ograničenja za RPM, ulazni TPM, izlazni TPM, ukupni TPM i konkurentnost.
- Dodajte procjenu tokena prije provjere.
- Rezervirajte kvotu prije otpreme i uskladite nakon što davatelj usluga stigne.
- Odbijte lokalno kada zahtjev ne može stati u segment zakupca ili davatelja.
Faza 3: pravednost i redovi čekanja
- Dodajte hijerarhijske segmente od organizacije do implementacije pružatelja usluga.
- Dodijelite zajamčene udjele stanarima i kontrolirano brzo zaduživanje.
- Stvorite zasebne redove prema klasi prometa.
- Postavite maksimalno vrijeme čekanja i zamjenska pravila za klasu.
Faza 4: prilagodba i operacije
- Upotrijebite zaglavlja dobavljača za podešavanje pretpostavki o hlađenju i ponovnom punjenju.
- Dodaj regulatore rampe za migracije i zakazane poslove.
- Izložite nadzorne ploče kvota i upozorenja.
- Tjedno pregledajte pogrešku procjene i nasukanu kvotu.
Zaključak koji se može poduzeti
Ako vaš pristupnik pokušava samo 429s, radi nakon greške. AI API pristupnik proizvodne razine trebao bi spriječiti većinu neuspjeha ograničenja brzine odlučivanjem kome je dopušteno slati što, kada i prema kvoti kojeg davatelja usluga.
Počnite s normaliziranim modelom limitera, rezervacijom tokena prije leta i redovima čekanja klase prometa. Zatim dodajte hijerarhijsku pravednost stanara, prilagodbu zaglavlja pružatelja usluga i regulatore rampe. Rezultat nije samo manje 429-ica. To je jasnija raspodjela kapaciteta, predvidljivija latencija, sigurnije migracije i ponašanje ograničenja brzine koje vaši timovi za inženjering, financije i korisničku podršku zapravo mogu objasniti.