- Genkitov middleware omogućuje vam presretanje i modificiranje ciklusa generiranja umjetne inteligencije pomoću modelnih kukica, alata i općeg toka.
- Uključuje izvorne značajke za automatske ponovne pokušaje, povratak između modela, kontrolu datoteka i odobravanje ljudskim alatima.
- Kompatibilan je s TypeScriptom, Goom i Dartom, što olakšava stvaranje slojeva sigurnosti i vidljivosti bez mijenjanja poslovne logike.
Ako gradite AI aplikacije, znate da nije sve u pisanju savršenog prompta. Kada prelazite s prototipa na nešto što stvarno radi u produkciji, nailazite na prepreke poput API vremenskih ograničenja, ograničenja kvota ili potrebe za ljudskom validacijom kritičnih radnji. Tu nastupa Genkit Middleware , Googleovo rješenje osmišljeno kako bi programerima omogućilo dodavanje slojeva kontrole bez potrebe za prepisivanjem cijelog koda svog agenta.
U osnovi, govorimo o sustavu presretača koji se postavlja oko poziva generiranja, umjesto da omata svaku funkciju. generate() U bloku ručnog upravljanja možete definirati niz koraka kroz koje zahtjev mora proći. To omogućuje arhitekturu vaših agenata... puno čišće i modularnije, odvajajući logiku aplikacije od međusektorskih problema kao što su sigurnost sustava, vidljivost i otpornost.
Kako točno funkcionira sustav presretanja?

Da biste ovo bolje razumjeli, razmislite o životnom ciklusu zahtjeva u Genkitu. Model obično generira odgovor, odlučuje treba li koristiti alat, izvršava taj alat i ponovno obrađuje rezultat. Genkitov middleware nije samo usko grlo; nudi tri različite sidrišne točke za intervenciju u ovom procesu:
- Generiraj udicu: Radi samo jednom po generacijskom ciklusu. To je idealno mjesto za ubrizgati instrukcije u sustav ili izmijeniti poruke prije nego što počnu letjeti.
- Kuka po modelu: Omotava izravni poziv API-ju modela. Bitan je za upravljanje automatski ponovni pokušaji, implementirajte predmemorije ili zabilježite koliko je vremena potrebno LLM-u da odgovori.
- Alat za kuku: Djeluje baš kad se alat sprema pokrenuti. Savršen je za stvaranje sustavi odobravanja gdje čovjek mora dati odobrenje prije nego što agent izbriše datoteku ili izvrši plaćanje.
Ova struktura ponaša se slično middlewareu koji se nalazi u okvirima poput Expressa ili Koe, funkcionirajući poput luka: zahtjev ulazi kroz vanjski sloj, dolazi do središta (modela), a zatim ponovno izlazi, prolazeći kroz slojeve obrnutim redoslijedom. Najbolje od svega je što možete složiti više middlewarea u niz, čime se definira točan redoslijed izvršavanja.
Katalog unaprijed instaliranih middlewarea

Kako ne bismo morali iznova izmišljati kotač, paket @genkit-ai/middleware Već dolazi s nekoliko alata spremnih za upotrebu. Jedan od najkorisnijih je... ponovni pokušajikoji koristi eksponencijalni algoritam vraćanja unatrag s podrhtavanjem. To nas sprječava da preopteretimo API kada postoje prolazne pogreške kao što su RESOURCE_EXHAUSTED o UNAVAILABLEpodnošenje zahtjeva mnogo robusniji u slučaju trenutnih kvarova.
Ako se kvota vašeg primarnog modela iscrpi, u pomoć priskače rezervni middleware . Omogućuje vam konfiguriranje popisa alternativnih modela tako da se, ako prvi ne uspije, zahtjev automatski usmjerava na manji ili jeftiniji, sprječavajući krajnjeg korisnika da vidi grešku. Ovo je ključna strategija za održavanje kontinuiteta usluge u okruženjima s velikom potražnjom.
Što se tiče sigurnosti, imamo middleware od odobrenje alataOvaj sustav stvara bijelu listu sigurnih alata; svaka radnja koja nije na toj listi izazvat će grešku. ToolInterruptErrorprisiljavajući sustav na pauziranje dok netko ne potvrdi radnju. To je pogoršano middlewareom od sustav datotekašto modelu daje pristup lokalnim datotekama, ali strogo ograničeno u korijenski direktorij kako bi se spriječilo da umjetna inteligencija špijunira tamo gdje ne bi trebala.

Konačno, imamo funkcionalnost vještineOvaj middleware skenira mape u potrazi za datotekama SKILL.md i ubrizgava ih u sistemski upit. To je vrlo elegantan način upravljanja znanjem agenta, što mu omogućuje da prenesite specifične vještine na zahtjev bez popunjavanja glavnog prompta nepotrebnim tekstom.
Izrada prilagođenog middlewarea

Kada izvorne opcije nisu dovoljne, Genkit nam omogućuje izradu vlastitih presretača pomoću funkcije generateMiddlewareOvaj alat nam omogućuje definiranje konfiguracijskih shema pomoću Zoda, osiguravajući da su parametri koje prosljeđujemo ispravno i otkucanoMožemo stvoriti bilo što, od jednostavnih logera koji bilježe svaki ulazak i izlazak, do složenih sustava za zapisivanje osjetljivih podataka (PII).
Vrlo moćan primjer upotrebe bio bi implementacija filtera sadržaja . Mogli biste stvoriti model hook koji analizira odgovor i, ako otkrije zabranjene riječi ili interne podatke o cijenama, blokira ili čisti odgovor prije nego što stigne do korisnika. Također je moguće upravljati kvotama po korisniku slanjem upita u bazu podataka u generatorskom hooku prije nego što se dopusti nastavak poziva.
Razlike između implementacija i ekosustava

Iako je koncept univerzalan, postoje nijanse ovisno o jeziku. U TypeScriptu je sustav vrlo dinamičan i omogućuje definiranje middlewarea u datotekama. .prompt kroz polje useU Gou je implementacija rigidnija jer se radi o kompajliranom jeziku, što je zahtijevalo stvaranje registracija middlewarea kako bi se tekstualna imena mogla pretvoriti u funkcionalne objekte tijekom izvođenja.
Važno je ne miješati Genkit s Googleovim Agent Development Kitom (ADK). Iako je ADK dizajniran za složene i resursno intenzivne višeagentske sustave izgrađene na GCP infrastrukturi, Genkit je idealna opcija za dodavanje mogućnosti agenta postojećim aplikacijama (web, mobilne itd.). Nadalje, cijeli tok middlewarea može se pratiti iz Genkit Developer UI-ja , što vam omogućuje da točno pratite koja je udica izmijenila zahtjev i put kojim je došao do konačnog rezultata.
Dolazak ovog sustava transformira funkciju generiranja u istinski kompozibilni cjevovod . Integriranjem rukovanja pogreškama, sigurnosti datoteka i ljudske validacije u zaseban sloj, razvoj agenata postaje mnogo profesionalniji proces i manje sklon katastrofalnim pogreškama u produkciji.