Од модела до агента: опремање Responses API-ја рачунарским окружењем
Аутори: Bo Xu, Danny Zhang и Rohit Arunachalam
Тренутно смо у прелазу са коришћења модела, који су изврсни у појединачним задацима, на коришћење агената способних да обрађују сложене токове рада. Инструктовањем модела можете да приступите само обученој интелигенцији. Међутим, давањем рачунарског окружења моделу може се постићи много шири опсег случајева употребе, попут покретања сервиса, захтевања података из API-ја или генерисања кориснијих артефаката као што су табеле или извештаји.
Неколико практичних проблема се појављује када покушате да градите агенте: где ставити међуфајлове, како избећи лепљење великих табела у инструкцију, како дати току рада приступ мрежи без стварања безбедносне главобоље и како обрадити timeout-е и поновне покушаје без тога да сами правите систем тока рада.
Уместо да на програмере ставимо терет да граде сопствена окружења извршавања, направили смо неопходне компоненте да опремимо Responses API(отвара се у новом прозору) рачунарским окружењем за поуздано извршавање задатака из стварног света.
OpenAI Responses API, заједно са shell алатом и хостованим радним простором контејнера, осмишљен је да реши ове практичне проблеме. Модел предлаже кораке и команде; платформа их покреће у изолованом окружењу са системом датотека за улазе и излазе, опционим структурираним складиштем (као што је SQLite) и ограниченим приступом мрежи.
У овом тексту ћемо разложити како смо изградили рачунарско окружење за агенте и поделити неке ране лекције о томе како да га користите за брже, поновљивије и безбедније продукционе токове рада.
Добар ток рада агента почиње тесном петљом извршавања: модел предлаже радњу као што је читање датотека или прибављање података помоћу API-ја, платформа је извршава, а резултат се улива у следећи корак. Почећемо од shell алата — најједноставнијег начина да се ова петља види на делу — а затим ћемо обрадити радни простор контејнера, умрежавање, поново употребљиве вештине и компакцију контекста.
Да бисте разумели shell алат, прво је корисно разумети како језички модел користи алате уопште: да ради ствари као што су позивање функције или интеракција са рачунаром. Током обуке, моделу се приказују примери како се алати користе и који ефекти из тога проистичу, корак по корак. То помаже моделу да научи када да користи алат и како да га користи. Када кажемо „коришћење алата“, мислимо на то да модел у ствари само предлаже позив алата. Он не може сам да изврши позив.
Shell алат чини модел драматично моћнијим: он комуницира са рачунаром преко командне линије да би извршио широк спектар задатака, од претраживања текста до слања API захтева на вашем рачунару. Заснован на познатом Unix алатном ланцу, наш shell алат може да уради све што бисте очекивали, са услужним програмима као што су grep, curl и awk доступним одмах.
У поређењу са нашим постојећим тумачем кода, који извршава само Python, shell алат омогућава много шири опсег случајева употребе, као што су покретање Go или Java програма или стартовање NodeJS сервера. Ова флексибилност омогућава моделу да извршава сложене агентске задатке.
Сам по себи, модел може само да предлаже shell команде, али како се те команде извршавају? Потребан нам је оркестратор да преузме излаз модела, позове алате и у петљи проследи одговор алата назад моделу, све док задатак не буде завршен.
Responses API је начин на који програмери комуницирају са OpenAI моделима. Када се користи са прилагођеним алатима, Responses API враћа контролу клијенту, а клијенту је потребан сопствени harness за покретање алата. Међутим, овај API такође може одмах да оркестрира између модела и хостованих алата.
Када Responses API прими инструкцију, он саставља контекст модела: корисничку инструкцију, претходно стање разговора и упутства за алате. Да би shell извршавање радило, инструкција мора да помене коришћење shell алата и изабрани модел мора бити обучен да предлаже shell команде — модели GPT‑5.2 и новији обучени су за то. Са свим овим контекстом, модел затим одлучује о следећој радњи. Ако изабере shell извршавање, враћа једну или више shell команди сервису Responses API. API сервис прослеђује те команде окружењу извршавања контејнера, стримује назад shell излаз и уноси га у контекст следећег захтева модела. Модел затим може да прегледа резултате, изда додатне команде или произведе коначан одговор. Responses API понавља ову петљу док модел не врати завршетак без додатних shell команди.
Када Responses API извршава shell команду, одржава стриминг везу са сервисом контејнера. Како се излаз производи, API га скоро у реалном времену прослеђује моделу како би модел могао да одлучи да ли да сачека још излаза, покрене другу команду или пређе на коначан одговор.
Responses API стримује излаз shell команде
Модел може да предложи више shell команди у једном кораку, а Responses API може да их извршава паралелно користећи одвојене сесије контејнера. Свака сесија независно стримује излаз, а API мултиплексира те токове назад у структурисане излазе алата као контекст. Другим речима, петља агента може да паралелизује рад, као што су претраживање датотека, прибављање података и валидација међурезултата.
Када команда укључује радње над датотекама или обраду података, shell излаз може постати веома велики и трошити буџет контекста без додавања корисних сигнала. Да би се то контролисало, модел наводи ограничење излаза по команди. Responses API спроводи то ограничење и враћа ограничен резултат који чува и почетак и крај излаза, док означава изостављени садржај. На пример, можете ограничити излаз на 1.000 знакова, са сачуваним почетком и крајем:
текст на почетку ... 1000 знакова скраћено ... текст на крају
Заједно, паралелно извршавање и ограничен излаз чине петљу агента и брзом и ефикасном у погледу контекста, тако да модел може да настави да резонује над релевантним резултатима уместо да буде преплављен сировим логовима терминала.
Један потенцијални проблем петљи агента је то што задаци могу да трају дуго. Дуготрајни задаци попуњавају контекстуални прозор, који је важан за обезбеђивање контекста кроз потезе и кроз агенте. Замислите агента који позива вештину, добија одговор, додаје позиве алата и сажетке резоновања — ограничени контекстуални прозор се брзо попуњава. Да бисмо избегли губитак важног контекста док агент наставља да ради, потребан нам је начин да сачувамо кључне детаље и уклонимо све сувишно. Уместо да захтевамо од програмера да осмишљавају и одржавају прилагођене системе за сумирање или пренос стања, додали смо изворну компакцију у Responses API, осмишљену да буде усклађена са начином на који се модел понаша и како је обучен.
Наши најновији модели обучени су да анализирају претходно стање разговора и произведу ставку компакције која чува кључно претходно стање у шифрованој репрезентацији ефикасној у погледу токена. Након компакције, следећи контекстуални прозор састоји се од ове ставке компакције и делова претходног прозора високе вредности. То омогућава токовима рада да се кохерентно наставе преко граница прозора, чак и у продуженим вишекорачним сесијама вођеним алатима. Codex се ослања на овај механизам да одржи дуготрајне задатке кодирања и итеративно извршавање алата без пада квалитета.
Компакција је доступна или уграђено на серверу или преко засебне крајње тачке /compact. Компакција на страни сервера омогућава вам да подесите праг, а систем аутоматски управља временом компакције, елиминишући потребу за сложеном логиком на страни клијента. Она омогућава нешто већи ефективни улазни контекстуални прозор да би се толерисала мала прекорачења непосредно пре компакције, тако да захтеви близу ограничења и даље могу бити обрађени и компактирани уместо одбијени. Како се обука модела развија, тако се и изворно решење за компакцију развија са сваком новом OpenAI верзијом модела.
Codex нам је помогао да изградимо систем компакције док је истовремено служио као његов рани корисник. Када би једна Codex инстанца наишла на грешку компакције, покренули бисмо другу инстанцу да то истражи. Резултат је био да је Codex добио изворни, ефикасан систем компакције само радећи на проблему. Ова способност Codex-а да испитује и унапређује самог себе постала је посебно занимљив део рада у OpenAI-ју. Већина алата захтева само да корисник научи како да их користи; Codex учи заједно са нама.
Сада пређимо на стање и ресурсе. Контејнер није само место за покретање команди већ и радни контекст за модел. Унутар контејнера, модел може да чита датотеке, испитује базе података и приступа спољним системима под контролама мрежних политика.
Први део контекста контејнера је систем датотека за отпремање, организовање и управљање ресурсима. Изградили смо API-је за контејнере и датотеке(отвара се у новом прозору) да бисмо моделу дали мапу доступних података и помогли му да бира циљане операције над датотекама уместо да изводи широка, бучна скенирања.
Чест anti-pattern је паковање свих улаза директно у контекст инструкције. Како улази расту, препуњавање инструкције постаје скупо и моделу је тешко да се у томе снађе. Бољи образац је поставити ресурсе у систем датотека контејнера и дозволити моделу да одлучи шта да отвори, рашчлани или трансформише shell командама. Слично људима, модели боље раде са организованим информацијама.
Други део контекста контејнера су базе података. У многим случајевима, предлажемо програмерима да структуриране податке чувају у базама података као што је SQLite и да их испитују. Уместо да, на пример, копирате целу табелу у инструкцију, можете моделу дати опис табела — које колоне постоје и шта значе — и дозволити му да извуче редове који су му потребни.
На пример, ако питате: „Који производи су имали пад продаје у овом кварталу?“, модел може да испита само релевантне редове уместо да скенира целу табелу. То је брже, јефтиније и скалабилније за веће скупове података.
Трећи део контекста контејнера је приступ мрежи, суштински део оптерећења агената. Ток рада агента може морати да преузима живе податке, позива спољне API-је или инсталира пакете. Истовремено, давање неограниченог приступа интернету контејнерима може бити ризично: може изложити информације спољним веб-сајтовима, ненамерно дотаћи осетљиве интерне системе или системе трећих страна, или отежати заштиту од цурења акредитива и изношења података.
Да бисмо решили ове бриге без ограничавања корисности агената, изградили смо хостоване контејнере тако да користе sidecar излазни прокси. Сви одлазни мрежни захтеви пролазе кроз централизовани слој политика који спроводи листе дозвољених адреса и контроле приступа, а притом саобраћај остаје видљив. За акредитиве користимо убризгавање тајни ограничено на домен на излазу. Модел и контејнер виде само чуваре места, док сирове вредности тајни остају ван контекста видљивог моделу и примењују се само за одобрене одредишне тачке. Ово смањује ризик од цурења, а ипак омогућава ауторизоване спољне позиве.
Shell команде су моћне, али многи задаци понављају исте вишекорачне обрасце. Агенти морају поново да откривају ток рада при сваком покретању — поново планирају, поново издају команде и поново уче конвенције — што доводи до неуједначених резултата и узалудног извршавања. Вештине агента(отвара се у новом прозору) пакују те обрасце у поново употребљиве, компоноване грађевне блокове. Конкретно, вештина је пакет фасцикле који укључује „SKILL.md(отвара се у новом прозору)“ (са метаподацима и инструкцијама) плус све пратеће ресурсе, као што су API спецификације и UI ресурси.
Ова структура се природно пресликава на архитектуру окружења извршавања коју смо раније описали. Контејнер обезбеђује трајне датотеке и контекст извршавања, а shell алат обезбеђује интерфејс за извршавање. Када су оба присутна, модел може да открива датотеке вештина помоћу shell команди (`ls`, `cat` итд.) када му затреба, тумачи инструкције и покреће скрипте вештина све у оквиру исте петље агента.
Обезбеђујемо API-је(отвара се у новом прозору) за управљање вештинама на OpenAI платформи. Програмери отпремају и складиште фасцикле вештина као верзионисане пакете, који касније могу да се преузму по ID-ју вештине. Пре слања инструкције моделу, Responses API учитава вештину и укључује је у контекст модела. Ова секвенца је детерминистичка:
- Преузмите метаподатке вештине, укључујући име и опис.
- Преузмите пакет вештине, копирајте га у контејнер и распакујте.
- Ажурирајте контекст модела метаподацима вештине и путањом у контејнеру.
Када одлучује да ли је вештина релевантна, модел постепено истражује њене инструкције и извршава њене скрипте кроз shell команде у контејнеру.
Да све повежемо: Responses API обезбеђује оркестрацију, shell алат обезбеђује извршиве радње, хостовани контејнер обезбеђује трајни контекст окружења извршавања, вештине додају поново употребљиву логику тока рада, а компакција омогућава агенту да дуго ради са контекстом који му је потребан.
Са овим примитивима, једна инструкција може да се прошири у потпун ток рада: откријте праву вештину, прибавите податке, трансформишите их у локално структурисано стање, ефикасно их испитујте и генеришите трајне артефакте.
Дијаграм испод показује како овај систем ради при прављењу табеле из живих података.
Responses API оркестрира агентски задатак
За детаљан пример комбиновања shell алата и рачунарског окружења за потпуне токове рада, погледајте наш текст на блогу за програмере(отвара се у новом прозору) и cookbook(отвара се у новом прозору) који пролазе кроз паковање вештине и њено извршавање преко Responses API-ја.
Радујемо се да видимо шта ће програмери изградити са овим скупом примитива. Језички модели треба да раде више од генерисања текста, слика и звука – наставићемо да развијамо нашу платформу како би постала способнија за обраду сложених задатака из стварног света у великом обиму.


