Kontrolni sloj stoji ispred OpenAI, Anthropic ili lokalnog modela, tako da aplikacija ima jedno mjesto za limit potrošnje, log onoga što je poslano, rate limit i drugi provajder kad prvi zakaže. Alati za podršku, pomoćnici u prodavnici, interna pretraga i svaka druga funkcija koja treba model zovu taj sloj. Sloj drži ključeve.
Sadržaj
Bez njega ključ završi u browseru ili se kopira u svaki mikroservis, a račun stigne bez imena funkcije. Timeout ugasi ekran iako bi drugi model mogao odgovoriti. Tekst kupca ostane u logu koji niko nije planirao čuvati. Kontrolni sloj je mali servis koji ta četiri problema svodi na jedan. Na engleskom se zove AI gateway.
CodeWiz ga gradi za timove koji već zovu model i žele da svaki poziv ima plafon, maskiran log, limit i put do rezervnog modela. Ne obećavamo koliko će token koštati. Cijene se mijenjaju, a dugačak prompt košta više od kratkog.

Zašto kontrolni sloj drži ključeve provajdera
Browser ne smije vidjeti ključ za OpenAI ili Anthropic. Stranica radi na mašini posjetioca, pa je ključ u JavaScriptu ključ koji ste objavili. Prijava odlučuje ko smije otvoriti stranicu. Izvorni kod stranice i dalje se može pročitati.
Svaki mikroservis može držati svoju poslovnu logiku. Nijedan ne treba privatnu kopiju ključa provajdera. Jedan procurjeli repozitorij ili jedna dijeljena staging datoteka otvara svaki proizvod koji je tu kopiju koristio. Rotacija tada postaje potraga kroz servise, a gašenje jedne funkcije dira i ostale.
Aplikacija zove vaš endpoint. Taj endpoint jeste kontrolni sloj. Čita ključ iz spremišta tajni, provjerava koja funkcija zove i tek onda prosljeđuje prompt. Staging i produkcija koriste različite ključeve. Repozitorij čuva ime tajne. Pozivaoci se autentifikuju serverskim tokenom, uzajamnim TLS-om ili privatnom mrežom.
Zahtjev ide kratkim putem. Aplikacija šalje ime funkcije, poruke i budžet za timeout. Kontrolni sloj provjerava plafon i rate, uklanja ono što se ne smije čuvati, zove provajdera i vraća odgovor. Na grešku ili timeout pokušava sljedeće ime s liste. Politika jedne funkcije može biti ovako mala:
{ "feature": "support-summary", "primary": "openai", "fallback": "anthropic", "timeout_ms": 8000, "daily_call_cap": 2000 }Cloudflare opisuje kako zona može bilježiti pozive modela kad sajt već radi tamo. To koristimo kad log može živjeti uz zonu. Kad ključevi moraju ostati na vašem serveru, dodamo mali servis u API koji već imate. OpenAI napomene za produkciju pokrivaju timeout, ograničene ponovne pokušaje i tajne koje ne idu do klijenta.
| Direktan poziv provajderu | Kroz kontrolni sloj | |
|---|---|---|
| Potrošnja | Svaki servis troši dok ne stigne račun provajdera | Plafon po funkciji, uz upozorenje prije tvrdog zaustavljanja |
| Logovi | Dashboard provajdera, ili log koji ne kontrolišete | Vaš log, sa sakrivenim tajnama i podacima kupca |
| Failover | Funkcija padne kad padne taj jedan provajder | Drugi provajder, ili lokalni model, može odgovoriti |
| Ključevi | Kopirani u svaki servis, ponekad i u browser | Na jednom mjestu, na serveru, rotacija jednom izmjenom |
Limit potrošnje i upozorenja na kontrolni sloj
Poziv modela se naplaćuje. Petlja, oluja ponovnih pokušaja ili nova popularna funkcija mogu potrošiti mjesečni budžet za jedno poslijepodne. Limit potrošnje je broj koji sami odredite: stati, ili preći na manji model, kad dnevni pozivi ili prijavljena potrošnja dođu do njega.
Plafon je granica kojom vi upravljate, odvojena od cjenovnika koji se može promijeniti. Ono što možete ograničiti jeste broj poziva, plus brojke koje provajder vrati, tako da neko čuje trend dok još ima radnog dana.
Zapišite šta znači „stati”. Neke funkcije odbijaju poziv i pokažu jasnu poruku. Druge padnu na manji model, ili na lokalni, i vrate kraći odgovor. Upozorenje blizu sedamdeset posto dnevnog broja ostavlja vrijeme da podignete plafon ili pauzirate funkciju.
To upozorenje ide uz ostatak vašeg monitoringa. Sloj šalje brojač i prag nekome ko može djelovati. Tretiramo ga kao svaki drugi produkcijski signal, kao u našem tekstu o monitoringu i logovanju: malo upozorenja, imenovani vlasnik i čuvanje koje neće napuniti disk.
Šta upisati u log, a šta sakriti
Koristan log odgovara na kratak spisak. Koja funkcija je zvala, koji model je odgovorio, je li uspio i koliko je milisekundi trebalo. Ostavite dovoljno konteksta da sutra ujutro možete ispraviti loš odgovor. Brojevi kartica, lozinke i API ključevi ostaju van datoteke.
Maskiranje ide prije svakog upisa. Authorization zaglavlja i ključevi provajdera se odbacuju. Adrese e-pošte, brojevi telefona i nizovi cifara nalik kartici se zamjenjuju. Prompt držite kao hash i kratak prefiks, nekoliko dana, pa ga obrišite.
Kontrolni sloj zapisuje odluku: vrijeme, funkciju, model, status provajdera, latenciju, pogodak u keš ili promašaj, i id koji se poklapa s logom aplikacije. Broj tokena ide u taj red kad ga provajder vrati. Čuvanje traje određen broj dana, zatim se briše. Jedan spor može zadržati jedan slučaj.

Timeouti i prelazak na drugi model
Spor provajder je često gori od onog koji ne radi. Korisnik gleda spinner dok vaš worker drži vezu. Uskladite timeout s funkcijom: dvije sekunde za kratku klasifikaciju, duže za sažetak, uz poruku na ekranu da se još radi. Kad tajmer istekne, prestanite čekati.
Failover je uređena lista: prvi model, zatim drugi hostovani, pa lokalni ako zadatak to dozvoljava. Kontrolni sloj otvara sljedeći poziv tek kad prvi zakaže ili istekne timeout. Korisnik dobije jedan odgovor ili jednu jasnu grešku. Paralelni poziv dvama provajderima naplaćuje oba čak i kad je prvi zdrav.
Pređite dalje poslije timeouta, odgovora o rate limitu ili serverske greške. Neispravan zahtjev treba stati, jer će isto tijelo pasti i kod sljedećeg provajdera. Zabilježite koja grana je odgovorila. Jedan ponovni pokušaj na kratkom prekidu mreže je dovoljan. Tri pokušaja bez timeouta produžavaju prekid i račun.
Nuspojave ostaju van poziva modela. Drugi pokušaj je bezbjedan kad model samo piše sažetak. Kad rezultat šalje e-poštu ili naplaćuje, prvo završite poziv modela, pa radnju uradite jednom. Limit po funkciji i po korisniku, provjeren prije poziva, sprečava da jedan klijent pojede kvotu koja treba svima.
Keširanje istovjetnih zahtjeva
Isti prompt, isti model i ista podešavanja ne treba platiti dvaput u istom minutu. Ključ keša od funkcije, modela, sistemskih instrukcija i hasha poruka može vratiti prethodni odgovor dok je svjež. Fiksni prevodi, zatvoreni skup oznaka i FAQ odgovori tu dobijaju. Živi chat, ili prompt s trenutnim vremenom, preskače keš.
Kontrolni sloj vraća sačuvani odgovor samo kad je zahtjev označen za keš i kad je tekst bezbjedan za ponovnu upotrebu. Dugotrajan keš teksta kupca je još jedna kopija podataka koje ste htjeli sakriti. Držite prozor kratkim i ostavite tuđi privatni tekst van zajedničkog keša.

Limiti po funkciji
Jedan dijeljeni ključ bez plafona pušta testnu skriptu i produkcijskog pomoćnika da troše iz istog džepa. Podijelite politiku: sažetak podrške, opis proizvoda, interna pretraga. Svaka ima svoj plafon, rate i model, pa greška u opisima ne može isprazniti budžet koji podršci treba ujutro.
Ime funkcije putuje uz zahtjev. Kontrolni sloj odbija ime koje ne poznaje, pa kopirani primjer ne može zvati model bez limita. Dodavanje funkcije je izmjena politike, pregledana kao svaki drugi config. Staging dobija svoj mali plafon, tako da test opterećenja ne može potrošiti produkcijski.
Lokalni model za osjetljiv tekst
Neki promptovi treba da ostanu na vašoj mreži: klauzula ugovora, bilješka o osoblju, zapis koji ne biste nalijepili u javni chat. Lokalni model pored aplikacije je rezerva za taj tekst, a za neke funkcije jedini put. Neće se poklopiti s velikim hostovanim modelom na svakom zadatku. Bajti ostaju na mašini koju kontrolišete.
Aplikacija šalje ime funkcije i tekst. Kontrolni sloj primjenjuje pravilo: ova funkcija smije zvati OpenAI, ova smije pasti na Anthropic, a ova ostaje lokalna i kad su hostovani API-ji zdravi. Zapišite koje funkcije, polja i dokumenti su na toj listi i uklonite direktan poziv kad funkcija pređe. Lista je odluka: šta smije izaći, a šta ostaje na vašoj mašini.
CodeWiz ugrađuje lokalne modele u obične proizvode, s istim oblikom zahtjeva i crtom između teksta koji smije izaći i teksta koji mora ostati. Kako se to uklapa u ostatak proizvoda stoji u članku o AI i machine learning integraciji. Pravilo živi ovdje, a kod aplikacije ostaje jednostavan.
Greške koje isprazne račun
Kontrolni sloj i dalje zakaže kad je politika nemarna. Prve dvije koje odbijamo su log koji zauvijek čuva svaki prompt kupca i jedan dijeljeni ključ bez plafona. Ostale se pojave čim funkcija dobije stvarne pozive.
- Ključ provajdera u frontend kodu ili u repozitoriju, jer je kutija bila „samo staging”.
- Ponovni pokušaji bez timeouta, pa se spor provajder zove triput i naplati triput.
- Failover koji ponovi nuspojavu: dva maila, dvije naplate ili dva tiketa.
- Keš sirovog teksta kupca koji nadživi log.
- Nema upozorenja na plafon, pa je prvi znak funkcija koja je već stala.
- Privatni ključ u svakom mikroservisu, pa je rotacija projekat umjesto izmjene configa.
Kako radimo
- Upoznavanje. Koje funkcije danas zovu model, gdje žive ključevi i koji tekst se nikad ne smije logovati niti slati van.
- Plan. Plafon, rate, timeout, redoslijed prelaska i treba li nekoj funkciji lokalni model.
- Izrada. Endpoint, spremište tajni, maskiranje, pravila keša i brojači koje vaš monitoring već razumije.
- Test. Timeout, greška provajdera, dostignut plafon i prompt koji sadrži e-poštu ili ključ.
- Puštanje. Jedna funkcija prvo prelazi na kontrolni sloj. Direktan poziv se uklanja tek kad taj put utihne.
- Podrška. Upozorenja, čuvanje i rotacija ključeva ostaju na kratkom spisku koji možete voditi i bez nas u sobi.
Zašto CodeWiz
- API-ji su svakodnevni posao. Ovaj sloj je još jedan API, s rate limitingom, tajnama i logovima, uz ostatak sistema.
- Cloudflare ili server koji kontrolišete. Rub mreže kad je zona već tamo. Servis pored aplikacije kad ključevi moraju ostati na vašoj mašini.
- Lokalni modeli su stvarna opcija. Hostovani API-ji za javne funkcije. Model na vašem hardveru za tekst koji treba ostati unutra.
- Osnovan 2023. Dragan Plavšić u Banjoj Luci, rad na daljinu s klijentima u regionu i inostranstvu.
- Krojeno, i prvo open-source. Politika prati vaše funkcije, config ostaje vama, a cijena je fer: premijum razvoj bez premijum cijena.
Jedna skripta koja zove jedan model nekoliko puta dnevno može ostati kakva jeste. Kontrolni sloj se isplati kad više funkcija troši, ili kad se ključ počeo širiti.
Često postavljana pitanja
Treba li nam ovo ako koristimo samo jedan model?
Često da, samo zbog ključa i plafona. Prelazak na drugog provajdera može sačekati dok drugi model ne bude vrijedan posla. Skripta na jednom serveru, s ključem koji ne izlazi i računom koji već pratite, može ostati direktna. Reći ćemo koja ste varijanta kad vidimo gdje ključ živi.
Može li ključ ostati u browseru iza prijave?
Ne. Prijava odlučuje ko smije otvoriti stranicu. Browser i dalje dobije sve što stranici treba da radi. Browser zove vaš server, a server zove model. Tajna ostaje na mašini kojom vi upravljate.
Hoće li prelazak na drugi model udvostručiti račun?
Dodaje trošak samo za pozive koji stvarno pređu na drugog provajdera, i samo kad taj drugi poziv ode. Rezerva se pokušava nakon što prvi stane. Plafon po funkciji i kratak keš više pomjeraju račun nego povremeni rezervni poziv.
Šta log treba da sadrži?
Funkciju, model, latenciju, uspjeh ili pad, oznaku keša i maskirani trag koji brišete po rasporedu. Broj tokena pomaže kad ga provajder pošalje. Sirovi promptovi kupaca ostaju van dugotrajnog skladišta. Ako podrška mora pročitati jedan, držite kratak prozor, pa ga obrišite.
Može li lokalni model zamijeniti hostovani?
Za neke funkcije, da. Gdje ljudi porede odgovore s velikim hostovanim modelom, taj model obično ostaje prvi. Kontrolni sloj vam dozvoljava da ih pomiješate: osjetljiv tekst ostaje lokalan, ostalo ide provajderu kojeg ste izabrali, a pad može preći na rezervu bez novog deploya.
Stavite pozive modela na jedno mjesto
Recite nam koje funkcije zovu model, gdje su ključevi i šta ne smije ući u log. Skiciramo plafon, pravila maskiranja i listu prelaska prije ijednog reda koda. Javite se CodeWizu, ili pogledajte ostale naše razvojne usluge.