Od modela do agenta: Opremljavanje Responses API-ja računarskim okruženjem
Autorice i autori: Bo Xu, Danny Zhang, i Rohit Arunachalam
Trenutno smo u prelazu sa korištenja modela, koji briljiraju u određenim zadacima, na korištenje agenata sposobnih da upravljaju složenim tijekovima rada. Pomoću upita model, možete pristupiti samo istreniranoj inteligenciji. Međutim, davanje modelu računarskog okruženja može postići mnogo širi raspon slučajeva upotrebe, kao što su pokretanje usluga, zahtijevanje podataka iz API-ja ili generisanje korisnijih artefakata poput tabela ili izvještaja.
Nekoliko praktičnih problema se javlja kada pokušate izgraditi agente: gdje smjestiti međufajlove, kako izbjeći lijepljenje velikih tabela u upit, kako omogućiti radnom toku pristup mreži bez stvaranja sigurnosnih problema i kako upravljati istecima vremena i ponovnim pokušajima bez izgradnje vlastitog sistema radnog toka.
Umjesto da prepustimo programerima izgradnju vlastitih okruženja za izvršavanje, izgradili smo potrebne komponente kako bismo opremili Responses API(otvara se u novom prozoru) računalnim okruženjem za pouzdano izvršavanje zadataka iz stvarnog svijeta.
OpenAI-jev Responses API, zajedno s alatom shell i hostovanim radnim prostorom spremnika, dizajniran je da riješi ove praktične probleme. Model predlaže korake i komande; platforma ih pokreće u izoliranom okruženju s datotečnim sistemom za ulaze i izlaze, opcionalnim strukturiranim skladištenjem (kao što je SQLite) i ograničenim pristupom mreži.
U ovom postu ćemo objasniti kako smo izgradili računarsko okruženje za agente i podijeliti neke rane lekcije o tome kako ga koristiti za brže, ponovljivije i sigurnije radne tokove.
Dobar radni tok agenta počinje čvrstom petljom izvršavanja: model predlaže radnju poput čitanja datoteka ili dohvaćanja podataka putem API-ja, platforma je izvršava, a rezultat se prenosi u sljedeći korak. Počet ćemo sa shell alatom—najjednostavnijim načinom da vidite ovu petlju na djelu—a zatim ćemo obraditi radni prostor spremnika, umrežavanje, vještine za višekratnu upotrebu i kompaktiranje konteksta.
Da biste razumjeli alat za ljusku, prvo je korisno razumjeti kako model jezika općenito koristi alate: da radi stvari poput pozivanja funkcije ili interakcije s računarom. Tokom obuke, modelu se korak po korak prikazuju primjeri kako se alati koriste i kakvi su rezultirajući efekti. Ovo pomaže modelu da nauči odlučiti kada koristiti alat i kako ga koristiti. Kada kažemo „korištenje alata”, mislimo da model zapravo samo predlaže poziv alata. Ne može samostalno izvršiti poziv.
Alat za ljusku čini model dramatično moćnijim: komunicira s računarom putem komandne linije kako bi obavio širok raspon zadataka, od pretraživanja teksta do slanja API zahtjeva na vašem računaru. Izgrađen na poznatim Unix alatima, naš alat za ljusku može uraditi sve što biste očekivali, uz uslužne programe kao što su grep, curl i awk dostupne odmah po instalaciji.
U poređenju s našim postojećim tumačem koda, koji izvršava samo Python, shell alat omogućava mnogo širi spektar slučajeva upotrebe, poput pokretanja Go ili Java programa ili pokretanja NodeJS servera. Ova fleksibilnost omogućava modelu da ispuni složene agentičke zadatke.
Sam po sebi, model može samo predlagati shell komande, ali kako se ove komande izvršavaju? Potreban nam je orkestrator da dobije izlaz modela, pozove alate i proslijedi odgovor alata nazad modelu u petlji, sve dok zadatak ne bude završen.
Responses API je način na koji programeri komuniciraju s OpenAI model. Kada se koristi s prilagođenim alatima, API za odgovore vraća kontrolu klijentu, a klijent zahtijeva vlastiti harness za pokretanje alata. Međutim, ovaj API također može orkestrirati između modela i hostovanih alata odmah po instalaciji.
Kada Responses API primi upit, sastavlja kontekst modela: upit korisnika, prethodno stanje razgovora i upute alata. Da bi izvršavanje ljuske funkcionisalo, upit mora spomenuti korištenje alata za ljusku and odabrani model mora biti obučen da predlaže shell komande—modeli GPT‑5.2 i noviji su obučeni za ovo. Uz sav ovaj kontekst, model zatim odlučuje o narednoj radnji. Ako odabere izvršavanje shell-a, vraća jednu ili više shell komandi usluzi Responses API. API servis prosljeđuje te komande izvršnom okruženju spremnika, strimuje nazad izlaz ljuske i prosljeđuje ga modelu u kontekstu sljedećeg zahtjeva. Model zatim može pregledati rezultate, izdati naredne naredbe ili proizvesti konačan odgovor. Responses API ponavlja ovu petlju sve dok model ne vrati dovršetak bez dodatnih shell komandi.
Kada API za odgovore izvršava shell komandu, održava streaming vezu sa servisom kontejnera. Kako se izlaz proizvodi, API ga prosljeđuje modelu gotovo u stvarnom vremenu kako bi model mogao odlučiti da li da sačeka više izlaza, pokrene drugu komandu ili pređe na konačni odgovor.
API za odgovore strimuje izlaz komandi ljuske
Model može predložiti više shell komandi u jednom koraku, a Responses API ih može izvršiti istovremeno koristeći odvojene sesije kontejnera. Svaka sesija strimuje izlaz nezavisno, a API multipleksira te tokove nazad u strukturirane izlaze alata kao kontekst. Drugim riječima, petlja agenta može paralelizirati rad, kao što su pretraživanje datoteka, dohvaćanje podataka i provjera međurezultata.
Kada komanda uključuje operacije nad datotekama ili obradu podataka, izlaz ljuske može postati veoma velik i potrošiti budžete konteksta bez dodavanja korisnih signala. Da bi se ovo kontrolisalo, model specificira ograničenje izlaza po komandi. Responses API nameće to ograničenje i vraća ograničen rezultat koji čuva i početak i kraj izlaza, uz označavanje izostavljenog sadržaja. Na primjer, mogli biste ograničiti izlaz na 1,000 znakova, uz sačuvan početak i kraj:
tekst na početku ... 1000 znakova skraćeno ... tekst na kraju
Zajedno, istovremeno izvršavanje i ograničeni izlaz čine petlju agenta i brzom i kontekstno efikasnom, tako da model može nastaviti rezonovanje nad relevantnim rezultatima umjesto da ga preplave sirovi terminalski logovi.
Jedan potencijalni problem s petljama agenta je da zadaci mogu trajati dugo vremena. Dugotrajni zadaci popunjavaju kontekstni prozor, što je ključno za pružanje konteksta kroz poteze i među agentima. Zamislite agenta koji poziva vještinu, prima odgovor, dodaje pozive alata i sažetke rezonovanja—ograničeni kontekstni prozor se brzo popunjava. Da bismo izbjegli gubitak važnog konteksta dok agent nastavlja raditi, potreban nam je način da zadržimo ključne detalje i uklonimo sve što je suvišno. Umjesto da zahtijevamo od programera da dizajniraju i održavaju prilagođene sisteme za sažimanje ili prenošenje stanja, dodali smo izvorno sažimanje u Responses API, osmišljeno da bude usklađeno s načinom na koji se model ponaša i kako je treniran.
Naši najnoviji modeli su obučeni da analiziraju prethodno stanje razgovora i proizvedu stavku kompakcije koja čuva ključno prethodno stanje u šifriranoj, token-efikasnoj reprezentaciji. Nakon sažimanja, sljedeći kontekstni prozor sastoji se od ove stavke sažimanja i dijelova visoke vrijednosti iz ranijeg prozora. Ovo omogućava da se tokovi rada koherentno nastave preko granica prozora, čak i u produženim višestepenim sesijama vođenim alatima. Codex se oslanja na ovaj mehanizam kako bi podržao dugotrajne zadatke kodiranja i iterativno izvršavanje alata bez narušavanja kvaliteta.
Sažimanje je dostupno ili ugrađeno na serveru ili putem samostalne `/compact` krajnje tačke. Sažimanje na strani servera omogućava vam da konfigurišete prag, a sistem automatski upravlja vremenom sažimanja, eliminišući potrebu za složenom logikom na strani klijenta. Omogućava nešto veći efektivni kontekstni prozor unosa kako bi tolerisao mala prekoračenja neposredno prije sažimanja, tako da se zahtjevi blizu ograničenja i dalje mogu obraditi i sažeti umjesto da budu odbijeni. Kako se obuka modela razvija, izvorno rješenje za sažimanje se razvija s njom za svako izdanje OpenAI modela.
Codex nam je pomogao da izgradimo sistem kompakcije, istovremeno služeći kao njegov rani korisnik. Kada bi jedna instanca Codex-a naišla na grešku pri kompaktiranju, pokrenuli bismo drugu instancu da istražimo. Rezultat je bio da je Codex dobio izvorni, efikasan sistem kompakcije samo radeći na problemu. Ova sposobnost Codexa da pregleda i usavrši samog sebe postala je posebno zanimljiv dio rada u OpenAI. Većina alata od korisnika zahtijeva samo da nauči kako ih koristiti; Codex uči zajedno s nama.
Sada hajde da obradimo stanje i resurse. Kontejner nije samo mjesto za pokretanje komandi, već i radni kontekst za model. Unutar kontejnera model može čitati datoteke, upitavati baze podataka i pristupati vanjskim sistemima pod kontrolama mrežnih politika.
Prvi dio konteksta kontejnera je sistem datoteka za otpremanje, organizovanje i upravljanje resursima. Izgradili smo API-je za kontejnere i datoteke(otvara se u novom prozoru) kako bismo modelu dali mapu dostupnih podataka i pomogli mu da odabere ciljane operacije nad datotekama umjesto da obavlja široka, bučna skeniranja.
Uobičajen anti-obrazac je pakovanje svih ulaznih podataka direktno u kontekst upita. Kako ulazi rastu, pretrpavanje upita postaje skupo i modelu je teško da se u njemu snađe. Bolji obrazac je da se resursi postave u datotečni sistem spremnika i da se modelu prepusti da odluči šta će otvoriti, parsirati ili transformisati pomoću shell komandi. Slično kao i ljudi, modeli bolje rade s organiziranim informacijama.
Drugi dio konteksta kontejnera su baze podataka. U mnogim slučajevima, predlažemo da programeri pohranjuju strukturirane podatke u bazama podataka kao što je SQLite i da ih upituju. Umjesto kopiranja cijele proračunske tabele u upit, na primjer, možete modelu dati opis tabela—koje kolone postoje i šta znače—i pustiti ga da povuče redove koji su mu potrebni.
Na primjer, ako pitate: „Koji proizvodi su imali pad prodaje ovog kvartala?”, model može upitati just relevantne redove umjesto da skenira cijelu tabelu. Ovo je brže, jeftinije, skalabilnije za veće skupove podataka.
Treći dio konteksta kontejnera je mrežni pristup, ključni dio radnih opterećenja agenta. Agentov tok rada možda će trebati dohvatiti podatke uživo, pozvati vanjske API-je ili instalirati pakete. Istovremeno, omogućavanje kontejnerima neograničenog pristupa internetu može biti rizično: može izložiti informacije vanjskim web stranicama, nenamjerno dodirnuti osjetljive interne ili sisteme trećih strana, ili otežati zaštitu od curenja vjerodajnica i eksfiltracije podataka.
Kako bismo riješili ove zabrinutosti bez ograničavanja korisnosti agenata, izgradili smo hostovane kontejnere koji koriste sidecar egress proxy. Svi odlazni mrežni zahtjevi prolaze kroz centralizirani sloj pravila koji primjenjuje liste dozvoljenih i kontrole pristupa, uz zadržavanje vidljivosti saobraćaja. Za vjerodajnice koristimo ubrizgavanje tajni s opsegom domene na izlazu. Model i kontejner vide samo placeholder-e, dok neobrađene tajne vrijednosti ostaju izvan konteksta vidljivog modelu i primjenjuju se samo za odobrena odredišta. Ovo smanjuje rizik od curenja podataka, a istovremeno omogućava autentificirane vanjske pozive.
Shell komande su moćne, ali mnogi zadaci ponavljaju iste obrasce u više koraka. Agenti moraju iznova otkrivati tok rada pri svakom pokretanju—planirati, izdavati naredbe i učiti konvencije—što dovodi do nedosljednih rezultata i uzaludnog izvršavanja. Vještine agenta(otvara se u novom prozoru) organizuju te obrasce u gradivne blokove koji se mogu ponovo koristiti i kombinovati. Konkretno, vještina je paket foldera koji uključuje ‘SKILL.md(otvara se u novom prozoru)’ (koji sadrže metapodatke i upute) plus svi prateći resursi, poput API specifikacija i UI resursa.
Ova struktura se prirodno povezuje s arhitekturom izvršnog okruženja koju smo ranije opisali. Kontejner omogućava trajne datoteke i kontekst izvršavanja, dok shell alat pruža interfejs za izvršavanje. Kada su oba prisutna, model može otkriti datoteke vještina koristeći shell komande (`ls`, `cat`, itd.) kada je to potrebno, interpretirati upute i pokretati skripte vještina sve u istoj petlji agenta.
Pružamo APIs(otvara se u novom prozoru) za upravljanje vještinama na OpenAI platformi. Programeri otpremaju i pohranjuju mape vještina kao pakete s verzijama, koje se kasnije mogu preuzeti po ID-u vještine. Prije slanja upita modelu, Responses API učitava vještinu i uključuje je u kontekst modela. Ova sekvenca je deterministička:
- Preuzmi metapodatke vještine, uključujući naziv i opis.
- Preuzmite paket vještina, kopirajte ga u kontejner i raspakujte ga.
- Ažurirajte kontekst modela metapodacima vještina i putanjom kontejnera.
Kada odlučuje da li je vještina relevantna, model postepeno istražuje svoje upute i izvršava skripte putem shell naredbi u kontejneru.
Da sve dijelove sastavimo u cjelinu: Responses API pruža orkestraciju, shell tool pruža izvršne radnje, hosted container pruža trajni runtime kontekst, skills slojevito organizuju logiku radnog toka koja se može ponovo koristiti, a compaction omogućava agentu da radi dugo vremena uz kontekst koji mu je potreban.
S ovim primitivima, jedan upit se može proširiti u tok rada od početka do kraja: otkriti pravu vještinu, dohvatiti podatke, transformisati ih u lokalno strukturirano stanje, efikasno ih upitati i generisati trajne artefakte.
Dijagram ispod prikazuje kako ovaj sistem funkcioniše za kreiranje proračunske tabele iz podataka uživo.
Responses API orkestrira agentički zadatak
Za detaljan primjer kombinovanja shell alata i računarskog okruženja za end-to-end radne procese, pogledajte naš blog za programere(otvara se u novom prozoru) i priručnik(otvara se u novom prozoru) koji objašnjavaju kako spakovati vještinu i izvršiti je putem Responses API-ja.
Uzbuđeni smo što ćemo vidjeti šta će programeri napraviti s ovim skupom primitiva. Jezički modeli su namijenjeni za više od generisanja teksta, slika i zvuka–nastavit ćemo razvijati našu platformu kako bi postala sposobnija za obavljanje složenih zadataka u stvarnom svijetu na velikoj skali.


