Ugrás a fő tartalomra
OpenAI

2026. március 11.

Mérnöki tevékenység

Modelltől ügynökig: A Responses API felvértezése számítógépes környezettel

Bo Xu, Danny Zhang és Rohit Arunachalam

Betöltés…

Jelenleg egy olyan váltásban vagyunk, amely a konkrét feladatokban kiváló modellek használatáról a komplex munkafolyamatok kezelésére képes ügynökök használatára irányul. A modell utasításával csak a betanított intelligenciához férhetsz hozzá. Azonban, ha a modellnek számítógépes környezetet biztosítunk, az a felhasználási esetek sokkal szélesebb körét teheti lehetővé, például szolgáltatások futtatását, adatok lekérését API-kból, vagy hasznosabb artefaktumok, például táblázatok vagy jelentések létrehozását.

Néhány gyakorlati probléma merül fel, amikor ügynököket próbálsz építeni: hová tedd a köztes fájlokat, hogyan kerüld el, hogy nagy táblázatokat illessz be egy utasításba, hogyan adj a munkafolyamatnak hálózati hozzáférést anélkül, hogy biztonsági rémálmot okoznál, és hogyan kezeld az időtúllépéseket és az újrapróbálkozásokat anélkül, hogy magadnak kellene munkafolyamat-rendszert építened.

Ahelyett, hogy a fejlesztőkre bíznánk a saját végrehajtási környezeteik felépítését, megépítettük a szükséges összetevőket, hogy a Responses API(új ablakban nyílik meg)-t egy számítógépes környezettel lássuk el, amely megbízhatóan képes valós feladatok végrehajtására.

Az OpenAI Responses API-ja a shell eszközzel és egy hosztolt konténeres munkaterülettel együtt ezeknek a gyakorlati problémáknak a megoldására készült. A modell lépéseket és parancsokat javasol; a platform ezeket egy elszigetelt környezetben futtatja, bemenetekhez és kimenetekhez fájlrendszerrel, opcionális strukturált tárolással (például SQLite-tal) és korlátozott hálózati hozzáféréssel. 

Ebben a bejegyzésben bemutatjuk, hogyan hoztunk létre egy számítógépes környezetet az ügynökök számára, és megosztunk néhány korai tanulságot arról, hogyan lehet azt gyorsabb, megismételhetőbb és biztonságosabb munkafolyamatokhoz használni.

A shell eszköz

Egy jó ügynök munkafolyamat szoros végrehajtási ciklussal kezdődik: a modell olyan műveletet javasol, mint a fájlok olvasása vagy adatok lekérése API-val, a platform lefuttatja, és az eredmény a következő lépésbe kerül. A shell eszközzel kezdünk – ez a legegyszerűbb módja annak, hogy működés közben lásd ezt a ciklust –, majd kitérünk a konténeres munkaterületre, a hálózatkezelésre, az újrahasznosítható készségekre és a kontextus tömörítésére.

A shell eszköz megértéséhez először hasznos megérteni, hogyan használ egy nyelvi modell általában eszközöket: például egy függvény meghívására vagy arra, hogy kapcsolatba lépjen egy számítógéppel. A betanítás során a modellnek lépésről lépésre bemutatják, hogyan használják az eszközöket, és milyen hatásokkal járnak. Ez segít a modellnek megtanulni eldönteni, mikor használjon eszközt, és hogyan használja azt. Amikor azt mondjuk, hogy „egy eszköz használata”, akkor azt értjük alatta, hogy a modell valójában csak egy eszközhívást javasol. Önmagában nem tudja végrehajtani a hívást.

A shell eszköz "csak egy újabb eszköz" diagrammal

A shell eszköz jelentősen erősebbé teszi a modellt: a parancssoron keresztül lép kapcsolatba a számítógéppel, hogy különféle feladatokat hajtson végre, a szövegkereséstől az API-kérések elküldéséig. Ismert Unix eszközkészletre építve a shell eszközünk mindent tud, amit elvárhat, olyan segédprogramokkal, mint a grep, a curl és az awk, amelyek azonnal elérhetők.

A meglévő kódértelmezőnkhöz képest, amely csak Python kódot hajt végre, a shell eszköz a felhasználási esetek sokkal szélesebb körét teszi lehetővé, például Go vagy Java programok futtatását, illetve egy NodeJS szerver elindítását. Ez a rugalmasság lehetővé teszi, hogy a modell összetett ügynöki feladatokat teljesítsen.

Az ügynök ciklus orchestrálása

Önmagában a modell csak shell parancsokat tud javasolni, de hogyan hajtják végre ezeket a parancsokat? Szükségünk van egy vezénylőre, amely lekéri a modell kimenetét, meghívja az eszközöket, és az eszköz válaszát egy ciklusban visszajuttatja a modellnek, amíg a feladat be nem fejeződik.

A Responses API az a mód, ahogyan a fejlesztők az OpenAI modelljeivel interakcióba lépnek. Egyéni eszközökkel használva a Responses API visszaadja a vezérlést a kliensnek, és a kliensnek saját keretrendszerre van szüksége az eszközök futtatásához. Azonban ez az API alapból képes a modell és a hosztolt eszközök közötti összehangolásra. 

Amikor a Responses API megkap egy utasítást, összeállítja a modell kontextusát: felhasználói utasítás, korábbi beszélgetési állapot és eszközinstrukciók. Ahhoz, hogy a shell végrehajtás működjön, az utasításnak említenie kell a shell eszköz használatát és a kiválasztott modellnek shell parancsok javaslatára kell lennie betanítva – erre a GPT‑5.2 és az újabb modellek be vannak tanítva. Mindezen kontextus birtokában a modell ezután eldönti a következő műveletet. Ha a shell-végrehajtást választja, egy vagy több shell-parancsot ad vissza a Responses API szolgáltatásnak. Az API-szolgáltatás továbbítja ezeket a parancsokat a konténer futtatókörnyezetnek, visszastreameli a shell kimenetét, és a következő kérés kontextusában átadja azt a modellnek. A modell ezután megvizsgálhatja az eredményeket, kiadhat utánkövető parancsokat, vagy végső választ adhat. A Responses API addig ismétli ezt a ciklust, amíg a modell további shell-parancsok nélkül ad vissza egy befejezést.

Ügynökciklus-diagram: a Responses API összehangolja a modellt és a shell-végrehajtást a containerben

Amikor a Responses API egy shell parancsot hajt végre, streaming kapcsolatot tart fenn a konténerszolgáltatással. A kimenet előállítása közben az API közel valós időben továbbítja azt a modellnek, hogy a modell eldönthesse, várjon-e további kimenetre, futtasson-e egy másik parancsot, vagy továbblépjen a végső válaszra.

Shell parancsvégrehajtás kimenetének streamelése

A Responses API streameli a shell-parancsok kimenetét

A modell egy lépésben több shell-parancsot is javasolhat, és a Responses API ezeket párhuzamosan végre tudja hajtani különálló konténermunkamenetek használatával. Minden munkamenet egymástól függetlenül streameli a kimenetet, és az API ezeket a streameket strukturált eszközkimenetekké multiplexeli vissza kontextusként. Más szóval, az ügynökciklus képes párhuzamosítani a munkát, például fájlok keresését, adatok lekérését és a köztes eredmények ellenőrzését.

A Responses API multiplexeli a parancsvégrehajtási munkameneteket

Amikor a parancs fájlműveleteket vagy adatfeldolgozást érint, a shell kimenete nagyon nagyra nőhet, és hasznos jelzések hozzáadása nélkül felemésztheti a kontextuskeretet. Ennek szabályozásához a modell parancsonkénti kimeneti korlátot határoz meg. A Responses API kikényszeríti ezt a korlátot, és egy korlátozott eredményt ad vissza, amely megőrzi a kimenet elejét és végét is, miközben megjelöli a kihagyott tartalmat. Például korlátozhatod a kimenetet 1000 karakterre, a megőrzött elejével és végével:

szöveg az elején ... 1000 karakter csonkolva ... szöveg a végén

A párhuzamos végrehajtás és a korlátozott kimenet együttesen gyorssá és kontextushatékonnyá teszi az ügynökciklust, így a modell a releváns eredmények alapján tud tovább érvelni, ahelyett hogy a nyers terminálnaplók elárasztanák.

Amikor a kontextusablak megtelik: tömörítés

Az ügynökciklusok egyik lehetséges problémája, hogy a feladatok hosszú ideig futhatnak. A hosszú lefutású feladatok kitöltik a kontextusablakot, ami fontos a kontextus biztosításához a fordulók és az ügynökök között. Képzelj el egy ügynököt, amint meghív egy készséget, választ kap, eszközhívásokat és érvelési összefoglalókat ad hozzá – a korlátozott kontextusablak gyorsan megtelik. Annak elkerülése érdekében, hogy az ügynök futásának folytatása közben elveszítsük a fontos kontextust, szükségünk van egy módra, amellyel megőrizhetjük a kulcsfontosságú részleteket, és eltávolíthatunk minden feleslegeset. Ahelyett, hogy a fejlesztőknek egyedi összegzési vagy állapotmegőrző rendszereket kellene tervezniük és karbantartaniuk, natív tömörítést adtunk a Responses API-hoz, amelyet úgy terveztünk, hogy összhangban legyen azzal, ahogyan a modell működik, és ahogyan betanították.

Legújabb modelljeinket arra tanítottuk be, hogy elemezzék a korábbi beszélgetési állapotot, és egy tömörítési elemet állítsanak elő, amely a kulcsfontosságú korábbi állapotot egy titkosított, tokenhatékony reprezentációban őrzi meg. A tömörítés után a következő kontextusablak ebből a tömörítési elemből és a korábbi ablak nagy értékű részeiből áll. Ez lehetővé teszi, hogy a munkafolyamatok koherensen folytatódjanak az ablakhatárokon át, még a kiterjesztett, többlépéses és eszközvezérelt munkamenetekben is. A Codex erre a mechanizmusra támaszkodik, hogy a hosszú ideig futó kódolási feladatokat és az iteratív eszközvégrehajtást a minőség romlása nélkül fenntartsa.

A tömörítés elérhető vagy beépítve a szerveren, vagy egy önálló `/compact` végponton keresztül. A szerveroldali tömörítés lehetővé teszi egy küszöbérték beállítását, és a rendszer automatikusan kezeli a tömörítés időzítését, így nincs szükség összetett kliensoldali logikára. Lehetővé tesz egy valamivel nagyobb hatékony bemeneti kontextusablakot, hogy a tömörítés előtti közvetlenül fellépő kisebb túllépéseket tolerálja, így a korláthoz közeli kérések továbbra is feldolgozhatók és tömöríthetők, ahelyett hogy elutasításra kerülnének. Ahogy a modell betanítása fejlődik, a natív tömörítési megoldás is vele együtt fejlődik minden OpenAI modellkiadás esetén.

A Codex segített nekünk a tömörítési rendszer felépítésében, miközben annak korai felhasználójaként is szolgált. Amikor egy Codex-példánynál tömörítési hibába ütköztünk, elindítottunk egy második példányt a kivizsgáláshoz. Az eredmény az lett, hogy a Codex natív, hatékony tömörítési rendszert kapott pusztán azzal, hogy dolgozott a problémán. A Codex azon képessége, hogy megvizsgálja és finomítsa önmagát, különösen érdekes részévé vált az OpenAI-nál végzett munkának. A legtöbb eszköz csak azt követeli meg a felhasználótól, hogy megtanulja használni; a Codex velünk együtt tanul.

Konténer kontextus

Most nézzük meg az állapotot és az erőforrásokat. A konténer nemcsak a parancsok futtatásának helye, hanem a modell munkakörnyezete is. A konténeren belül a modell képes fájlokat olvasni, adatbázisokat lekérdezni, és külső rendszerekhez hozzáférni a hálózati házirend-vezérlések keretein belül.

Egy diagram, amely a futásidejű konténeren belül a következőket mutatja: Fájlok, adatbázisok, készségek és egy házirend által vezérelt hálózat

Fájlrendszerek

A konténerkontextus első része a fájlrendszer az erőforrások feltöltéséhez, rendszerezéséhez és kezeléséhez. Olyan tároló- és fájl(új ablakban nyílik meg) API-kat építettünk, amelyek a modell számára térképet adnak az elérhető adatokról, és segítenek neki célzott fájlműveleteket választani a széles körű, zajos átvizsgálások végrehajtása helyett.

Gyakori anti-pattern, hogy az összes bemenetet közvetlenül az utasítás kontextusába csomagoljuk. Ahogy a bemenetek növekednek, az utasítás túltöltése költségessé válik, és a modell számára nehéz eligazodni benne. Egy jobb minta az, ha az erőforrásokat a konténer fájlrendszerében készítjük elő, és hagyjuk, hogy a modell döntse el, mit nyisson meg, elemezzen vagy alakítson át shell parancsokkal. Az emberekhez hasonlóan a modellek is jobban működnek rendezett információval.

Adatbázisok

A konténerkörnyezet második része az adatbázisok. Sok esetben azt javasoljuk a fejlesztőknek, hogy a strukturált adatokat SQLite-ként adatbázisokban tárolják, és lekérdezzék őket. Ahelyett, hogy például egy teljes táblázatot másolnál be az utasításba, adhatsz a modellnek egy leírást a táblákról – milyen oszlopok vannak, és mit jelentenek –, és hagyhatod, hogy kihúzza a szükséges sorokat.

Például, ha azt kérdezed: „Mely termékek eladásai csökkentek ebben a negyedévben?”, a modell csak a releváns sorokat tudja lekérdezni ahelyett, hogy az egész táblázatot átfésülné. Ez gyorsabb, olcsóbb, jobban skálázható nagyobb adathalmazokra.

Hálózati hozzáférés 

A tárolókörnyezet harmadik része a hálózati hozzáférés, amely az ügynök munkaterheléseinek alapvető része. Előfordulhat, hogy az ügynök munkafolyamatainak élő adatokat kell lekérnie, külső API-kat kell meghívnia, vagy csomagokat kell telepítenie. Ugyanakkor a konténerek korlátlan internet-hozzáférésének biztosítása kockázatos lehet: információkat tehet elérhetővé külső webhelyek számára, akaratlanul is érinthet érzékeny belső vagy harmadik féltől származó rendszereket, illetve megnehezítheti a hitelesítő adatok kiszivárgása és az adatkiszivárogtatás elleni védekezést.

Ezen aggályok kezelése érdekében, az ügynökök hasznosságának korlátozása nélkül, létrehoztunk hosztolt konténereket, amelyek egy sidecar kimenő proxy-t használnak. Minden kimenő hálózati kérés egy központosított szabályzati rétegen keresztül halad, amely érvényesíti az engedélyezési listákat és a hozzáférés-vezérlést, miközben a forgalom megfigyelhető marad. A hitelesítő adatokhoz tartományhatókörű titok-injektálást használunk az egressnél. A modell és a tároló csak helyőrzőket lát, míg a nyers titkos értékek a modell által látható kontextuson kívül maradnak, és csak jóváhagyott célhelyekre kerülnek alkalmazásra. Ez csökkenti a szivárgás kockázatát, miközben továbbra is lehetővé teszi a hitelesített külső hívásokat.

Szabályozott hálózati hozzáférés diagramja hozzáférési proxy-n keresztül: konténerbeállítás

Ügynök készségei

A shell parancsok hatékonyak, de sok feladat ugyanazokat a többlépcsős mintákat ismétli. Az ügynököknek minden futtatáskor újra fel kell fedezniük a munkafolyamatot—újratervezni, újra kiadni a parancsokat és újratanulni a konvenciókat—ami következetlen eredményekhez és elpazarolt végrehajtáshoz vezet. Ügynökkészségek(új ablakban nyílik meg) ezeket a mintákat újrafelhasználható, kombinálható építőelemekbe csomagolják. Konkrétan a készség egy mappacsomag, amely tartalmazza a(z) ‘SKILL.md(új ablakban nyílik meg)’-t (metaadatokat és utasításokat tartalmazó) plusz bármilyen támogató erőforrás, például API-specifikációk és UI-eszközök.

Ez a struktúra természetes módon illeszkedik a korábban leírt futásidejű architektúrához. A konténer tartós fájlokat és végrehajtási környezetet biztosít, a shell-eszköz pedig a végrehajtási felületet biztosítja. Ha mindkettő a helyén van, a modell szükség esetén shell parancsokkal (`ls`, `cat`, etc.) fel tudja fedezni a készségfájlokat, értelmezni tudja az utasításokat, és a készségszkripteket is futtatni tudja, mindezt ugyanabban az ügynök ciklusban.

API-kat(új ablakban nyílik meg) biztosítunk az OpenAI platformon a készségek kezeléséhez. A fejlesztők a készségmappákat verziózott csomagokként töltik fel és tárolják, amelyeket később a készségazonosító alapján lehet lekérni. Mielőtt elküldenéd az utasítást a modellnek, a Responses API betölti a készséget, és belefoglalja a modell kontextusába. Ez a szekvencia determinisztikus:

  1. Készségmetaadatok lekérése, beleértve a nevet és a leírást.
  2. Készségcsomag lekérése, átmásolás tárolóba és kicsomagolás.
  3. Frissítsd a modell kontextusát a készségmetaadatokkal és a tároló elérési útjával.

Amikor arról döntesz, hogy egy készség releváns-e, a modell fokozatosan feltérképezi az utasításokat, és a konténerben shell parancsokkal hajtja végre a szkripteket.

Készségbetöltési folyamatábra: nyilvántartás, csomag, futtatókörnyezet

Hogyan készülnek az ügynökök

Az összes elem összeillesztéséhez: a Responses API biztosítja a vezénylést, a shell tool biztosítja a végrehajtható műveleteket, a hosted container biztosítja a tartós futtatókörnyezeti kontextust, a skills réteg újrahasznosítható munkafolyamat-logikát biztosít, a compaction pedig lehetővé teszi, hogy egy ügynök hosszú ideig fusson a számára szükséges kontextussal.

Ezekkel az alapelemekkel egyetlen prompt egy teljes munkafolyamattá bővíthető: felfedezhető a megfelelő készség, adatok lekérése, helyi strukturált állapotba alakítása, hatékony lekérdezésük és tartós artefaktumok létrehozása. 

Az alábbi diagram bemutatja, hogyan működik ez a rendszer egy táblázat létrehozásához élő adatokból.

A kérés életciklusának diagramja: az utasítástól a tartós artefaktumokig, készségfelfedezés

A Responses API egy ügynöki feladatot hangol össze

Hozd létre a saját ügynöködet

A shell eszköz és a számítógépes környezet végponttól végpontig tartó munkafolyamatokhoz való kombinálásának részletes példájáért lásd a fejlesztői blogbejegyzésünket(új ablakban nyílik meg) és a cookbookot(új ablakban nyílik meg), amelyek bemutatják egy skill csomagolását és annak végrehajtását a Responses API-n keresztül.

Izgatottan várjuk, hogy mit hoznak létre a fejlesztők ezzel a primitívkészlettel. A nyelvi modell célja nem csupán szövegek, képek és hanganyagok generálása – továbbra is fejlesztjük a platformunkat, hogy egyre alkalmasabb legyen összetett, valós feladatok nagy léptékű kezelésére.

Szerző

Bo Xu, Danny Zhang és Rohit Arunachalam