Mallista agentiksi: Responses API:n varustaminen tietokoneympäristöllä
Tekijät: Bo Xu, Danny Zhang ja Rohit Arunachalam
Olemme siirtymässä tiettyihin tehtäviin erinomaisesti soveltuvien mallien käytöstä sellaisten agenttien käyttöön, jotka pystyvät käsittelemään monimutkaisia työnkulkuja. Antamalla malleille kehotteita voit käyttää vain koulutettua älykkyyttä. Tietokoneympäristön avulla mallit voivat kuitenkin saavuttaa paljon laajemman valikoiman käyttötapauksia, kuten palveluiden ajamisen, tietojen pyytämisen API-rajapinnoista tai hyödyllisempien artefaktien, kuten laskentataulukoiden tai raporttien, tuottamisen.
Agenttien rakentamisessa ilmenee muutamia käytännön ongelmia: minne välitiedostot kannattaa sijoittaa, miten välttää suurten taulukoiden liittämistä kehotteeseen, miten antaa työnkululle verkkoyhteys luomatta tietoturvaongelmia ja miten käsitellä aikakatkaisuja ja uudelleenyrityksiä ilman, että rakennat työnkulkujärjestelmän itse.
Sen sijaan, että olisimme jättäneet kehittäjien vastuulle omien suoritusympäristöjensä rakentamisen, rakensimme tarvittavat komponentit varustaaksemme Responses API:n(avautuu uudessa ikkunassa) tietokoneympäristöllä, jossa reaalimaailman tehtävät voidaan suorittaa luotettavasti.
OpenAI:n Responses API on yhdessä shell-työkalun ja isännöidyn työtilan kanssa suunniteltu ratkaisemaan nämä käytännön ongelmat. Malli ehdottaa vaiheita ja komentoja; alusta suorittaa ne eristetyssä ympäristössä, jossa on tiedostojärjestelmä syötteitä ja tuotoksia varten, valinnainen strukturoitu tallennustila (kuten SQLite) ja rajoitettu verkkoyhteys.
Tässä julkaisussa kerromme, kuinka loimme agenttien tietokoneympäristön, ja jaamme alustavia oppeja siitä, miten sitä voidaan käyttää nopeampien, toistettavampien ja turvallisempien tuotantotyönkulkujen saavuttamiseksi.
Hyvä agenttityönkulku alkaa tiukalla suoritussilmukalla: malli ehdottaa toimintoa, kuten tiedostojen lukemista tai tietojen hakemista API:n avulla, alusta suorittaa sen, ja tulos syötetään seuraavaan vaiheeseen. Aloitamme shell-työkalusta – helpoimmasta tavasta nähdä tämä silmukka toiminnassa – ja käsittelemme sitten työtilan, verkostoitumisen, uudelleenkäytettävät taidot ja kontekstin tiivistämisen.
Shell-työkalun ymmärtämiseksi on ensin hyödyllistä ymmärtää, miten kielimalli yleensä käyttää työkaluja: esimerkiksi kutsuakseen funktiota tai ollakseen vuorovaikutuksessa tietokoneen kanssa. Koulutuksen aikana mallille näytetään vaihe vaiheelta esimerkkejä siitä, miten työkaluja käytetään ja mitä vaikutuksia niillä on. Tämä auttaa mallia oppimaan päättämään, milloin ja miten työkalua käytetään. "Työkalun käyttämisellä" tarkoitamme, että malli itse asiassa vain ehdottaa työkalukutsua. Se ei pysty suorittamaan kutsua itse.
Shell-työkalu tekee mallista huomattavasti tehokkaamman: se on vuorovaikutuksessa tietokoneen kanssa komentorivin kautta ja suorittaa monenlaisia tehtäviä tekstin etsimisestä API-pyyntöjen lähettämiseen tietokoneellasi. Tuttuihin Unix-työkaluihin pohjautuva shell-työkalumme pystyy tekemään kaiken, mitä siltä odotat, ja apuohjelmat kuten grep, curl ja awk ovat heti käyttövalmiina.
Verrattuna nykyiseen kooditulkkiimme, joka suorittaa vain Pythonia, shell-työkalu mahdollistaa huomattavasti laajemman valikoiman käyttötapauksia, kuten Go- tai Java-ohjelmien suorittamisen tai NodeJS-palvelimen käynnistämisen. Tämän joustavuuden ansiosta malli suoriutuu monimutkaisista agenttipohjaisista tehtävistä.
Itsenäisesti malli voi vain ehdottaa shell-komentoja, mutta miten nämä komennot suoritetaan? Tarvitsemme orkestroijan, joka hakee mallin tuotoksen, kutsuu työkaluja ja välittää työkalun vastauksen takaisin mallille silmukassa, kunnes tehtävä on valmis.
Responses API on tapa, jolla kehittäjät ovat vuorovaikutuksessa OpenAI-mallien kanssa. Kun Responses API:a käytetään mukautettujen työkalujen kanssa, se antaa ohjauksen takaisin asiakkaalle, ja asiakas tarvitsee oman välineensä työkalujen suorittamiseen. Tämä API voi kuitenkin myös heti koordinoida mallin ja isännöityjen työkalujen välillä.
Kun Responses API vastaanottaa kehotteen, se kokoaa mallin kontekstin: käyttäjän kehote, aiemman keskustelun tila ja työkalujen ohjeet. Jotta shell-suoritus toimisi, kehotteessa on mainittava shell-työkalun käyttö ja valitun mallin on oltava koulutettu ehdottamaan komentotulkkikomentoja—mallit GPT‑5.2 ja uudemmat on koulutettu tähän. Kaiken tämän kontekstin perusteella malli päättää sitten seuraavan toimenpiteen. Jos se valitsee shell-suorituksen, se palauttaa yhden tai useamman shell-komennon Responses API -palveluun. API-palvelu välittää komennot säilön ajonaikaiselle ympäristölle, suoratoistaa takaisin shell-tulosteen ja syöttää sen mallille seuraavan pyynnön kontekstissa. Malli voi sitten tarkastella tuloksia, antaa seurantakomentoja tai tuottaa lopullisen vastauksen. Responses API toistaa samaa silmukkaa, kunnes malli palauttaa lopullisen tuloksen ilman lisäkomentoja.
Kun Responses API suorittaa shell-komennon, se ylläpitää suoratoistoyhteyttä säilöpalveluun. Kun tuotos on valmis, API välittää sen mallille lähes reaaliajassa, jotta malli voi päättää, odottaako se lisää tuotosta, suorittaa toisen komennon vai siirtyy lopulliseen vastaukseen.
Responses API suoratoistaa shell-komentojen tulosteen
Malli voi ehdottaa useita shell-komentoja yhdessä vaiheessa, ja Responses API voi suorittaa ne samanaikaisesti erillisissä säiliöistunnoissa. Jokainen istunto suoratoistaa tuotoksen itsenäisesti, ja API multipleksoi suoratoistot takaisin strukturoiduiksi työkalun tuotoksiksi kontekstina. Toisin sanoen agenttisilmukka voi parallelisoida työtä, kuten tiedostojen etsimistä, tietojen hakemista ja välitulosten validointia.
Kun komento sisältää tiedostotoimintoja tai tietojenkäsittelyä, shell-tuloste voi kasvaa hyvin suureksi ja kuluttaa kontekstibudjetteja lisäämättä hyödyllisiä signaaleja. Tämän hallitsemiseksi malli määrittää komentokohtaisen tuotoksen ylärajan. Responses API valvoo rajoitusta ja palauttaa rajatun tuloksen, joka säilyttää sekä tulosteen alun että lopun ja merkitsee samalla pois jätetyn sisällön. Voit esimerkiksi rajata tulosteen tuhanteen merkkiin siten, että alku ja loppu säilyvät:
teksti alussa ... 1000 merkkiä katkaistu ... teksti lopussa
Yhdessä samanaikainen suoritus ja rajattu tuloste tekevät agentin silmukasta sekä nopean että kontekstitehokkaan, jotta malli voi jatkaa päättelyä olennaisten tulosten pohjalta sen sijaan, että se hukkuisi raakoihin päätelokilokeihin.
Yksi agenttisilmukoiden mahdollinen ongelma on, että tehtävät voivat kestää pitkään. Pitkäkestoiset tehtävät täyttävät konteksti-ikkunan, mikä on tärkeää kontekstin tarjoamiseksi vuorojen ja agenttien välillä. Kuvittele agentti, joka kutsuu taitoa, saa vastauksen, lisää työkalukutsuja ja päättely-yhteenvetoja – rajallinen konteksti-ikkuna täyttyy nopeasti. Jotta tärkeä konteksti ei katoaisi agentin jatkaessa toimintaansa, meidän on löydettävä tapa säilyttää keskeiset tiedot ja poistaa kaikki ylimääräinen. Sen sijaan, että kehittäjien tarvitsisi suunnitella ja ylläpitää mukautettuja yhteenvetoja tai tilaa ylläpitäviä järjestelmiä, lisäsimme Responses API:iin natiivin tiivistyksen, joka on suunniteltu vastaamaan mallin käyttäytymistä ja koulutusta.
Uusimmat mallimme on koulutettu analysoimaan aiemman keskustelun tilaa ja tuottamaan tiivistyskohteen, joka säilyttää aiemman tilan salatussa, token-tehokkaassa esitysmuodossa. Tiivistämisen jälkeen seuraava konteksti-ikkuna koostuu tästä tiivistämiskohteesta ja aiemman ikkunan arvokkaimmista osista. Tämä mahdollistaa työnkulkujen jatkumisen johdonmukaisesti ikkunoiden rajojen yli, myös laajennetuissa monivaiheisissa ja työkalupohjaisissa istunnoissa. Codex tukeutuu tähän mekanismiin ylläpitääkseen pitkäkestoisia koodaustehtäviä ja iteratiivista työkalujen suorittamista laadusta tinkimättä.
Tiivistys on saatavilla joko palvelimeen sisäänrakennettuna tai erillisen `/compact` -endpointin kautta. Palvelinpuolen pakkauksessa voit määrittää kynnysarvon, ja järjestelmä hoitaa tiivistyksen ajoituksen automaattisesti, mikä poistaa monimutkaisen asiakaspuolen logiikan tarpeen. Se sallii hieman suuremman tehokkaan syötekonteksti-ikkunan, joka sietää pieniä ylityksiä juuri ennen tiivistystä, joten rajaa lähellä olevat pyynnöt voidaan silti käsitellä ja tiivistää sen sijaan, että ne hylättäisiin. Mallin koulutuksen kehittyessä myös natiivi tiivistysratkaisu kehittyy sen mukana uusien OpenAI-mallien julkaisun myötä.
Codex auttoi meitä rakentamaan tiivistämisjärjestelmän ja toimi samalla sen varhaisena käyttäjänä. Kun yksi Codex-instanssi kohtasi tiivistysvirheen, käynnistimme toisen instanssin tutkintaa varten. Tuloksena oli, että Codex sai natiivin ja tehokkaan tiivistysjärjestelmän pelkästään työskentelemällä ongelman parissa. Tämä Codexin kyky tarkastella ja kehittää itseään on tullut erityisen kiinnostavaksi osaksi työskentelyä OpenAI:lla. Useimmat työkalut edellyttävät vain, että käyttäjä oppii käyttämään niitä; Codex oppii meidän rinnallamme.
Käsitellään seuraavaksi tilaa ja resursseja. Säilö ei ole vain paikka komentojen suorittamiseen, vaan myös mallin työskentelykonteksti. Säilön sisällä malli voi lukea tiedostoja, tehdä kyselyitä tietokantoihin ja käyttää ulkoisia järjestelmiä verkkokäytäntöjen puitteissa.
Säilökontekstin ensimmäinen osa on tiedostojärjestelmä resurssien lataamista, järjestämistä ja hallintaa varten. Rakensimme säilö- ja tiedosto(avautuu uudessa ikkunassa) -API:t, jotta malli saa kartan saatavilla olevista tiedoista ja voi valita kohdennettuja tiedostotoimintoja laajojen ja summittaisten skannausten sijaan.
Yleinen vastakuvio on pakata kaikki syöte suoraan kehotteen kontekstiin. Kun syötteet kasvavat, kehotteen ylitäyttäminen käy kalliiksi ja mallin on vaikea navigoida siinä. Parempi kuvio on vaiheistaa resurssit säilön tiedostojärjestelmässä ja antaa mallin päättää, mitä avataan, jäsennetään tai muunnetaan shell-komennoilla. Aivan kuten ihmiset, mallit toimivat paremmin järjestelmällisen tiedon kanssa.
Säilökontekstin toinen osa on tietokannat. Monissa tapauksissa suosittelemme kehittäjille, että he tallentavat strukturoitua dataa tietokantoihin, kuten SQLiteen, ja tekevät niihin kyselyitä. Sen sijaan, että kopioisit koko laskentataulukon kehotteeseen, voit antaa mallille kuvauksen taulukoista – mitä sarakkeita niissä on ja mitä ne tarkoittavat – ja antaa sen poimia tarvitsemansa rivit.
Jos kysyt esimerkiksi: "Minkä tuotteiden myynti laski tällä neljänneksellä?"", malli voi hakea vain olennaiset rivit sen sijaan, että se skannaisi koko laskentataulukon. Tämä on nopeampaa, edullisempaa ja skaalautuu paremmin suurempiin tietojoukkoihin.
Säilökontekstin kolmas osa on verkkoyhteys, joka on olennainen osa agenttien työkuormia. Agentin työnkulun on ehkä noudettava reaaliaikaista dataa, kutsua ulkoisia API-rajapintoja tai asentaa paketteja. Samaan aikaan rajoittamattoman internet-yhteyden antaminen säilöille voi olla riskialtista: se voi altistaa tietoja ulkoisille verkkosivustoille, koskettaa tahattomasti arkaluonteisia sisäisiä tai kolmansien osapuolten järjestelmiä tai vaikeuttaa tunnistetietojen vuotojen ja tietojen ulosvuotamisen estämistä.
Näiden huolenaiheiden ratkaisemiseksi agenttien hyödyllisyyttä rajoittamatta rakensimme isännöityjä säiliöitä käyttämään sidecar-poistumisvälityspalvelinta. Kaikki lähtevät verkkopyynnöt kulkevat keskitetyn käytäntökerroksen kautta, joka varmistaa sallittujen luettelot ja käyttöoikeuksien hallinnan ja pitää liikenteen havaittavana. Tunnistetietoja varten käytämme toimialuekohtaista salaisuuksien injektointia poistumisessa. Malli ja säiliö näkevät vain paikkamerkit, kun taas raa'at salaiset arvot pysyvät mallin näkyvän kontekstin ulkopuolella ja niitä sovelletaan vain hyväksyttyihin kohteisiin. Tämä vähentää vuotoriskiä ja mahdollistaa samalla todennetut ulkoiset kutsut.
Shell-komennot ovat tehokkaita, mutta monet tehtävät toistavat samoja monivaiheisia malleja. Agenttien on löydettävä työnkulku uudelleen kullakin ajokerralla – suunniteltava uudelleen, annettava komennot uudelleen ja opeteltava käytännöt uudelleen – mikä johtaa epäjohdonmukaisiin tuloksiin ja hukattuun suoritukseen. Agenttitaidot(avautuu uudessa ikkunassa) paketoivat nämä mallit uudelleenkäytettäviksi ja yhdisteltäviksi rakennuspalikoiksi. Konkreettisesti taito on kansiopaketti, joka sisältää kohteen "SKILL.md(avautuu uudessa ikkunassa)". (sisältää metadatan ja ohjeet) sekä mahdolliset tukiresurssit, kuten API-määritykset ja käyttöliittymäresurssit.
Tämä rakenne vastaa luontevasti aiemmin kuvaamaamme ajonaikaista arkkitehtuuria. Säilö tarjoaa pysyvät tiedostot ja suorituskontekstin, ja shell-työkalu toimii suoritusrajapintana. Kun molemmat ovat paikallaan, malli voi tarvittaessa löytää taitotiedostoja shell-komentojen ("ls", "cat" jne.) avulla, tulkita ohjeita ja suorittaa taitokomentosarjoja samassa agenttisilmukassa.
Tarjoamme API-rajapintoja(avautuu uudessa ikkunassa) taitojen hallintaan OpenAI-alustalla. Kehittäjät lataavat ja tallentavat taitokansiot versioituina paketteina, jotka voidaan myöhemmin hakea taidon tunnuksella. Ennen kehotteen lähettämistä mallille Responses API lataa taidon ja sisällyttää sen mallin kontekstiin. Tämä sekvenssi on deterministinen:
- Hae taidon metatiedot, mukaan lukien nimi ja kuvaus.
- Hae taitopaketti, kopioi se säilöön ja pura se.
- Päivitä mallin konteksti taidon metatiedoilla ja säilön polulla.
Kun arvioidaan, onko taito merkityksellinen, malli tutkii sen ohjeita asteittain ja suorittaa sen komentosarjat shell-komentojen avulla säiliössä.
Kun kaikki palaset kootaan yhteen: Responses API tarjoaa orkestroinnin, shell-työkalu tarjoaa suoritettavia toimintoja, isännöity säilö tarjoaa pysyvän ajonaikaisen kontekstin, taidot kerrostavat uudelleenkäytettävän työnkulun logiikan, ja tiivistäminen mahdollistaa agentin toiminnan pitkään tarvitsemansa kontekstin kanssa.
Näiden perusosien avulla yksi kehote voi laajentua päästä päähän -työnkuluksi: löytää oikean taidon, hakea dataa, muuntaa sen paikallisesti jäsenneltyyn tilaan, tehdä siihen tehokkaita kyselyitä ja tuottaa kestäviä artefakteja.
Alla oleva kaavio esittää, miten tämä järjestelmä toimii luotaessa laskentataulukkoa reaaliaikaisista tiedoista.
Responses API orkestroi agenttitehtävän
Jos haluat perusteellisen esimerkin shell-työkalun ja tietokoneympäristön yhdistämisestä päästä päähän -työnkulkuja varten, katso kehittäjäblogikirjoituksemme(avautuu uudessa ikkunassa) ja ohjekirjamme(avautuu uudessa ikkunassa), joissa käydään läpi taidon paketoiminen ja sen suorittaminen Responses API:n kautta.
Odotamme innolla, mitä kehittäjät rakentavat näillä peruselementeillä. Kielimallit on tarkoitettu tekemään muutakin kuin tuottamaan tekstiä, kuvia ja ääntä–jatkamme alustamme kehittämistä, jotta siitä tulee entistä kyvykkäämpi käsittelemään monimutkaisia, tosielämän tehtäviä laajassa mittakaavassa.


