Галоўная / Артыкулы

Тэст хмарнай пясочніцы Agents API: запуск CSV, праверка артэфактаў і апрацоўка збояў

Тэсціруем хмарную пясочніцу OpenAI Agents API: скрыпт на Python адпраўляе CSV, забірае артэфакты і сам правярае JSON-зводку. Збоі і кошт таксама разабраны.

Выдавец: REACTAPP.TOP9 хв чытання2177 слоў

Крыніцы: Testing the OpenAI Agents API with a Hosted Sandbox

Этот эксперымент выклікаеся з конкрэтнага пытання: чы можа сесія API агента прыняць файл, працаваць з яным у «піскулярнай асяроддзі» і вернуць рэзультат, які можна пераканацца? На яго адпаведзе невялікі запускчык на Python. Увядзенным дадзенням ёсць CSV-файл з транзакцыямі: чатыры продажы, адна вярненне грошаў і адна некорэктная строчка. Агент пішае JSON-підсумак, а прыкладна програма сама вырахоўвае адпаведны рэзультат, каб іх можна было парабіць. Усі мненні тут ўсабічныя і выклікаюцца з тэставанняя з асобістым акаунтом OpenAI у плане Pro, а таксама з дакументацыяй, якая была доступна ў тым часе.

10 сябра 2026 года API Agents ад OpenAI выйшла у публічнай бета-версіі, адкрываючы кераваныя рэшэнні Codex, якія керуюць цыклам модэлю і інструментам. Аплікацыя, якая выклікае яго, задае заведаменне і выбірае месца выканання каманд. У наступным часткі показана, як будуецца ранер. Пяць запісаных тэстаў было атрымана з ранейшай версіі. Перасмотрэны ранер дае можлівасць павторнае атрыманне рэзультатаў і зберагчэнне доказаў, і пакуль яго тэставалі толькі офлайн.

01 Як адносуюцца між сабою компаненты API Agents

Чатыры элементы павінны застацца аддзельнымі. Агент несе модэль, інструкцыі і інструменты. Сераўер з’являеся як неабавязковы рызык для вычыслення. Сэсія зберагае всю работу працы працы ў часе. Падзеі і элементы фіксуюць тое, што відбываецца зараз і што было зберажана. Одна партыя — гэта адна паўторка цыклу.

У даным эксперыменце структура працы выглядае так: працоўнік на базе Python ачынае сесію і запошчае рэзультаты, тады як OpenAI керуе інструментамі і сандбоксам для выканання задач.

Першыя пытанні дыяграматыкі стосуюцца таго, дзе павінен знаходзіцца цыкл агента. За дапамогою API Agents OpenAI адмаўляе інструменты і забезпечвае стойкасць сесій. SDK Agents запускае цыкл у вашай сабее прыкладнай програме, таму вы самі выбіраеце спосаб зберагчыцтва дадзеных і способы інтэграцыі. API Responses дае можлівасць безпосерэдньага доступу да модэля, а рэшэння працэса застаецца за вамі.

Responses таксама можа запускаць команды шэлу, таму для выканання прыкладнага расчытку у фармаце CSV не патрэбна API Agents. Працоўнік выкарыстоўвае API, каб працаваць усім шляхам, ад сесіі да готовага рэзультата. Кожны прыклад стварае новую сесію і выкананае адна задача. У такім рэжыме не тэстуецца стойкасць мнагатыповых агентаў ні ўжоў агентаў.

02 Чаму сандбокс на серверэ

Для выканання задачы патрэбны толькі месца для размішчэння файла CSV і файла Python, які генеруе агент. Не патрэбна прыватная сетка і жадныя спецыяльныя зображэнні, таму запускач выбірае openai_hosted з выключаным рэжымам сандбокса. Альтэрнатывы пераважна зміняюць таго, хто володзіць рабочай прасторам, і спосаб, якім файлы вяртаюцца.

Значэнне none означае, што няма файловай сістэмы сераўіса і няма вбудованага выканання Bash, хоць функцыі прыкладнага програма і удалённыя серверы MCP можаць яшчэ выкананы код у іншым месцы. З self_hosted OpenAI продовжае кераваць срэдой, але вы самі керуеце сераўісам выканання.

Апрацоўка выходных дадзеных таксама залежыць ад гэтага выбору. Файлы ў самахоставанай асяроддзі не публікуюцца праз API Artifacts OpenAI, нават калі агент запісвае іх у катэгорыю /workspace/outputs. Ваша прыкладная програма сама должна іх запрашваць і зберагаць.

Найважлівэйшыя настройкі, якія маюць значэнне тут

У посібніку таксама розглядаюцца зменныя сераўіса, навыкі, плагіны і каталогі можлівасцей. Тут дастатнія файлы-засевы і выключаны доступ да сэндбокса. З’ўязкі MCP на даляжыню пачынаюцца з сервіса OpenAI, таму настройкі выходу з сэндбокса не трэба вважаць правіламі для кожнага з’ўязку з інструментамі.

03 Унутры запускача CSV

Код знаходзіцца ў файле openai-agents-api/sandbox_check.py, а повны прыклад — у каталозе openai-agents-api рэпазітарыя techforum-repo ai-agents-experimentation на GitHub. Запускач генеруе значэнні у віглядзе цэлаяго калькана і зберагае свой засев. Кожны файл CSV навмысна містыць складныя кейсы: сімволы валюты, роздзелівыя знакі для тысяч, зайвыя прабелы, абяцкую вярненне і елемент N/A.

Вхідны даны seed-42

amount,note
 $981.96 ,sale
" $1,838.10 ",sale
 $42.78 ,sale
-$100.12,refund
N/A,voided
 $155.92 ,sale

Местны выкананнік адразу апрацоўвае наведаны выклад з тых цэлых значэнняў. эта ўсунуты рэзультат для гэтага прыстрою, а не адпаведзь жывага агента.

{
  "total_cents": 291864,
  "valid_rows": 5,
  "invalid_rows": 1
}

Адказаныя, які былі апраўлены

Агенту даўацца CSV-файл паўза пісьмовы завод, а адпаведны адказ ніколі не выходзіць за межы прыемніка. Сутнасць заводу: стварыць /workspace/outputs/calculate.py і запрацаваць яго з Python; запрацаваць /workspace/data.csv; адмахнуцься ад прасоў, знакоў долара і разлічнікаў тысяч у кожной суме; ігнораваць значэнні, якія не ўяўляюць ся цалымі, але залічыць абярнутыя сумы; выконваць вычысленні з вялікімі цалымі або дзесяткавымі часткамі, ніколі з двоічнымі флотамі; стварыць /workspace/outputs/summary.json з роўна трыма цалымі польмі пад назвамі total_cents, valid_rows і invalid_rows; пісаць кожны радок дадзеных толькі аднае раз і не уключаць заголовак; а таксама залічыць calculate.py як рэзультат выканання заводу.

Функцыя run_trial() ачыяе сэсію за дапамою client.beta.agents.sessions.create(), пасуючы gpt-6-astra і тыя інструкцыі як агента, а таксама запускае /workspace/data.csv за дапамою баз64-кодавання. Сераўерная супэрвізія — openai_hosted, а network.access налаштаваны як disabled. Гэта той самы шлях API, які быў выкарыстоўваны ў первінным эксперыменце.

Што пераказваецца і зберагаецца

  1. Стэжыцца за правым рыхлам. Пасля запрашэння сэсіі програма пераказвае інформацыю пра галоўны рыхл. Неудачная сэсія, неабходная дзеянне, неудачны рыхл, ануляванне і выкаранне бюджэту на пераказы кожны раз даюць адны разлічныя рэзультаты.
  2. Запрашуюцца оба патрэбныя файлы. Кожны з summary.json і calculate.py паўтараецца па шляху і ідэнтыфікатору рыхла, таму файлы, якія не ўсёродзе або застарэлі, ніколі не можуць быць прынятыя.
  • Параболіцуйце падзеўку. Толькі тры цэлыя поля павінны падаць у спадчыну ад местнага кансэльтанта: загальная сума ў цэнтах, колькасць вярных рэядоў і колькасць невярных рэядоў. Парсер адхоўляе дадатковыя, відсутнія, дуплікатныя, булевыя, флотатныя і нескончаныя значэнні.
  • Зберагаюце доказы. Для кожнага тэсту працоўнік зберагае вхідныя даны, апэктыўную адпаведзь, запыт, найновейшую сесію, запісы раундоў, зберажаныя элементы, метаданы артыфакта, завантажаныя файлы і файл з рэзультатам, які машыны можаюць парсаваць.
  • У падрабніцы пра артыфакты пояснюецца, як файлы прыяўляюцца да раундоў, а падрабніца пра стварэнне адзорнасці раскрывае способы аналізу дзеяння команд. Автаматызаваныя перакананні паўтараюць, што файлы існуюць і структураваны выходны дадзеныя ёсць точнымі. Зберажаны скрыпт і элементы таксама трэба пераглянуць, прытымкі якіх-небудзь стверджэнняў пра спосаб аблікавання. Завантажаны код ніколі не выкананы на машыне прыемніка.

    04 Чым палягаюць пяць зафіксаваных тэстоў

    Першыя працэўнікі зяўвілі сваія рэзультаты 15 сябра 2026 года, пры чым у кожным тэсце выкарыстоўваліся насцярожна адбіраныя CSV-файлы. Цыфры былі взяты з тых працэўнікаў. гэта абсерваціі з боку кліента, зробленыя пасля адпаведнай адпаведзі, пры чым часы включаюць толькі час стварэння сесіі, а не час завантажэння дадзеных.

    Усе пяць загальных показнікаў, зафіксаваных агентам, паспаўляліся з базовымі цыфрамі. Для пераканання выкарыстоўвалася арытметыка з плаваючай кампаўнай з тольерантнасцю менш чым у адын цэнт. Запісы часу паказваюць момент, калі першы запіт паводзіць да стварэння сесіі, таму ў яных не відображаецца ні точны час выканання на серверэ, ні загальная затрымка. Пяць успешных тэстаў опісваюць тое, што адбылася пад час адной маленькай працэўнікі, і нічога не гавораць пра загальны рэгламент надзяймальнасці.

    Што змініў аптэнаваны працэўнік

    Парадынгаваны працоўнік павтарае той жа маленькі эксперымент, але з болей строгым ваказаннем пра успех. Целыя канцы і колькасць роўнаў параглядаюцца адносна точна, кожны вхідны даны зберагаецца, а створаны скрыпт і історыя сесіі таксама захоўваюцца. Запіс часу пачынаецца ўжо да стварэння сесіі, пры чым завантажэнне і перакананне фіксуюцца окрэма. Восьць тэстаў у автономным рэжыме пераканваюцца ў правільнасці гэтых пераглядоў, а паказаны вышэ цыфры яшчэ належаць да пачатковага працы ў рэальным часе.

    05 Адрабатка неудач

    Цыкл запытанняў выкарыстоўвае явныя тайма-ауты HTTP, выключае аўтаматычныя праказы і пераканваецца ў застатку бюджэту спробаў між запытамі. Гэты бюджэт не ёсць жорсткім таймерам завершэння процэса. Проба фіксуе свой рэзультат прычым перад тым, як праказваць чыстку, і правільная адпаведзь у поўнай зусіллі з неудачной чысткай таксама дае ненулявы код выходу.

    Сесія можа мець чатыры статусы: idle, in_progress, requires_action і failed. Канфігурацыя задання CSV не выкорыстоўвае жадных функцый прыкладнення, таму, як толькі патрабуецца якая-небудзь дзеянне, працоўнік зберагае гэты статус і адправляе яго на перагляд, замест таго каб чакаць безканечна.

    Стрымы ў рэальным часе не перэглядаюць заўтрыманыя зместы. Ёсць можлівасць паўнасці відобразлення прыкладнення па-новаму: павтарна падключыцца, зберагаць у буфер заўтрыманыя зместы і адзначыць збераганыя элементы сесіі, пасля чаго супаруваць іх па ID. Чырвоне гэта вярнуе відобразлення збераганай работы, але не гарантуе, што перарваны каманды быў выкананы успешна.

    Адзін падобны інцыдэнт заслуговае на адзін пункт. У паказаных ранейшых апавяданнях апошніх расследаванняях было опісана сітуацыя, калі сесіі застаўаліся нерухомымі без жадных помітных пераходаў, а у апавяданні OpenAI пра 14 сябра 2026 года пасля 13:30 за таймам Тыхага акваторыя таго дня было зафіксавана запазджэнне або блаканне пачатку пераходаў, якія пазней былі пазначаны як рашаныя. Сімптамы збігаюцца, але без доказаў на рэжыме запытку яны не падтверджуюць прычыну кожнага локальнага абякання. Пораўняйце статус службы з захаванымі сесіямі і памылкамі пераходаў. Програма-звяршальнік фіксуе неудачныя сесіі, неудачныя пераходы, відсутныя элементы, некарэктныя падсумкі і неправільныя рэзультаты як адзінаковыя наследкі, і ён больш не спрыймае незазначаны пераход як доказ вярнення старага інцыдэнта.

    Калі рэзультаты стануць доступныя і будуць запісаны, калі работа не завершана, адпрацоўвальнік просі прызначыць ануляцыю і прабуе выдаліць сесію, пры чым мае права на тры спробы, калі выдаленне стварае суперсечнасці. Будзь-якія бягунковыя памылкі залішаюцца задапісанымі ў result.json. Калі стварэнне сесіі зазнае няудачы пры тым, калі ID ўжо не быў вярнут, выдаленне па ID не можа адбыцца, і адпрацоўвальнік фіксуе гэтую неяснасць.

    Рабочая прастора, якая розмешчана на серверах, можа выйсці з дэйнаўства праз гадзіну без актывацыі чы стварэння паказакоў жыцця, а підключаныя сандбоксы отрымаюць такія паказакі між раундамі. Опублікованыя артыфакты застаюцца актуальнымі пасля выйшчы з дэйнаўства асяроддзя, але неабходныя выходныя даны трэба запісаць перад выдаленнем сесіі.

    06 Калі варта вікорыстоўваць сае вычысловыя рэсурсы

    Пунктавая лінія на большэй схеме архітэктуры стосуецца толькі самастаўленых вычыльнікаў, а эксперымент з CSV застаецца на вычыльніках, якія адпраўляе OpenAI. Самастаўленне вычыльнікаў становіцца выгодным, калі задача выклікае патрэбу ў конкрэтным зображэнні, доступе да прыватной сеткі чыста да машынах, якія ужо ў вашай флотэлі. У гэтым сераўысе вы запускаеце codex exec-server, перэдаючы яму удалённы URL і ID сераўыса, якія прыходзяць разам з обмежаным ключам, прызначаным для гэтага сераўыса, а шырэйшы ключ аплікацыі павінен застацца за межамі гэтага сераўыса.

    Далей аплікацыя несе адпаведнасць за абеспечэнне рэсурсаў, ўтрыманне дадзенняў, паўтарныя з’яўлення і закінчанне працы. Адменаванне сесіі ў OpenAI не зупіняе вычыльнікі провайдэра, а паўторны выкарыстоўванне ID сераўыса не вяртае файлы на заменную машыну.

    Самастаянне не робіць усю службу локальной. Чынны API Agents зберагае стан сэсіі, падтрымляе рэзідэнцію дадзейнаў у США і не падтрымляе прынцып нулевага зберагання дадзейнаў.

    Косцы ўключаюцца ў прыняцця рашэння. Токены модэляў і вычыслювальныя рэсурсы, якія знаходзяцца на хосты, выклікаюцца окрэма; цены за контэйнеры залежнаць ад колькасці памяці і інтэвалу выклікання, таму неабходна фіксаваць рэальную ступень выкарыстоўвання і не ацэніваць суму за прыкладны перыад толькі на адной падставе спытаных секунд.

    07 Адкліканне эксперымента

    Яго адміністрацыя касаецца рэальных грошаў, адтолькі ёй трэба аддзельна выклікваныя плата за выкарыстоўванне API у вобразе крэдытавання або актыўная угода на оплату API, а прабны перыяд у версіі Pro не пакрывае такія выклікі. Програма для запуску вызывае GPT-6 Astra (gpt-6-astra), таму большая колькасць пробных запускаў або дугі час працы можа шыбка выкарыстаць крэдыты, а час працы у хоставаным сэндбоксе дадае допаможныя зборы за вычысленні. Спачатку зрабіце пробны запуск, паглядзіце на панель керування выкарыстоўванням і прачытайце сторанку з цэнамі Astra, прычым перш чым запускаць больш,.

    Унутры рэпазітарыяў створыце вяртую срэду і установіце неабходны SDK. Патрэбны ключ API дапрацоўкі, які дае права на чытанне і запіс сэсій, а таксама на запуск інферэнціі модэля. Кожны пробны запуск выкарыстоўвае токены жываго API і рэсурсы хоставанага вычыслення.

    cd openai-agents-api
    python -m venv .venv
    source .venv/bin/activate
    python -m pip install -r requirements.txt
    export OPENAI_API_KEY="your-key"
    python sandbox_check.py --seed 42       # Start with one trial
    # python sandbox_check.py 5 --seed 42   # Optional: five trials
    

    Першыя запаведзінні выконваюць адзін тэст з сэдам 42, а неабяжныя запаведзінні з пяцьма тэстамі выконваюць сэды 42 да 46. Рэзультаты зберагаюцца ў новай дырэктарыі runs/<timestamp>, пры чым кожны тэст стварае адзін папку. Значэнне SDK піна — openai==3.13.0, а у дасяглівай документацыі опісваюцца файлы выходных даных і опцыі запаведзінняў.

    trial-001/
      data.csv           # Exact input
      expected.json      # Local reference
      request.json       # Submitted configuration
      session.json       # Latest retrieved session
      turns.json         # Turn status, timestamps, usage
      items.json         # Saved messages and tool calls
      artifacts.json     # Published file metadata
      summary.json       # Downloaded result
      calculate.py       # Downloaded agent script
      result.json        # Checks, timing, errors, cleanup
    

    У разы ўспеху застаюцься всі файлы, якія былі атрыманы да момента неудачы. Код выходу 0 выкалікае неабяжнае пераканальванне рэзультатаў і павінная быць стварэнная выдаленне сесіі пасля кожнай спробы. Чым перадаць працэс на местныя сэрверы без жадных вызоў API:

    python -m unittest discover -s . -p test_sandbox_check.py -v
    

    Без адаптавання да сеткі, набор тэста пераблікае працэю матэматычных алгорытмам, выходныя даныя з несправным фарматам, застарэлыя або відсутныя артыфакты, сесіі і раунды, якія збіваюцца, неабяжлівыя дзеянні, памылкі запытоў, карацеўнічнае кераванне і проблемы з чысткаваннем. Адрэдагаваны варыянт запускача яшчэ не быў перакананы ў супараднасці з рэальным сервісам.

    Постаянная цэнна праекту — гэта можлівасць павтаральна пераглядаць, як API Agents пераводзіць даныя з файлоў у артыфакты. Завершаны раунд ёсць толькі адным сігналам, тады як завантажаныя і незалежна перакананыя выходныя даныя ёсць справжнім тэстам апрацоўкі. Дакументацыя была пераканана 15 сябра 2026 года, прыкладныя значэнні взятыя з первісных експерыментаў без новых памерэнняў у рэальных умовах, а пасункі на нарадчыкі опісваюць ныякі бета-варыянт, які можа змяніцца.