[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"portal-settings:stajic:sr":3,"public-menus:all":38,"post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:sr":205,"related:post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:sr:1":2874},{"statusCode":4,"data":5,"message":37},200,{"tenantId":6,"lang":7,"defaultLang":8,"siteUrl":9,"contactEmail":10,"brandName":11,"logoUrl":12,"siteName":11,"siteDescription":13,"ogImage":10,"robotsIndex":14,"socialLinks":10,"reservedSlugs":10,"seoPolicy":15},"stajic","sr","de","https:\u002F\u002Fstajic.de",null,"Stajic Platform","\u002FLogo_Planet.svg","Stajic Portal",true,{"branding":16,"relatedContent":17,"crossDomainLinks":18},{"logoUrl":12},{"enabled":14},[19,22,25,28,31,34],{"url":20,"label":21,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Ffigure.rocks","figure.rocks",{"url":23,"label":24,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Floving.rocks","loving.rocks",{"url":26,"label":27,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.com","bazify.com",{"url":29,"label":30,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.de","bazify.de",{"url":32,"label":33,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.at","bazify.at",{"url":35,"label":36,"isActive":14,"showInFooter":14,"includeInSameAs":14},"https:\u002F\u002Fbazify.ba","bazify.ba","Portal settings resolved",[39,45],{"id":40,"name":41,"location":42,"isActive":14,"isDefault":43,"items":44},1,"main-navigation","header",false,[],{"id":46,"name":47,"location":48,"isActive":14,"isDefault":14,"items":49},4,"main-menu","sidebar",[50,66,79,93,103,118,133],{"id":51,"title":52,"url":60,"target":61,"icon":62,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":64,"portfolioId":10,"children":65},"item-18",{"de":53,"en":54,"es":55,"fr":56,"it":54,"ru":57,"sr":58,"zh":59},"Startseite","Home","Inicio","Accueil","Главная","Почетна","首页","\u002Ffull-stack-web-developer-munich-performance-seo-and-maintainable-builds","_self","i-lucide-home","page",111,[],{"id":67,"title":68,"url":75,"target":61,"icon":76,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":77,"portfolioId":10,"children":78},"item-22",{"de":69,"en":69,"es":70,"fr":69,"it":71,"ru":72,"sr":73,"zh":74},"Vision","Visión","Visione","Видение","Визија","想象","\u002Fueber-uns-webdesign-muenchen-webaplikation","i-lucide-eye",113,[],{"id":80,"title":81,"url":89,"target":61,"icon":90,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":91,"portfolioId":10,"children":92},"item-19",{"de":82,"en":83,"es":84,"fr":83,"it":85,"ru":86,"sr":87,"zh":88},"Leistungen","Services","Servicios","Servizi","Услуги","Услуге","服务","\u002Fservices-dienstleistungen-muenchen","i-lucide-wrench",116,[],{"id":94,"title":95,"url":99,"target":61,"icon":100,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":101,"portfolioId":10,"children":102},"item-23",{"de":96,"en":96,"es":96,"fr":96,"it":96,"ru":97,"sr":97,"zh":98},"Blog","Блог","博客","\u002Fblog","i-lucide-book-open",112,[],{"id":104,"title":105,"url":114,"target":61,"icon":115,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":116,"portfolioId":10,"children":117},"item-32",{"de":106,"en":107,"es":108,"fr":109,"it":110,"ru":111,"sr":112,"zh":113},"Neue Technologien","New Technologies","Nuevas tecnologías","Nouvelles technologies","Nuove tecnologie","Новые технологии","Нове технологије","新技术！","\u002Fneue-webtechnologien","i-lucide-sparkles",122,[],{"id":119,"title":120,"url":129,"target":61,"icon":130,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":131,"portfolioId":10,"children":132},"item-20",{"de":121,"en":122,"es":123,"fr":124,"it":125,"ru":126,"sr":127,"zh":128},"Kontakt","Contact us!","Contacto","Contact","Contatto","Контакт","Контактирајте нас","联系我们！","\u002Fcontact","i-lucide-mail",115,[],{"id":134,"title":135,"url":144,"target":61,"icon":145,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":146,"portfolioId":10,"children":147},"item-21",{"de":136,"en":137,"es":138,"fr":139,"it":140,"ru":141,"sr":142,"zh":143},"Unsere Arbeit","Our Work","Nuestro trabajo","Nos réalisations","I nostri lavori","Наши работы","Наши радови","文件夹","\u002Fportfolio","i-lucide-briefcase",114,[148,161,175,181,193],{"id":149,"title":150,"url":144,"target":61,"icon":159,"isActive":14,"type":63,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":146,"portfolioId":10,"children":160},"item-24",{"de":151,"en":152,"es":153,"fr":154,"it":155,"ru":156,"sr":157,"zh":158},"Alle Projekte","All Projects","Todos los proyectos","Tous les projets","Tutti i progetti","Все проекты","Сви пројекти","所有项目","i-lucide-grid-3x3",[],{"id":162,"title":163,"url":171,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":174},"item-29",{"de":164,"en":165,"es":166,"fr":167,"it":168,"ru":169,"sr":170,"zh":143},"Local Roots, Global Reach","Local Roots - Global Reach","Empresa local ","Entreprise locale","Azienda locale","Местная компания","Локално предузеће глобално тржиште","\u002Fportfolio\u002Flocal-roots-global-reach-communication-media-systems-for-modern-business","i-lucide-folder","custom",[],{"id":176,"title":177,"url":179,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":180},"item-28",{"de":178,"en":178,"es":178,"fr":178,"it":178,"ru":178,"sr":178,"zh":178},"Solr Suggester","\u002Fportfolio\u002Fsolr-fuzzy-suggester-und-solr-infix-suggester-abfrage-ueber-ajax-und-filterung",[],{"id":182,"title":183,"url":191,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":192},"item-27",{"de":184,"en":185,"es":186,"fr":187,"it":188,"ru":189,"sr":190,"zh":185},"Firmenwebseite SEO","Company Website SEO","Sitio web corporativo SEO","Site web d’entreprise SEO","Sito web aziendale SEO","Корпоративный сайт SEO","Пословна веб-страница SEO","\u002Fportfolio\u002Fseo-sem-branding-mobile-webseite-muenchen",[],{"id":194,"title":195,"url":203,"target":61,"icon":172,"isActive":14,"type":173,"productId":10,"categoryId":10,"shopCategoryId":10,"articleId":10,"pageId":10,"portfolioId":10,"children":204},"item-31",{"de":196,"en":197,"es":198,"fr":199,"it":200,"ru":201,"sr":202,"zh":197},"Digitalisierungsportal","Digitalization Portal","Portal de digitalización","Portail de numérisation","Portale di digitalizzazione","Портал цифровизации","Портал за дигитализацију","\u002Fportfolio\u002Fdigitalisierungsportal-archiv-museum-bibliothek-ead-lido-mets-mods",[],{"statusCode":4,"data":206,"message":2873},{"id":207,"title":208,"slug":209,"content":210,"contentJson":211,"excerpt":1315,"featuredImage":1316,"featuredImageAlt":1317,"featuredImageCaption":10,"featuredImageTitle":10,"featuredImageCopyright":10,"featuredImageAuthor":10,"featuredImageSourceUrl":10,"featuredImageLicense":10,"featuredImageIsAiGenerated":43,"status":1318,"publishedAt":1319,"createdAt":1320,"updatedAt":1321,"seoLocalePaths":1322,"categories":1331,"author":1344,"translations":1349},"474","Migracija sa OpenAI Agents SDK na Agents API: Šta se zapravo menja arhitektonski?","migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Sadržaj\">\u003Cstrong class=\"editorjs-toc__title\">Sadržaj\u003C\u002Fstrong>\u003Col class=\"editorjs-toc__list editorjs-toc__list--depth-0\">\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-6\" class=\"editorjs-toc__link\">Migracija je sa petlje koju poseduje aplikacija na upravljani harness\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">Mapa migracije runtime granice\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Šta može konceptualno da se migrira bez promene vlasništva\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Šta ne treba migrirati jedan-na-jedan\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Korak 1 — Razdvojite stanje domena od stanja sesije agenta\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Korak 2 — Pretvorite način razmišljanja pokretača u način razmišljanja sesije i događaja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Korak 3 — Redizajnirajte funkcijske alate oko potrebnih radnji\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Korak 4 — Odlučite gde treba da se odvija izvršavanje\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Korak 5 — Zamenite implicitni oporavak eksplicitnim upravljanjem životnim ciklusom\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Korak 6 — Ponovo izgradite observabilnost oko nove granice traga\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Korak 7 — Sačuvajte evaluacije pre promene okruženja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">Test dokaza migracije\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Šta meriti tokom migracije\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Kada još ne treba migrirati\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Kada migracija postaje strateški važna\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Šta bi promenilo ovaj odgovor?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Ograničenja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Zaključak\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">Često postavljana pitanja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Pojmovnik\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Primarni izvori i dodatno čitanje\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">Migracija je sa petlje koju poseduje aplikacija na upravljani okvir\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">Mapa migracije granica izvršavanja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Šta može konceptualno da se migrira bez promene vlasništva\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Šta ne treba migrirati jedan-na-jedan\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Korak 1 — Odvojite domensko stanje od stanja sesije agenta\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Korak 2 — Pretvorite mentalni sklop runner-a u mentalni sklop sesije i događaja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Korak 3 — Redizajnirajte function alate oko potrebnih radnji\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Korak 4 — Odlučite gde treba da se odvija izvršavanje\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Korak 5 — Zamenite implicitni oporavak eksplicitnim upravljanjem životnim ciklusom\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Korak 6 — Ponovo izgradite observabilnost oko nove granice traga\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Korak 7 — Sačuvajte evaluacije pre promene runtime-a\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">Test dokaza migracije\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Šta meriti tokom migracije\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Kada još ne treba migrirati\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Kada migracija postaje strateški važna\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">Šta bi promenilo ovaj odgovor?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Ograničenja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Zaključak\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">Često postavljana pitanja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Pojmovnik\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Primarni izvori i dodatno čitanje\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Cp>Migracija sa OpenAI Agents SDK na Agents API nije samo preimenovanje importa. Menja se osnovna arhitektonska granica: SDK pokreće agent petlju unutar vaše aplikacije, dok Agents API pokreće upravljani Codex harness i trajnu sesiju na OpenAI strani. Pitanje migracije stoga nije „Koje klase se mapiraju na koje endpoint-e?” već „Koje odgovornosti runtime-a prelaze granicu, koje ostaju u našoj aplikaciji i koje treba redizajnirati?”\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--info my-6 rounded-xl border p-5 border-blue-300 bg-blue-50 dark:border-blue-900 dark:bg-blue-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Direktan odgovor\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Prava migracija sa Agents SDK na Agents API menja vlasništvo nad runtime-om.&lt;\u002Fstrong&gt; Vaša konfiguracija agenta koja se može ponovo koristiti i dalje može da sadrži model, instrukcije i alate, ali petlja, trajna sesija, orkestracija, sažimanje konteksta i oporavak prelaze ka upravljanom Agents API runtime-u. Vaša aplikacija treba da zadrži domensko stanje, autorizaciju, poslovna pravila, implementacije funkcija i logiku revizije izvan agent sesije. Tretirajte migraciju kao redizajn granice, a ne kao mehaničku konverziju koda.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Caside class=\"editorjs-callout editorjs-callout--warning my-6 rounded-xl border p-5 border-amber-300 bg-amber-50 dark:border-amber-900 dark:bg-amber-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Aktuelno na dan 25. septembar 2026.\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">OpenAI trenutno označava Agents SDK kao &lt;strong&gt;feature complete&lt;\u002Fstrong&gt; i preporučuje Agents API za nove agent aplikacije. Agents API je u javnoj beta fazi. Postojeće SDK aplikacije ostaju podržane, a trenutna migracija nije automatski neophodna.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Caside class=\"editorjs-callout editorjs-callout--note my-6 rounded-xl border p-5 border-gray-300 bg-gray-50 dark:border-gray-700 dark:bg-gray-900\u002F40\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">O modelu migracije\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Mapa migracije runtime granice i test dokaza migracije u ovom članku su praktični arhitektonski alati, a ne zvanični OpenAI okviri za migraciju. Oni su izvedeni iz trenutnih razlika u runtime-u koje dokumentuje OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-6\">Migracija je sa petlje koju poseduje aplikacija na upravljani harness\u003C\u002Fh2>\n\u003Cp>U Agents SDK, jedno pokretanje je potez na nivou aplikacije. SDK runner poziva model, pregleda izlaz, izvršava alate, prati handoff-ove i nastavlja dok ne dođe do tačke zaustavljanja. Vaš proces hostuje tu petlju i stoga poseduje njen životni ciklus.\u003C\u002Fp>\n\u003Cp>U Agents API, OpenAI pokreće harness. Sesija je trajna instanca konfiguracije agenta koja prihvata zadatke, proizvodi događaje, može da se pauzira radi potrebnih radnji i može da se nastavi tokom vremena. OpenAI upravlja sesijama, orkestracijom, sažimanjem konteksta i oporavkom; vaša aplikacija šalje posao, obrađuje function alate, prima događaje i opciono upravlja self-hosted okruženjem za izvršavanje.\u003C\u002Fp>\n\u003Cp>Taj prelaz vlasništva je migracija. Sve ostalo — API sintaksa, šeme alata, obrada događaja, ID-ovi sesija — proizlazi iz toga.\u003C\u002Fp>\n\u003Ch2 id=\"section-10\">Mapa migracije runtime granice\u003C\u002Fh2>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Aspekt\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Agents SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Cilj migracije na Agents API\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agent petlja\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pokreće se u vašoj aplikaciji kroz SDK runner\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pokreće se u upravljanom Codex harness-u\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Definicija agenta koja se može ponovo koristiti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agent objekat u kodu aplikacije\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Sačuvana ili inline konfiguracija agenta sa modelom, instrukcijama i alatima\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Kontinuitet razgovora \u002F rada\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK strategija sesije, istorija, nastavljanje rezultata ili skladištenje u aplikaciji\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trajna Agents API sesija\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Izvršavanje alata\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK koordinira pozive alata u vašem runtime-u\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Harness zahteva pozive funkcija; vaša aplikacija vraća rezultate\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Upravljanje kontekstom\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Vaš runtime \u002F SDK strategija sesije\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Upravljani kontekst sesije, sažimanje i oporavak, plus granice podataka vaše aplikacije\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Handoff-ovi \u002F specijalisti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK primitivi za orkestraciju\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ponašanje harness-a \u002F podagenata u Agents API-ju; ne pretpostavljajte semantiku jedan-na-jedan\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Okruženje za izvršavanje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Vaš runtime aplikacije ili okruženje specifično za alat\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Opciono OpenAI-hosted ili self-hosted okruženje povezano sa sesijom\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Striming\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK striming iz pokretanja\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tok događaja Agents API sesije\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Asinhroni životni ciklus\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Obično njime upravlja aplikacija oko SDK pokretanja\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Nativna stanja sesije, asinhroni potezi i webhook-ovi\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Praćenje \u002F observabilnost\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents SDK praćenje i logovi aplikacije\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Logovi Agents sesije, događaji, potezi, pozivi alata, podagenti i trace-ovi koji se mogu izvesti\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Oporavak\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Odgovornost aplikacije\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Upravljani oporavak harness-a\u002Fsesije plus oporavak u vlasništvu aplikacije za eksterne sisteme i self-hosted okruženja\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-12\">Šta može konceptualno da se migrira bez promene vlasništva\u003C\u002Fh2>\n\u003Cp>Nekoliko koncepata aplikacije čisto preživi migraciju iako se njihova reprezentacija menja. Modeli, instrukcije, JSON-schema definicije funkcija, MCP pristup, opisi alata i zahtevi za strukturisanim izlazom i dalje su stvar konfiguracije agenta.\u003C\u002Fp>\n\u003Cp>OpenAI model konfiguracije Agents API-ja eksplicitno definiše agenta kroz model, instrukcije, alate, rezonovanje i ponašanje izlaza. Function alati ostaju kod aplikacije: harness zahteva poziv funkcije, a vaš handler vraća rezultat. OpenAI takođe napominje da implementacije funkcija koje se koriste sa Responses API-jem mogu da se ponovo koriste sa tokom Agents API sesije.\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--success my-6 rounded-xl border p-5 border-emerald-300 bg-emerald-50 dark:border-emerald-900 dark:bg-emerald-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Dobar kandidat za migraciju\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Čista poslovna funkcija kao što je &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt; ne bi trebalo da zna da li je pozivalac Agents SDK ili Agents API. Zadržite njenu domensku logiku iza stabilnog interfejsa aplikacije i migrirajte samo adapter okrenut agentu.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-16\">Šta ne treba migrirati jedan-na-jedan\u003C\u002Fh2>\n\u003Cp>Opasan obrazac migracije je ponovno stvaranje svake SDK runtime apstrakcije unutar Agents API-ja. To može da dovede do toga da plaćate za upravljani harness dok i dalje vodite senoviti harness u svojoj aplikaciji.\u003C\u002Fp>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Pretpostavka iz SDK ere\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Zašto je direktno kopiranje rizično\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Pitanje migracije\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Petlja aplikacije poseduje svaki nastavak\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API već poseduje harness petlju\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koja logika nastavka je logika proizvoda, a koja treba da pređe u upravljanu sesiju?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Lokalni objekat sesije je primarni mehanizam kontinuiteta\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API sesije su trajni resursi sa sopstvenim životnim ciklusom\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koje stanje pripada sesiji, a koje bazi podataka proizvoda?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Svaki prekid se obrađuje sinhrono\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API potezi su asinhroni i mogu da izlože action_required stanja\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koje radnje zahtevaju webhook-ove, workere, idempotentnost i nastavljive handlere?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Izvršavanje svih alata se dešava tamo gde se pokreće SDK proces\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Function handler-i i okruženja za izvršavanje mogu biti odvojeni\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gde bi svaki alat zapravo trebalo da se izvršava?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK trace je operativna vremenska linija\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API izlaže događaje sesije, poteze i upravljane trace-ove\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koji podaci revizije na nivou aplikacije i dalje zahtevaju sopstveni zapis?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Handoff objekat se direktno mapira na hostovani model podagenta\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Semantika runtime-a može da se razlikuje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koje vlasništvo vidljivo korisniku i ponašanje specijalista mora da se očuva, a ne samo stara struktura klasa?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-19\">Korak 1 — Razdvojite stanje domena od stanja sesije agenta\u003C\u002Fh2>\n\u003Cp>Pre nego što dirnete API pozive, klasifikujte stanje koje vaša SDK aplikacija trenutno nosi. Neka stanja postoje samo da bi se razgovor agenta odvijao. Druga stanja su poslovna istina: korisničke dozvole, status projekta, podaci o porudžbini, odobrenje radnog toka, evidencija klijenata, verzije dokumenata, stanje politike ili konfiguracija aplikacije.\u003C\u002Fp>\n\u003Cp>Druga kategorija ne bi trebalo da postane zavisna od sesije Agents API-ja. Trajna sesija je korisna za kontinuitet agenta; ona nije zamena za izvor istine vašeg proizvoda. Ako sesija nestane, istekne, bude ponovo izgrađena ili promeni implementaciju, vaša aplikacija i dalje mora da zna šta je istina.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Test smeštanja stanja\u003C\u002Fh3>\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left dark:border-gray-700 dark:bg-gray-900\">\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Tip stanja\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Preferirani vlasnik\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Razlog\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Kontinuitet razgovora\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Poslovna istina\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Trajni artefakt\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Radno privremeno stanje\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-23\">Korak 2 — Pretvorite način razmišljanja pokretača u način razmišljanja sesije i događaja\u003C\u002Fh2>\n\u003Cp>SDK aplikacije često razmišljaju u smislu pozivanja run i primanja rezultata. Agents API razmišlja u smislu trajne sesije čiji potezi mogu da se izvršavaju asinhrono. Poruka sesiji koja miruje pokreće rad; poruka tokom aktivnog poteza može da ga usmeri. Napredak stiže putem strimovanja ili webhook-ova.\u003C\u002Fp>\n\u003Cp>Ovo utiče na arhitekturu aplikacije. Dugotrajni produkcioni rad ne bi trebalo da zavisi od toga da jedan HTTP zahtev ostane živ. Vaš proizvod zahteva stabilne identifikatore sesije, trajnost životnog ciklusa, verifikaciju webhook-ova, idempotentne rukovaoce i način da se uskladi trenutno stanje sesije nakon ponovnog pokretanja procesa.\u003C\u002Fp>\n\u003Ch2 id=\"section-26\">Korak 3 — Redizajnirajte funkcijske alate oko potrebnih radnji\u003C\u002Fh2>\n\u003Cp>Funkcijski alati ostaju važna granica aplikacije. Funkciju i njenu JSON šemu definišete u konfiguraciji agenta. Kada harness-u zatreba funkcija, sesija može da uđe u stanje koje zahteva radnju. Vaša aplikacija preuzima potrebnu radnju, izvršava poslovnu logiku i vraća rezultat.\u003C\u002Fp>\n\u003Cp>To znači da implementacija funkcije treba da bude bezbedna za nastavljanje. Webhook može biti isporučen dok drugi radnik obrađuje. Mrežni kvar može nastati nakon spoljnog efekta, ali pre nego što se rezultat vrati. Migracija je stoga dobar trenutak da se konsekventnim alatima dodaju ID-ovi poziva, idempotentni ključevi, eksplicitna autorizacija, politike tajm-auta i revizorski zapisi.\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--warning my-6 rounded-xl border p-5 border-amber-300 bg-amber-50 dark:border-amber-900 dark:bg-amber-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Zamka migracije alata\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Nemojte tretirati poziv funkcije iz upravljanog harness-a kao autorizaciju za izvršenje radnje. Harness odlučuje &lt;em&gt;šta želi da pozove&lt;\u002Fem&gt;; vaša aplikacija i dalje odlučuje da li trenutni korisnik, sesija i poslovno stanje dozvoljavaju tu radnju.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-30\">Korak 4 — Odlučite gde treba da se odvija izvršavanje\u003C\u002Fh2>\n\u003Cp>Agents API razdvaja upravljani harness od okruženja za izvršavanje. Agent može da radi bez namenskog okruženja, u OpenAI sandbox-u koji je hostovan, ili putem samostalno hostovanog okruženja povezanog sa sesijom.\u003C\u002Fp>\n\u003Cp>Ovo stvara odluku o migraciji koju SDK aplikacije možda nikada nisu eksplicitno donele: koji kod treba da se izvršava kao funkcija aplikacije, koji kod pripada sandbox-u i koji radni zadaci zahtevaju infrastrukturu koju kontrolišete?\u003C\u002Fp>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Potreba\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Verovatna granica\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pozivanje postojećeg internog servisa kroz kontrolisanu poslovnu logiku\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Funkcijski alat kojim upravlja vaša aplikacija\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pokretanje izolovanog koda ili rad sa privremenim datotekama bez privatne infrastrukture\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">OpenAI hostovano okruženje\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pristup resursima privatne mreže, prilagođenom sistemskom softveru ili kontrolisanom lokalnom računarstvu\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Samostalno hostovano okruženje\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trajno čuvanje prihvaćenih artefakata proizvoda\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Skladište u vlasništvu aplikacije, ne samo fajl sistem sandbox-a\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Izvršavanje poslovnog sporednog efekta sa visokim uticajem\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Funkcija aplikacije sa kontrolama autorizacije i revizije\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-34\">Korak 5 — Zamenite implicitni oporavak eksplicitnim upravljanjem životnim ciklusom\u003C\u002Fh2>\n\u003Cp>Upravljani harness obezbeđuje oporavak na nivou sesije, ali vaša aplikacija i dalje poseduje svaku spoljnu zavisnost oko nje. Samostalno hostovana okruženja zahtevaju pripremu, ponovno povezivanje i gašenje. Rukovaoci funkcija mogu da ne uspeju. Webhook-ovi mogu biti ponovo pokušani. Stanje na strani proizvoda može se promeniti dok agent miruje.\u003C\u002Fp>\n\u003Cp>Migracija stoga zahteva dva modela oporavka: oporavak izvršnog okruženja agenta i oporavak poslovne operacije. Prvi sve više upravlja Agents API. Drugi ostaje vaša odgovornost.\u003C\u002Fp>\n\u003Ch2 id=\"section-37\">Korak 6 — Ponovo izgradite observabilnost oko nove granice traga\u003C\u002Fh2>\n\u003Cp>Sesije Agents API-ja izlažu događaje, sačuvanu istoriju, turnove, pozive alata, podagente i potrošnju tokena. OpenAI takođe pruža dnevnike sesija na platformi i izvoz tragova.\u003C\u002Fp>\n\u003Cp>Ne odbacujte observabilnost svoje aplikacije samo zato što su se tragovi platforme poboljšali. Dnevnici proizvoda i dalje moraju da povežu sesiju agenta sa identitetom korisnika, odlukom o autorizaciji, domenskim objektom, nuspojavom alata, zapisom o odobrenju i konačnim prihvaćenim rezultatom. Koristan trag u produkciji je spoj između dokaza iz okruženja agenta i dokaza iz poslovnog okruženja.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Fsr\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough\" class=\"flex flex-col sm:flex-row gap-4 rounded-xl border border-gray-200 dark:border-gray-700 p-4 transition hover:border-primary-500\">\u003Cdiv class=\"min-w-0 flex-1\">\u003Cstrong class=\"block text-lg text-gray-900 dark:text-gray-100\">Pouzdanost AI agenata: Zašto konačan odgovor nije dovoljan\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">Pouzdanost agenta zavisi od putanje izvršavanja, alata i međukoraka — ne samo od konačnog izlaza.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Pročitajte članak o pouzdanosti →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-41\">Korak 7 — Sačuvajte evaluacije pre promene okruženja\u003C\u002Fh2>\n\u003Cp>Migracija može izgledati uspešno jer novi sistem i dalje daje verodostojne odgovore, dok tiho menja izbor alata, kontinuitet sesije, ponašanje pri predaji, latenciju ili oporavak od grešaka. Izgradite bihevioralnu osnovu pre prelaska na novo okruženje.\u003C\u002Fp>\n\u003Cp>Osnova treba da uključi reprezentativne zadatke, očekivane pozive alata, zabranjene radnje, tačke odobrenja, kontinuitet stanja, scenarije oporavka i kriterijume prihvatanja konačnog izlaza. Pokrenite staru i novu arhitekturu na istim slučajevima gde god je to moguće.\u003C\u002Fp>\n\u003Ch2 id=\"section-44\">Test dokaza migracije\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Dokažite novo okruženje pre prelaska\u003C\u002Fh3>\u003Cdiv class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4\">\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">1\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">1. Zamrznite bihevioralnu osnovu\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Snimite reprezentativne tragove SDK-a, očekivane izlaze, putanje alata, tačke odobrenja i slučajeve neuspeha.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">2\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">2. Popišite vlasništvo nad stanjem\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Označite svako polje stanja kao stanje sesije agenta, autoritativno domensko stanje, trajni artefakt ili efemerno radno stanje.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">3\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">3. Ponovo koristite stabilne implementacije alata\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Zadržite poslovne funkcije iza interfejsa aplikacije; zamenite samo integraciju okrenutu agentu gde je to moguće.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">4\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">4. Izgradite jedan vertikalni presek Agents API-ja\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Migrirajte jedan tok rada u obliku produkcijskog, uključujući kreiranje sesije, alate, događaje, okruženje i perzistenciju.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">5\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">5. Ubacite prekide\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Testirajte restart procesa, ponovni pokušaj webhook-a, istek funkcije, ponovno povezivanje samostalno hostovanog okruženja i zastarelo domensko stanje.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">6\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">6. Uporedite tragove, ne samo odgovore\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Proverite izbor alata, autorizaciju, putanju dokaza, prelaze stanja i nuspojave u odnosu na osnovu.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">7\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">7. Pokrenite senovni saobraćaj\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Gde je izvodljivo, ponovo pustite ili preslikajte reprezentativne zadatke pre nego što novo okruženje postane autoritativno.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">8\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">8. Pređite iza reverzibilne granice\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Zadržite integracione adaptere i mogućnost vraćanja dok produkcijsko ponašanje ne postane stabilno.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-46\">Šta meriti tokom migracije\u003C\u002Fh2>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Dimenzija\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Provera migracije\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Uspeh zadatka\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Da li novo okruženje ispunjava iste ili bolje kriterijume prihvatanja?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ispravnost alata\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Da li poziva pravi alat sa validnim argumentima i autorizacijom?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Kontinuitet stanja\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Može li se rad nastaviti kroz turnove, restarte i asinhrone čekanja?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Oporavak\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Šta se dešava nakon gubitka webhook-a, neuspeha rukovaoca, prekida veze sa okruženjem ili isteka vremena?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Sledljivost\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Može li se svaka značajna radnja povezati sa sesijom, korisnikom, pozivom alata i domenskim objektom?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ponašanje konteksta\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Da li dugotrajne sesije čuvaju ograničenja bez nošenja zastarele istine aplikacije?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Latencija\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Kako pokretanje sesije, obezbeđivanje okruženja i rad kroz više turnova utiču na vreme vidljivo korisniku?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trošak\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Šta se menja u korišćenju modela, korišćenju sandbox-a, ponavljanju konteksta i infrastrukturnim operacijama?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Operativno opterećenje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koje su odgovornosti koje je ranije imala aplikacija zaista nestale, a koje su se samo premestile?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-48\">Kada još ne treba migrirati\u003C\u002Fh2>\n\u003Cp>Postojeća aplikacija sa Agents SDK-om ne postaje loša arhitektura samo zato što se smer platforme promenio. OpenAI nastavlja održavanje, bezbednosne ispravke, ispravke kritičnih grešaka i rad na kompatibilnosti. Ako je aplikacija stabilna, dobro evaluirana i nema blokiran zahtev na planu razvoja, trenutna migracija okruženja možda nije opravdana.\u003C\u002Fp>\n\u003Cul>\u003Cli>Potrebna mogućnost SDK-a još nije dostupna u Agents API-ju.\u003C\u002Fli>\u003Cli>Migracija bi poremetila kritični produkcijski period bez donošenja kratkoročne vrednosti.\u003C\u002Fli>\u003Cli>Aplikacija zavisi od prilagođene semantike orkestracije koja nije validirana na upravljanom okviru.\u003C\u002Fli>\u003Cli>Prenosivost između provajdera je čvrst zahtev i trenutna apstrakcija SDK-a je materijalno vredna.\u003C\u002Fli>\u003Cli>Vaš tim još nije razdvojio poslovno stanje od stanja okruženja agenta, što prelazak čini nesigurnim.\u003C\u002Fli>\u003Cli>Novo ponašanje Agents API-ja nije testirano na reprezentativnim produkcijskim opterećenjima.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-51\">Kada migracija postaje strateški važna\u003C\u002Fh2>\n\u003Cp>Migracija postaje privlačnija kada se zahtevi proizvoda usklade sa upravljanim okvirom: trajni dugotrajni rad, upravljanje sažimanjem i oporavkom konteksta od strane platforme, novije mogućnosti okruženja agenata, izvršavanje u sandbox-u, bogatije hostovano upravljanje životnim ciklusom ili želja da se smanji količina koda za orkestraciju koji vaša aplikacija održava.\u003C\u002Fp>\n\u003Cp>Najjači signal nije „stari SDK je funkcionalno kompletan“. To je „naš plan razvoja sada zavisi od mogućnosti čiji je prirodni dom upravljano Agents API okruženje“.\u003C\u002Fp>\n\u003Ch2 id=\"section-54\">Šta bi promenilo ovaj odgovor?\u003C\u002Fh2>\n\u003Cp>Strategija migracije bi se promenila ako OpenAI objavi automatizovane alate za migraciju, uvede eksplicitne slojeve kompatibilnosti, promeni semantiku sesija Agents API-ja, proširi ili suzi podršku za samostalno hostovana okruženja ili promeni politiku podrške za Agents SDK.\u003C\u002Fp>\n\u003Cp>Promenila bi se i ako se promene zahtevi vašeg proizvoda. Jednostavan asistent za zahtev-odgovor možda uopšte ne zahteva trajni upravljani harness. Dugotrajni agent za kodiranje, istraživanje ili operacije može imati mnogo više koristi od modela vlasništva Agents API-ja.\u003C\u002Fp>\n\u003Ch2 id=\"section-57\">Ograničenja\u003C\u002Fh2>\n\u003Cp>Ne postoji univerzalna mapa migracije jedan-na-jedan sa SDK-a na API jer aplikacije koriste Agents SDK na različite načine. Neke se u velikoj meri oslanjaju na sesije i predaje; druge ga koriste kao tanak runner oko funkcijskih alata. Ispravna migracija zavisi od toga koje odgovornosti vaša aplikacija zapravo poseduje danas.\u003C\u002Fp>\n\u003Cp>Agents API je takođe u javnoj beta verziji, tako da se detalji implementacije mogu menjati. Smatrajte principe vlasništva u ovom članku trajnijim od bilo kog pojedinačnog oblika endpointa.\u003C\u002Fp>\n\u003Ch2 id=\"section-60\">Zaključak\u003C\u002Fh2>\n\u003Cp>Migraciju sa Agents SDK na Agents API najbolje je razumeti kao pomeranje granice agent-runtime-a. Upravljani harness preuzima veći deo petlje, kontinuiteta sesije, kompakcije i oporavka. Vaša aplikacija treba da postane eksplicitnija u pogledu odgovornosti koje ostaju vaše: istinitost domena, autorizacija, nuspojave funkcija, artefakti, revizibilnost i životni ciklus proizvoda.\u003C\u002Fp>\n\u003Cp>Ako migracija ostavi svu staru mašineriju orkestracije na mestu i samo zameni pozive SDK-a pozivima Agents API-ja, verovatno je propustila arhitektonsku priliku. Cilj nije da se stari runtime reprodukuje na vrhu novog. Cilj je da se odluči koje odgovornosti runtime-a više ne pripadaju vašoj aplikaciji.\u003C\u002Fp>\n\u003Ch2 id=\"section-63\">Često postavljana pitanja\u003C\u002Fh2>\n\u003Csection class=\"editorjs-faq my-6 rounded-xl border border-gray-200 p-5 dark:border-gray-700\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Migracija sa Agents SDK na Agents API\u003C\u002Fh3>\u003Cdiv id=\"faq1\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li je migracija sa Agents SDK na Agents API samo prepisivanje API-ja?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Ne. Glavna promena je vlasništvo nad runtime-om: Agents SDK pokreće agent petlju u vašoj aplikaciji, dok Agents API pokreće upravljani Codex harness i trajnu sesiju. Stanje, životni ciklus, rukovanje događajima i oporavak treba posmatrati kao arhitektonske brige.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq2\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li moje funkcijske alate treba prepisati?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Poslovna implementacija se često može ponovo iskoristiti ako je već iza stabilnog interfejsa aplikacije. Integracija okrenuta agentu se menja jer se pozivi funkcija Agents API-ja obrađuju kroz zahtevane akcije sesije i rezultate.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq3\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li treba da premestim poslovno stanje u sesiju Agents API-ja?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Uopšteno ne. Čuvajte autoritativno poslovno i proizvodno stanje u sopstvenim bazama podataka ili servisima. Koristite sesiju agenta za kontinuitet agenta i radni kontekst, a ne kao jedini izvor istine za vaš proizvod.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq4\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li su mi potrebni webhook-ovi za Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Ne uvek, jer je dostupno i strimovanje. Webhook-ovi su posebno korisni za dugotrajne ili asinhrone sesije gde vaša aplikacija treba da reaguje na promene životnog ciklusa bez držanja otvorenog strima.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq5\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li svaka postojeća aplikacija sa Agents SDK treba sada da migrira?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Ne. SDK ostaje podržan u režimu održavanja. Migrirajte kada novi runtime pruži značajnu vrednost za plan razvoja i nakon što je potrebno ponašanje validirano kroz evaluacije oblika produkcije.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-65\">Pojmovnik\u003C\u002Fh2>\n\u003Csection class=\"editorjs-glossary my-6 rounded-xl border border-gray-200 dark:border-gray-700 p-5\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Ključni pojmovi migracije\u003C\u002Fh3>\u003Cdl>\u003Cdiv id=\"runtime-boundary\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Granica runtime-a\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Podela odgovornosti između platformski upravljanog agent runtime-a i runtime-a u vlasništvu aplikacije.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"harness\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Harness\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Agent runtime koji koordinira pozive modela, alate, kontekst, orkestraciju i nastavljeno izvršavanje.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"session\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Sesija\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Trajna instanca Agents API-ja koja čuva konfiguraciju agenta, razgovor i sačuvani rad kroz turn-e.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"required-action\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Zahtevana akcija\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Stanje sesije u kojem Agents API zahteva spoljni unos, kao što je rezultat funkcije ili veza sa okruženjem, pre nego što se rad može nastaviti.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"self-hosted-environment\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Samostalno hostovano okruženje\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Izvršno okruženje kojim upravlja vaša infrastruktura i koje je povezano sa upravljanim Agents API harness-om.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"migration-proof-test\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Test dokaza migracije\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Metod postepene validacije koji poredi novi runtime sa bihejvioralnim osnovama, ubacivanjem grešaka, tragovima i kriterijumima reverzibilnog prelaska.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-67\">Primarni izvori i dodatno čitanje\u003C\u002Fh2>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Agents SDK\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Trenutna politika podrške: Agents SDK je funkcionalno kompletan, ostaje održavan, a nove aplikacije treba da počnu sa Agents API-jem.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Pokretanje agenata sa Agents SDK\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Dokumentacija o agent petlji u vlasništvu aplikacije i modelu nastavljanja u SDK-u.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Pregled Agents API-ja\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definiše osnovne koncepte Agents API-ja: agent, okruženje, sesija, događaji i stavke.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Arhitektura Agents API-ja\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Objašnjava granice hostovanog harness-a, aplikacijskog servera, OpenAI-hostovanog i samostalno hostovanog izvršnog okruženja.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Konfigurisanje agenata\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definiše konfiguraciju agenata koja se može ponovo koristiti i prilagođavanje na nivou sesije.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Pokretanje i nastavljanje sesija\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Dokumentuje trajne sesije, asinhrone cikluse, strimovanje i upravljanje.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Agents API funkcije\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definicija funkcijskog alata i granica rukovaoca aplikacije za potrebne rezultate funkcija.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Sesiјski webhook-ovi\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Događaji životnog ciklusa za asinhrone sesije, potrebne radnje i veze sa samostalno hostovanim okruženjem.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Agents API nadziranje i korišćenje\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Sesiјski logovi, događaji, ciklusi, pozivi alata, podagenti, tragovi i pregled korišćenja tokena.\u003C\u002Fp>\u003C\u002Fa>\n\u003Cp>Migracija sa OpenAI Agents SDK na Agents API nije preimenovanje importa. Menja se osnovna arhitektonska granica: SDK pokreće petlju agenta unutar vaše aplikacije, dok Agents API pokreće upravljani Codex okvir i trajnu sesiju na OpenAI strani. Pitanje migracije stoga nije „Koje klase se mapiraju na koje krajnje tačke?“ već „Koje odgovornosti izvršavanja prelaze granicu, koje ostaju u našoj aplikaciji i koje treba redizajnirati?“\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--info my-6 rounded-xl border p-5 border-blue-300 bg-blue-50 dark:border-blue-900 dark:bg-blue-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Direktan odgovor\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Prava migracija sa Agents SDK na Agents API menja vlasništvo nad izvršavanjem.&lt;\u002Fstrong&gt; Vaša konfiguracija agenta koja se može ponovo koristiti i dalje može da sadrži model, instrukcije i alate, ali petlja, trajna sesija, orkestracija, sažimanje konteksta i oporavak prelaze ka upravljanom Agents API izvršnom okruženju. Vaša aplikacija treba da zadrži stanje domena, autorizaciju, poslovna pravila, implementacije funkcija i logiku revizije izvan sesije agenta. Tretirajte migraciju kao redizajn granice, a ne kao mehaničku konverziju koda.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Caside class=\"editorjs-callout editorjs-callout--warning my-6 rounded-xl border p-5 border-amber-300 bg-amber-50 dark:border-amber-900 dark:bg-amber-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Aktuelno na dan 25. septembar 2026.\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">OpenAI trenutno označava Agents SDK kao &lt;strong&gt;funkcionalno kompletan&lt;\u002Fstrong&gt; i preporučuje Agents API za nove aplikacije agenata. Agents API je u javnoj beta verziji. Postojeće SDK aplikacije ostaju podržane, a trenutna migracija nije automatski neophodna.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Caside class=\"editorjs-callout editorjs-callout--note my-6 rounded-xl border p-5 border-gray-300 bg-gray-50 dark:border-gray-700 dark:bg-gray-900\u002F40\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">O modelu migracije\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Mapa migracije granica izvršavanja i test dokaza migracije u ovom članku su praktični arhitektonski alati, a ne zvanični OpenAI okviri za migraciju. Oni su izvedeni iz trenutnih razlika u izvršavanju koje dokumentuje OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Sadržaj\">\u003Cstrong class=\"editorjs-toc__title\">Sadržaj\u003C\u002Fstrong>\u003Col class=\"editorjs-toc__list editorjs-toc__list--depth-0\">\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-6\" class=\"editorjs-toc__link\">Migracija je sa petlje koju poseduje aplikacija na upravljani harness\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">Mapa migracije runtime granice\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Šta može konceptualno da se migrira bez promene vlasništva\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Šta ne treba migrirati jedan-na-jedan\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Korak 1 — Razdvojite stanje domena od stanja sesije agenta\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Korak 2 — Pretvorite način razmišljanja pokretača u način razmišljanja sesije i događaja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Korak 3 — Redizajnirajte funkcijske alate oko potrebnih radnji\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Korak 4 — Odlučite gde treba da se odvija izvršavanje\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Korak 5 — Zamenite implicitni oporavak eksplicitnim upravljanjem životnim ciklusom\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Korak 6 — Ponovo izgradite observabilnost oko nove granice traga\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Korak 7 — Sačuvajte evaluacije pre promene okruženja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">Test dokaza migracije\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Šta meriti tokom migracije\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Kada još ne treba migrirati\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Kada migracija postaje strateški važna\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Šta bi promenilo ovaj odgovor?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Ograničenja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Zaključak\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">Često postavljana pitanja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Pojmovnik\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Primarni izvori i dodatno čitanje\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">Migracija je sa petlje koju poseduje aplikacija na upravljani okvir\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">Mapa migracije granica izvršavanja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Šta može konceptualno da se migrira bez promene vlasništva\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Šta ne treba migrirati jedan-na-jedan\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Korak 1 — Odvojite domensko stanje od stanja sesije agenta\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Korak 2 — Pretvorite mentalni sklop runner-a u mentalni sklop sesije i događaja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Korak 3 — Redizajnirajte function alate oko potrebnih radnji\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Korak 4 — Odlučite gde treba da se odvija izvršavanje\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Korak 5 — Zamenite implicitni oporavak eksplicitnim upravljanjem životnim ciklusom\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Korak 6 — Ponovo izgradite observabilnost oko nove granice traga\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Korak 7 — Sačuvajte evaluacije pre promene runtime-a\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">Test dokaza migracije\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Šta meriti tokom migracije\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Kada još ne treba migrirati\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Kada migracija postaje strateški važna\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">Šta bi promenilo ovaj odgovor?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Ograničenja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Zaključak\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">Često postavljana pitanja\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Pojmovnik\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Primarni izvori i dodatno čitanje\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Ch2 id=\"section-82\">Migracija je sa petlje koju poseduje aplikacija na upravljani okvir\u003C\u002Fh2>\n\u003Cp>U Agents SDK, jedno pokretanje je ciklus na nivou aplikacije. SDK pokretač poziva model, pregleda izlaz, izvršava alate, prati predaje i nastavlja dok ne dođe do tačke zaustavljanja. Vaš proces hostuje tu petlju i stoga poseduje njen životni ciklus.\u003C\u002Fp>\n\u003Cp>U Agents API, OpenAI pokreće okvir. Sesija je trajna instanca konfiguracije agenta koja prihvata zadatke, proizvodi događaje, može da se pauzira radi potrebnih radnji i može da se nastavi tokom vremena. OpenAI upravlja sesijama, orkestracijom, sažimanjem konteksta i oporavkom; vaša aplikacija šalje posao, rukuje funkcijskim alatima, prima događaje i opciono upravlja samostalno hostovanim izvršnim okruženjem.\u003C\u002Fp>\n\u003Cp>Taj prelaz vlasništva je migracija. Sve ostalo — sintaksa API-ja, šeme alata, rukovanje događajima, ID-ovi sesija — proizlazi iz toga.\u003C\u002Fp>\n\u003Ch2 id=\"section-86\">Mapa migracije granica izvršavanja\u003C\u002Fh2>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Aspekt\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Agents SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Cilj migracije na Agents API\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Petlja agenta\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pokreće se u vašoj aplikaciji preko SDK pokretača\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pokreće se u upravljanom Codex okviru\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Definicija agenta koja se može ponovo koristiti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agent objekat u kodu aplikacije\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Sačuvana ili ugrađena konfiguracija agenta sa modelom, instrukcijama i alatima\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Kontinuitet razgovora \u002F rada\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Strategija sesije SDK-a, istorija, nastavljanje rezultata ili skladištenje aplikacije\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trajna Agents API sesija\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Izvršavanje alata\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK koordinira pozive alata u vašem izvršnom okruženju\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Okvir zahteva pozive funkcija; vaša aplikacija vraća rezultate\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Upravljanje kontekstom\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Vaše izvršno okruženje \u002F strategija sesije SDK-a\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Upravljani kontekst sesije, sažimanje i oporavak, plus sopstvene granice podataka aplikacije\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Predaje \u002F specijalisti\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Primitivi orkestracije SDK-a\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ponašanje okvira \u002F podagenata u Agents API; ne pretpostavljajte semantiku jedan-na-jedan\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Izvršno okruženje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Izvršno okruženje vaše aplikacije ili okruženje specifično za alat\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Opciono OpenAI-hostovano ili samostalno hostovano okruženje povezano sa sesijom\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Strimovanje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK strimovanje iz pokretanja\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Tok događaja Agents API sesije\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Asinhroni životni ciklus\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Obično njime upravlja aplikacija oko SDK pokretanja\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Nativna stanja sesije, asinhroni ciklusi i webhook-ovi\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Praćenje \u002F nadziranje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Praćenje Agents SDK-a i logovi aplikacije\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Logovi Agents sesije, događaji, ciklusi, pozivi alata, podagenti i tragovi koji se mogu izvesti\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Oporavak\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Odgovornost aplikacije\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Upravljani oporavak okvira\u002Fsesije plus oporavak u vlasništvu aplikacije za eksterne sisteme i samostalno hostovana okruženja\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-88\">Šta može konceptualno da se migrira bez promene vlasništva\u003C\u002Fh2>\n\u003Cp>Nekoliko koncepata aplikacije preživi migraciju čisto iako se njihova reprezentacija menja. Modeli, instrukcije, JSON-šema definicije funkcija, MCP pristup, opisi alata i zahtevi za strukturisanim izlazom su i dalje pitanja konfiguracije agenta.\u003C\u002Fp>\n\u003Cp>OpenAI model konfiguracije Agents API eksplicitno definiše agenta kroz model, instrukcije, alate, rezonovanje i ponašanje izlaza. Funkcijski alati ostaju kod aplikacije: okvir zahteva poziv funkcije, a vaš rukovalac vraća rezultat. OpenAI takođe napominje da se implementacije funkcija koje se koriste sa Responses API mogu ponovo koristiti sa tokom Agents API sesije.\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--success my-6 rounded-xl border p-5 border-emerald-300 bg-emerald-50 dark:border-emerald-900 dark:bg-emerald-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Dobar kandidat za migraciju\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Čista poslovna funkcija kao što je &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt; ne bi trebalo da zna da li je pozivalac Agents SDK ili Agents API. Zadržite njenu domensku logiku iza stabilnog aplikacionog interfejsa i migrirajte samo adapter okrenut agentu.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-92\">Šta ne treba migrirati jedan-na-jedan\u003C\u002Fh2>\n\u003Cp>Opasan obrazac migracije je ponovno stvaranje svake SDK runtime apstrakcije unutar Agents API-ja. To može dovesti do toga da plaćate za upravljani harness dok i dalje upravljate senovitim harness-om u svojoj aplikaciji.\u003C\u002Fp>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Pretpostavka iz SDK ere\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Zašto je direktno kopiranje rizično\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Pitanje za migraciju\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Aplikaciona petlja poseduje svaki nastavak\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API već poseduje harness petlju\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koja logika nastavka je logika proizvoda, a koja treba da se prebaci u upravljanu sesiju?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Lokalni objekat sesije je primarni mehanizam kontinuiteta\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API sesije su trajni resursi sa sopstvenim životnim ciklusom\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koje stanje pripada sesiji, a koje bazi podataka proizvoda?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Svaki prekid se obrađuje sinhrono\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API potezi su asinhroni i mogu da prikažu stanja action_required\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koje radnje zahtevaju webhook-ove, workere, idempotentnost i nastavljive handlere?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Svo izvršavanje alata se dešava tamo gde se pokreće SDK proces\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Function handler-i i okruženja za izvršavanje mogu biti odvojeni\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gde bi svaki alat zapravo trebalo da se izvršava?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK trace je operativna vremenska linija\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API izlaže događaje sesije, poteze i upravljane trace-ove\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koji podaci za reviziju na nivou aplikacije i dalje zahtevaju sopstveni zapis?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Handoff objekat se direktno mapira na hostovani model podagenta\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Runtime semantika može da se razlikuje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koje korisnički vidljivo vlasništvo i specijalističko ponašanje moraju da se očuvaju, a ne samo stara struktura klasa?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-95\">Korak 1 — Odvojite domensko stanje od stanja sesije agenta\u003C\u002Fh2>\n\u003Cp>Pre nego što dodirnete API pozive, klasifikujte stanje koje vaša SDK aplikacija trenutno nosi. Neko stanje postoji samo da bi održalo razgovor agenta u pokretu. Drugo stanje je poslovna istina: korisničke dozvole, status projekta, podaci o porudžbini, odobrenje radnog toka, zapisi o klijentima, verzije dokumenata, stanje politike ili konfiguracija aplikacije.\u003C\u002Fp>\n\u003Cp>Druga kategorija ne bi trebalo da postane zavisna od Agents API sesije. Trajna sesija je koristan kontinuitet za agenta; ona nije zamena za izvor istine vašeg proizvoda. Ako sesija nestane, istekne, bude ponovo izgrađena ili promeni implementaciju, vaša aplikacija i dalje mora da zna šta je istina.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Test smeštanja stanja\u003C\u002Fh3>\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left dark:border-gray-700 dark:bg-gray-900\">\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Tip stanja\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Preferirani vlasnik\u003C\u002Fth>\u003Cth class=\"border border-gray-300 bg-gray-50 px-4 py-3 text-left font-semibold dark:border-gray-700 dark:bg-gray-900\">Razlog\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Kontinuitet razgovora\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Poslovna istina\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Trajni artefakt\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-3 text-left font-semibold dark:border-gray-700\">Radno privremeno stanje\u003C\u002Fth>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-3 dark:border-gray-700\">\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-99\">Korak 2 — Pretvorite mentalni sklop runner-a u mentalni sklop sesije i događaja\u003C\u002Fh2>\n\u003Cp>SDK aplikacije često razmišljaju u smislu pozivanja run i primanja rezultata. Agents API razmišlja u smislu trajne sesije čiji potezi mogu da se izvršavaju asinhrono. Poruka neaktivnoj sesiji započinje rad; poruka tokom aktivnog poteza može da ga usmeri. Napredak stiže putem streaming-a ili webhook-ova.\u003C\u002Fp>\n\u003Cp>Ovo utiče na arhitekturu aplikacije. Dugotrajni produkcioni rad ne bi trebalo da zavisi od toga da jedan HTTP zahtev ostane živ. Vaš proizvod zahteva stabilne identifikatore sesije, trajnost životnog ciklusa, verifikaciju webhook-ova, idempotentne handlere i način da se uskladi trenutno stanje sesije nakon ponovnog pokretanja procesa.\u003C\u002Fp>\n\u003Ch2 id=\"section-102\">Korak 3 — Redizajnirajte function alate oko potrebnih radnji\u003C\u002Fh2>\n\u003Cp>Function alati ostaju važna granica aplikacije. Vi definišete funkciju i njenu JSON šemu u konfiguraciji agenta. Kada harness-u zatreba funkcija, sesija može da uđe u stanje koje zahteva radnju. Vaša aplikacija preuzima potrebnu radnju, izvršava poslovnu logiku i vraća rezultat.\u003C\u002Fp>\n\u003Cp>To znači da implementacija funkcije treba da bude bezbedna za nastavljanje. Webhook može biti dostavljen dok drugi worker obrađuje. Mrežni kvar može nastupiti nakon spoljnog efekta, ali pre nego što se rezultat vrati. Migracija je stoga dobar trenutak da se konsekventnim alatima dodaju ID-ovi poziva, ključevi idempotentnosti, eksplicitna autorizacija, politike tajm-auta i zapisi za reviziju.\u003C\u002Fp>\n\u003Caside class=\"editorjs-callout editorjs-callout--warning my-6 rounded-xl border p-5 border-amber-300 bg-amber-50 dark:border-amber-900 dark:bg-amber-950\u002F20\" role=\"note\">\u003Cstrong class=\"block mb-2 text-gray-900 dark:text-gray-100\">Zamka migracije alata\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Ne tretirajte poziv funkcije iz upravljanog harness-a kao autorizaciju za izvršavanje radnje. Harness odlučuje &lt;em&gt;šta želi da pozove&lt;\u002Fem&gt;; vaša aplikacija i dalje odlučuje da li trenutni korisnik, sesija i poslovno stanje dozvoljavaju tu radnju.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-106\">Korak 4 — Odlučite gde treba da se odvija izvršavanje\u003C\u002Fh2>\n\u003Cp>Agents API razdvaja upravljani harness od okruženja za izvršavanje. Agent može da radi bez namenskog okruženja, u OpenAI-hostovanoj sandbox-u ili putem self-hosted okruženja povezanog sa sesijom.\u003C\u002Fp>\n\u003Cp>Ovo stvara odluku o migraciji koju SDK aplikacije možda nikada nisu eksplicitno donele: koji kod treba da se izvršava kao aplikaciona funkcija, koji kod pripada sandbox-u i koji radni zadaci zahtevaju infrastrukturu koju kontrolišete?\u003C\u002Fp>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Potreba\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Verovatna granica\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pozivanje postojećeg internog servisa kroz kontrolisanu poslovnu logiku\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Funkcijski alat kojim upravlja vaša aplikacija\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pokretanje izolovanog koda ili rad sa privremenim datotekama bez privatne infrastrukture\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Okruženje koje hostuje OpenAI\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Pristup resursima privatne mreže, prilagođenom sistemskom softveru ili kontrolisanom lokalnom računarstvu\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Samostalno hostovano okruženje\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trajno čuvanje prihvaćenih artefakata proizvoda\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Skladište u vlasništvu aplikacije, ne samo sandbox fajl sistem\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Izvršavanje poslovnog efekta sa velikim uticajem\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Funkcija aplikacije sa kontrolama autorizacije i revizije\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-110\">Korak 5 — Zamenite implicitni oporavak eksplicitnim upravljanjem životnim ciklusom\u003C\u002Fh2>\n\u003Cp>Upravljani harness obezbeđuje oporavak na nivou sesije, ali vaša aplikacija i dalje poseduje svaku spoljnu zavisnost oko njega. Samostalno hostovana okruženja zahtevaju provisioniranje, ponovno povezivanje i gašenje. Funkcijski rukovaoci mogu da zakažu. Webhook-ovi mogu biti ponovljeni. Stanje na strani proizvoda može se promeniti dok je agent neaktivan.\u003C\u002Fp>\n\u003Cp>Migracija stoga zahteva dva modela oporavka: oporavak agent-runtime-a i oporavak poslovnih operacija. Prvim sve više upravlja Agents API. Drugi ostaje vaša odgovornost.\u003C\u002Fp>\n\u003Ch2 id=\"section-113\">Korak 6 — Ponovo izgradite observabilnost oko nove granice traga\u003C\u002Fh2>\n\u003Cp>Sesije Agents API-ja izlažu događaje, sačuvanu istoriju, turn-ove, pozive alata, pod-agente i potrošnju tokena. OpenAI takođe obezbeđuje logove sesija na platformi i izvoz tragova.\u003C\u002Fp>\n\u003Cp>Ne odbacujte observabilnost svoje aplikacije samo zato što su se tragovi platforme poboljšali. Logovi proizvoda i dalje moraju da povežu sesiju agenta sa identitetom korisnika, odlukom o autorizaciji, domenskim objektom, sporednim efektom alata, zapisom o odobrenju i konačnim prihvaćenim rezultatom. Koristan produkcijski trag je spoj između dokaza agent-runtime-a i dokaza poslovnog runtime-a.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Fsr\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough\" class=\"flex flex-col sm:flex-row gap-4 rounded-xl border border-gray-200 dark:border-gray-700 p-4 transition hover:border-primary-500\">\u003Cdiv class=\"min-w-0 flex-1\">\u003Cstrong class=\"block text-lg text-gray-900 dark:text-gray-100\">Pouzdanost AI agenata: Zašto konačan odgovor nije dovoljan\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">Pouzdanost agenata zavisi od putanje izvršavanja, alata i međukoraka — ne samo od konačnog izlaza.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Pročitajte članak o pouzdanosti →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-117\">Korak 7 — Sačuvajte evaluacije pre promene runtime-a\u003C\u002Fh2>\n\u003Cp>Migracija može izgledati uspešno jer novi sistem i dalje daje verodostojne odgovore dok tiho menja izbor alata, kontinuitet sesije, ponašanje pri predaji, latenciju ili oporavak od greške. Izgradite bihevioralnu osnovu pre prebacivanja runtime-a.\u003C\u002Fp>\n\u003Cp>Osnova treba da uključi reprezentativne zadatke, očekivane pozive alata, zabranjene radnje, tačke odobrenja, kontinuitet stanja, scenarije oporavka i kriterijume prihvatanja konačnog izlaza. Pokrenite staru i novu arhitekturu na istim slučajevima gde god je to moguće.\u003C\u002Fp>\n\u003Ch2 id=\"section-120\">Test dokaza migracije\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Dokažite novi runtime pre prelaska\u003C\u002Fh3>\u003Cdiv class=\"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4\">\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">1\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">1. Zamrznite bihevioralnu osnovu\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Snimite reprezentativne tragove SDK-a, očekivane izlaze, putanje alata, tačke odobrenja i slučajeve grešaka.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">2\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">2. Popišite vlasništvo nad stanjem\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Označite svako polje stanja kao stanje agent-sesije, autoritativno domensko stanje, trajni artefakt ili efemerno radno stanje.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">3\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">3. Ponovo koristite stabilne implementacije alata\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Zadržite poslovne funkcije iza interfejsa aplikacije; zamenite samo integraciju okrenutu agentu gde je to moguće.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">4\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">4. Izgradite jedan vertikalni presek Agents API-ja\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Migrirajte jedan tok rada u obliku produkcijskog, uključujući kreiranje sesije, alate, događaje, okruženje i perzistenciju.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">5\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">5. Ubacite prekide\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Testirajte restart procesa, ponovni pokušaj webhook-a, istek funkcije, ponovno povezivanje samostalno hostovanog okruženja i zastarelo domensko stanje.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">6\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">6. Uporedite tragove, ne samo odgovore\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Proverite izbor alata, autorizaciju, putanju dokaza, prelaze stanja i sporedne efekte u odnosu na osnovu.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">7\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">7. Pokrenite shadow saobraćaj\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Gde je izvodljivo, ponovo pustite ili preslikajte reprezentativne zadatke pre nego što novi runtime postane autoritativan.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv class=\"editorjs-process__step min-w-0  rounded-xl border border-gray-200 dark:border-gray-700 p-4\">\u003Cdiv class=\"text-xs font-semibold text-gray-500 dark:text-gray-400\">8\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 font-semibold text-gray-900 dark:text-gray-100\">8. Pređite iza reverzibilne granice\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Zadržite integracione adaptere i mogućnost vraćanja dok produkcijsko ponašanje ne postane stabilno.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-122\">Šta meriti tokom migracije\u003C\u002Fh2>\n\u003Cdiv class=\"overflow-x-auto\">\u003Ctable class=\"w-full border-collapse\">\u003Cthead>\u003Ctr>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Dimenzija\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Provera migracije\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Uspeh zadatka\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Da li novi runtime ispunjava iste ili bolje kriterijume prihvatanja?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ispravnost alata\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Da li poziva pravi alat sa validnim argumentima i autorizacijom?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Kontinuitet stanja\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Može li se rad nastaviti kroz turn-ove, restarte i asinhrone čekanja?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Oporavak\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Šta se dešava nakon gubitka webhook-a, greške rukovaoca, prekida veze sa okruženjem ili isteka vremena?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Sledljivost\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Može li se svaka značajna radnja povezati sa sesijom, korisnikom, pozivom alata i domenskim objektom?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ponašanje konteksta\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Da li dugotrajne sesije čuvaju ograničenja bez nošenja zastarele istine aplikacije?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Latencija\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Kako pokretanje sesije, provisioniranje okruženja i rad kroz više turn-ova utiču na vreme vidljivo korisniku?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Trošak\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Šta se menja u korišćenju modela, korišćenju sandbox-a, ponavljanju konteksta i infrastrukturnim operacijama?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Operativno opterećenje\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Koje su odgovornosti koje je ranije posedovala aplikacija zaista nestale, a koje su se samo premestile?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-124\">Kada još ne treba migrirati\u003C\u002Fh2>\n\u003Cp>Postojeća aplikacija sa Agents SDK ne postaje loša arhitektura samo zato što se smer platforme promenio. OpenAI nastavlja održavanje, bezbednosne ispravke, ispravke kritičnih grešaka i rad na kompatibilnosti. Ako je aplikacija stabilna, dobro evaluirana i nema blokiranu potrebu na mapi puta, trenutna migracija runtime-a možda nije opravdana.\u003C\u002Fp>\n\u003Cul>\u003Cli>Potrebna sposobnost SDK-a još nije dostupna u Agents API-ju.\u003C\u002Fli>\u003Cli>Migracija bi poremetila kritični produkcijski period bez donošenja kratkoročne vrednosti.\u003C\u002Fli>\u003Cli>Aplikacija zavisi od prilagođene semantike orkestracije koja nije validirana na upravljanom harness-u.\u003C\u002Fli>\u003Cli>Prenosivost između provajdera je čvrst zahtev i trenutna apstrakcija SDK-a je materijalno vredna.\u003C\u002Fli>\u003Cli>Vaš tim još nije razdvojio poslovno stanje od stanja agent-runtime-a, što prelazak čini nesigurnim.\u003C\u002Fli>\u003Cli>Novo ponašanje Agents API-ja nije testirano na reprezentativnim produkcijskim radnim opterećenjima.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-127\">Kada migracija postaje strateški važna\u003C\u002Fh2>\n\u003Cp>Migracija postaje uverljivija kada se zahtevi proizvoda usklade sa upravljanim okvirom: trajni dugotrajni rad, upravljanje kompresijom i oporavkom konteksta na nivou platforme, novije mogućnosti agent-runtime-a, izvršavanje u sandbox-u, bogatije upravljanje životnim ciklusom na hostingu ili želja da se smanji količina koda za orkestraciju koji vaša aplikacija održava.\u003C\u002Fp>\n\u003Cp>Najjači signal nije „stari SDK je funkcionalno kompletan“. To je „naš plan razvoja sada zavisi od mogućnosti čiji je prirodni dom managed Agents API runtime“.\u003C\u002Fp>\n\u003Ch2 id=\"section-130\">Šta bi promenilo ovaj odgovor?\u003C\u002Fh2>\n\u003Cp>Strategija migracije bi se promenila ako OpenAI objavi automatizovane alate za migraciju, uvede eksplicitne slojeve kompatibilnosti, promeni semantiku Agents API sesija, proširi ili suzi podršku za self-hosted okruženja ili promeni politiku podrške za Agents SDK.\u003C\u002Fp>\n\u003Cp>Takođe bi se promenilo ako se promene zahtevi vašeg proizvoda. Jednostavan asistent za zahtev-odgovor možda uopšte neće imati potrebu za trajnim upravljanim okvirom. Dugotrajni agent za kodiranje, istraživanje ili operacije može mnogo više da iskoristi model vlasništva Agents API-ja.\u003C\u002Fp>\n\u003Ch2 id=\"section-133\">Ograničenja\u003C\u002Fh2>\n\u003Cp>Ne postoji univerzalna mapa migracije jedan-na-jedan sa SDK-a na API jer aplikacije koriste Agents SDK na različite načine. Neke se u velikoj meri oslanjaju na sesije i predaje; druge ga koriste kao tanak pokretač oko funkcijskih alata. Ispravna migracija zavisi od toga koje odgovornosti vaša aplikacija zapravo trenutno poseduje.\u003C\u002Fp>\n\u003Cp>Agents API je takođe u javnoj beta verziji, tako da se detalji implementacije mogu menjati. Smatrajte principe vlasništva u ovom članku trajnijim od bilo kog pojedinačnog oblika endpoint-a.\u003C\u002Fp>\n\u003Ch2 id=\"section-136\">Zaključak\u003C\u002Fh2>\n\u003Cp>Migraciju sa Agents SDK na Agents API najbolje je razumeti kao pomeranje granice agent-runtime-a. Upravljani okvir preuzima više petlje, kontinuiteta sesije, kompresije i oporavka. Vaša aplikacija treba da postane eksplicitnija u pogledu odgovornosti koje ostaju vaše: istinitost domena, autorizacija, nuspojave funkcija, artefakti, revizibilnost i životni ciklus proizvoda.\u003C\u002Fp>\n\u003Cp>Ako migracija ostavi svu staru mašineriju za orkestraciju na mestu i samo zameni pozive SDK-a pozivima Agents API-ja, verovatno je propustila arhitektonsku priliku. Cilj nije da se stari runtime reprodukuje na vrhu novog. Cilj je da se odluči koje odgovornosti runtime-a više ne pripadaju vašoj aplikaciji.\u003C\u002Fp>\n\u003Ch2 id=\"section-139\">Često postavljana pitanja\u003C\u002Fh2>\n\u003Csection class=\"editorjs-faq my-6 rounded-xl border border-gray-200 p-5 dark:border-gray-700\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Migracija sa Agents SDK na Agents API\u003C\u002Fh3>\u003Cdiv id=\"faq1\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li je migracija sa Agents SDK na Agents API samo prepisivanje API-ja?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Ne. Glavna promena je vlasništvo nad runtime-om: Agents SDK pokreće agent petlju u vašoj aplikaciji, dok Agents API pokreće upravljani Codex okvir i trajnu sesiju. Stanje, životni ciklus, rukovanje događajima i oporavak treba posmatrati kao arhitektonska pitanja.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq2\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li moje funkcijske alate treba prepisati?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Poslovna implementacija se često može ponovo iskoristiti ako je već iza stabilnog interfejsa aplikacije. Integracija okrenuta agentu se menja jer se pozivi funkcija Agents API-ja obrađuju kroz obavezne radnje i rezultate sesije.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq3\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li treba da premestim poslovno stanje u Agents API sesiju?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Uopšteno ne. Zadržite autoritativno poslovno i proizvodno stanje u svojim bazama podataka ili servisima. Koristite agent sesiju za kontinuitet agenta i radni kontekst, a ne kao jedini izvor istine za vaš proizvod.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq4\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li su mi potrebni webhook-ovi za Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Ne uvek, jer je dostupno i strimovanje. Webhook-ovi su posebno korisni za dugotrajne ili asinhrone sesije gde vaša aplikacija treba da reaguje na promene životnog ciklusa bez držanja otvorenog strima.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003Cdiv id=\"faq5\" class=\"border-t border-gray-200 py-4 first:border-t-0 dark:border-gray-700\">\u003Ch4 class=\"font-semibold text-gray-900 dark:text-gray-100\">Da li svaka postojeća Agents SDK aplikacija treba sada da migrira?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Ne. SDK ostaje podržan u režimu održavanja. Migrirajte kada novi runtime pruža značajnu vrednost za plan razvoja i nakon što je potrebno ponašanje validirano kroz evaluacije oblika produkcije.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-141\">Pojmovnik\u003C\u002Fh2>\n\u003Csection class=\"editorjs-glossary my-6 rounded-xl border border-gray-200 dark:border-gray-700 p-5\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Ključni pojmovi migracije\u003C\u002Fh3>\u003Cdl>\u003Cdiv id=\"runtime-boundary\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Granica runtime-a\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Podela odgovornosti između platformski upravljanog agent runtime-a i runtime-a u vlasništvu aplikacije.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"harness\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Okvir\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Agent runtime koji koordinira pozive modela, alate, kontekst, orkestraciju i nastavljeno izvršavanje.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"session\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Sesija\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Trajna Agents API instanca koja čuva konfiguraciju agenta, razgovor i sačuvani rad kroz turn-e.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"required-action\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Obavezna radnja\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Stanje sesije u kojem Agents API zahteva spoljni unos, kao što je rezultat funkcije ili veza sa okruženjem, pre nego što se rad može nastaviti.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"self-hosted-environment\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Self-hosted okruženje\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Izvršno okruženje kojim upravlja vaša infrastruktura i koje je povezano sa upravljanim Agents API okvirom.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"migration-proof-test\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Test dokaza migracije\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Metod postepene validacije koji upoređuje novi runtime sa bihevioralnim osnovama, ubacivanjem grešaka, tragovima i kriterijumima reverzibilnog prelaska.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-143\">Primarni izvori i dodatno čitanje\u003C\u002Fh2>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Agents SDK\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Trenutna politika podrške: Agents SDK je funkcionalno kompletan, ostaje održavan, a nove aplikacije treba da počnu sa Agents API-jem.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Pokretanje agenata uz Agents SDK\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Dokumentacija SDK petlje agenta u vlasništvu aplikacije i modela nastavljanja.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Pregled Agents API-ja\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definiše osnovne koncepte Agents API-ja: agent, okruženje, sesija, događaji i stavke.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Arhitektura Agents API-ja\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Objašnjava granice hostovanog okvira, aplikacionog servera, OpenAI-hostovanog i samostalno hostovanog izvršnog okruženja.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Konfigurisanje agenata\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definiše konfiguraciju agenata koja se može ponovo koristiti i prilagođavanje na nivou sesije.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Pokretanje i nastavljanje sesija\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Dokumentuje trajne sesije, asinhrone cikluse, strimovanje i usmeravanje.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Funkcije Agents API-ja\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Definicija funkcijskog alata i granica rukovaoca aplikacije za potrebne rezultate funkcija.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Webhook-ovi sesije\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Događaji životnog ciklusa za asinhrone sesije, potrebne radnje i veze sa samostalno hostovanim okruženjem.\u003C\u002Fp>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"editorjs-link-tool block border border-gray-200 dark:border-gray-700 rounded-lg p-4 transition text-gray-900 dark:text-gray-100 hover:border-primary-500 hover:bg-primary-50 dark:hover:bg-gray-900 hover:text-gray-900 dark:hover:text-gray-100\">\u003Cstrong class=\"block font-semibold\">OpenAI — Vidljivost i korišćenje Agents API-ja\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Dnevnici sesije, događaji, ciklusi, pozivi alata, podagenti, tragovi i pregled potrošnje tokena.\u003C\u002Fp>\u003C\u002Fa>",{"time":212,"blocks":213,"version":1314},1790352345130,[214,222,228,236,243,250,255,260,265,270,275,329,334,339,344,351,356,361,394,399,404,409,443,448,453,458,463,468,473,479,484,489,494,517,522,527,532,537,542,547,556,561,566,571,576,608,613,647,652,657,671,676,681,686,691,696,701,706,711,716,721,726,731,736,762,767,795,800,810,819,828,837,846,855,864,873,882,886,890,894,898,902,906,910,914,918,922,960,963,967,971,975,978,982,1001,1005,1009,1013,1029,1033,1037,1041,1045,1049,1053,1057,1060,1064,1068,1081,1084,1088,1092,1095,1099,1103,1107,1111,1115,1118,1121,1139,1142,1161,1164,1168,1177,1180,1184,1188,1191,1195,1199,1202,1206,1210,1213,1217,1221,1224,1239,1242,1258,1261,1266,1273,1278,1284,1289,1295,1301,1307],{"id":215,"data":216,"type":220,"tunes":221},"24Foq4L2Wb",{"title":217,"maxLevel":218,"minLevel":219},"Sadržaj",3,2,"tableOfContents",{},{"id":223,"data":224,"type":226,"tunes":227},"intro",{"text":225},"Migracija sa OpenAI Agents SDK na Agents API nije samo preimenovanje importa. Menja se osnovna arhitektonska granica: SDK pokreće agent petlju unutar vaše aplikacije, dok Agents API pokreće upravljani Codex harness i trajnu sesiju na OpenAI strani. Pitanje migracije stoga nije „Koje klase se mapiraju na koje endpoint-e?” već „Koje odgovornosti runtime-a prelaze granicu, koje ostaju u našoj aplikaciji i koje treba redizajnirati?”","paragraph",{},{"id":229,"data":230,"type":234,"tunes":235},"direct",{"body":231,"title":232,"variant":233},"\u003Cstrong>Prava migracija sa Agents SDK na Agents API menja vlasništvo nad runtime-om.\u003C\u002Fstrong> Vaša konfiguracija agenta koja se može ponovo koristiti i dalje može da sadrži model, instrukcije i alate, ali petlja, trajna sesija, orkestracija, sažimanje konteksta i oporavak prelaze ka upravljanom Agents API runtime-u. Vaša aplikacija treba da zadrži domensko stanje, autorizaciju, poslovna pravila, implementacije funkcija i logiku revizije izvan agent sesije. Tretirajte migraciju kao redizajn granice, a ne kao mehaničku konverziju koda.","Direktan odgovor","info","callout",{},{"id":237,"data":238,"type":234,"tunes":242},"current",{"body":239,"title":240,"variant":241},"OpenAI trenutno označava Agents SDK kao \u003Cstrong>feature complete\u003C\u002Fstrong> i preporučuje Agents API za nove agent aplikacije. Agents API je u javnoj beta fazi. Postojeće SDK aplikacije ostaju podržane, a trenutna migracija nije automatski neophodna.","Aktuelno na dan 25. septembar 2026.","warning",{},{"id":244,"data":245,"type":234,"tunes":249},"model-note",{"body":246,"title":247,"variant":248},"Mapa migracije runtime granice i test dokaza migracije u ovom članku su praktični arhitektonski alati, a ne zvanični OpenAI okviri za migraciju. Oni su izvedeni iz trenutnih razlika u runtime-u koje dokumentuje OpenAI.","O modelu migracije","note",{},{"id":251,"data":252,"type":42,"tunes":254},"h-boundary",{"text":253,"level":219},"Migracija je sa petlje koju poseduje aplikacija na upravljani harness",{},{"id":256,"data":257,"type":226,"tunes":259},"p-boundary-1",{"text":258},"U Agents SDK, jedno pokretanje je potez na nivou aplikacije. SDK runner poziva model, pregleda izlaz, izvršava alate, prati handoff-ove i nastavlja dok ne dođe do tačke zaustavljanja. Vaš proces hostuje tu petlju i stoga poseduje njen životni ciklus.",{},{"id":261,"data":262,"type":226,"tunes":264},"p-boundary-2",{"text":263},"U Agents API, OpenAI pokreće harness. Sesija je trajna instanca konfiguracije agenta koja prihvata zadatke, proizvodi događaje, može da se pauzira radi potrebnih radnji i može da se nastavi tokom vremena. OpenAI upravlja sesijama, orkestracijom, sažimanjem konteksta i oporavkom; vaša aplikacija šalje posao, obrađuje function alate, prima događaje i opciono upravlja self-hosted okruženjem za izvršavanje.",{},{"id":266,"data":267,"type":226,"tunes":269},"p-boundary-3",{"text":268},"Taj prelaz vlasništva je migracija. Sve ostalo — API sintaksa, šeme alata, obrada događaja, ID-ovi sesija — proizlazi iz toga.",{},{"id":271,"data":272,"type":42,"tunes":274},"h-map",{"text":273,"level":219},"Mapa migracije runtime granice",{},{"id":276,"data":277,"type":327,"tunes":328},"migration-map",{"content":278,"stretched":43,"withHeadings":14},[279,283,287,291,295,299,303,307,311,315,319,323],[280,281,282],"Aspekt","Agents SDK","Cilj migracije na Agents API",[284,285,286],"Agent petlja","Pokreće se u vašoj aplikaciji kroz SDK runner","Pokreće se u upravljanom Codex harness-u",[288,289,290],"Definicija agenta koja se može ponovo koristiti","Agent objekat u kodu aplikacije","Sačuvana ili inline konfiguracija agenta sa modelom, instrukcijama i alatima",[292,293,294],"Kontinuitet razgovora \u002F rada","SDK strategija sesije, istorija, nastavljanje rezultata ili skladištenje u aplikaciji","Trajna Agents API sesija",[296,297,298],"Izvršavanje alata","SDK koordinira pozive alata u vašem runtime-u","Harness zahteva pozive funkcija; vaša aplikacija vraća rezultate",[300,301,302],"Upravljanje kontekstom","Vaš runtime \u002F SDK strategija sesije","Upravljani kontekst sesije, sažimanje i oporavak, plus granice podataka vaše aplikacije",[304,305,306],"Handoff-ovi \u002F specijalisti","SDK primitivi za orkestraciju","Ponašanje harness-a \u002F podagenata u Agents API-ju; ne pretpostavljajte semantiku jedan-na-jedan",[308,309,310],"Okruženje za izvršavanje","Vaš runtime aplikacije ili okruženje specifično za alat","Opciono OpenAI-hosted ili self-hosted okruženje povezano sa sesijom",[312,313,314],"Striming","SDK striming iz pokretanja","Tok događaja Agents API sesije",[316,317,318],"Asinhroni životni ciklus","Obično njime upravlja aplikacija oko SDK pokretanja","Nativna stanja sesije, asinhroni potezi i webhook-ovi",[320,321,322],"Praćenje \u002F observabilnost","Agents SDK praćenje i logovi aplikacije","Logovi Agents sesije, događaji, potezi, pozivi alata, podagenti i trace-ovi koji se mogu izvesti",[324,325,326],"Oporavak","Odgovornost aplikacije","Upravljani oporavak harness-a\u002Fsesije plus oporavak u vlasništvu aplikacije za eksterne sisteme i self-hosted okruženja","table",{},{"id":330,"data":331,"type":42,"tunes":333},"h-conceptual",{"text":332,"level":219},"Šta može konceptualno da se migrira bez promene vlasništva",{},{"id":335,"data":336,"type":226,"tunes":338},"p-conceptual-1",{"text":337},"Nekoliko koncepata aplikacije čisto preživi migraciju iako se njihova reprezentacija menja. Modeli, instrukcije, JSON-schema definicije funkcija, MCP pristup, opisi alata i zahtevi za strukturisanim izlazom i dalje su stvar konfiguracije agenta.",{},{"id":340,"data":341,"type":226,"tunes":343},"p-conceptual-2",{"text":342},"OpenAI model konfiguracije Agents API-ja eksplicitno definiše agenta kroz model, instrukcije, alate, rezonovanje i ponašanje izlaza. Function alati ostaju kod aplikacije: harness zahteva poziv funkcije, a vaš handler vraća rezultat. OpenAI takođe napominje da implementacije funkcija koje se koriste sa Responses API-jem mogu da se ponovo koriste sa tokom Agents API sesije.",{},{"id":345,"data":346,"type":234,"tunes":350},"good-candidate",{"body":347,"title":348,"variant":349},"Čista poslovna funkcija kao što je \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> ne bi trebalo da zna da li je pozivalac Agents SDK ili Agents API. Zadržite njenu domensku logiku iza stabilnog interfejsa aplikacije i migrirajte samo adapter okrenut agentu.","Dobar kandidat za migraciju","success",{},{"id":352,"data":353,"type":42,"tunes":355},"h-no-one",{"text":354,"level":219},"Šta ne treba migrirati jedan-na-jedan",{},{"id":357,"data":358,"type":226,"tunes":360},"p-no-one-1",{"text":359},"Opasan obrazac migracije je ponovno stvaranje svake SDK runtime apstrakcije unutar Agents API-ja. To može da dovede do toga da plaćate za upravljani harness dok i dalje vodite senoviti harness u svojoj aplikaciji.",{},{"id":362,"data":363,"type":327,"tunes":393},"no-one-table",{"content":364,"stretched":43,"withHeadings":14},[365,369,373,377,381,385,389],[366,367,368],"Pretpostavka iz SDK ere","Zašto je direktno kopiranje rizično","Pitanje migracije",[370,371,372],"Petlja aplikacije poseduje svaki nastavak","Agents API već poseduje harness petlju","Koja logika nastavka je logika proizvoda, a koja treba da pređe u upravljanu sesiju?",[374,375,376],"Lokalni objekat sesije je primarni mehanizam kontinuiteta","Agents API sesije su trajni resursi sa sopstvenim životnim ciklusom","Koje stanje pripada sesiji, a koje bazi podataka proizvoda?",[378,379,380],"Svaki prekid se obrađuje sinhrono","Agents API potezi su asinhroni i mogu da izlože action_required stanja","Koje radnje zahtevaju webhook-ove, workere, idempotentnost i nastavljive handlere?",[382,383,384],"Izvršavanje svih alata se dešava tamo gde se pokreće SDK proces","Function handler-i i okruženja za izvršavanje mogu biti odvojeni","Gde bi svaki alat zapravo trebalo da se izvršava?",[386,387,388],"SDK trace je operativna vremenska linija","Agents API izlaže događaje sesije, poteze i upravljane trace-ove","Koji podaci revizije na nivou aplikacije i dalje zahtevaju sopstveni zapis?",[390,391,392],"Handoff objekat se direktno mapira na hostovani model podagenta","Semantika runtime-a može da se razlikuje","Koje vlasništvo vidljivo korisniku i ponašanje specijalista mora da se očuva, a ne samo stara struktura klasa?",{},{"id":395,"data":396,"type":42,"tunes":398},"h-domain",{"text":397,"level":219},"Korak 1 — Razdvojite stanje domena od stanja sesije agenta",{},{"id":400,"data":401,"type":226,"tunes":403},"p-domain-1",{"text":402},"Pre nego što dirnete API pozive, klasifikujte stanje koje vaša SDK aplikacija trenutno nosi. Neka stanja postoje samo da bi se razgovor agenta odvijao. Druga stanja su poslovna istina: korisničke dozvole, status projekta, podaci o porudžbini, odobrenje radnog toka, evidencija klijenata, verzije dokumenata, stanje politike ili konfiguracija aplikacije.",{},{"id":405,"data":406,"type":226,"tunes":408},"p-domain-2",{"text":407},"Druga kategorija ne bi trebalo da postane zavisna od sesije Agents API-ja. Trajna sesija je korisna za kontinuitet agenta; ona nije zamena za izvor istine vašeg proizvoda. Ako sesija nestane, istekne, bude ponovo izgrađena ili promeni implementaciju, vaša aplikacija i dalje mora da zna šta je istina.",{},{"id":410,"data":411,"type":441,"tunes":442},"state-test",{"rows":412,"title":430,"layout":327,"columns":431},[413,418,422,426],{"id":414,"label":415,"values":416},"conversation","Kontinuitet razgovora",[417,417,417],"",{"id":419,"label":420,"values":421},"domain","Poslovna istina",[417,417,417],{"id":423,"label":424,"values":425},"artifact","Trajni artefakt",[417,417,417],{"id":427,"label":428,"values":429},"ephemeral","Radno privremeno stanje",[417,417,417],"Test smeštanja stanja",[432,435,438],{"id":433,"label":434},"type","Tip stanja",{"id":436,"label":437},"place","Preferirani vlasnik",{"id":439,"label":440},"reason","Razlog","comparison",{},{"id":444,"data":445,"type":42,"tunes":447},"h-events",{"text":446,"level":219},"Korak 2 — Pretvorite način razmišljanja pokretača u način razmišljanja sesije i događaja",{},{"id":449,"data":450,"type":226,"tunes":452},"p-events-1",{"text":451},"SDK aplikacije često razmišljaju u smislu pozivanja run i primanja rezultata. Agents API razmišlja u smislu trajne sesije čiji potezi mogu da se izvršavaju asinhrono. Poruka sesiji koja miruje pokreće rad; poruka tokom aktivnog poteza može da ga usmeri. Napredak stiže putem strimovanja ili webhook-ova.",{},{"id":454,"data":455,"type":226,"tunes":457},"p-events-2",{"text":456},"Ovo utiče na arhitekturu aplikacije. Dugotrajni produkcioni rad ne bi trebalo da zavisi od toga da jedan HTTP zahtev ostane živ. Vaš proizvod zahteva stabilne identifikatore sesije, trajnost životnog ciklusa, verifikaciju webhook-ova, idempotentne rukovaoce i način da se uskladi trenutno stanje sesije nakon ponovnog pokretanja procesa.",{},{"id":459,"data":460,"type":42,"tunes":462},"h-functions",{"text":461,"level":219},"Korak 3 — Redizajnirajte funkcijske alate oko potrebnih radnji",{},{"id":464,"data":465,"type":226,"tunes":467},"p-functions-1",{"text":466},"Funkcijski alati ostaju važna granica aplikacije. Funkciju i njenu JSON šemu definišete u konfiguraciji agenta. Kada harness-u zatreba funkcija, sesija može da uđe u stanje koje zahteva radnju. Vaša aplikacija preuzima potrebnu radnju, izvršava poslovnu logiku i vraća rezultat.",{},{"id":469,"data":470,"type":226,"tunes":472},"p-functions-2",{"text":471},"To znači da implementacija funkcije treba da bude bezbedna za nastavljanje. Webhook može biti isporučen dok drugi radnik obrađuje. Mrežni kvar može nastati nakon spoljnog efekta, ali pre nego što se rezultat vrati. Migracija je stoga dobar trenutak da se konsekventnim alatima dodaju ID-ovi poziva, idempotentni ključevi, eksplicitna autorizacija, politike tajm-auta i revizorski zapisi.",{},{"id":474,"data":475,"type":234,"tunes":478},"tool-trap",{"body":476,"title":477,"variant":241},"Nemojte tretirati poziv funkcije iz upravljanog harness-a kao autorizaciju za izvršenje radnje. Harness odlučuje \u003Cem>šta želi da pozove\u003C\u002Fem>; vaša aplikacija i dalje odlučuje da li trenutni korisnik, sesija i poslovno stanje dozvoljavaju tu radnju.","Zamka migracije alata",{},{"id":480,"data":481,"type":42,"tunes":483},"h-environment",{"text":482,"level":219},"Korak 4 — Odlučite gde treba da se odvija izvršavanje",{},{"id":485,"data":486,"type":226,"tunes":488},"p-env-1",{"text":487},"Agents API razdvaja upravljani harness od okruženja za izvršavanje. Agent može da radi bez namenskog okruženja, u OpenAI sandbox-u koji je hostovan, ili putem samostalno hostovanog okruženja povezanog sa sesijom.",{},{"id":490,"data":491,"type":226,"tunes":493},"p-env-2",{"text":492},"Ovo stvara odluku o migraciji koju SDK aplikacije možda nikada nisu eksplicitno donele: koji kod treba da se izvršava kao funkcija aplikacije, koji kod pripada sandbox-u i koji radni zadaci zahtevaju infrastrukturu koju kontrolišete?",{},{"id":495,"data":496,"type":327,"tunes":516},"environment-table",{"content":497,"stretched":43,"withHeadings":14},[498,501,504,507,510,513],[499,500],"Potreba","Verovatna granica",[502,503],"Pozivanje postojećeg internog servisa kroz kontrolisanu poslovnu logiku","Funkcijski alat kojim upravlja vaša aplikacija",[505,506],"Pokretanje izolovanog koda ili rad sa privremenim datotekama bez privatne infrastrukture","OpenAI hostovano okruženje",[508,509],"Pristup resursima privatne mreže, prilagođenom sistemskom softveru ili kontrolisanom lokalnom računarstvu","Samostalno hostovano okruženje",[511,512],"Trajno čuvanje prihvaćenih artefakata proizvoda","Skladište u vlasništvu aplikacije, ne samo fajl sistem sandbox-a",[514,515],"Izvršavanje poslovnog sporednog efekta sa visokim uticajem","Funkcija aplikacije sa kontrolama autorizacije i revizije",{},{"id":518,"data":519,"type":42,"tunes":521},"h-recovery",{"text":520,"level":219},"Korak 5 — Zamenite implicitni oporavak eksplicitnim upravljanjem životnim ciklusom",{},{"id":523,"data":524,"type":226,"tunes":526},"p-recovery-1",{"text":525},"Upravljani harness obezbeđuje oporavak na nivou sesije, ali vaša aplikacija i dalje poseduje svaku spoljnu zavisnost oko nje. Samostalno hostovana okruženja zahtevaju pripremu, ponovno povezivanje i gašenje. Rukovaoci funkcija mogu da ne uspeju. Webhook-ovi mogu biti ponovo pokušani. Stanje na strani proizvoda može se promeniti dok agent miruje.",{},{"id":528,"data":529,"type":226,"tunes":531},"p-recovery-2",{"text":530},"Migracija stoga zahteva dva modela oporavka: oporavak izvršnog okruženja agenta i oporavak poslovne operacije. Prvi sve više upravlja Agents API. Drugi ostaje vaša odgovornost.",{},{"id":533,"data":534,"type":42,"tunes":536},"h-observability",{"text":535,"level":219},"Korak 6 — Ponovo izgradite observabilnost oko nove granice traga",{},{"id":538,"data":539,"type":226,"tunes":541},"p-obs-1",{"text":540},"Sesije Agents API-ja izlažu događaje, sačuvanu istoriju, turnove, pozive alata, podagente i potrošnju tokena. OpenAI takođe pruža dnevnike sesija na platformi i izvoz tragova.",{},{"id":543,"data":544,"type":226,"tunes":546},"p-obs-2",{"text":545},"Ne odbacujte observabilnost svoje aplikacije samo zato što su se tragovi platforme poboljšali. Dnevnici proizvoda i dalje moraju da povežu sesiju agenta sa identitetom korisnika, odlukom o autorizaciji, domenskim objektom, nuspojavom alata, zapisom o odobrenju i konačnim prihvaćenim rezultatom. Koristan trag u produkciji je spoj između dokaza iz okruženja agenta i dokaza iz poslovnog okruženja.",{},{"id":548,"data":549,"type":554,"tunes":555},"ref-reliability",{"url":550,"title":551,"excerpt":552,"ctaLabel":553},"https:\u002F\u002Fstajic.de\u002Fsr\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough","Pouzdanost AI agenata: Zašto konačan odgovor nije dovoljan","Pouzdanost agenta zavisi od putanje izvršavanja, alata i međukoraka — ne samo od konačnog izlaza.","Pročitajte članak o pouzdanosti","referralArticle",{},{"id":557,"data":558,"type":42,"tunes":560},"h-evals",{"text":559,"level":219},"Korak 7 — Sačuvajte evaluacije pre promene okruženja",{},{"id":562,"data":563,"type":226,"tunes":565},"p-evals-1",{"text":564},"Migracija može izgledati uspešno jer novi sistem i dalje daje verodostojne odgovore, dok tiho menja izbor alata, kontinuitet sesije, ponašanje pri predaji, latenciju ili oporavak od grešaka. Izgradite bihevioralnu osnovu pre prelaska na novo okruženje.",{},{"id":567,"data":568,"type":226,"tunes":570},"p-evals-2",{"text":569},"Osnova treba da uključi reprezentativne zadatke, očekivane pozive alata, zabranjene radnje, tačke odobrenja, kontinuitet stanja, scenarije oporavka i kriterijume prihvatanja konačnog izlaza. Pokrenite staru i novu arhitekturu na istim slučajevima gde god je to moguće.",{},{"id":572,"data":573,"type":42,"tunes":575},"h-proof",{"text":574,"level":219},"Test dokaza migracije",{},{"id":577,"data":578,"type":606,"tunes":607},"proof-flow",{"steps":579,"title":604,"orientation":605},[580,583,586,589,592,595,598,601],{"label":581,"description":582},"1. Zamrznite bihevioralnu osnovu","Snimite reprezentativne tragove SDK-a, očekivane izlaze, putanje alata, tačke odobrenja i slučajeve neuspeha.",{"label":584,"description":585},"2. Popišite vlasništvo nad stanjem","Označite svako polje stanja kao stanje sesije agenta, autoritativno domensko stanje, trajni artefakt ili efemerno radno stanje.",{"label":587,"description":588},"3. Ponovo koristite stabilne implementacije alata","Zadržite poslovne funkcije iza interfejsa aplikacije; zamenite samo integraciju okrenutu agentu gde je to moguće.",{"label":590,"description":591},"4. Izgradite jedan vertikalni presek Agents API-ja","Migrirajte jedan tok rada u obliku produkcijskog, uključujući kreiranje sesije, alate, događaje, okruženje i perzistenciju.",{"label":593,"description":594},"5. Ubacite prekide","Testirajte restart procesa, ponovni pokušaj webhook-a, istek funkcije, ponovno povezivanje samostalno hostovanog okruženja i zastarelo domensko stanje.",{"label":596,"description":597},"6. Uporedite tragove, ne samo odgovore","Proverite izbor alata, autorizaciju, putanju dokaza, prelaze stanja i nuspojave u odnosu na osnovu.",{"label":599,"description":600},"7. Pokrenite senovni saobraćaj","Gde je izvodljivo, ponovo pustite ili preslikajte reprezentativne zadatke pre nego što novo okruženje postane autoritativno.",{"label":602,"description":603},"8. Pređite iza reverzibilne granice","Zadržite integracione adaptere i mogućnost vraćanja dok produkcijsko ponašanje ne postane stabilno.","Dokažite novo okruženje pre prelaska","auto","processFlow",{},{"id":609,"data":610,"type":42,"tunes":612},"h-metrics",{"text":611,"level":219},"Šta meriti tokom migracije",{},{"id":614,"data":615,"type":327,"tunes":646},"metrics-table",{"content":616,"stretched":43,"withHeadings":14},[617,620,623,626,629,631,634,637,640,643],[618,619],"Dimenzija","Provera migracije",[621,622],"Uspeh zadatka","Da li novo okruženje ispunjava iste ili bolje kriterijume prihvatanja?",[624,625],"Ispravnost alata","Da li poziva pravi alat sa validnim argumentima i autorizacijom?",[627,628],"Kontinuitet stanja","Može li se rad nastaviti kroz turnove, restarte i asinhrone čekanja?",[324,630],"Šta se dešava nakon gubitka webhook-a, neuspeha rukovaoca, prekida veze sa okruženjem ili isteka vremena?",[632,633],"Sledljivost","Može li se svaka značajna radnja povezati sa sesijom, korisnikom, pozivom alata i domenskim objektom?",[635,636],"Ponašanje konteksta","Da li dugotrajne sesije čuvaju ograničenja bez nošenja zastarele istine aplikacije?",[638,639],"Latencija","Kako pokretanje sesije, obezbeđivanje okruženja i rad kroz više turnova utiču na vreme vidljivo korisniku?",[641,642],"Trošak","Šta se menja u korišćenju modela, korišćenju sandbox-a, ponavljanju konteksta i infrastrukturnim operacijama?",[644,645],"Operativno opterećenje","Koje su odgovornosti koje je ranije imala aplikacija zaista nestale, a koje su se samo premestile?",{},{"id":648,"data":649,"type":42,"tunes":651},"h-not-yet",{"text":650,"level":219},"Kada još ne treba migrirati",{},{"id":653,"data":654,"type":226,"tunes":656},"p-not-yet-1",{"text":655},"Postojeća aplikacija sa Agents SDK-om ne postaje loša arhitektura samo zato što se smer platforme promenio. OpenAI nastavlja održavanje, bezbednosne ispravke, ispravke kritičnih grešaka i rad na kompatibilnosti. Ako je aplikacija stabilna, dobro evaluirana i nema blokiran zahtev na planu razvoja, trenutna migracija okruženja možda nije opravdana.",{},{"id":658,"data":659,"type":669,"tunes":670},"not-yet-list",{"meta":660,"items":661,"style":668},{},[662,663,664,665,666,667],"Potrebna mogućnost SDK-a još nije dostupna u Agents API-ju.","Migracija bi poremetila kritični produkcijski period bez donošenja kratkoročne vrednosti.","Aplikacija zavisi od prilagođene semantike orkestracije koja nije validirana na upravljanom okviru.","Prenosivost između provajdera je čvrst zahtev i trenutna apstrakcija SDK-a je materijalno vredna.","Vaš tim još nije razdvojio poslovno stanje od stanja okruženja agenta, što prelazak čini nesigurnim.","Novo ponašanje Agents API-ja nije testirano na reprezentativnim produkcijskim opterećenjima.","unordered","list",{},{"id":672,"data":673,"type":42,"tunes":675},"h-when",{"text":674,"level":219},"Kada migracija postaje strateški važna",{},{"id":677,"data":678,"type":226,"tunes":680},"p-when-1",{"text":679},"Migracija postaje privlačnija kada se zahtevi proizvoda usklade sa upravljanim okvirom: trajni dugotrajni rad, upravljanje sažimanjem i oporavkom konteksta od strane platforme, novije mogućnosti okruženja agenata, izvršavanje u sandbox-u, bogatije hostovano upravljanje životnim ciklusom ili želja da se smanji količina koda za orkestraciju koji vaša aplikacija održava.",{},{"id":682,"data":683,"type":226,"tunes":685},"p-when-2",{"text":684},"Najjači signal nije „stari SDK je funkcionalno kompletan“. To je „naš plan razvoja sada zavisi od mogućnosti čiji je prirodni dom upravljano Agents API okruženje“.",{},{"id":687,"data":688,"type":42,"tunes":690},"h-change",{"text":689,"level":219},"Šta bi promenilo ovaj odgovor?",{},{"id":692,"data":693,"type":226,"tunes":695},"p-change-1",{"text":694},"Strategija migracije bi se promenila ako OpenAI objavi automatizovane alate za migraciju, uvede eksplicitne slojeve kompatibilnosti, promeni semantiku sesija Agents API-ja, proširi ili suzi podršku za samostalno hostovana okruženja ili promeni politiku podrške za Agents SDK.",{},{"id":697,"data":698,"type":226,"tunes":700},"p-change-2",{"text":699},"Promenila bi se i ako se promene zahtevi vašeg proizvoda. Jednostavan asistent za zahtev-odgovor možda uopšte ne zahteva trajni upravljani harness. Dugotrajni agent za kodiranje, istraživanje ili operacije može imati mnogo više koristi od modela vlasništva Agents API-ja.",{},{"id":702,"data":703,"type":42,"tunes":705},"h-limitations",{"text":704,"level":219},"Ograničenja",{},{"id":707,"data":708,"type":226,"tunes":710},"p-limit-1",{"text":709},"Ne postoji univerzalna mapa migracije jedan-na-jedan sa SDK-a na API jer aplikacije koriste Agents SDK na različite načine. Neke se u velikoj meri oslanjaju na sesije i predaje; druge ga koriste kao tanak runner oko funkcijskih alata. Ispravna migracija zavisi od toga koje odgovornosti vaša aplikacija zapravo poseduje danas.",{},{"id":712,"data":713,"type":226,"tunes":715},"p-limit-2",{"text":714},"Agents API je takođe u javnoj beta verziji, tako da se detalji implementacije mogu menjati. Smatrajte principe vlasništva u ovom članku trajnijim od bilo kog pojedinačnog oblika endpointa.",{},{"id":717,"data":718,"type":42,"tunes":720},"h-conclusion",{"text":719,"level":219},"Zaključak",{},{"id":722,"data":723,"type":226,"tunes":725},"p-conclusion-1",{"text":724},"Migraciju sa Agents SDK na Agents API najbolje je razumeti kao pomeranje granice agent-runtime-a. Upravljani harness preuzima veći deo petlje, kontinuiteta sesije, kompakcije i oporavka. Vaša aplikacija treba da postane eksplicitnija u pogledu odgovornosti koje ostaju vaše: istinitost domena, autorizacija, nuspojave funkcija, artefakti, revizibilnost i životni ciklus proizvoda.",{},{"id":727,"data":728,"type":226,"tunes":730},"p-conclusion-2",{"text":729},"Ako migracija ostavi svu staru mašineriju orkestracije na mestu i samo zameni pozive SDK-a pozivima Agents API-ja, verovatno je propustila arhitektonsku priliku. Cilj nije da se stari runtime reprodukuje na vrhu novog. Cilj je da se odluči koje odgovornosti runtime-a više ne pripadaju vašoj aplikaciji.",{},{"id":732,"data":733,"type":42,"tunes":735},"h-faq",{"text":734,"level":219},"Često postavljana pitanja",{},{"id":737,"data":738,"type":737,"tunes":761},"faq",{"items":739,"title":760},[740,744,748,752,756],{"id":741,"answer":742,"question":743},"faq1","Ne. Glavna promena je vlasništvo nad runtime-om: Agents SDK pokreće agent petlju u vašoj aplikaciji, dok Agents API pokreće upravljani Codex harness i trajnu sesiju. Stanje, životni ciklus, rukovanje događajima i oporavak treba posmatrati kao arhitektonske brige.","Da li je migracija sa Agents SDK na Agents API samo prepisivanje API-ja?",{"id":745,"answer":746,"question":747},"faq2","Poslovna implementacija se često može ponovo iskoristiti ako je već iza stabilnog interfejsa aplikacije. Integracija okrenuta agentu se menja jer se pozivi funkcija Agents API-ja obrađuju kroz zahtevane akcije sesije i rezultate.","Da li moje funkcijske alate treba prepisati?",{"id":749,"answer":750,"question":751},"faq3","Uopšteno ne. Čuvajte autoritativno poslovno i proizvodno stanje u sopstvenim bazama podataka ili servisima. Koristite sesiju agenta za kontinuitet agenta i radni kontekst, a ne kao jedini izvor istine za vaš proizvod.","Da li treba da premestim poslovno stanje u sesiju Agents API-ja?",{"id":753,"answer":754,"question":755},"faq4","Ne uvek, jer je dostupno i strimovanje. Webhook-ovi su posebno korisni za dugotrajne ili asinhrone sesije gde vaša aplikacija treba da reaguje na promene životnog ciklusa bez držanja otvorenog strima.","Da li su mi potrebni webhook-ovi za Agents API?",{"id":757,"answer":758,"question":759},"faq5","Ne. SDK ostaje podržan u režimu održavanja. Migrirajte kada novi runtime pruži značajnu vrednost za plan razvoja i nakon što je potrebno ponašanje validirano kroz evaluacije oblika produkcije.","Da li svaka postojeća aplikacija sa Agents SDK treba sada da migrira?","Migracija sa Agents SDK na Agents API",{},{"id":763,"data":764,"type":42,"tunes":766},"h-glossary",{"text":765,"level":219},"Pojmovnik",{},{"id":768,"data":769,"type":768,"tunes":794},"glossary",{"title":770,"entries":771},"Ključni pojmovi migracije",[772,776,780,784,788,791],{"term":773,"anchor":774,"definition":775},"Granica runtime-a","runtime-boundary","Podela odgovornosti između platformski upravljanog agent runtime-a i runtime-a u vlasništvu aplikacije.",{"term":777,"anchor":778,"definition":779},"Harness","harness","Agent runtime koji koordinira pozive modela, alate, kontekst, orkestraciju i nastavljeno izvršavanje.",{"term":781,"anchor":782,"definition":783},"Sesija","session","Trajna instanca Agents API-ja koja čuva konfiguraciju agenta, razgovor i sačuvani rad kroz turn-e.",{"term":785,"anchor":786,"definition":787},"Zahtevana akcija","required-action","Stanje sesije u kojem Agents API zahteva spoljni unos, kao što je rezultat funkcije ili veza sa okruženjem, pre nego što se rad može nastaviti.",{"term":509,"anchor":789,"definition":790},"self-hosted-environment","Izvršno okruženje kojim upravlja vaša infrastruktura i koje je povezano sa upravljanim Agents API harness-om.",{"term":574,"anchor":792,"definition":793},"migration-proof-test","Metod postepene validacije koji poredi novi runtime sa bihejvioralnim osnovama, ubacivanjem grešaka, tragovima i kriterijumima reverzibilnog prelaska.",{},{"id":796,"data":797,"type":42,"tunes":799},"h-sources",{"text":798,"level":219},"Primarni izvori i dodatno čitanje",{},{"id":801,"data":802,"type":808,"tunes":809},"src-sdk",{"link":803,"meta":804},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk",{"image":805,"title":806,"description":807},{"url":417},"OpenAI — Agents SDK","Trenutna politika podrške: Agents SDK je funkcionalno kompletan, ostaje održavan, a nove aplikacije treba da počnu sa Agents API-jem.","linkTool",{},{"id":811,"data":812,"type":808,"tunes":818},"src-running-sdk",{"link":813,"meta":814},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents",{"image":815,"title":816,"description":817},{"url":417},"OpenAI — Pokretanje agenata sa Agents SDK","Dokumentacija o agent petlji u vlasništvu aplikacije i modelu nastavljanja u SDK-u.",{},{"id":820,"data":821,"type":808,"tunes":827},"src-api-overview",{"link":822,"meta":823},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview",{"image":824,"title":825,"description":826},{"url":417},"OpenAI — Pregled Agents API-ja","Definiše osnovne koncepte Agents API-ja: agent, okruženje, sesija, događaji i stavke.",{},{"id":829,"data":830,"type":808,"tunes":836},"src-api-architecture",{"link":831,"meta":832},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture",{"image":833,"title":834,"description":835},{"url":417},"OpenAI — Arhitektura Agents API-ja","Objašnjava granice hostovanog harness-a, aplikacijskog servera, OpenAI-hostovanog i samostalno hostovanog izvršnog okruženja.",{},{"id":838,"data":839,"type":808,"tunes":845},"src-api-config",{"link":840,"meta":841},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration",{"image":842,"title":843,"description":844},{"url":417},"OpenAI — Konfigurisanje agenata","Definiše konfiguraciju agenata koja se može ponovo koristiti i prilagođavanje na nivou sesije.",{},{"id":847,"data":848,"type":808,"tunes":854},"src-api-sessions",{"link":849,"meta":850},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions",{"image":851,"title":852,"description":853},{"url":417},"OpenAI — Pokretanje i nastavljanje sesija","Dokumentuje trajne sesije, asinhrone cikluse, strimovanje i upravljanje.",{},{"id":856,"data":857,"type":808,"tunes":863},"src-api-functions",{"link":858,"meta":859},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions",{"image":860,"title":861,"description":862},{"url":417},"OpenAI — Agents API funkcije","Definicija funkcijskog alata i granica rukovaoca aplikacije za potrebne rezultate funkcija.",{},{"id":865,"data":866,"type":808,"tunes":872},"src-api-webhooks",{"link":867,"meta":868},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks",{"image":869,"title":870,"description":871},{"url":417},"OpenAI — Sesiјski webhook-ovi","Događaji životnog ciklusa za asinhrone sesije, potrebne radnje i veze sa samostalno hostovanim okruženjem.",{},{"id":874,"data":875,"type":808,"tunes":881},"src-api-observability",{"link":876,"meta":877},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability",{"image":878,"title":879,"description":880},{"url":417},"OpenAI — Agents API nadziranje i korišćenje","Sesiјski logovi, događaji, ciklusi, pozivi alata, podagenti, tragovi i pregled korišćenja tokena.",{},{"id":223,"data":883,"type":226,"tunes":885},{"text":884},"Migracija sa OpenAI Agents SDK na Agents API nije preimenovanje importa. Menja se osnovna arhitektonska granica: SDK pokreće petlju agenta unutar vaše aplikacije, dok Agents API pokreće upravljani Codex okvir i trajnu sesiju na OpenAI strani. Pitanje migracije stoga nije „Koje klase se mapiraju na koje krajnje tačke?“ već „Koje odgovornosti izvršavanja prelaze granicu, koje ostaju u našoj aplikaciji i koje treba redizajnirati?“",{},{"id":229,"data":887,"type":234,"tunes":889},{"body":888,"title":232,"variant":233},"\u003Cstrong>Prava migracija sa Agents SDK na Agents API menja vlasništvo nad izvršavanjem.\u003C\u002Fstrong> Vaša konfiguracija agenta koja se može ponovo koristiti i dalje može da sadrži model, instrukcije i alate, ali petlja, trajna sesija, orkestracija, sažimanje konteksta i oporavak prelaze ka upravljanom Agents API izvršnom okruženju. Vaša aplikacija treba da zadrži stanje domena, autorizaciju, poslovna pravila, implementacije funkcija i logiku revizije izvan sesije agenta. Tretirajte migraciju kao redizajn granice, a ne kao mehaničku konverziju koda.",{},{"id":237,"data":891,"type":234,"tunes":893},{"body":892,"title":240,"variant":241},"OpenAI trenutno označava Agents SDK kao \u003Cstrong>funkcionalno kompletan\u003C\u002Fstrong> i preporučuje Agents API za nove aplikacije agenata. Agents API je u javnoj beta verziji. Postojeće SDK aplikacije ostaju podržane, a trenutna migracija nije automatski neophodna.",{},{"id":244,"data":895,"type":234,"tunes":897},{"body":896,"title":247,"variant":248},"Mapa migracije granica izvršavanja i test dokaza migracije u ovom članku su praktični arhitektonski alati, a ne zvanični OpenAI okviri za migraciju. Oni su izvedeni iz trenutnih razlika u izvršavanju koje dokumentuje OpenAI.",{},{"id":899,"data":900,"type":220,"tunes":901},"toc",{"title":217,"maxLevel":218,"minLevel":219},{},{"id":251,"data":903,"type":42,"tunes":905},{"text":904,"level":219},"Migracija je sa petlje koju poseduje aplikacija na upravljani okvir",{},{"id":256,"data":907,"type":226,"tunes":909},{"text":908},"U Agents SDK, jedno pokretanje je ciklus na nivou aplikacije. SDK pokretač poziva model, pregleda izlaz, izvršava alate, prati predaje i nastavlja dok ne dođe do tačke zaustavljanja. Vaš proces hostuje tu petlju i stoga poseduje njen životni ciklus.",{},{"id":261,"data":911,"type":226,"tunes":913},{"text":912},"U Agents API, OpenAI pokreće okvir. Sesija je trajna instanca konfiguracije agenta koja prihvata zadatke, proizvodi događaje, može da se pauzira radi potrebnih radnji i može da se nastavi tokom vremena. OpenAI upravlja sesijama, orkestracijom, sažimanjem konteksta i oporavkom; vaša aplikacija šalje posao, rukuje funkcijskim alatima, prima događaje i opciono upravlja samostalno hostovanim izvršnim okruženjem.",{},{"id":266,"data":915,"type":226,"tunes":917},{"text":916},"Taj prelaz vlasništva je migracija. Sve ostalo — sintaksa API-ja, šeme alata, rukovanje događajima, ID-ovi sesija — proizlazi iz toga.",{},{"id":271,"data":919,"type":42,"tunes":921},{"text":920,"level":219},"Mapa migracije granica izvršavanja",{},{"id":276,"data":923,"type":327,"tunes":959},{"content":924,"stretched":43,"withHeadings":14},[925,926,930,932,934,937,940,944,948,951,953,957],[280,281,282],[927,928,929],"Petlja agenta","Pokreće se u vašoj aplikaciji preko SDK pokretača","Pokreće se u upravljanom Codex okviru",[288,289,931],"Sačuvana ili ugrađena konfiguracija agenta sa modelom, instrukcijama i alatima",[292,933,294],"Strategija sesije SDK-a, istorija, nastavljanje rezultata ili skladištenje aplikacije",[296,935,936],"SDK koordinira pozive alata u vašem izvršnom okruženju","Okvir zahteva pozive funkcija; vaša aplikacija vraća rezultate",[300,938,939],"Vaše izvršno okruženje \u002F strategija sesije SDK-a","Upravljani kontekst sesije, sažimanje i oporavak, plus sopstvene granice podataka aplikacije",[941,942,943],"Predaje \u002F specijalisti","Primitivi orkestracije SDK-a","Ponašanje okvira \u002F podagenata u Agents API; ne pretpostavljajte semantiku jedan-na-jedan",[945,946,947],"Izvršno okruženje","Izvršno okruženje vaše aplikacije ili okruženje specifično za alat","Opciono OpenAI-hostovano ili samostalno hostovano okruženje povezano sa sesijom",[949,950,314],"Strimovanje","SDK strimovanje iz pokretanja",[316,317,952],"Nativna stanja sesije, asinhroni ciklusi i webhook-ovi",[954,955,956],"Praćenje \u002F nadziranje","Praćenje Agents SDK-a i logovi aplikacije","Logovi Agents sesije, događaji, ciklusi, pozivi alata, podagenti i tragovi koji se mogu izvesti",[324,325,958],"Upravljani oporavak okvira\u002Fsesije plus oporavak u vlasništvu aplikacije za eksterne sisteme i samostalno hostovana okruženja",{},{"id":330,"data":961,"type":42,"tunes":962},{"text":332,"level":219},{},{"id":335,"data":964,"type":226,"tunes":966},{"text":965},"Nekoliko koncepata aplikacije preživi migraciju čisto iako se njihova reprezentacija menja. Modeli, instrukcije, JSON-šema definicije funkcija, MCP pristup, opisi alata i zahtevi za strukturisanim izlazom su i dalje pitanja konfiguracije agenta.",{},{"id":340,"data":968,"type":226,"tunes":970},{"text":969},"OpenAI model konfiguracije Agents API eksplicitno definiše agenta kroz model, instrukcije, alate, rezonovanje i ponašanje izlaza. Funkcijski alati ostaju kod aplikacije: okvir zahteva poziv funkcije, a vaš rukovalac vraća rezultat. OpenAI takođe napominje da se implementacije funkcija koje se koriste sa Responses API mogu ponovo koristiti sa tokom Agents API sesije.",{},{"id":345,"data":972,"type":234,"tunes":974},{"body":973,"title":348,"variant":349},"Čista poslovna funkcija kao što je \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> ne bi trebalo da zna da li je pozivalac Agents SDK ili Agents API. Zadržite njenu domensku logiku iza stabilnog aplikacionog interfejsa i migrirajte samo adapter okrenut agentu.",{},{"id":352,"data":976,"type":42,"tunes":977},{"text":354,"level":219},{},{"id":357,"data":979,"type":226,"tunes":981},{"text":980},"Opasan obrazac migracije je ponovno stvaranje svake SDK runtime apstrakcije unutar Agents API-ja. To može dovesti do toga da plaćate za upravljani harness dok i dalje upravljate senovitim harness-om u svojoj aplikaciji.",{},{"id":362,"data":983,"type":327,"tunes":1000},{"content":984,"stretched":43,"withHeadings":14},[985,987,990,991,993,995,997],[366,367,986],"Pitanje za migraciju",[988,371,989],"Aplikaciona petlja poseduje svaki nastavak","Koja logika nastavka je logika proizvoda, a koja treba da se prebaci u upravljanu sesiju?",[374,375,376],[378,992,380],"Agents API potezi su asinhroni i mogu da prikažu stanja action_required",[994,383,384],"Svo izvršavanje alata se dešava tamo gde se pokreće SDK proces",[386,387,996],"Koji podaci za reviziju na nivou aplikacije i dalje zahtevaju sopstveni zapis?",[390,998,999],"Runtime semantika može da se razlikuje","Koje korisnički vidljivo vlasništvo i specijalističko ponašanje moraju da se očuvaju, a ne samo stara struktura klasa?",{},{"id":395,"data":1002,"type":42,"tunes":1004},{"text":1003,"level":219},"Korak 1 — Odvojite domensko stanje od stanja sesije agenta",{},{"id":400,"data":1006,"type":226,"tunes":1008},{"text":1007},"Pre nego što dodirnete API pozive, klasifikujte stanje koje vaša SDK aplikacija trenutno nosi. Neko stanje postoji samo da bi održalo razgovor agenta u pokretu. Drugo stanje je poslovna istina: korisničke dozvole, status projekta, podaci o porudžbini, odobrenje radnog toka, zapisi o klijentima, verzije dokumenata, stanje politike ili konfiguracija aplikacije.",{},{"id":405,"data":1010,"type":226,"tunes":1012},{"text":1011},"Druga kategorija ne bi trebalo da postane zavisna od Agents API sesije. Trajna sesija je koristan kontinuitet za agenta; ona nije zamena za izvor istine vašeg proizvoda. Ako sesija nestane, istekne, bude ponovo izgrađena ili promeni implementaciju, vaša aplikacija i dalje mora da zna šta je istina.",{},{"id":410,"data":1014,"type":441,"tunes":1028},{"rows":1015,"title":430,"layout":327,"columns":1024},[1016,1018,1020,1022],{"id":414,"label":415,"values":1017},[417,417,417],{"id":419,"label":420,"values":1019},[417,417,417],{"id":423,"label":424,"values":1021},[417,417,417],{"id":427,"label":428,"values":1023},[417,417,417],[1025,1026,1027],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":1030,"type":42,"tunes":1032},{"text":1031,"level":219},"Korak 2 — Pretvorite mentalni sklop runner-a u mentalni sklop sesije i događaja",{},{"id":449,"data":1034,"type":226,"tunes":1036},{"text":1035},"SDK aplikacije često razmišljaju u smislu pozivanja run i primanja rezultata. Agents API razmišlja u smislu trajne sesije čiji potezi mogu da se izvršavaju asinhrono. Poruka neaktivnoj sesiji započinje rad; poruka tokom aktivnog poteza može da ga usmeri. Napredak stiže putem streaming-a ili webhook-ova.",{},{"id":454,"data":1038,"type":226,"tunes":1040},{"text":1039},"Ovo utiče na arhitekturu aplikacije. Dugotrajni produkcioni rad ne bi trebalo da zavisi od toga da jedan HTTP zahtev ostane živ. Vaš proizvod zahteva stabilne identifikatore sesije, trajnost životnog ciklusa, verifikaciju webhook-ova, idempotentne handlere i način da se uskladi trenutno stanje sesije nakon ponovnog pokretanja procesa.",{},{"id":459,"data":1042,"type":42,"tunes":1044},{"text":1043,"level":219},"Korak 3 — Redizajnirajte function alate oko potrebnih radnji",{},{"id":464,"data":1046,"type":226,"tunes":1048},{"text":1047},"Function alati ostaju važna granica aplikacije. Vi definišete funkciju i njenu JSON šemu u konfiguraciji agenta. Kada harness-u zatreba funkcija, sesija može da uđe u stanje koje zahteva radnju. Vaša aplikacija preuzima potrebnu radnju, izvršava poslovnu logiku i vraća rezultat.",{},{"id":469,"data":1050,"type":226,"tunes":1052},{"text":1051},"To znači da implementacija funkcije treba da bude bezbedna za nastavljanje. Webhook može biti dostavljen dok drugi worker obrađuje. Mrežni kvar može nastupiti nakon spoljnog efekta, ali pre nego što se rezultat vrati. Migracija je stoga dobar trenutak da se konsekventnim alatima dodaju ID-ovi poziva, ključevi idempotentnosti, eksplicitna autorizacija, politike tajm-auta i zapisi za reviziju.",{},{"id":474,"data":1054,"type":234,"tunes":1056},{"body":1055,"title":477,"variant":241},"Ne tretirajte poziv funkcije iz upravljanog harness-a kao autorizaciju za izvršavanje radnje. Harness odlučuje \u003Cem>šta želi da pozove\u003C\u002Fem>; vaša aplikacija i dalje odlučuje da li trenutni korisnik, sesija i poslovno stanje dozvoljavaju tu radnju.",{},{"id":480,"data":1058,"type":42,"tunes":1059},{"text":482,"level":219},{},{"id":485,"data":1061,"type":226,"tunes":1063},{"text":1062},"Agents API razdvaja upravljani harness od okruženja za izvršavanje. Agent može da radi bez namenskog okruženja, u OpenAI-hostovanoj sandbox-u ili putem self-hosted okruženja povezanog sa sesijom.",{},{"id":490,"data":1065,"type":226,"tunes":1067},{"text":1066},"Ovo stvara odluku o migraciji koju SDK aplikacije možda nikada nisu eksplicitno donele: koji kod treba da se izvršava kao aplikaciona funkcija, koji kod pripada sandbox-u i koji radni zadaci zahtevaju infrastrukturu koju kontrolišete?",{},{"id":495,"data":1069,"type":327,"tunes":1080},{"content":1070,"stretched":43,"withHeadings":14},[1071,1072,1073,1075,1076,1078],[499,500],[502,503],[505,1074],"Okruženje koje hostuje OpenAI",[508,509],[511,1077],"Skladište u vlasništvu aplikacije, ne samo sandbox fajl sistem",[1079,515],"Izvršavanje poslovnog efekta sa velikim uticajem",{},{"id":518,"data":1082,"type":42,"tunes":1083},{"text":520,"level":219},{},{"id":523,"data":1085,"type":226,"tunes":1087},{"text":1086},"Upravljani harness obezbeđuje oporavak na nivou sesije, ali vaša aplikacija i dalje poseduje svaku spoljnu zavisnost oko njega. Samostalno hostovana okruženja zahtevaju provisioniranje, ponovno povezivanje i gašenje. Funkcijski rukovaoci mogu da zakažu. Webhook-ovi mogu biti ponovljeni. Stanje na strani proizvoda može se promeniti dok je agent neaktivan.",{},{"id":528,"data":1089,"type":226,"tunes":1091},{"text":1090},"Migracija stoga zahteva dva modela oporavka: oporavak agent-runtime-a i oporavak poslovnih operacija. Prvim sve više upravlja Agents API. Drugi ostaje vaša odgovornost.",{},{"id":533,"data":1093,"type":42,"tunes":1094},{"text":535,"level":219},{},{"id":538,"data":1096,"type":226,"tunes":1098},{"text":1097},"Sesije Agents API-ja izlažu događaje, sačuvanu istoriju, turn-ove, pozive alata, pod-agente i potrošnju tokena. OpenAI takođe obezbeđuje logove sesija na platformi i izvoz tragova.",{},{"id":543,"data":1100,"type":226,"tunes":1102},{"text":1101},"Ne odbacujte observabilnost svoje aplikacije samo zato što su se tragovi platforme poboljšali. Logovi proizvoda i dalje moraju da povežu sesiju agenta sa identitetom korisnika, odlukom o autorizaciji, domenskim objektom, sporednim efektom alata, zapisom o odobrenju i konačnim prihvaćenim rezultatom. Koristan produkcijski trag je spoj između dokaza agent-runtime-a i dokaza poslovnog runtime-a.",{},{"id":548,"data":1104,"type":554,"tunes":1106},{"url":550,"title":551,"excerpt":1105,"ctaLabel":553},"Pouzdanost agenata zavisi od putanje izvršavanja, alata i međukoraka — ne samo od konačnog izlaza.",{},{"id":557,"data":1108,"type":42,"tunes":1110},{"text":1109,"level":219},"Korak 7 — Sačuvajte evaluacije pre promene runtime-a",{},{"id":562,"data":1112,"type":226,"tunes":1114},{"text":1113},"Migracija može izgledati uspešno jer novi sistem i dalje daje verodostojne odgovore dok tiho menja izbor alata, kontinuitet sesije, ponašanje pri predaji, latenciju ili oporavak od greške. Izgradite bihevioralnu osnovu pre prebacivanja runtime-a.",{},{"id":567,"data":1116,"type":226,"tunes":1117},{"text":569},{},{"id":572,"data":1119,"type":42,"tunes":1120},{"text":574,"level":219},{},{"id":577,"data":1122,"type":606,"tunes":1138},{"steps":1123,"title":1137,"orientation":605},[1124,1126,1128,1129,1130,1131,1133,1136],{"label":581,"description":1125},"Snimite reprezentativne tragove SDK-a, očekivane izlaze, putanje alata, tačke odobrenja i slučajeve grešaka.",{"label":584,"description":1127},"Označite svako polje stanja kao stanje agent-sesije, autoritativno domensko stanje, trajni artefakt ili efemerno radno stanje.",{"label":587,"description":588},{"label":590,"description":591},{"label":593,"description":594},{"label":596,"description":1132},"Proverite izbor alata, autorizaciju, putanju dokaza, prelaze stanja i sporedne efekte u odnosu na osnovu.",{"label":1134,"description":1135},"7. Pokrenite shadow saobraćaj","Gde je izvodljivo, ponovo pustite ili preslikajte reprezentativne zadatke pre nego što novi runtime postane autoritativan.",{"label":602,"description":603},"Dokažite novi runtime pre prelaska",{},{"id":609,"data":1140,"type":42,"tunes":1141},{"text":611,"level":219},{},{"id":614,"data":1143,"type":327,"tunes":1160},{"content":1144,"stretched":43,"withHeadings":14},[1145,1146,1148,1149,1151,1153,1154,1155,1157,1158],[618,619],[621,1147],"Da li novi runtime ispunjava iste ili bolje kriterijume prihvatanja?",[624,625],[627,1150],"Može li se rad nastaviti kroz turn-ove, restarte i asinhrone čekanja?",[324,1152],"Šta se dešava nakon gubitka webhook-a, greške rukovaoca, prekida veze sa okruženjem ili isteka vremena?",[632,633],[635,636],[638,1156],"Kako pokretanje sesije, provisioniranje okruženja i rad kroz više turn-ova utiču na vreme vidljivo korisniku?",[641,642],[644,1159],"Koje su odgovornosti koje je ranije posedovala aplikacija zaista nestale, a koje su se samo premestile?",{},{"id":648,"data":1162,"type":42,"tunes":1163},{"text":650,"level":219},{},{"id":653,"data":1165,"type":226,"tunes":1167},{"text":1166},"Postojeća aplikacija sa Agents SDK ne postaje loša arhitektura samo zato što se smer platforme promenio. OpenAI nastavlja održavanje, bezbednosne ispravke, ispravke kritičnih grešaka i rad na kompatibilnosti. Ako je aplikacija stabilna, dobro evaluirana i nema blokiranu potrebu na mapi puta, trenutna migracija runtime-a možda nije opravdana.",{},{"id":658,"data":1169,"type":669,"tunes":1176},{"meta":1170,"items":1171,"style":668},{},[1172,663,1173,665,1174,1175],"Potrebna sposobnost SDK-a još nije dostupna u Agents API-ju.","Aplikacija zavisi od prilagođene semantike orkestracije koja nije validirana na upravljanom harness-u.","Vaš tim još nije razdvojio poslovno stanje od stanja agent-runtime-a, što prelazak čini nesigurnim.","Novo ponašanje Agents API-ja nije testirano na reprezentativnim produkcijskim radnim opterećenjima.",{},{"id":672,"data":1178,"type":42,"tunes":1179},{"text":674,"level":219},{},{"id":677,"data":1181,"type":226,"tunes":1183},{"text":1182},"Migracija postaje uverljivija kada se zahtevi proizvoda usklade sa upravljanim okvirom: trajni dugotrajni rad, upravljanje kompresijom i oporavkom konteksta na nivou platforme, novije mogućnosti agent-runtime-a, izvršavanje u sandbox-u, bogatije upravljanje životnim ciklusom na hostingu ili želja da se smanji količina koda za orkestraciju koji vaša aplikacija održava.",{},{"id":682,"data":1185,"type":226,"tunes":1187},{"text":1186},"Najjači signal nije „stari SDK je funkcionalno kompletan“. To je „naš plan razvoja sada zavisi od mogućnosti čiji je prirodni dom managed Agents API runtime“.",{},{"id":687,"data":1189,"type":42,"tunes":1190},{"text":689,"level":219},{},{"id":692,"data":1192,"type":226,"tunes":1194},{"text":1193},"Strategija migracije bi se promenila ako OpenAI objavi automatizovane alate za migraciju, uvede eksplicitne slojeve kompatibilnosti, promeni semantiku Agents API sesija, proširi ili suzi podršku za self-hosted okruženja ili promeni politiku podrške za Agents SDK.",{},{"id":697,"data":1196,"type":226,"tunes":1198},{"text":1197},"Takođe bi se promenilo ako se promene zahtevi vašeg proizvoda. Jednostavan asistent za zahtev-odgovor možda uopšte neće imati potrebu za trajnim upravljanim okvirom. Dugotrajni agent za kodiranje, istraživanje ili operacije može mnogo više da iskoristi model vlasništva Agents API-ja.",{},{"id":702,"data":1200,"type":42,"tunes":1201},{"text":704,"level":219},{},{"id":707,"data":1203,"type":226,"tunes":1205},{"text":1204},"Ne postoji univerzalna mapa migracije jedan-na-jedan sa SDK-a na API jer aplikacije koriste Agents SDK na različite načine. Neke se u velikoj meri oslanjaju na sesije i predaje; druge ga koriste kao tanak pokretač oko funkcijskih alata. Ispravna migracija zavisi od toga koje odgovornosti vaša aplikacija zapravo trenutno poseduje.",{},{"id":712,"data":1207,"type":226,"tunes":1209},{"text":1208},"Agents API je takođe u javnoj beta verziji, tako da se detalji implementacije mogu menjati. Smatrajte principe vlasništva u ovom članku trajnijim od bilo kog pojedinačnog oblika endpoint-a.",{},{"id":717,"data":1211,"type":42,"tunes":1212},{"text":719,"level":219},{},{"id":722,"data":1214,"type":226,"tunes":1216},{"text":1215},"Migraciju sa Agents SDK na Agents API najbolje je razumeti kao pomeranje granice agent-runtime-a. Upravljani okvir preuzima više petlje, kontinuiteta sesije, kompresije i oporavka. Vaša aplikacija treba da postane eksplicitnija u pogledu odgovornosti koje ostaju vaše: istinitost domena, autorizacija, nuspojave funkcija, artefakti, revizibilnost i životni ciklus proizvoda.",{},{"id":727,"data":1218,"type":226,"tunes":1220},{"text":1219},"Ako migracija ostavi svu staru mašineriju za orkestraciju na mestu i samo zameni pozive SDK-a pozivima Agents API-ja, verovatno je propustila arhitektonsku priliku. Cilj nije da se stari runtime reprodukuje na vrhu novog. Cilj je da se odluči koje odgovornosti runtime-a više ne pripadaju vašoj aplikaciji.",{},{"id":732,"data":1222,"type":42,"tunes":1223},{"text":734,"level":219},{},{"id":737,"data":1225,"type":737,"tunes":1238},{"items":1226,"title":760},[1227,1229,1231,1234,1235],{"id":741,"answer":1228,"question":743},"Ne. Glavna promena je vlasništvo nad runtime-om: Agents SDK pokreće agent petlju u vašoj aplikaciji, dok Agents API pokreće upravljani Codex okvir i trajnu sesiju. Stanje, životni ciklus, rukovanje događajima i oporavak treba posmatrati kao arhitektonska pitanja.",{"id":745,"answer":1230,"question":747},"Poslovna implementacija se često može ponovo iskoristiti ako je već iza stabilnog interfejsa aplikacije. Integracija okrenuta agentu se menja jer se pozivi funkcija Agents API-ja obrađuju kroz obavezne radnje i rezultate sesije.",{"id":749,"answer":1232,"question":1233},"Uopšteno ne. Zadržite autoritativno poslovno i proizvodno stanje u svojim bazama podataka ili servisima. Koristite agent sesiju za kontinuitet agenta i radni kontekst, a ne kao jedini izvor istine za vaš proizvod.","Da li treba da premestim poslovno stanje u Agents API sesiju?",{"id":753,"answer":754,"question":755},{"id":757,"answer":1236,"question":1237},"Ne. SDK ostaje podržan u režimu održavanja. Migrirajte kada novi runtime pruža značajnu vrednost za plan razvoja i nakon što je potrebno ponašanje validirano kroz evaluacije oblika produkcije.","Da li svaka postojeća Agents SDK aplikacija treba sada da migrira?",{},{"id":763,"data":1240,"type":42,"tunes":1241},{"text":765,"level":219},{},{"id":768,"data":1243,"type":768,"tunes":1257},{"title":770,"entries":1244},[1245,1246,1248,1250,1252,1255],{"term":773,"anchor":774,"definition":775},{"term":1247,"anchor":778,"definition":779},"Okvir",{"term":781,"anchor":782,"definition":1249},"Trajna Agents API instanca koja čuva konfiguraciju agenta, razgovor i sačuvani rad kroz turn-e.",{"term":1251,"anchor":786,"definition":787},"Obavezna radnja",{"term":1253,"anchor":789,"definition":1254},"Self-hosted okruženje","Izvršno okruženje kojim upravlja vaša infrastruktura i koje je povezano sa upravljanim Agents API okvirom.",{"term":574,"anchor":792,"definition":1256},"Metod postepene validacije koji upoređuje novi runtime sa bihevioralnim osnovama, ubacivanjem grešaka, tragovima i kriterijumima reverzibilnog prelaska.",{},{"id":796,"data":1259,"type":42,"tunes":1260},{"text":798,"level":219},{},{"id":801,"data":1262,"type":808,"tunes":1265},{"link":803,"meta":1263},{"image":1264,"title":806,"description":807},{"url":417},{},{"id":811,"data":1267,"type":808,"tunes":1272},{"link":813,"meta":1268},{"image":1269,"title":1270,"description":1271},{"url":417},"OpenAI — Pokretanje agenata uz Agents SDK","Dokumentacija SDK petlje agenta u vlasništvu aplikacije i modela nastavljanja.",{},{"id":820,"data":1274,"type":808,"tunes":1277},{"link":822,"meta":1275},{"image":1276,"title":825,"description":826},{"url":417},{},{"id":829,"data":1279,"type":808,"tunes":1283},{"link":831,"meta":1280},{"image":1281,"title":834,"description":1282},{"url":417},"Objašnjava granice hostovanog okvira, aplikacionog servera, OpenAI-hostovanog i samostalno hostovanog izvršnog okruženja.",{},{"id":838,"data":1285,"type":808,"tunes":1288},{"link":840,"meta":1286},{"image":1287,"title":843,"description":844},{"url":417},{},{"id":847,"data":1290,"type":808,"tunes":1294},{"link":849,"meta":1291},{"image":1292,"title":852,"description":1293},{"url":417},"Dokumentuje trajne sesije, asinhrone cikluse, strimovanje i usmeravanje.",{},{"id":856,"data":1296,"type":808,"tunes":1300},{"link":858,"meta":1297},{"image":1298,"title":1299,"description":862},{"url":417},"OpenAI — Funkcije Agents API-ja",{},{"id":865,"data":1302,"type":808,"tunes":1306},{"link":867,"meta":1303},{"image":1304,"title":1305,"description":871},{"url":417},"OpenAI — Webhook-ovi sesije",{},{"id":874,"data":1308,"type":808,"tunes":1313},{"link":876,"meta":1309},{"image":1310,"title":1311,"description":1312},{"url":417},"OpenAI — Vidljivost i korišćenje Agents API-ja","Dnevnici sesije, događaji, ciklusi, pozivi alata, podagenti, tragovi i pregled potrošnje tokena.",{},"2.31","Migracija sa OpenAI Agents SDK na novi Agents API nije samo preimenovanje importa. Granica izvršnog okruženja se menja: petlja agenta, trajna sesija, orkestracija, sažimanje konteksta i oporavak premeštaju se ka upravljanom okviru. Ovaj vodič pokazuje šta treba premestiti, šta treba da ostane u vašoj aplikaciji i kako da dokažete migraciju pre prelaska.","\u002Fuploads\u002F2026\u002F09\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally-1790352171968-ienxr9.webp","migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally-1790352171968-ienxr9","PUBLISHED","2026-09-25T12:01:00.000Z","2026-09-25T16:01:18.925Z","2026-09-25T16:11:21.632Z",{"en":1323,"de":1324,"sr":1325,"es":1326,"fr":1327,"it":1328,"ru":1329,"zh":1330},"\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fde\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fsr\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fes\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Ffr\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fit\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fru\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u002Fzh\u002Fblog\u002Fmigrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally",[1332,1336,1340],{"id":1333,"name":1334,"slug":1335},70,"Faze (Plan → Izvedi → Provjeri)","phases",{"id":1337,"name":1338,"slug":1339},73,"Verifikacija i diff","verification-and-diffing",{"id":1341,"name":1342,"slug":1343},71,"Registar rizika","risk-register",{"id":1345,"login":1346,"email":1347,"displayName":1348},"20","rooth8233","aleksandar@stajic.de","Aleksandar Stajić",[1350,2226],{"lang":1351,"title":1352,"content":1353,"contentJson":1354,"excerpt":2225},"en","Migrating from OpenAI Agents SDK to the Agents API: What Actually Changes Architecturally?","{\"time\":1790352173087,\"blocks\":[{\"id\":\"24Foq4L2Wb\",\"type\":\"tableOfContents\",\"data\":{\"title\":\"Contents\",\"minLevel\":2,\"maxLevel\":3},\"tunes\":{}},{\"id\":\"intro\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migrating from the OpenAI Agents SDK to the Agents API is not an import rename. The core architectural boundary changes: the SDK runs the agent loop inside your application, while the Agents API runs a managed Codex harness and durable session on OpenAI's side. The migration question is therefore not “Which classes map to which endpoints?” but “Which runtime responsibilities move across the boundary, which stay in our application, and which need to be redesigned?”\"},\"tunes\":{}},{\"id\":\"direct\",\"type\":\"callout\",\"data\":{\"variant\":\"info\",\"title\":\"Direct answer\",\"body\":\"\u003Cstrong>A real Agents SDK → Agents API migration changes runtime ownership.\u003C\u002Fstrong> Your reusable agent configuration can still contain model, instructions and tools, but the loop, durable session, orchestration, context compaction and recovery move toward the managed Agents API runtime. Your application should keep domain state, authorization, business rules, function implementations and audit logic outside the agent session. Treat the migration as a boundary redesign, not a mechanical code conversion.\"},\"tunes\":{}},{\"id\":\"current\",\"type\":\"callout\",\"data\":{\"variant\":\"warning\",\"title\":\"Current as of 25 September 2026\",\"body\":\"OpenAI currently marks the Agents SDK as \u003Cstrong>feature complete\u003C\u002Fstrong> and recommends the Agents API for new agent applications. The Agents API is in public beta. Existing SDK applications remain supported, and immediate migration is not automatically required.\"},\"tunes\":{}},{\"id\":\"model-note\",\"type\":\"callout\",\"data\":{\"variant\":\"note\",\"title\":\"About the migration model\",\"body\":\"The Runtime Boundary Migration Map and Migration Proof Test in this article are practical architecture tools, not official OpenAI migration frameworks. They are derived from the current runtime differences documented by OpenAI.\"},\"tunes\":{}},{\"id\":\"h-boundary\",\"type\":\"header\",\"data\":{\"text\":\"The migration is from an application-owned loop to a managed harness\",\"level\":2},\"tunes\":{}},{\"id\":\"p-boundary-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"In the Agents SDK, one run is an application-level turn. The SDK runner calls the model, inspects the output, executes tools, follows handoffs and continues until it reaches a stopping point. Your process hosts that loop and therefore owns its lifecycle.\"},\"tunes\":{}},{\"id\":\"p-boundary-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"In the Agents API, OpenAI runs the harness. A session is a durable instance of an agent configuration that accepts tasks, produces events, can pause for required actions, and can continue over time. OpenAI manages sessions, orchestration, context compaction and recovery; your application sends work, handles function tools, receives events and optionally manages a self-hosted execution environment.\"},\"tunes\":{}},{\"id\":\"p-boundary-3\",\"type\":\"paragraph\",\"data\":{\"text\":\"That ownership shift is the migration. Everything else — API syntax, tool schemas, event handling, session IDs — follows from it.\"},\"tunes\":{}},{\"id\":\"h-map\",\"type\":\"header\",\"data\":{\"text\":\"The Runtime Boundary Migration Map\",\"level\":2},\"tunes\":{}},{\"id\":\"migration-map\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Concern\",\"Agents SDK\",\"Agents API migration target\"],[\"Agent loop\",\"Runs in your application through the SDK runner\",\"Runs in the managed Codex harness\"],[\"Reusable agent definition\",\"Agent object in application code\",\"Saved or inline agent configuration with model, instructions and tools\"],[\"Conversation \u002F work continuity\",\"SDK session strategy, history, result continuation or application storage\",\"Durable Agents API session\"],[\"Tool execution\",\"SDK coordinates tool calls in your runtime\",\"Harness requests function calls; your application returns results\"],[\"Context management\",\"Your runtime \u002F SDK session strategy\",\"Managed session context, compaction and recovery, plus your own application data boundaries\"],[\"Handoffs \u002F specialists\",\"SDK orchestration primitives\",\"Harness \u002F subagent behaviour in Agents API; do not assume one-to-one semantics\"],[\"Execution environment\",\"Your application runtime or tool-specific environment\",\"Optional OpenAI-hosted or self-hosted environment attached to the session\"],[\"Streaming\",\"SDK streaming from the run\",\"Agents API session event stream\"],[\"Async lifecycle\",\"Usually application-managed around the SDK run\",\"Native session states, asynchronous turns and webhooks\"],[\"Tracing \u002F observability\",\"Agents SDK tracing and application logs\",\"Agents session logs, events, turns, tool calls, subagents and exportable traces\"],[\"Recovery\",\"Application responsibility\",\"Managed harness\u002Fsession recovery plus application-owned recovery for external systems and self-hosted environments\"]]},\"tunes\":{}},{\"id\":\"h-conceptual\",\"type\":\"header\",\"data\":{\"text\":\"What can migrate conceptually without changing ownership\",\"level\":2},\"tunes\":{}},{\"id\":\"p-conceptual-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Several application concepts survive the migration cleanly even though their representation changes. Models, instructions, JSON-schema function definitions, MCP access, tool descriptions and structured output requirements are still agent configuration concerns.\"},\"tunes\":{}},{\"id\":\"p-conceptual-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"OpenAI's Agents API configuration model explicitly defines an agent through model, instructions, tools, reasoning and output behaviour. Function tools remain application code: the harness requests a function call, and your handler returns the result. OpenAI also notes that function implementations used with the Responses API can be reused with the Agents API session flow.\"},\"tunes\":{}},{\"id\":\"good-candidate\",\"type\":\"callout\",\"data\":{\"variant\":\"success\",\"title\":\"Good migration candidate\",\"body\":\"A pure business function such as \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> should not need to know whether the caller is the Agents SDK or the Agents API. Keep its domain logic behind a stable application interface and migrate only the agent-facing adapter.\"},\"tunes\":{}},{\"id\":\"h-no-one\",\"type\":\"header\",\"data\":{\"text\":\"What should not be migrated one-to-one\",\"level\":2},\"tunes\":{}},{\"id\":\"p-no-one-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The dangerous migration pattern is to recreate every SDK runtime abstraction inside the Agents API. That can leave you paying for a managed harness while still operating a shadow harness in your application.\"},\"tunes\":{}},{\"id\":\"no-one-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"SDK-era assumption\",\"Why a direct copy is risky\",\"Migration question\"],[\"Application loop owns every continuation\",\"The Agents API already owns the harness loop\",\"Which continuation logic is product logic, and which should move to the managed session?\"],[\"Local session object is the primary continuity mechanism\",\"Agents API sessions are durable resources with their own lifecycle\",\"Which state belongs in the session versus the product database?\"],[\"Every interruption is handled synchronously\",\"Agents API turns are asynchronous and can surface action_required states\",\"Which actions need webhooks, workers, idempotency and resumable handlers?\"],[\"All tool execution happens where the SDK process runs\",\"Function handlers and execution environments can be separate\",\"Where should each tool actually execute?\"],[\"SDK trace is the operational timeline\",\"Agents API exposes session events, turns and managed traces\",\"What application-level audit data still needs its own record?\"],[\"Handoff object maps directly to a hosted subagent model\",\"Runtime semantics can differ\",\"What user-visible ownership and specialist behaviour must be preserved, not merely the old class structure?\"]]},\"tunes\":{}},{\"id\":\"h-domain\",\"type\":\"header\",\"data\":{\"text\":\"Step 1 — Separate domain state from agent session state\",\"level\":2},\"tunes\":{}},{\"id\":\"p-domain-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Before touching API calls, classify the state your SDK application currently carries. Some state exists only to keep the agent conversation moving. Other state is business truth: user permissions, project status, order data, workflow approval, customer records, document versions, policy state or application configuration.\"},\"tunes\":{}},{\"id\":\"p-domain-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The second category should not become dependent on an Agents API session. A durable session is useful continuity for the agent; it is not a replacement for your product's source of truth. If the session disappears, expires, is rebuilt, or changes implementation, your application must still know what is true.\"},\"tunes\":{}},{\"id\":\"state-test\",\"type\":\"comparison\",\"data\":{\"title\":\"State placement test\",\"layout\":\"table\",\"columns\":[{\"id\":\"type\",\"label\":\"State type\"},{\"id\":\"place\",\"label\":\"Preferred owner\"},{\"id\":\"reason\",\"label\":\"Reason\"}],\"rows\":[{\"id\":\"conversation\",\"label\":\"Conversation continuity\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"domain\",\"label\":\"Business truth\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"artifact\",\"label\":\"Durable artifact\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"ephemeral\",\"label\":\"Working scratch state\",\"values\":[\"\",\"\",\"\"]}]},\"tunes\":{}},{\"id\":\"h-events\",\"type\":\"header\",\"data\":{\"text\":\"Step 2 — Convert the runner mindset into a session-and-events mindset\",\"level\":2},\"tunes\":{}},{\"id\":\"p-events-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"SDK applications often think in terms of calling run and receiving a result. The Agents API thinks in terms of a durable session whose turns can run asynchronously. A message to an idle session starts work; a message during an active turn can steer it. Progress arrives through streaming or webhooks.\"},\"tunes\":{}},{\"id\":\"p-events-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"This affects application architecture. Long-running production work should not depend on one HTTP request remaining alive. Your product needs stable session identifiers, lifecycle persistence, webhook verification, idempotent handlers and a way to reconcile current session state after process restarts.\"},\"tunes\":{}},{\"id\":\"h-functions\",\"type\":\"header\",\"data\":{\"text\":\"Step 3 — Redesign function tools around required actions\",\"level\":2},\"tunes\":{}},{\"id\":\"p-functions-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Function tools remain an important application boundary. You define the function and its JSON schema in the agent configuration. When the harness needs the function, the session can enter an action-required state. Your application retrieves the required action, executes the business logic and returns the result.\"},\"tunes\":{}},{\"id\":\"p-functions-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"That means the function implementation should be safe to resume. A webhook may be delivered while another worker is processing. A network failure can occur after the external side effect but before the result is returned. Migration is therefore a good moment to add call IDs, idempotency keys, explicit authorization, timeout policies and audit records to consequential tools.\"},\"tunes\":{}},{\"id\":\"tool-trap\",\"type\":\"callout\",\"data\":{\"variant\":\"warning\",\"title\":\"Tool migration trap\",\"body\":\"Do not treat a function call from the managed harness as authorization to perform the action. The harness decides \u003Cem>what it wants to call\u003C\u002Fem>; your application still decides whether the current user, session and business state allow that action.\"},\"tunes\":{}},{\"id\":\"h-environment\",\"type\":\"header\",\"data\":{\"text\":\"Step 4 — Decide where execution should happen\",\"level\":2},\"tunes\":{}},{\"id\":\"p-env-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The Agents API separates the managed harness from the execution environment. An agent can operate without a dedicated environment, in an OpenAI-hosted sandbox, or through a self-hosted environment connected to the session.\"},\"tunes\":{}},{\"id\":\"p-env-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"This creates a migration decision that SDK applications may never have made explicitly: which code should run as an application function, which code belongs in a sandbox, and which workloads require infrastructure you control?\"},\"tunes\":{}},{\"id\":\"environment-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Need\",\"Likely boundary\"],[\"Call an existing internal service through controlled business logic\",\"Function tool handled by your application\"],[\"Run isolated code or work with temporary files without private infrastructure\",\"OpenAI-hosted environment\"],[\"Access private network resources, custom system software or controlled local compute\",\"Self-hosted environment\"],[\"Persist accepted product artifacts\",\"Application-owned storage, not only sandbox filesystem\"],[\"Execute a high-impact business side effect\",\"Application function with authorization and audit controls\"]]},\"tunes\":{}},{\"id\":\"h-recovery\",\"type\":\"header\",\"data\":{\"text\":\"Step 5 — Replace implicit recovery with explicit lifecycle handling\",\"level\":2},\"tunes\":{}},{\"id\":\"p-recovery-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The managed harness provides session-level recovery, but your application still owns every external dependency around it. Self-hosted environments need provisioning, reconnection and shutdown. Function handlers can fail. Webhooks can be retried. Product-side state can change while an agent is idle.\"},\"tunes\":{}},{\"id\":\"p-recovery-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migration therefore needs two recovery models: agent-runtime recovery and business-operation recovery. The first is increasingly managed by the Agents API. The second remains your responsibility.\"},\"tunes\":{}},{\"id\":\"h-observability\",\"type\":\"header\",\"data\":{\"text\":\"Step 6 — Rebuild observability around the new trace boundary\",\"level\":2},\"tunes\":{}},{\"id\":\"p-obs-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Agents API sessions expose events, saved history, turns, tool calls, subagents and token usage. OpenAI also provides session logs in the platform and trace export.\"},\"tunes\":{}},{\"id\":\"p-obs-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"Do not discard your application observability because platform traces improved. Product logs still need to connect the agent session to user identity, authorization decision, domain object, tool side effect, approval record and final accepted result. The useful production trace is the join between agent-runtime evidence and business-runtime evidence.\"},\"tunes\":{}},{\"id\":\"ref-reliability\",\"type\":\"referralArticle\",\"data\":{\"url\":\"https:\u002F\u002Fstajic.de\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough\",\"title\":\"AI Agent Reliability: Why the Final Answer Is Not Enough\",\"excerpt\":\"Agent reliability depends on the execution path, tools and intermediate decisions — not only the final output.\",\"ctaLabel\":\"Read the reliability article\"},\"tunes\":{}},{\"id\":\"h-evals\",\"type\":\"header\",\"data\":{\"text\":\"Step 7 — Preserve evals before changing the runtime\",\"level\":2},\"tunes\":{}},{\"id\":\"p-evals-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"A migration can appear successful because the new system still produces plausible answers while silently changing tool choice, session continuity, handoff behaviour, latency or failure recovery. Build the behavioural baseline before switching runtimes.\"},\"tunes\":{}},{\"id\":\"p-evals-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The baseline should include representative tasks, expected tool calls, forbidden actions, approval points, state continuity, recovery scenarios and final-output acceptance criteria. Run the old and new architectures against the same cases wherever possible.\"},\"tunes\":{}},{\"id\":\"h-proof\",\"type\":\"header\",\"data\":{\"text\":\"The Migration Proof Test\",\"level\":2},\"tunes\":{}},{\"id\":\"proof-flow\",\"type\":\"processFlow\",\"data\":{\"title\":\"Prove the new runtime before cutting over\",\"orientation\":\"auto\",\"steps\":[{\"label\":\"1. Freeze the behavioural baseline\",\"description\":\"Capture representative SDK traces, expected outputs, tool paths, approval points and failure cases.\"},{\"label\":\"2. Inventory state ownership\",\"description\":\"Mark each state field as agent-session state, authoritative domain state, durable artifact or ephemeral working state.\"},{\"label\":\"3. Reuse stable tool implementations\",\"description\":\"Keep business functions behind application interfaces; replace only the agent-facing integration where possible.\"},{\"label\":\"4. Build one Agents API vertical slice\",\"description\":\"Migrate one production-shaped workflow including session creation, tools, events, environment and persistence.\"},{\"label\":\"5. Inject interruptions\",\"description\":\"Test process restart, webhook retry, function timeout, self-hosted environment reconnect and stale domain state.\"},{\"label\":\"6. Compare traces, not only answers\",\"description\":\"Verify tool choice, authorization, evidence path, state transitions and side effects against the baseline.\"},{\"label\":\"7. Run shadow traffic\",\"description\":\"Where feasible, replay or mirror representative tasks before making the new runtime authoritative.\"},{\"label\":\"8. Cut over behind a reversible boundary\",\"description\":\"Keep integration adapters and rollback capability until production behaviour is stable.\"}]},\"tunes\":{}},{\"id\":\"h-metrics\",\"type\":\"header\",\"data\":{\"text\":\"What to measure during migration\",\"level\":2},\"tunes\":{}},{\"id\":\"metrics-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Dimension\",\"Migration check\"],[\"Task success\",\"Does the new runtime meet the same or better acceptance criteria?\"],[\"Tool correctness\",\"Does it call the right tool with valid arguments and authorization?\"],[\"State continuity\",\"Can work resume across turns, restarts and asynchronous waits?\"],[\"Recovery\",\"What happens after webhook loss, handler failure, environment disconnect or timeout?\"],[\"Traceability\",\"Can every consequential action be joined to session, user, tool call and domain object?\"],[\"Context behaviour\",\"Do long-running sessions preserve constraints without carrying stale application truth?\"],[\"Latency\",\"How do session startup, environment provisioning and multi-turn work affect user-visible time?\"],[\"Cost\",\"What changes in model usage, sandbox usage, repeated context and infrastructure operations?\"],[\"Operational load\",\"Which previously application-owned responsibilities actually disappeared, and which merely moved?\"]]},\"tunes\":{}},{\"id\":\"h-not-yet\",\"type\":\"header\",\"data\":{\"text\":\"When not to migrate yet\",\"level\":2},\"tunes\":{}},{\"id\":\"p-not-yet-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"An existing Agents SDK application does not become bad architecture simply because the platform direction changed. OpenAI continues maintenance, security fixes, critical bug fixes and compatibility work. If the application is stable, well evaluated and has no blocked roadmap requirement, an immediate runtime migration may not be justified.\"},\"tunes\":{}},{\"id\":\"not-yet-list\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"A required SDK capability is not yet available in the Agents API.\",\"The migration would disrupt a critical production period without delivering near-term value.\",\"The application depends on custom orchestration semantics that have not been validated on the managed harness.\",\"Provider portability is a hard requirement and the current SDK abstraction is materially valuable.\",\"Your team has not yet separated business state from agent runtime state, making cutover unsafe.\",\"The new Agents API behaviour has not been tested against representative production workloads.\"]},\"tunes\":{}},{\"id\":\"h-when\",\"type\":\"header\",\"data\":{\"text\":\"When the migration becomes strategically important\",\"level\":2},\"tunes\":{}},{\"id\":\"p-when-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migration becomes more compelling when product requirements align with the managed harness: durable long-running work, platform-managed context compaction and recovery, newer agent-runtime capabilities, sandboxed execution, richer hosted lifecycle management, or a desire to reduce the amount of orchestration code your application operates.\"},\"tunes\":{}},{\"id\":\"p-when-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The strongest signal is not “the old SDK is feature complete.” It is “our roadmap now depends on capabilities whose natural home is the managed Agents API runtime.”\"},\"tunes\":{}},{\"id\":\"h-change\",\"type\":\"header\",\"data\":{\"text\":\"What would change this answer?\",\"level\":2},\"tunes\":{}},{\"id\":\"p-change-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The migration strategy would change if OpenAI publishes automated migration tooling, introduces explicit compatibility layers, changes Agents API session semantics, expands or narrows self-hosted environment support, or changes the support policy for the Agents SDK.\"},\"tunes\":{}},{\"id\":\"p-change-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"It would also change if your product requirements change. A simple request-response assistant may not need a durable managed harness at all. A long-running coding, research or operations agent can benefit much more from the Agents API ownership model.\"},\"tunes\":{}},{\"id\":\"h-limitations\",\"type\":\"header\",\"data\":{\"text\":\"Limitations\",\"level\":2},\"tunes\":{}},{\"id\":\"p-limit-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"There is no universal one-to-one SDK-to-API migration map because applications use the Agents SDK differently. Some rely heavily on sessions and handoffs; others use it as a thin runner around function tools. The correct migration depends on which responsibilities your application actually owns today.\"},\"tunes\":{}},{\"id\":\"p-limit-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The Agents API is also in public beta, so implementation details can evolve. Treat the ownership principles in this article as more durable than any individual endpoint shape.\"},\"tunes\":{}},{\"id\":\"h-conclusion\",\"type\":\"header\",\"data\":{\"text\":\"Conclusion\",\"level\":2},\"tunes\":{}},{\"id\":\"p-conclusion-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migrating from the Agents SDK to the Agents API is best understood as moving the agent-runtime boundary. The managed harness takes over more of the loop, session continuity, compaction and recovery. Your application should become more explicit about the responsibilities that remain yours: domain truth, authorization, function side effects, artifacts, auditability and product lifecycle.\"},\"tunes\":{}},{\"id\":\"p-conclusion-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"If a migration leaves all of the old orchestration machinery in place and merely replaces SDK calls with Agents API calls, it has probably missed the architectural opportunity. The goal is not to reproduce the old runtime on top of the new one. The goal is to decide which runtime responsibilities no longer belong in your application.\"},\"tunes\":{}},{\"id\":\"h-faq\",\"type\":\"header\",\"data\":{\"text\":\"FAQ\",\"level\":2},\"tunes\":{}},{\"id\":\"faq\",\"type\":\"faq\",\"data\":{\"title\":\"Migrating from Agents SDK to Agents API\",\"items\":[{\"id\":\"faq1\",\"question\":\"Is migrating from the Agents SDK to the Agents API just an API rewrite?\",\"answer\":\"No. The main change is runtime ownership: the Agents SDK runs the agent loop in your application, while the Agents API runs a managed Codex harness and durable session. State, lifecycle, event handling and recovery should be reviewed as architecture concerns.\"},{\"id\":\"faq2\",\"question\":\"Do my function tools need to be rewritten?\",\"answer\":\"The business implementation often can be reused if it is already behind a stable application interface. The agent-facing integration changes because Agents API function calls are handled through session required actions and results.\"},{\"id\":\"faq3\",\"question\":\"Should I move business state into the Agents API session?\",\"answer\":\"Generally no. Keep authoritative business and product state in your own databases or services. Use the agent session for agent continuity and working context, not as the sole source of truth for your product.\"},{\"id\":\"faq4\",\"question\":\"Do I need webhooks for the Agents API?\",\"answer\":\"Not always, because streaming is also available. Webhooks are especially useful for long-running or asynchronous sessions where your application should react to lifecycle changes without holding an open stream.\"},{\"id\":\"faq5\",\"question\":\"Should every existing Agents SDK application migrate now?\",\"answer\":\"No. The SDK remains supported in maintenance mode. Migrate when the new runtime provides meaningful roadmap value and after required behaviour has been validated against production-shaped evals.\"}]},\"tunes\":{}},{\"id\":\"h-glossary\",\"type\":\"header\",\"data\":{\"text\":\"Glossary\",\"level\":2},\"tunes\":{}},{\"id\":\"glossary\",\"type\":\"glossary\",\"data\":{\"title\":\"Key migration terms\",\"entries\":[{\"term\":\"Runtime boundary\",\"definition\":\"The division of responsibility between the platform-managed agent runtime and the application-owned runtime.\",\"anchor\":\"runtime-boundary\"},{\"term\":\"Harness\",\"definition\":\"The agent runtime that coordinates model calls, tools, context, orchestration and continued execution.\",\"anchor\":\"harness\"},{\"term\":\"Session\",\"definition\":\"A durable Agents API instance that holds an agent's configuration, conversation and saved work across turns.\",\"anchor\":\"session\"},{\"term\":\"Required action\",\"definition\":\"A session state in which the Agents API needs external input such as a function result or environment connection before work can continue.\",\"anchor\":\"required-action\"},{\"term\":\"Self-hosted environment\",\"definition\":\"An execution environment operated by your infrastructure and connected to the managed Agents API harness.\",\"anchor\":\"self-hosted-environment\"},{\"term\":\"Migration proof test\",\"definition\":\"A staged validation method that compares the new runtime against behavioural baselines, failure injections, traces and reversible cutover criteria.\",\"anchor\":\"migration-proof-test\"}]},\"tunes\":{}},{\"id\":\"h-sources\",\"type\":\"header\",\"data\":{\"text\":\"Primary sources and further reading\",\"level\":2},\"tunes\":{}},{\"id\":\"src-sdk\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents SDK\",\"description\":\"Current support policy: the Agents SDK is feature complete, remains maintained, and new applications should start with the Agents API.\"}},\"tunes\":{}},{\"id\":\"src-running-sdk\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Running agents with the Agents SDK\",\"description\":\"Documentation of the SDK application-owned agent loop and continuation model.\"}},\"tunes\":{}},{\"id\":\"src-api-overview\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API overview\",\"description\":\"Defines the Agents API core concepts: agent, environment, session, events and items.\"}},\"tunes\":{}},{\"id\":\"src-api-architecture\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API architecture\",\"description\":\"Explains the hosted harness, application server, OpenAI-hosted and self-hosted execution environment boundaries.\"}},\"tunes\":{}},{\"id\":\"src-api-config\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Configuring Agents\",\"description\":\"Defines reusable agent configuration and session-level customization.\"}},\"tunes\":{}},{\"id\":\"src-api-sessions\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Run and continue sessions\",\"description\":\"Documents durable sessions, asynchronous turns, streaming and steering.\"}},\"tunes\":{}},{\"id\":\"src-api-functions\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API Functions\",\"description\":\"Function-tool definition and the application handler boundary for required function results.\"}},\"tunes\":{}},{\"id\":\"src-api-webhooks\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Session webhooks\",\"description\":\"Lifecycle events for asynchronous sessions, required actions and self-hosted environment connections.\"}},\"tunes\":{}},{\"id\":\"src-api-observability\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API observability and usage\",\"description\":\"Session logs, events, turns, tool calls, subagents, traces and token-usage inspection.\"}},\"tunes\":{}},{\"id\":\"intro\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migrating from the OpenAI Agents SDK to the Agents API is not an import rename. The core architectural boundary changes: the SDK runs the agent loop inside your application, while the Agents API runs a managed Codex harness and durable session on OpenAI's side. The migration question is therefore not “Which classes map to which endpoints?” but “Which runtime responsibilities move across the boundary, which stay in our application, and which need to be redesigned?”\"},\"tunes\":{}},{\"id\":\"direct\",\"type\":\"callout\",\"data\":{\"variant\":\"info\",\"title\":\"Direct answer\",\"body\":\"\u003Cstrong>A real Agents SDK → Agents API migration changes runtime ownership.\u003C\u002Fstrong> Your reusable agent configuration can still contain model, instructions and tools, but the loop, durable session, orchestration, context compaction and recovery move toward the managed Agents API runtime. Your application should keep domain state, authorization, business rules, function implementations and audit logic outside the agent session. Treat the migration as a boundary redesign, not a mechanical code conversion.\"},\"tunes\":{}},{\"id\":\"current\",\"type\":\"callout\",\"data\":{\"variant\":\"warning\",\"title\":\"Current as of 25 September 2026\",\"body\":\"OpenAI currently marks the Agents SDK as \u003Cstrong>feature complete\u003C\u002Fstrong> and recommends the Agents API for new agent applications. The Agents API is in public beta. Existing SDK applications remain supported, and immediate migration is not automatically required.\"},\"tunes\":{}},{\"id\":\"model-note\",\"type\":\"callout\",\"data\":{\"variant\":\"note\",\"title\":\"About the migration model\",\"body\":\"The Runtime Boundary Migration Map and Migration Proof Test in this article are practical architecture tools, not official OpenAI migration frameworks. They are derived from the current runtime differences documented by OpenAI.\"},\"tunes\":{}},{\"id\":\"toc\",\"type\":\"tableOfContents\",\"data\":{\"title\":\"Contents\",\"minLevel\":2,\"maxLevel\":3},\"tunes\":{}},{\"id\":\"h-boundary\",\"type\":\"header\",\"data\":{\"text\":\"The migration is from an application-owned loop to a managed harness\",\"level\":2},\"tunes\":{}},{\"id\":\"p-boundary-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"In the Agents SDK, one run is an application-level turn. The SDK runner calls the model, inspects the output, executes tools, follows handoffs and continues until it reaches a stopping point. Your process hosts that loop and therefore owns its lifecycle.\"},\"tunes\":{}},{\"id\":\"p-boundary-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"In the Agents API, OpenAI runs the harness. A session is a durable instance of an agent configuration that accepts tasks, produces events, can pause for required actions, and can continue over time. OpenAI manages sessions, orchestration, context compaction and recovery; your application sends work, handles function tools, receives events and optionally manages a self-hosted execution environment.\"},\"tunes\":{}},{\"id\":\"p-boundary-3\",\"type\":\"paragraph\",\"data\":{\"text\":\"That ownership shift is the migration. Everything else — API syntax, tool schemas, event handling, session IDs — follows from it.\"},\"tunes\":{}},{\"id\":\"h-map\",\"type\":\"header\",\"data\":{\"text\":\"The Runtime Boundary Migration Map\",\"level\":2},\"tunes\":{}},{\"id\":\"migration-map\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Concern\",\"Agents SDK\",\"Agents API migration target\"],[\"Agent loop\",\"Runs in your application through the SDK runner\",\"Runs in the managed Codex harness\"],[\"Reusable agent definition\",\"Agent object in application code\",\"Saved or inline agent configuration with model, instructions and tools\"],[\"Conversation \u002F work continuity\",\"SDK session strategy, history, result continuation or application storage\",\"Durable Agents API session\"],[\"Tool execution\",\"SDK coordinates tool calls in your runtime\",\"Harness requests function calls; your application returns results\"],[\"Context management\",\"Your runtime \u002F SDK session strategy\",\"Managed session context, compaction and recovery, plus your own application data boundaries\"],[\"Handoffs \u002F specialists\",\"SDK orchestration primitives\",\"Harness \u002F subagent behaviour in Agents API; do not assume one-to-one semantics\"],[\"Execution environment\",\"Your application runtime or tool-specific environment\",\"Optional OpenAI-hosted or self-hosted environment attached to the session\"],[\"Streaming\",\"SDK streaming from the run\",\"Agents API session event stream\"],[\"Async lifecycle\",\"Usually application-managed around the SDK run\",\"Native session states, asynchronous turns and webhooks\"],[\"Tracing \u002F observability\",\"Agents SDK tracing and application logs\",\"Agents session logs, events, turns, tool calls, subagents and exportable traces\"],[\"Recovery\",\"Application responsibility\",\"Managed harness\u002Fsession recovery plus application-owned recovery for external systems and self-hosted environments\"]]},\"tunes\":{}},{\"id\":\"h-conceptual\",\"type\":\"header\",\"data\":{\"text\":\"What can migrate conceptually without changing ownership\",\"level\":2},\"tunes\":{}},{\"id\":\"p-conceptual-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Several application concepts survive the migration cleanly even though their representation changes. Models, instructions, JSON-schema function definitions, MCP access, tool descriptions and structured output requirements are still agent configuration concerns.\"},\"tunes\":{}},{\"id\":\"p-conceptual-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"OpenAI's Agents API configuration model explicitly defines an agent through model, instructions, tools, reasoning and output behaviour. Function tools remain application code: the harness requests a function call, and your handler returns the result. OpenAI also notes that function implementations used with the Responses API can be reused with the Agents API session flow.\"},\"tunes\":{}},{\"id\":\"good-candidate\",\"type\":\"callout\",\"data\":{\"variant\":\"success\",\"title\":\"Good migration candidate\",\"body\":\"A pure business function such as \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> should not need to know whether the caller is the Agents SDK or the Agents API. Keep its domain logic behind a stable application interface and migrate only the agent-facing adapter.\"},\"tunes\":{}},{\"id\":\"h-no-one\",\"type\":\"header\",\"data\":{\"text\":\"What should not be migrated one-to-one\",\"level\":2},\"tunes\":{}},{\"id\":\"p-no-one-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The dangerous migration pattern is to recreate every SDK runtime abstraction inside the Agents API. That can leave you paying for a managed harness while still operating a shadow harness in your application.\"},\"tunes\":{}},{\"id\":\"no-one-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"SDK-era assumption\",\"Why a direct copy is risky\",\"Migration question\"],[\"Application loop owns every continuation\",\"The Agents API already owns the harness loop\",\"Which continuation logic is product logic, and which should move to the managed session?\"],[\"Local session object is the primary continuity mechanism\",\"Agents API sessions are durable resources with their own lifecycle\",\"Which state belongs in the session versus the product database?\"],[\"Every interruption is handled synchronously\",\"Agents API turns are asynchronous and can surface action_required states\",\"Which actions need webhooks, workers, idempotency and resumable handlers?\"],[\"All tool execution happens where the SDK process runs\",\"Function handlers and execution environments can be separate\",\"Where should each tool actually execute?\"],[\"SDK trace is the operational timeline\",\"Agents API exposes session events, turns and managed traces\",\"What application-level audit data still needs its own record?\"],[\"Handoff object maps directly to a hosted subagent model\",\"Runtime semantics can differ\",\"What user-visible ownership and specialist behaviour must be preserved, not merely the old class structure?\"]]},\"tunes\":{}},{\"id\":\"h-domain\",\"type\":\"header\",\"data\":{\"text\":\"Step 1 — Separate domain state from agent session state\",\"level\":2},\"tunes\":{}},{\"id\":\"p-domain-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Before touching API calls, classify the state your SDK application currently carries. Some state exists only to keep the agent conversation moving. Other state is business truth: user permissions, project status, order data, workflow approval, customer records, document versions, policy state or application configuration.\"},\"tunes\":{}},{\"id\":\"p-domain-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The second category should not become dependent on an Agents API session. A durable session is useful continuity for the agent; it is not a replacement for your product's source of truth. If the session disappears, expires, is rebuilt, or changes implementation, your application must still know what is true.\"},\"tunes\":{}},{\"id\":\"state-test\",\"type\":\"comparison\",\"data\":{\"title\":\"State placement test\",\"layout\":\"table\",\"columns\":[{\"id\":\"type\",\"label\":\"State type\"},{\"id\":\"place\",\"label\":\"Preferred owner\"},{\"id\":\"reason\",\"label\":\"Reason\"}],\"rows\":[{\"id\":\"conversation\",\"label\":\"Conversation continuity\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"domain\",\"label\":\"Business truth\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"artifact\",\"label\":\"Durable artifact\",\"values\":[\"\",\"\",\"\"]},{\"id\":\"ephemeral\",\"label\":\"Working scratch state\",\"values\":[\"\",\"\",\"\"]}]},\"tunes\":{}},{\"id\":\"h-events\",\"type\":\"header\",\"data\":{\"text\":\"Step 2 — Convert the runner mindset into a session-and-events mindset\",\"level\":2},\"tunes\":{}},{\"id\":\"p-events-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"SDK applications often think in terms of calling run and receiving a result. The Agents API thinks in terms of a durable session whose turns can run asynchronously. A message to an idle session starts work; a message during an active turn can steer it. Progress arrives through streaming or webhooks.\"},\"tunes\":{}},{\"id\":\"p-events-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"This affects application architecture. Long-running production work should not depend on one HTTP request remaining alive. Your product needs stable session identifiers, lifecycle persistence, webhook verification, idempotent handlers and a way to reconcile current session state after process restarts.\"},\"tunes\":{}},{\"id\":\"h-functions\",\"type\":\"header\",\"data\":{\"text\":\"Step 3 — Redesign function tools around required actions\",\"level\":2},\"tunes\":{}},{\"id\":\"p-functions-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Function tools remain an important application boundary. You define the function and its JSON schema in the agent configuration. When the harness needs the function, the session can enter an action-required state. Your application retrieves the required action, executes the business logic and returns the result.\"},\"tunes\":{}},{\"id\":\"p-functions-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"That means the function implementation should be safe to resume. A webhook may be delivered while another worker is processing. A network failure can occur after the external side effect but before the result is returned. Migration is therefore a good moment to add call IDs, idempotency keys, explicit authorization, timeout policies and audit records to consequential tools.\"},\"tunes\":{}},{\"id\":\"tool-trap\",\"type\":\"callout\",\"data\":{\"variant\":\"warning\",\"title\":\"Tool migration trap\",\"body\":\"Do not treat a function call from the managed harness as authorization to perform the action. The harness decides \u003Cem>what it wants to call\u003C\u002Fem>; your application still decides whether the current user, session and business state allow that action.\"},\"tunes\":{}},{\"id\":\"h-environment\",\"type\":\"header\",\"data\":{\"text\":\"Step 4 — Decide where execution should happen\",\"level\":2},\"tunes\":{}},{\"id\":\"p-env-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The Agents API separates the managed harness from the execution environment. An agent can operate without a dedicated environment, in an OpenAI-hosted sandbox, or through a self-hosted environment connected to the session.\"},\"tunes\":{}},{\"id\":\"p-env-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"This creates a migration decision that SDK applications may never have made explicitly: which code should run as an application function, which code belongs in a sandbox, and which workloads require infrastructure you control?\"},\"tunes\":{}},{\"id\":\"environment-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Need\",\"Likely boundary\"],[\"Call an existing internal service through controlled business logic\",\"Function tool handled by your application\"],[\"Run isolated code or work with temporary files without private infrastructure\",\"OpenAI-hosted environment\"],[\"Access private network resources, custom system software or controlled local compute\",\"Self-hosted environment\"],[\"Persist accepted product artifacts\",\"Application-owned storage, not only sandbox filesystem\"],[\"Execute a high-impact business side effect\",\"Application function with authorization and audit controls\"]]},\"tunes\":{}},{\"id\":\"h-recovery\",\"type\":\"header\",\"data\":{\"text\":\"Step 5 — Replace implicit recovery with explicit lifecycle handling\",\"level\":2},\"tunes\":{}},{\"id\":\"p-recovery-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The managed harness provides session-level recovery, but your application still owns every external dependency around it. Self-hosted environments need provisioning, reconnection and shutdown. Function handlers can fail. Webhooks can be retried. Product-side state can change while an agent is idle.\"},\"tunes\":{}},{\"id\":\"p-recovery-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migration therefore needs two recovery models: agent-runtime recovery and business-operation recovery. The first is increasingly managed by the Agents API. The second remains your responsibility.\"},\"tunes\":{}},{\"id\":\"h-observability\",\"type\":\"header\",\"data\":{\"text\":\"Step 6 — Rebuild observability around the new trace boundary\",\"level\":2},\"tunes\":{}},{\"id\":\"p-obs-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Agents API sessions expose events, saved history, turns, tool calls, subagents and token usage. OpenAI also provides session logs in the platform and trace export.\"},\"tunes\":{}},{\"id\":\"p-obs-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"Do not discard your application observability because platform traces improved. Product logs still need to connect the agent session to user identity, authorization decision, domain object, tool side effect, approval record and final accepted result. The useful production trace is the join between agent-runtime evidence and business-runtime evidence.\"},\"tunes\":{}},{\"id\":\"ref-reliability\",\"type\":\"referralArticle\",\"data\":{\"url\":\"https:\u002F\u002Fstajic.de\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough\",\"title\":\"AI Agent Reliability: Why the Final Answer Is Not Enough\",\"excerpt\":\"Agent reliability depends on the execution path, tools and intermediate decisions — not only the final output.\",\"ctaLabel\":\"Read the reliability article\"},\"tunes\":{}},{\"id\":\"h-evals\",\"type\":\"header\",\"data\":{\"text\":\"Step 7 — Preserve evals before changing the runtime\",\"level\":2},\"tunes\":{}},{\"id\":\"p-evals-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"A migration can appear successful because the new system still produces plausible answers while silently changing tool choice, session continuity, handoff behaviour, latency or failure recovery. Build the behavioural baseline before switching runtimes.\"},\"tunes\":{}},{\"id\":\"p-evals-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The baseline should include representative tasks, expected tool calls, forbidden actions, approval points, state continuity, recovery scenarios and final-output acceptance criteria. Run the old and new architectures against the same cases wherever possible.\"},\"tunes\":{}},{\"id\":\"h-proof\",\"type\":\"header\",\"data\":{\"text\":\"The Migration Proof Test\",\"level\":2},\"tunes\":{}},{\"id\":\"proof-flow\",\"type\":\"processFlow\",\"data\":{\"title\":\"Prove the new runtime before cutting over\",\"orientation\":\"auto\",\"steps\":[{\"label\":\"1. Freeze the behavioural baseline\",\"description\":\"Capture representative SDK traces, expected outputs, tool paths, approval points and failure cases.\"},{\"label\":\"2. Inventory state ownership\",\"description\":\"Mark each state field as agent-session state, authoritative domain state, durable artifact or ephemeral working state.\"},{\"label\":\"3. Reuse stable tool implementations\",\"description\":\"Keep business functions behind application interfaces; replace only the agent-facing integration where possible.\"},{\"label\":\"4. Build one Agents API vertical slice\",\"description\":\"Migrate one production-shaped workflow including session creation, tools, events, environment and persistence.\"},{\"label\":\"5. Inject interruptions\",\"description\":\"Test process restart, webhook retry, function timeout, self-hosted environment reconnect and stale domain state.\"},{\"label\":\"6. Compare traces, not only answers\",\"description\":\"Verify tool choice, authorization, evidence path, state transitions and side effects against the baseline.\"},{\"label\":\"7. Run shadow traffic\",\"description\":\"Where feasible, replay or mirror representative tasks before making the new runtime authoritative.\"},{\"label\":\"8. Cut over behind a reversible boundary\",\"description\":\"Keep integration adapters and rollback capability until production behaviour is stable.\"}]},\"tunes\":{}},{\"id\":\"h-metrics\",\"type\":\"header\",\"data\":{\"text\":\"What to measure during migration\",\"level\":2},\"tunes\":{}},{\"id\":\"metrics-table\",\"type\":\"table\",\"data\":{\"withHeadings\":true,\"stretched\":false,\"content\":[[\"Dimension\",\"Migration check\"],[\"Task success\",\"Does the new runtime meet the same or better acceptance criteria?\"],[\"Tool correctness\",\"Does it call the right tool with valid arguments and authorization?\"],[\"State continuity\",\"Can work resume across turns, restarts and asynchronous waits?\"],[\"Recovery\",\"What happens after webhook loss, handler failure, environment disconnect or timeout?\"],[\"Traceability\",\"Can every consequential action be joined to session, user, tool call and domain object?\"],[\"Context behaviour\",\"Do long-running sessions preserve constraints without carrying stale application truth?\"],[\"Latency\",\"How do session startup, environment provisioning and multi-turn work affect user-visible time?\"],[\"Cost\",\"What changes in model usage, sandbox usage, repeated context and infrastructure operations?\"],[\"Operational load\",\"Which previously application-owned responsibilities actually disappeared, and which merely moved?\"]]},\"tunes\":{}},{\"id\":\"h-not-yet\",\"type\":\"header\",\"data\":{\"text\":\"When not to migrate yet\",\"level\":2},\"tunes\":{}},{\"id\":\"p-not-yet-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"An existing Agents SDK application does not become bad architecture simply because the platform direction changed. OpenAI continues maintenance, security fixes, critical bug fixes and compatibility work. If the application is stable, well evaluated and has no blocked roadmap requirement, an immediate runtime migration may not be justified.\"},\"tunes\":{}},{\"id\":\"not-yet-list\",\"type\":\"list\",\"data\":{\"style\":\"unordered\",\"meta\":{},\"items\":[\"A required SDK capability is not yet available in the Agents API.\",\"The migration would disrupt a critical production period without delivering near-term value.\",\"The application depends on custom orchestration semantics that have not been validated on the managed harness.\",\"Provider portability is a hard requirement and the current SDK abstraction is materially valuable.\",\"Your team has not yet separated business state from agent runtime state, making cutover unsafe.\",\"The new Agents API behaviour has not been tested against representative production workloads.\"]},\"tunes\":{}},{\"id\":\"h-when\",\"type\":\"header\",\"data\":{\"text\":\"When the migration becomes strategically important\",\"level\":2},\"tunes\":{}},{\"id\":\"p-when-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migration becomes more compelling when product requirements align with the managed harness: durable long-running work, platform-managed context compaction and recovery, newer agent-runtime capabilities, sandboxed execution, richer hosted lifecycle management, or a desire to reduce the amount of orchestration code your application operates.\"},\"tunes\":{}},{\"id\":\"p-when-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The strongest signal is not “the old SDK is feature complete.” It is “our roadmap now depends on capabilities whose natural home is the managed Agents API runtime.”\"},\"tunes\":{}},{\"id\":\"h-change\",\"type\":\"header\",\"data\":{\"text\":\"What would change this answer?\",\"level\":2},\"tunes\":{}},{\"id\":\"p-change-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"The migration strategy would change if OpenAI publishes automated migration tooling, introduces explicit compatibility layers, changes Agents API session semantics, expands or narrows self-hosted environment support, or changes the support policy for the Agents SDK.\"},\"tunes\":{}},{\"id\":\"p-change-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"It would also change if your product requirements change. A simple request-response assistant may not need a durable managed harness at all. A long-running coding, research or operations agent can benefit much more from the Agents API ownership model.\"},\"tunes\":{}},{\"id\":\"h-limitations\",\"type\":\"header\",\"data\":{\"text\":\"Limitations\",\"level\":2},\"tunes\":{}},{\"id\":\"p-limit-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"There is no universal one-to-one SDK-to-API migration map because applications use the Agents SDK differently. Some rely heavily on sessions and handoffs; others use it as a thin runner around function tools. The correct migration depends on which responsibilities your application actually owns today.\"},\"tunes\":{}},{\"id\":\"p-limit-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"The Agents API is also in public beta, so implementation details can evolve. Treat the ownership principles in this article as more durable than any individual endpoint shape.\"},\"tunes\":{}},{\"id\":\"h-conclusion\",\"type\":\"header\",\"data\":{\"text\":\"Conclusion\",\"level\":2},\"tunes\":{}},{\"id\":\"p-conclusion-1\",\"type\":\"paragraph\",\"data\":{\"text\":\"Migrating from the Agents SDK to the Agents API is best understood as moving the agent-runtime boundary. The managed harness takes over more of the loop, session continuity, compaction and recovery. Your application should become more explicit about the responsibilities that remain yours: domain truth, authorization, function side effects, artifacts, auditability and product lifecycle.\"},\"tunes\":{}},{\"id\":\"p-conclusion-2\",\"type\":\"paragraph\",\"data\":{\"text\":\"If a migration leaves all of the old orchestration machinery in place and merely replaces SDK calls with Agents API calls, it has probably missed the architectural opportunity. The goal is not to reproduce the old runtime on top of the new one. The goal is to decide which runtime responsibilities no longer belong in your application.\"},\"tunes\":{}},{\"id\":\"h-faq\",\"type\":\"header\",\"data\":{\"text\":\"FAQ\",\"level\":2},\"tunes\":{}},{\"id\":\"faq\",\"type\":\"faq\",\"data\":{\"title\":\"Migrating from Agents SDK to Agents API\",\"items\":[{\"id\":\"faq1\",\"question\":\"Is migrating from the Agents SDK to the Agents API just an API rewrite?\",\"answer\":\"No. The main change is runtime ownership: the Agents SDK runs the agent loop in your application, while the Agents API runs a managed Codex harness and durable session. State, lifecycle, event handling and recovery should be reviewed as architecture concerns.\"},{\"id\":\"faq2\",\"question\":\"Do my function tools need to be rewritten?\",\"answer\":\"The business implementation often can be reused if it is already behind a stable application interface. The agent-facing integration changes because Agents API function calls are handled through session required actions and results.\"},{\"id\":\"faq3\",\"question\":\"Should I move business state into the Agents API session?\",\"answer\":\"Generally no. Keep authoritative business and product state in your own databases or services. Use the agent session for agent continuity and working context, not as the sole source of truth for your product.\"},{\"id\":\"faq4\",\"question\":\"Do I need webhooks for the Agents API?\",\"answer\":\"Not always, because streaming is also available. Webhooks are especially useful for long-running or asynchronous sessions where your application should react to lifecycle changes without holding an open stream.\"},{\"id\":\"faq5\",\"question\":\"Should every existing Agents SDK application migrate now?\",\"answer\":\"No. The SDK remains supported in maintenance mode. Migrate when the new runtime provides meaningful roadmap value and after required behaviour has been validated against production-shaped evals.\"}]},\"tunes\":{}},{\"id\":\"h-glossary\",\"type\":\"header\",\"data\":{\"text\":\"Glossary\",\"level\":2},\"tunes\":{}},{\"id\":\"glossary\",\"type\":\"glossary\",\"data\":{\"title\":\"Key migration terms\",\"entries\":[{\"term\":\"Runtime boundary\",\"definition\":\"The division of responsibility between the platform-managed agent runtime and the application-owned runtime.\",\"anchor\":\"runtime-boundary\"},{\"term\":\"Harness\",\"definition\":\"The agent runtime that coordinates model calls, tools, context, orchestration and continued execution.\",\"anchor\":\"harness\"},{\"term\":\"Session\",\"definition\":\"A durable Agents API instance that holds an agent's configuration, conversation and saved work across turns.\",\"anchor\":\"session\"},{\"term\":\"Required action\",\"definition\":\"A session state in which the Agents API needs external input such as a function result or environment connection before work can continue.\",\"anchor\":\"required-action\"},{\"term\":\"Self-hosted environment\",\"definition\":\"An execution environment operated by your infrastructure and connected to the managed Agents API harness.\",\"anchor\":\"self-hosted-environment\"},{\"term\":\"Migration proof test\",\"definition\":\"A staged validation method that compares the new runtime against behavioural baselines, failure injections, traces and reversible cutover criteria.\",\"anchor\":\"migration-proof-test\"}]},\"tunes\":{}},{\"id\":\"h-sources\",\"type\":\"header\",\"data\":{\"text\":\"Primary sources and further reading\",\"level\":2},\"tunes\":{}},{\"id\":\"src-sdk\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents SDK\",\"description\":\"Current support policy: the Agents SDK is feature complete, remains maintained, and new applications should start with the Agents API.\"}},\"tunes\":{}},{\"id\":\"src-running-sdk\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Running agents with the Agents SDK\",\"description\":\"Documentation of the SDK application-owned agent loop and continuation model.\"}},\"tunes\":{}},{\"id\":\"src-api-overview\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API overview\",\"description\":\"Defines the Agents API core concepts: agent, environment, session, events and items.\"}},\"tunes\":{}},{\"id\":\"src-api-architecture\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API architecture\",\"description\":\"Explains the hosted harness, application server, OpenAI-hosted and self-hosted execution environment boundaries.\"}},\"tunes\":{}},{\"id\":\"src-api-config\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Configuring Agents\",\"description\":\"Defines reusable agent configuration and session-level customization.\"}},\"tunes\":{}},{\"id\":\"src-api-sessions\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Run and continue sessions\",\"description\":\"Documents durable sessions, asynchronous turns, streaming and steering.\"}},\"tunes\":{}},{\"id\":\"src-api-functions\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API Functions\",\"description\":\"Function-tool definition and the application handler boundary for required function results.\"}},\"tunes\":{}},{\"id\":\"src-api-webhooks\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Session webhooks\",\"description\":\"Lifecycle events for asynchronous sessions, required actions and self-hosted environment connections.\"}},\"tunes\":{}},{\"id\":\"src-api-observability\",\"type\":\"linkTool\",\"data\":{\"link\":\"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability\",\"meta\":{\"image\":{\"url\":\"\"},\"title\":\"OpenAI — Agents API observability and usage\",\"description\":\"Session logs, events, turns, tool calls, subagents, traces and token-usage inspection.\"}},\"tunes\":{}}],\"version\":\"2.31.6\"}",{"time":1355,"blocks":1356,"version":2224},1790352173087,[1357,1361,1365,1370,1375,1380,1384,1388,1392,1396,1400,1451,1455,1459,1463,1468,1472,1476,1508,1512,1516,1520,1544,1548,1552,1556,1560,1564,1568,1573,1577,1581,1585,1607,1611,1615,1619,1623,1627,1631,1638,1642,1646,1650,1654,1683,1687,1720,1724,1728,1739,1743,1747,1751,1755,1759,1763,1767,1771,1775,1779,1783,1787,1791,1811,1815,1836,1840,1846,1853,1860,1867,1874,1881,1888,1895,1902,1905,1908,1911,1914,1917,1920,1923,1926,1929,1932,1948,1951,1954,1957,1960,1963,1966,1977,1980,1983,1986,2002,2005,2008,2011,2014,2017,2020,2023,2026,2029,2032,2042,2045,2048,2051,2054,2057,2060,2063,2066,2069,2072,2075,2087,2090,2104,2107,2110,2115,2118,2121,2124,2127,2130,2133,2136,2139,2142,2145,2148,2151,2154,2163,2166,2176,2179,2184,2189,2194,2199,2204,2209,2214,2219],{"id":215,"data":1358,"type":220,"tunes":1360},{"title":1359,"maxLevel":218,"minLevel":219},"Contents",{},{"id":223,"data":1362,"type":226,"tunes":1364},{"text":1363},"Migrating from the OpenAI Agents SDK to the Agents API is not an import rename. The core architectural boundary changes: the SDK runs the agent loop inside your application, while the Agents API runs a managed Codex harness and durable session on OpenAI's side. The migration question is therefore not “Which classes map to which endpoints?” but “Which runtime responsibilities move across the boundary, which stay in our application, and which need to be redesigned?”",{},{"id":229,"data":1366,"type":234,"tunes":1369},{"body":1367,"title":1368,"variant":233},"\u003Cstrong>A real Agents SDK → Agents API migration changes runtime ownership.\u003C\u002Fstrong> Your reusable agent configuration can still contain model, instructions and tools, but the loop, durable session, orchestration, context compaction and recovery move toward the managed Agents API runtime. Your application should keep domain state, authorization, business rules, function implementations and audit logic outside the agent session. Treat the migration as a boundary redesign, not a mechanical code conversion.","Direct answer",{},{"id":237,"data":1371,"type":234,"tunes":1374},{"body":1372,"title":1373,"variant":241},"OpenAI currently marks the Agents SDK as \u003Cstrong>feature complete\u003C\u002Fstrong> and recommends the Agents API for new agent applications. The Agents API is in public beta. Existing SDK applications remain supported, and immediate migration is not automatically required.","Current as of 25 September 2026",{},{"id":244,"data":1376,"type":234,"tunes":1379},{"body":1377,"title":1378,"variant":248},"The Runtime Boundary Migration Map and Migration Proof Test in this article are practical architecture tools, not official OpenAI migration frameworks. They are derived from the current runtime differences documented by OpenAI.","About the migration model",{},{"id":251,"data":1381,"type":42,"tunes":1383},{"text":1382,"level":219},"The migration is from an application-owned loop to a managed harness",{},{"id":256,"data":1385,"type":226,"tunes":1387},{"text":1386},"In the Agents SDK, one run is an application-level turn. The SDK runner calls the model, inspects the output, executes tools, follows handoffs and continues until it reaches a stopping point. Your process hosts that loop and therefore owns its lifecycle.",{},{"id":261,"data":1389,"type":226,"tunes":1391},{"text":1390},"In the Agents API, OpenAI runs the harness. A session is a durable instance of an agent configuration that accepts tasks, produces events, can pause for required actions, and can continue over time. OpenAI manages sessions, orchestration, context compaction and recovery; your application sends work, handles function tools, receives events and optionally manages a self-hosted execution environment.",{},{"id":266,"data":1393,"type":226,"tunes":1395},{"text":1394},"That ownership shift is the migration. Everything else — API syntax, tool schemas, event handling, session IDs — follows from it.",{},{"id":271,"data":1397,"type":42,"tunes":1399},{"text":1398,"level":219},"The Runtime Boundary Migration Map",{},{"id":276,"data":1401,"type":327,"tunes":1450},{"content":1402,"stretched":43,"withHeadings":14},[1403,1406,1410,1414,1418,1422,1426,1430,1434,1438,1442,1446],[1404,281,1405],"Concern","Agents API migration target",[1407,1408,1409],"Agent loop","Runs in your application through the SDK runner","Runs in the managed Codex harness",[1411,1412,1413],"Reusable agent definition","Agent object in application code","Saved or inline agent configuration with model, instructions and tools",[1415,1416,1417],"Conversation \u002F work continuity","SDK session strategy, history, result continuation or application storage","Durable Agents API session",[1419,1420,1421],"Tool execution","SDK coordinates tool calls in your runtime","Harness requests function calls; your application returns results",[1423,1424,1425],"Context management","Your runtime \u002F SDK session strategy","Managed session context, compaction and recovery, plus your own application data boundaries",[1427,1428,1429],"Handoffs \u002F specialists","SDK orchestration primitives","Harness \u002F subagent behaviour in Agents API; do not assume one-to-one semantics",[1431,1432,1433],"Execution environment","Your application runtime or tool-specific environment","Optional OpenAI-hosted or self-hosted environment attached to the session",[1435,1436,1437],"Streaming","SDK streaming from the run","Agents API session event stream",[1439,1440,1441],"Async lifecycle","Usually application-managed around the SDK run","Native session states, asynchronous turns and webhooks",[1443,1444,1445],"Tracing \u002F observability","Agents SDK tracing and application logs","Agents session logs, events, turns, tool calls, subagents and exportable traces",[1447,1448,1449],"Recovery","Application responsibility","Managed harness\u002Fsession recovery plus application-owned recovery for external systems and self-hosted environments",{},{"id":330,"data":1452,"type":42,"tunes":1454},{"text":1453,"level":219},"What can migrate conceptually without changing ownership",{},{"id":335,"data":1456,"type":226,"tunes":1458},{"text":1457},"Several application concepts survive the migration cleanly even though their representation changes. Models, instructions, JSON-schema function definitions, MCP access, tool descriptions and structured output requirements are still agent configuration concerns.",{},{"id":340,"data":1460,"type":226,"tunes":1462},{"text":1461},"OpenAI's Agents API configuration model explicitly defines an agent through model, instructions, tools, reasoning and output behaviour. Function tools remain application code: the harness requests a function call, and your handler returns the result. OpenAI also notes that function implementations used with the Responses API can be reused with the Agents API session flow.",{},{"id":345,"data":1464,"type":234,"tunes":1467},{"body":1465,"title":1466,"variant":349},"A pure business function such as \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> should not need to know whether the caller is the Agents SDK or the Agents API. Keep its domain logic behind a stable application interface and migrate only the agent-facing adapter.","Good migration candidate",{},{"id":352,"data":1469,"type":42,"tunes":1471},{"text":1470,"level":219},"What should not be migrated one-to-one",{},{"id":357,"data":1473,"type":226,"tunes":1475},{"text":1474},"The dangerous migration pattern is to recreate every SDK runtime abstraction inside the Agents API. That can leave you paying for a managed harness while still operating a shadow harness in your application.",{},{"id":362,"data":1477,"type":327,"tunes":1507},{"content":1478,"stretched":43,"withHeadings":14},[1479,1483,1487,1491,1495,1499,1503],[1480,1481,1482],"SDK-era assumption","Why a direct copy is risky","Migration question",[1484,1485,1486],"Application loop owns every continuation","The Agents API already owns the harness loop","Which continuation logic is product logic, and which should move to the managed session?",[1488,1489,1490],"Local session object is the primary continuity mechanism","Agents API sessions are durable resources with their own lifecycle","Which state belongs in the session versus the product database?",[1492,1493,1494],"Every interruption is handled synchronously","Agents API turns are asynchronous and can surface action_required states","Which actions need webhooks, workers, idempotency and resumable handlers?",[1496,1497,1498],"All tool execution happens where the SDK process runs","Function handlers and execution environments can be separate","Where should each tool actually execute?",[1500,1501,1502],"SDK trace is the operational timeline","Agents API exposes session events, turns and managed traces","What application-level audit data still needs its own record?",[1504,1505,1506],"Handoff object maps directly to a hosted subagent model","Runtime semantics can differ","What user-visible ownership and specialist behaviour must be preserved, not merely the old class structure?",{},{"id":395,"data":1509,"type":42,"tunes":1511},{"text":1510,"level":219},"Step 1 — Separate domain state from agent session state",{},{"id":400,"data":1513,"type":226,"tunes":1515},{"text":1514},"Before touching API calls, classify the state your SDK application currently carries. Some state exists only to keep the agent conversation moving. Other state is business truth: user permissions, project status, order data, workflow approval, customer records, document versions, policy state or application configuration.",{},{"id":405,"data":1517,"type":226,"tunes":1519},{"text":1518},"The second category should not become dependent on an Agents API session. A durable session is useful continuity for the agent; it is not a replacement for your product's source of truth. If the session disappears, expires, is rebuilt, or changes implementation, your application must still know what is true.",{},{"id":410,"data":1521,"type":441,"tunes":1543},{"rows":1522,"title":1535,"layout":327,"columns":1536},[1523,1526,1529,1532],{"id":414,"label":1524,"values":1525},"Conversation continuity",[417,417,417],{"id":419,"label":1527,"values":1528},"Business truth",[417,417,417],{"id":423,"label":1530,"values":1531},"Durable artifact",[417,417,417],{"id":427,"label":1533,"values":1534},"Working scratch state",[417,417,417],"State placement test",[1537,1539,1541],{"id":433,"label":1538},"State type",{"id":436,"label":1540},"Preferred owner",{"id":439,"label":1542},"Reason",{},{"id":444,"data":1545,"type":42,"tunes":1547},{"text":1546,"level":219},"Step 2 — Convert the runner mindset into a session-and-events mindset",{},{"id":449,"data":1549,"type":226,"tunes":1551},{"text":1550},"SDK applications often think in terms of calling run and receiving a result. The Agents API thinks in terms of a durable session whose turns can run asynchronously. A message to an idle session starts work; a message during an active turn can steer it. Progress arrives through streaming or webhooks.",{},{"id":454,"data":1553,"type":226,"tunes":1555},{"text":1554},"This affects application architecture. Long-running production work should not depend on one HTTP request remaining alive. Your product needs stable session identifiers, lifecycle persistence, webhook verification, idempotent handlers and a way to reconcile current session state after process restarts.",{},{"id":459,"data":1557,"type":42,"tunes":1559},{"text":1558,"level":219},"Step 3 — Redesign function tools around required actions",{},{"id":464,"data":1561,"type":226,"tunes":1563},{"text":1562},"Function tools remain an important application boundary. You define the function and its JSON schema in the agent configuration. When the harness needs the function, the session can enter an action-required state. Your application retrieves the required action, executes the business logic and returns the result.",{},{"id":469,"data":1565,"type":226,"tunes":1567},{"text":1566},"That means the function implementation should be safe to resume. A webhook may be delivered while another worker is processing. A network failure can occur after the external side effect but before the result is returned. Migration is therefore a good moment to add call IDs, idempotency keys, explicit authorization, timeout policies and audit records to consequential tools.",{},{"id":474,"data":1569,"type":234,"tunes":1572},{"body":1570,"title":1571,"variant":241},"Do not treat a function call from the managed harness as authorization to perform the action. The harness decides \u003Cem>what it wants to call\u003C\u002Fem>; your application still decides whether the current user, session and business state allow that action.","Tool migration trap",{},{"id":480,"data":1574,"type":42,"tunes":1576},{"text":1575,"level":219},"Step 4 — Decide where execution should happen",{},{"id":485,"data":1578,"type":226,"tunes":1580},{"text":1579},"The Agents API separates the managed harness from the execution environment. An agent can operate without a dedicated environment, in an OpenAI-hosted sandbox, or through a self-hosted environment connected to the session.",{},{"id":490,"data":1582,"type":226,"tunes":1584},{"text":1583},"This creates a migration decision that SDK applications may never have made explicitly: which code should run as an application function, which code belongs in a sandbox, and which workloads require infrastructure you control?",{},{"id":495,"data":1586,"type":327,"tunes":1606},{"content":1587,"stretched":43,"withHeadings":14},[1588,1591,1594,1597,1600,1603],[1589,1590],"Need","Likely boundary",[1592,1593],"Call an existing internal service through controlled business logic","Function tool handled by your application",[1595,1596],"Run isolated code or work with temporary files without private infrastructure","OpenAI-hosted environment",[1598,1599],"Access private network resources, custom system software or controlled local compute","Self-hosted environment",[1601,1602],"Persist accepted product artifacts","Application-owned storage, not only sandbox filesystem",[1604,1605],"Execute a high-impact business side effect","Application function with authorization and audit controls",{},{"id":518,"data":1608,"type":42,"tunes":1610},{"text":1609,"level":219},"Step 5 — Replace implicit recovery with explicit lifecycle handling",{},{"id":523,"data":1612,"type":226,"tunes":1614},{"text":1613},"The managed harness provides session-level recovery, but your application still owns every external dependency around it. Self-hosted environments need provisioning, reconnection and shutdown. Function handlers can fail. Webhooks can be retried. Product-side state can change while an agent is idle.",{},{"id":528,"data":1616,"type":226,"tunes":1618},{"text":1617},"Migration therefore needs two recovery models: agent-runtime recovery and business-operation recovery. The first is increasingly managed by the Agents API. The second remains your responsibility.",{},{"id":533,"data":1620,"type":42,"tunes":1622},{"text":1621,"level":219},"Step 6 — Rebuild observability around the new trace boundary",{},{"id":538,"data":1624,"type":226,"tunes":1626},{"text":1625},"Agents API sessions expose events, saved history, turns, tool calls, subagents and token usage. OpenAI also provides session logs in the platform and trace export.",{},{"id":543,"data":1628,"type":226,"tunes":1630},{"text":1629},"Do not discard your application observability because platform traces improved. Product logs still need to connect the agent session to user identity, authorization decision, domain object, tool side effect, approval record and final accepted result. The useful production trace is the join between agent-runtime evidence and business-runtime evidence.",{},{"id":548,"data":1632,"type":554,"tunes":1637},{"url":1633,"title":1634,"excerpt":1635,"ctaLabel":1636},"https:\u002F\u002Fstajic.de\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough","AI Agent Reliability: Why the Final Answer Is Not Enough","Agent reliability depends on the execution path, tools and intermediate decisions — not only the final output.","Read the reliability article",{},{"id":557,"data":1639,"type":42,"tunes":1641},{"text":1640,"level":219},"Step 7 — Preserve evals before changing the runtime",{},{"id":562,"data":1643,"type":226,"tunes":1645},{"text":1644},"A migration can appear successful because the new system still produces plausible answers while silently changing tool choice, session continuity, handoff behaviour, latency or failure recovery. Build the behavioural baseline before switching runtimes.",{},{"id":567,"data":1647,"type":226,"tunes":1649},{"text":1648},"The baseline should include representative tasks, expected tool calls, forbidden actions, approval points, state continuity, recovery scenarios and final-output acceptance criteria. Run the old and new architectures against the same cases wherever possible.",{},{"id":572,"data":1651,"type":42,"tunes":1653},{"text":1652,"level":219},"The Migration Proof Test",{},{"id":577,"data":1655,"type":606,"tunes":1682},{"steps":1656,"title":1681,"orientation":605},[1657,1660,1663,1666,1669,1672,1675,1678],{"label":1658,"description":1659},"1. Freeze the behavioural baseline","Capture representative SDK traces, expected outputs, tool paths, approval points and failure cases.",{"label":1661,"description":1662},"2. Inventory state ownership","Mark each state field as agent-session state, authoritative domain state, durable artifact or ephemeral working state.",{"label":1664,"description":1665},"3. Reuse stable tool implementations","Keep business functions behind application interfaces; replace only the agent-facing integration where possible.",{"label":1667,"description":1668},"4. Build one Agents API vertical slice","Migrate one production-shaped workflow including session creation, tools, events, environment and persistence.",{"label":1670,"description":1671},"5. Inject interruptions","Test process restart, webhook retry, function timeout, self-hosted environment reconnect and stale domain state.",{"label":1673,"description":1674},"6. Compare traces, not only answers","Verify tool choice, authorization, evidence path, state transitions and side effects against the baseline.",{"label":1676,"description":1677},"7. Run shadow traffic","Where feasible, replay or mirror representative tasks before making the new runtime authoritative.",{"label":1679,"description":1680},"8. Cut over behind a reversible boundary","Keep integration adapters and rollback capability until production behaviour is stable.","Prove the new runtime before cutting over",{},{"id":609,"data":1684,"type":42,"tunes":1686},{"text":1685,"level":219},"What to measure during migration",{},{"id":614,"data":1688,"type":327,"tunes":1719},{"content":1689,"stretched":43,"withHeadings":14},[1690,1693,1696,1699,1702,1704,1707,1710,1713,1716],[1691,1692],"Dimension","Migration check",[1694,1695],"Task success","Does the new runtime meet the same or better acceptance criteria?",[1697,1698],"Tool correctness","Does it call the right tool with valid arguments and authorization?",[1700,1701],"State continuity","Can work resume across turns, restarts and asynchronous waits?",[1447,1703],"What happens after webhook loss, handler failure, environment disconnect or timeout?",[1705,1706],"Traceability","Can every consequential action be joined to session, user, tool call and domain object?",[1708,1709],"Context behaviour","Do long-running sessions preserve constraints without carrying stale application truth?",[1711,1712],"Latency","How do session startup, environment provisioning and multi-turn work affect user-visible time?",[1714,1715],"Cost","What changes in model usage, sandbox usage, repeated context and infrastructure operations?",[1717,1718],"Operational load","Which previously application-owned responsibilities actually disappeared, and which merely moved?",{},{"id":648,"data":1721,"type":42,"tunes":1723},{"text":1722,"level":219},"When not to migrate yet",{},{"id":653,"data":1725,"type":226,"tunes":1727},{"text":1726},"An existing Agents SDK application does not become bad architecture simply because the platform direction changed. OpenAI continues maintenance, security fixes, critical bug fixes and compatibility work. If the application is stable, well evaluated and has no blocked roadmap requirement, an immediate runtime migration may not be justified.",{},{"id":658,"data":1729,"type":669,"tunes":1738},{"meta":1730,"items":1731,"style":668},{},[1732,1733,1734,1735,1736,1737],"A required SDK capability is not yet available in the Agents API.","The migration would disrupt a critical production period without delivering near-term value.","The application depends on custom orchestration semantics that have not been validated on the managed harness.","Provider portability is a hard requirement and the current SDK abstraction is materially valuable.","Your team has not yet separated business state from agent runtime state, making cutover unsafe.","The new Agents API behaviour has not been tested against representative production workloads.",{},{"id":672,"data":1740,"type":42,"tunes":1742},{"text":1741,"level":219},"When the migration becomes strategically important",{},{"id":677,"data":1744,"type":226,"tunes":1746},{"text":1745},"Migration becomes more compelling when product requirements align with the managed harness: durable long-running work, platform-managed context compaction and recovery, newer agent-runtime capabilities, sandboxed execution, richer hosted lifecycle management, or a desire to reduce the amount of orchestration code your application operates.",{},{"id":682,"data":1748,"type":226,"tunes":1750},{"text":1749},"The strongest signal is not “the old SDK is feature complete.” It is “our roadmap now depends on capabilities whose natural home is the managed Agents API runtime.”",{},{"id":687,"data":1752,"type":42,"tunes":1754},{"text":1753,"level":219},"What would change this answer?",{},{"id":692,"data":1756,"type":226,"tunes":1758},{"text":1757},"The migration strategy would change if OpenAI publishes automated migration tooling, introduces explicit compatibility layers, changes Agents API session semantics, expands or narrows self-hosted environment support, or changes the support policy for the Agents SDK.",{},{"id":697,"data":1760,"type":226,"tunes":1762},{"text":1761},"It would also change if your product requirements change. A simple request-response assistant may not need a durable managed harness at all. A long-running coding, research or operations agent can benefit much more from the Agents API ownership model.",{},{"id":702,"data":1764,"type":42,"tunes":1766},{"text":1765,"level":219},"Limitations",{},{"id":707,"data":1768,"type":226,"tunes":1770},{"text":1769},"There is no universal one-to-one SDK-to-API migration map because applications use the Agents SDK differently. Some rely heavily on sessions and handoffs; others use it as a thin runner around function tools. The correct migration depends on which responsibilities your application actually owns today.",{},{"id":712,"data":1772,"type":226,"tunes":1774},{"text":1773},"The Agents API is also in public beta, so implementation details can evolve. Treat the ownership principles in this article as more durable than any individual endpoint shape.",{},{"id":717,"data":1776,"type":42,"tunes":1778},{"text":1777,"level":219},"Conclusion",{},{"id":722,"data":1780,"type":226,"tunes":1782},{"text":1781},"Migrating from the Agents SDK to the Agents API is best understood as moving the agent-runtime boundary. The managed harness takes over more of the loop, session continuity, compaction and recovery. Your application should become more explicit about the responsibilities that remain yours: domain truth, authorization, function side effects, artifacts, auditability and product lifecycle.",{},{"id":727,"data":1784,"type":226,"tunes":1786},{"text":1785},"If a migration leaves all of the old orchestration machinery in place and merely replaces SDK calls with Agents API calls, it has probably missed the architectural opportunity. The goal is not to reproduce the old runtime on top of the new one. The goal is to decide which runtime responsibilities no longer belong in your application.",{},{"id":732,"data":1788,"type":42,"tunes":1790},{"text":1789,"level":219},"FAQ",{},{"id":737,"data":1792,"type":737,"tunes":1810},{"items":1793,"title":1809},[1794,1797,1800,1803,1806],{"id":741,"answer":1795,"question":1796},"No. The main change is runtime ownership: the Agents SDK runs the agent loop in your application, while the Agents API runs a managed Codex harness and durable session. State, lifecycle, event handling and recovery should be reviewed as architecture concerns.","Is migrating from the Agents SDK to the Agents API just an API rewrite?",{"id":745,"answer":1798,"question":1799},"The business implementation often can be reused if it is already behind a stable application interface. The agent-facing integration changes because Agents API function calls are handled through session required actions and results.","Do my function tools need to be rewritten?",{"id":749,"answer":1801,"question":1802},"Generally no. Keep authoritative business and product state in your own databases or services. Use the agent session for agent continuity and working context, not as the sole source of truth for your product.","Should I move business state into the Agents API session?",{"id":753,"answer":1804,"question":1805},"Not always, because streaming is also available. Webhooks are especially useful for long-running or asynchronous sessions where your application should react to lifecycle changes without holding an open stream.","Do I need webhooks for the Agents API?",{"id":757,"answer":1807,"question":1808},"No. The SDK remains supported in maintenance mode. Migrate when the new runtime provides meaningful roadmap value and after required behaviour has been validated against production-shaped evals.","Should every existing Agents SDK application migrate now?","Migrating from Agents SDK to Agents API",{},{"id":763,"data":1812,"type":42,"tunes":1814},{"text":1813,"level":219},"Glossary",{},{"id":768,"data":1816,"type":768,"tunes":1835},{"title":1817,"entries":1818},"Key migration terms",[1819,1822,1824,1827,1830,1832],{"term":1820,"anchor":774,"definition":1821},"Runtime boundary","The division of responsibility between the platform-managed agent runtime and the application-owned runtime.",{"term":777,"anchor":778,"definition":1823},"The agent runtime that coordinates model calls, tools, context, orchestration and continued execution.",{"term":1825,"anchor":782,"definition":1826},"Session","A durable Agents API instance that holds an agent's configuration, conversation and saved work across turns.",{"term":1828,"anchor":786,"definition":1829},"Required action","A session state in which the Agents API needs external input such as a function result or environment connection before work can continue.",{"term":1599,"anchor":789,"definition":1831},"An execution environment operated by your infrastructure and connected to the managed Agents API harness.",{"term":1833,"anchor":792,"definition":1834},"Migration proof test","A staged validation method that compares the new runtime against behavioural baselines, failure injections, traces and reversible cutover criteria.",{},{"id":796,"data":1837,"type":42,"tunes":1839},{"text":1838,"level":219},"Primary sources and further reading",{},{"id":801,"data":1841,"type":808,"tunes":1845},{"link":803,"meta":1842},{"image":1843,"title":806,"description":1844},{"url":417},"Current support policy: the Agents SDK is feature complete, remains maintained, and new applications should start with the Agents API.",{},{"id":811,"data":1847,"type":808,"tunes":1852},{"link":813,"meta":1848},{"image":1849,"title":1850,"description":1851},{"url":417},"OpenAI — Running agents with the Agents SDK","Documentation of the SDK application-owned agent loop and continuation model.",{},{"id":820,"data":1854,"type":808,"tunes":1859},{"link":822,"meta":1855},{"image":1856,"title":1857,"description":1858},{"url":417},"OpenAI — Agents API overview","Defines the Agents API core concepts: agent, environment, session, events and items.",{},{"id":829,"data":1861,"type":808,"tunes":1866},{"link":831,"meta":1862},{"image":1863,"title":1864,"description":1865},{"url":417},"OpenAI — Agents API architecture","Explains the hosted harness, application server, OpenAI-hosted and self-hosted execution environment boundaries.",{},{"id":838,"data":1868,"type":808,"tunes":1873},{"link":840,"meta":1869},{"image":1870,"title":1871,"description":1872},{"url":417},"OpenAI — Configuring Agents","Defines reusable agent configuration and session-level customization.",{},{"id":847,"data":1875,"type":808,"tunes":1880},{"link":849,"meta":1876},{"image":1877,"title":1878,"description":1879},{"url":417},"OpenAI — Run and continue sessions","Documents durable sessions, asynchronous turns, streaming and steering.",{},{"id":856,"data":1882,"type":808,"tunes":1887},{"link":858,"meta":1883},{"image":1884,"title":1885,"description":1886},{"url":417},"OpenAI — Agents API Functions","Function-tool definition and the application handler boundary for required function results.",{},{"id":865,"data":1889,"type":808,"tunes":1894},{"link":867,"meta":1890},{"image":1891,"title":1892,"description":1893},{"url":417},"OpenAI — Session webhooks","Lifecycle events for asynchronous sessions, required actions and self-hosted environment connections.",{},{"id":874,"data":1896,"type":808,"tunes":1901},{"link":876,"meta":1897},{"image":1898,"title":1899,"description":1900},{"url":417},"OpenAI — Agents API observability and usage","Session logs, events, turns, tool calls, subagents, traces and token-usage inspection.",{},{"id":223,"data":1903,"type":226,"tunes":1904},{"text":1363},{},{"id":229,"data":1906,"type":234,"tunes":1907},{"body":1367,"title":1368,"variant":233},{},{"id":237,"data":1909,"type":234,"tunes":1910},{"body":1372,"title":1373,"variant":241},{},{"id":244,"data":1912,"type":234,"tunes":1913},{"body":1377,"title":1378,"variant":248},{},{"id":899,"data":1915,"type":220,"tunes":1916},{"title":1359,"maxLevel":218,"minLevel":219},{},{"id":251,"data":1918,"type":42,"tunes":1919},{"text":1382,"level":219},{},{"id":256,"data":1921,"type":226,"tunes":1922},{"text":1386},{},{"id":261,"data":1924,"type":226,"tunes":1925},{"text":1390},{},{"id":266,"data":1927,"type":226,"tunes":1928},{"text":1394},{},{"id":271,"data":1930,"type":42,"tunes":1931},{"text":1398,"level":219},{},{"id":276,"data":1933,"type":327,"tunes":1947},{"content":1934,"stretched":43,"withHeadings":14},[1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946],[1404,281,1405],[1407,1408,1409],[1411,1412,1413],[1415,1416,1417],[1419,1420,1421],[1423,1424,1425],[1427,1428,1429],[1431,1432,1433],[1435,1436,1437],[1439,1440,1441],[1443,1444,1445],[1447,1448,1449],{},{"id":330,"data":1949,"type":42,"tunes":1950},{"text":1453,"level":219},{},{"id":335,"data":1952,"type":226,"tunes":1953},{"text":1457},{},{"id":340,"data":1955,"type":226,"tunes":1956},{"text":1461},{},{"id":345,"data":1958,"type":234,"tunes":1959},{"body":1465,"title":1466,"variant":349},{},{"id":352,"data":1961,"type":42,"tunes":1962},{"text":1470,"level":219},{},{"id":357,"data":1964,"type":226,"tunes":1965},{"text":1474},{},{"id":362,"data":1967,"type":327,"tunes":1976},{"content":1968,"stretched":43,"withHeadings":14},[1969,1970,1971,1972,1973,1974,1975],[1480,1481,1482],[1484,1485,1486],[1488,1489,1490],[1492,1493,1494],[1496,1497,1498],[1500,1501,1502],[1504,1505,1506],{},{"id":395,"data":1978,"type":42,"tunes":1979},{"text":1510,"level":219},{},{"id":400,"data":1981,"type":226,"tunes":1982},{"text":1514},{},{"id":405,"data":1984,"type":226,"tunes":1985},{"text":1518},{},{"id":410,"data":1987,"type":441,"tunes":2001},{"rows":1988,"title":1535,"layout":327,"columns":1997},[1989,1991,1993,1995],{"id":414,"label":1524,"values":1990},[417,417,417],{"id":419,"label":1527,"values":1992},[417,417,417],{"id":423,"label":1530,"values":1994},[417,417,417],{"id":427,"label":1533,"values":1996},[417,417,417],[1998,1999,2000],{"id":433,"label":1538},{"id":436,"label":1540},{"id":439,"label":1542},{},{"id":444,"data":2003,"type":42,"tunes":2004},{"text":1546,"level":219},{},{"id":449,"data":2006,"type":226,"tunes":2007},{"text":1550},{},{"id":454,"data":2009,"type":226,"tunes":2010},{"text":1554},{},{"id":459,"data":2012,"type":42,"tunes":2013},{"text":1558,"level":219},{},{"id":464,"data":2015,"type":226,"tunes":2016},{"text":1562},{},{"id":469,"data":2018,"type":226,"tunes":2019},{"text":1566},{},{"id":474,"data":2021,"type":234,"tunes":2022},{"body":1570,"title":1571,"variant":241},{},{"id":480,"data":2024,"type":42,"tunes":2025},{"text":1575,"level":219},{},{"id":485,"data":2027,"type":226,"tunes":2028},{"text":1579},{},{"id":490,"data":2030,"type":226,"tunes":2031},{"text":1583},{},{"id":495,"data":2033,"type":327,"tunes":2041},{"content":2034,"stretched":43,"withHeadings":14},[2035,2036,2037,2038,2039,2040],[1589,1590],[1592,1593],[1595,1596],[1598,1599],[1601,1602],[1604,1605],{},{"id":518,"data":2043,"type":42,"tunes":2044},{"text":1609,"level":219},{},{"id":523,"data":2046,"type":226,"tunes":2047},{"text":1613},{},{"id":528,"data":2049,"type":226,"tunes":2050},{"text":1617},{},{"id":533,"data":2052,"type":42,"tunes":2053},{"text":1621,"level":219},{},{"id":538,"data":2055,"type":226,"tunes":2056},{"text":1625},{},{"id":543,"data":2058,"type":226,"tunes":2059},{"text":1629},{},{"id":548,"data":2061,"type":554,"tunes":2062},{"url":1633,"title":1634,"excerpt":1635,"ctaLabel":1636},{},{"id":557,"data":2064,"type":42,"tunes":2065},{"text":1640,"level":219},{},{"id":562,"data":2067,"type":226,"tunes":2068},{"text":1644},{},{"id":567,"data":2070,"type":226,"tunes":2071},{"text":1648},{},{"id":572,"data":2073,"type":42,"tunes":2074},{"text":1652,"level":219},{},{"id":577,"data":2076,"type":606,"tunes":2086},{"steps":2077,"title":1681,"orientation":605},[2078,2079,2080,2081,2082,2083,2084,2085],{"label":1658,"description":1659},{"label":1661,"description":1662},{"label":1664,"description":1665},{"label":1667,"description":1668},{"label":1670,"description":1671},{"label":1673,"description":1674},{"label":1676,"description":1677},{"label":1679,"description":1680},{},{"id":609,"data":2088,"type":42,"tunes":2089},{"text":1685,"level":219},{},{"id":614,"data":2091,"type":327,"tunes":2103},{"content":2092,"stretched":43,"withHeadings":14},[2093,2094,2095,2096,2097,2098,2099,2100,2101,2102],[1691,1692],[1694,1695],[1697,1698],[1700,1701],[1447,1703],[1705,1706],[1708,1709],[1711,1712],[1714,1715],[1717,1718],{},{"id":648,"data":2105,"type":42,"tunes":2106},{"text":1722,"level":219},{},{"id":653,"data":2108,"type":226,"tunes":2109},{"text":1726},{},{"id":658,"data":2111,"type":669,"tunes":2114},{"meta":2112,"items":2113,"style":668},{},[1732,1733,1734,1735,1736,1737],{},{"id":672,"data":2116,"type":42,"tunes":2117},{"text":1741,"level":219},{},{"id":677,"data":2119,"type":226,"tunes":2120},{"text":1745},{},{"id":682,"data":2122,"type":226,"tunes":2123},{"text":1749},{},{"id":687,"data":2125,"type":42,"tunes":2126},{"text":1753,"level":219},{},{"id":692,"data":2128,"type":226,"tunes":2129},{"text":1757},{},{"id":697,"data":2131,"type":226,"tunes":2132},{"text":1761},{},{"id":702,"data":2134,"type":42,"tunes":2135},{"text":1765,"level":219},{},{"id":707,"data":2137,"type":226,"tunes":2138},{"text":1769},{},{"id":712,"data":2140,"type":226,"tunes":2141},{"text":1773},{},{"id":717,"data":2143,"type":42,"tunes":2144},{"text":1777,"level":219},{},{"id":722,"data":2146,"type":226,"tunes":2147},{"text":1781},{},{"id":727,"data":2149,"type":226,"tunes":2150},{"text":1785},{},{"id":732,"data":2152,"type":42,"tunes":2153},{"text":1789,"level":219},{},{"id":737,"data":2155,"type":737,"tunes":2162},{"items":2156,"title":1809},[2157,2158,2159,2160,2161],{"id":741,"answer":1795,"question":1796},{"id":745,"answer":1798,"question":1799},{"id":749,"answer":1801,"question":1802},{"id":753,"answer":1804,"question":1805},{"id":757,"answer":1807,"question":1808},{},{"id":763,"data":2164,"type":42,"tunes":2165},{"text":1813,"level":219},{},{"id":768,"data":2167,"type":768,"tunes":2175},{"title":1817,"entries":2168},[2169,2170,2171,2172,2173,2174],{"term":1820,"anchor":774,"definition":1821},{"term":777,"anchor":778,"definition":1823},{"term":1825,"anchor":782,"definition":1826},{"term":1828,"anchor":786,"definition":1829},{"term":1599,"anchor":789,"definition":1831},{"term":1833,"anchor":792,"definition":1834},{},{"id":796,"data":2177,"type":42,"tunes":2178},{"text":1838,"level":219},{},{"id":801,"data":2180,"type":808,"tunes":2183},{"link":803,"meta":2181},{"image":2182,"title":806,"description":1844},{"url":417},{},{"id":811,"data":2185,"type":808,"tunes":2188},{"link":813,"meta":2186},{"image":2187,"title":1850,"description":1851},{"url":417},{},{"id":820,"data":2190,"type":808,"tunes":2193},{"link":822,"meta":2191},{"image":2192,"title":1857,"description":1858},{"url":417},{},{"id":829,"data":2195,"type":808,"tunes":2198},{"link":831,"meta":2196},{"image":2197,"title":1864,"description":1865},{"url":417},{},{"id":838,"data":2200,"type":808,"tunes":2203},{"link":840,"meta":2201},{"image":2202,"title":1871,"description":1872},{"url":417},{},{"id":847,"data":2205,"type":808,"tunes":2208},{"link":849,"meta":2206},{"image":2207,"title":1878,"description":1879},{"url":417},{},{"id":856,"data":2210,"type":808,"tunes":2213},{"link":858,"meta":2211},{"image":2212,"title":1885,"description":1886},{"url":417},{},{"id":865,"data":2215,"type":808,"tunes":2218},{"link":867,"meta":2216},{"image":2217,"title":1892,"description":1893},{"url":417},{},{"id":874,"data":2220,"type":808,"tunes":2223},{"link":876,"meta":2221},{"image":2222,"title":1899,"description":1900},{"url":417},{},"2.31.6","Migrating from the OpenAI Agents SDK to the new Agents API is not an import rename. The runtime boundary changes: the agent loop, durable session, orchestration, context compaction and recovery move toward a managed harness. This guide shows what should move, what should stay in your application, and how to prove the migration before cutover.",{"lang":7,"title":208,"content":210,"contentJson":2227,"excerpt":1315},{"time":212,"blocks":2228,"version":1314},[2229,2232,2235,2238,2241,2244,2247,2250,2253,2256,2259,2275,2278,2281,2284,2287,2290,2293,2304,2307,2310,2313,2329,2332,2335,2338,2341,2344,2347,2350,2353,2356,2359,2369,2372,2375,2378,2381,2384,2387,2390,2393,2396,2399,2402,2414,2417,2431,2434,2437,2442,2445,2448,2451,2454,2457,2460,2463,2466,2469,2472,2475,2478,2481,2490,2493,2503,2506,2511,2516,2521,2526,2531,2536,2541,2546,2551,2554,2557,2560,2563,2566,2569,2572,2575,2578,2581,2597,2600,2603,2606,2609,2612,2615,2626,2629,2632,2635,2651,2654,2657,2660,2663,2666,2669,2672,2675,2678,2681,2691,2694,2697,2700,2703,2706,2709,2712,2715,2718,2721,2724,2736,2739,2753,2756,2759,2764,2767,2770,2773,2776,2779,2782,2785,2788,2791,2794,2797,2800,2803,2812,2815,2825,2828,2833,2838,2843,2848,2853,2858,2863,2868],{"id":215,"data":2230,"type":220,"tunes":2231},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":223,"data":2233,"type":226,"tunes":2234},{"text":225},{},{"id":229,"data":2236,"type":234,"tunes":2237},{"body":231,"title":232,"variant":233},{},{"id":237,"data":2239,"type":234,"tunes":2240},{"body":239,"title":240,"variant":241},{},{"id":244,"data":2242,"type":234,"tunes":2243},{"body":246,"title":247,"variant":248},{},{"id":251,"data":2245,"type":42,"tunes":2246},{"text":253,"level":219},{},{"id":256,"data":2248,"type":226,"tunes":2249},{"text":258},{},{"id":261,"data":2251,"type":226,"tunes":2252},{"text":263},{},{"id":266,"data":2254,"type":226,"tunes":2255},{"text":268},{},{"id":271,"data":2257,"type":42,"tunes":2258},{"text":273,"level":219},{},{"id":276,"data":2260,"type":327,"tunes":2274},{"content":2261,"stretched":43,"withHeadings":14},[2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273],[280,281,282],[284,285,286],[288,289,290],[292,293,294],[296,297,298],[300,301,302],[304,305,306],[308,309,310],[312,313,314],[316,317,318],[320,321,322],[324,325,326],{},{"id":330,"data":2276,"type":42,"tunes":2277},{"text":332,"level":219},{},{"id":335,"data":2279,"type":226,"tunes":2280},{"text":337},{},{"id":340,"data":2282,"type":226,"tunes":2283},{"text":342},{},{"id":345,"data":2285,"type":234,"tunes":2286},{"body":347,"title":348,"variant":349},{},{"id":352,"data":2288,"type":42,"tunes":2289},{"text":354,"level":219},{},{"id":357,"data":2291,"type":226,"tunes":2292},{"text":359},{},{"id":362,"data":2294,"type":327,"tunes":2303},{"content":2295,"stretched":43,"withHeadings":14},[2296,2297,2298,2299,2300,2301,2302],[366,367,368],[370,371,372],[374,375,376],[378,379,380],[382,383,384],[386,387,388],[390,391,392],{},{"id":395,"data":2305,"type":42,"tunes":2306},{"text":397,"level":219},{},{"id":400,"data":2308,"type":226,"tunes":2309},{"text":402},{},{"id":405,"data":2311,"type":226,"tunes":2312},{"text":407},{},{"id":410,"data":2314,"type":441,"tunes":2328},{"rows":2315,"title":430,"layout":327,"columns":2324},[2316,2318,2320,2322],{"id":414,"label":415,"values":2317},[417,417,417],{"id":419,"label":420,"values":2319},[417,417,417],{"id":423,"label":424,"values":2321},[417,417,417],{"id":427,"label":428,"values":2323},[417,417,417],[2325,2326,2327],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2330,"type":42,"tunes":2331},{"text":446,"level":219},{},{"id":449,"data":2333,"type":226,"tunes":2334},{"text":451},{},{"id":454,"data":2336,"type":226,"tunes":2337},{"text":456},{},{"id":459,"data":2339,"type":42,"tunes":2340},{"text":461,"level":219},{},{"id":464,"data":2342,"type":226,"tunes":2343},{"text":466},{},{"id":469,"data":2345,"type":226,"tunes":2346},{"text":471},{},{"id":474,"data":2348,"type":234,"tunes":2349},{"body":476,"title":477,"variant":241},{},{"id":480,"data":2351,"type":42,"tunes":2352},{"text":482,"level":219},{},{"id":485,"data":2354,"type":226,"tunes":2355},{"text":487},{},{"id":490,"data":2357,"type":226,"tunes":2358},{"text":492},{},{"id":495,"data":2360,"type":327,"tunes":2368},{"content":2361,"stretched":43,"withHeadings":14},[2362,2363,2364,2365,2366,2367],[499,500],[502,503],[505,506],[508,509],[511,512],[514,515],{},{"id":518,"data":2370,"type":42,"tunes":2371},{"text":520,"level":219},{},{"id":523,"data":2373,"type":226,"tunes":2374},{"text":525},{},{"id":528,"data":2376,"type":226,"tunes":2377},{"text":530},{},{"id":533,"data":2379,"type":42,"tunes":2380},{"text":535,"level":219},{},{"id":538,"data":2382,"type":226,"tunes":2383},{"text":540},{},{"id":543,"data":2385,"type":226,"tunes":2386},{"text":545},{},{"id":548,"data":2388,"type":554,"tunes":2389},{"url":550,"title":551,"excerpt":552,"ctaLabel":553},{},{"id":557,"data":2391,"type":42,"tunes":2392},{"text":559,"level":219},{},{"id":562,"data":2394,"type":226,"tunes":2395},{"text":564},{},{"id":567,"data":2397,"type":226,"tunes":2398},{"text":569},{},{"id":572,"data":2400,"type":42,"tunes":2401},{"text":574,"level":219},{},{"id":577,"data":2403,"type":606,"tunes":2413},{"steps":2404,"title":604,"orientation":605},[2405,2406,2407,2408,2409,2410,2411,2412],{"label":581,"description":582},{"label":584,"description":585},{"label":587,"description":588},{"label":590,"description":591},{"label":593,"description":594},{"label":596,"description":597},{"label":599,"description":600},{"label":602,"description":603},{},{"id":609,"data":2415,"type":42,"tunes":2416},{"text":611,"level":219},{},{"id":614,"data":2418,"type":327,"tunes":2430},{"content":2419,"stretched":43,"withHeadings":14},[2420,2421,2422,2423,2424,2425,2426,2427,2428,2429],[618,619],[621,622],[624,625],[627,628],[324,630],[632,633],[635,636],[638,639],[641,642],[644,645],{},{"id":648,"data":2432,"type":42,"tunes":2433},{"text":650,"level":219},{},{"id":653,"data":2435,"type":226,"tunes":2436},{"text":655},{},{"id":658,"data":2438,"type":669,"tunes":2441},{"meta":2439,"items":2440,"style":668},{},[662,663,664,665,666,667],{},{"id":672,"data":2443,"type":42,"tunes":2444},{"text":674,"level":219},{},{"id":677,"data":2446,"type":226,"tunes":2447},{"text":679},{},{"id":682,"data":2449,"type":226,"tunes":2450},{"text":684},{},{"id":687,"data":2452,"type":42,"tunes":2453},{"text":689,"level":219},{},{"id":692,"data":2455,"type":226,"tunes":2456},{"text":694},{},{"id":697,"data":2458,"type":226,"tunes":2459},{"text":699},{},{"id":702,"data":2461,"type":42,"tunes":2462},{"text":704,"level":219},{},{"id":707,"data":2464,"type":226,"tunes":2465},{"text":709},{},{"id":712,"data":2467,"type":226,"tunes":2468},{"text":714},{},{"id":717,"data":2470,"type":42,"tunes":2471},{"text":719,"level":219},{},{"id":722,"data":2473,"type":226,"tunes":2474},{"text":724},{},{"id":727,"data":2476,"type":226,"tunes":2477},{"text":729},{},{"id":732,"data":2479,"type":42,"tunes":2480},{"text":734,"level":219},{},{"id":737,"data":2482,"type":737,"tunes":2489},{"items":2483,"title":760},[2484,2485,2486,2487,2488],{"id":741,"answer":742,"question":743},{"id":745,"answer":746,"question":747},{"id":749,"answer":750,"question":751},{"id":753,"answer":754,"question":755},{"id":757,"answer":758,"question":759},{},{"id":763,"data":2491,"type":42,"tunes":2492},{"text":765,"level":219},{},{"id":768,"data":2494,"type":768,"tunes":2502},{"title":770,"entries":2495},[2496,2497,2498,2499,2500,2501],{"term":773,"anchor":774,"definition":775},{"term":777,"anchor":778,"definition":779},{"term":781,"anchor":782,"definition":783},{"term":785,"anchor":786,"definition":787},{"term":509,"anchor":789,"definition":790},{"term":574,"anchor":792,"definition":793},{},{"id":796,"data":2504,"type":42,"tunes":2505},{"text":798,"level":219},{},{"id":801,"data":2507,"type":808,"tunes":2510},{"link":803,"meta":2508},{"image":2509,"title":806,"description":807},{"url":417},{},{"id":811,"data":2512,"type":808,"tunes":2515},{"link":813,"meta":2513},{"image":2514,"title":816,"description":817},{"url":417},{},{"id":820,"data":2517,"type":808,"tunes":2520},{"link":822,"meta":2518},{"image":2519,"title":825,"description":826},{"url":417},{},{"id":829,"data":2522,"type":808,"tunes":2525},{"link":831,"meta":2523},{"image":2524,"title":834,"description":835},{"url":417},{},{"id":838,"data":2527,"type":808,"tunes":2530},{"link":840,"meta":2528},{"image":2529,"title":843,"description":844},{"url":417},{},{"id":847,"data":2532,"type":808,"tunes":2535},{"link":849,"meta":2533},{"image":2534,"title":852,"description":853},{"url":417},{},{"id":856,"data":2537,"type":808,"tunes":2540},{"link":858,"meta":2538},{"image":2539,"title":861,"description":862},{"url":417},{},{"id":865,"data":2542,"type":808,"tunes":2545},{"link":867,"meta":2543},{"image":2544,"title":870,"description":871},{"url":417},{},{"id":874,"data":2547,"type":808,"tunes":2550},{"link":876,"meta":2548},{"image":2549,"title":879,"description":880},{"url":417},{},{"id":223,"data":2552,"type":226,"tunes":2553},{"text":884},{},{"id":229,"data":2555,"type":234,"tunes":2556},{"body":888,"title":232,"variant":233},{},{"id":237,"data":2558,"type":234,"tunes":2559},{"body":892,"title":240,"variant":241},{},{"id":244,"data":2561,"type":234,"tunes":2562},{"body":896,"title":247,"variant":248},{},{"id":899,"data":2564,"type":220,"tunes":2565},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":251,"data":2567,"type":42,"tunes":2568},{"text":904,"level":219},{},{"id":256,"data":2570,"type":226,"tunes":2571},{"text":908},{},{"id":261,"data":2573,"type":226,"tunes":2574},{"text":912},{},{"id":266,"data":2576,"type":226,"tunes":2577},{"text":916},{},{"id":271,"data":2579,"type":42,"tunes":2580},{"text":920,"level":219},{},{"id":276,"data":2582,"type":327,"tunes":2596},{"content":2583,"stretched":43,"withHeadings":14},[2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595],[280,281,282],[927,928,929],[288,289,931],[292,933,294],[296,935,936],[300,938,939],[941,942,943],[945,946,947],[949,950,314],[316,317,952],[954,955,956],[324,325,958],{},{"id":330,"data":2598,"type":42,"tunes":2599},{"text":332,"level":219},{},{"id":335,"data":2601,"type":226,"tunes":2602},{"text":965},{},{"id":340,"data":2604,"type":226,"tunes":2605},{"text":969},{},{"id":345,"data":2607,"type":234,"tunes":2608},{"body":973,"title":348,"variant":349},{},{"id":352,"data":2610,"type":42,"tunes":2611},{"text":354,"level":219},{},{"id":357,"data":2613,"type":226,"tunes":2614},{"text":980},{},{"id":362,"data":2616,"type":327,"tunes":2625},{"content":2617,"stretched":43,"withHeadings":14},[2618,2619,2620,2621,2622,2623,2624],[366,367,986],[988,371,989],[374,375,376],[378,992,380],[994,383,384],[386,387,996],[390,998,999],{},{"id":395,"data":2627,"type":42,"tunes":2628},{"text":1003,"level":219},{},{"id":400,"data":2630,"type":226,"tunes":2631},{"text":1007},{},{"id":405,"data":2633,"type":226,"tunes":2634},{"text":1011},{},{"id":410,"data":2636,"type":441,"tunes":2650},{"rows":2637,"title":430,"layout":327,"columns":2646},[2638,2640,2642,2644],{"id":414,"label":415,"values":2639},[417,417,417],{"id":419,"label":420,"values":2641},[417,417,417],{"id":423,"label":424,"values":2643},[417,417,417],{"id":427,"label":428,"values":2645},[417,417,417],[2647,2648,2649],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2652,"type":42,"tunes":2653},{"text":1031,"level":219},{},{"id":449,"data":2655,"type":226,"tunes":2656},{"text":1035},{},{"id":454,"data":2658,"type":226,"tunes":2659},{"text":1039},{},{"id":459,"data":2661,"type":42,"tunes":2662},{"text":1043,"level":219},{},{"id":464,"data":2664,"type":226,"tunes":2665},{"text":1047},{},{"id":469,"data":2667,"type":226,"tunes":2668},{"text":1051},{},{"id":474,"data":2670,"type":234,"tunes":2671},{"body":1055,"title":477,"variant":241},{},{"id":480,"data":2673,"type":42,"tunes":2674},{"text":482,"level":219},{},{"id":485,"data":2676,"type":226,"tunes":2677},{"text":1062},{},{"id":490,"data":2679,"type":226,"tunes":2680},{"text":1066},{},{"id":495,"data":2682,"type":327,"tunes":2690},{"content":2683,"stretched":43,"withHeadings":14},[2684,2685,2686,2687,2688,2689],[499,500],[502,503],[505,1074],[508,509],[511,1077],[1079,515],{},{"id":518,"data":2692,"type":42,"tunes":2693},{"text":520,"level":219},{},{"id":523,"data":2695,"type":226,"tunes":2696},{"text":1086},{},{"id":528,"data":2698,"type":226,"tunes":2699},{"text":1090},{},{"id":533,"data":2701,"type":42,"tunes":2702},{"text":535,"level":219},{},{"id":538,"data":2704,"type":226,"tunes":2705},{"text":1097},{},{"id":543,"data":2707,"type":226,"tunes":2708},{"text":1101},{},{"id":548,"data":2710,"type":554,"tunes":2711},{"url":550,"title":551,"excerpt":1105,"ctaLabel":553},{},{"id":557,"data":2713,"type":42,"tunes":2714},{"text":1109,"level":219},{},{"id":562,"data":2716,"type":226,"tunes":2717},{"text":1113},{},{"id":567,"data":2719,"type":226,"tunes":2720},{"text":569},{},{"id":572,"data":2722,"type":42,"tunes":2723},{"text":574,"level":219},{},{"id":577,"data":2725,"type":606,"tunes":2735},{"steps":2726,"title":1137,"orientation":605},[2727,2728,2729,2730,2731,2732,2733,2734],{"label":581,"description":1125},{"label":584,"description":1127},{"label":587,"description":588},{"label":590,"description":591},{"label":593,"description":594},{"label":596,"description":1132},{"label":1134,"description":1135},{"label":602,"description":603},{},{"id":609,"data":2737,"type":42,"tunes":2738},{"text":611,"level":219},{},{"id":614,"data":2740,"type":327,"tunes":2752},{"content":2741,"stretched":43,"withHeadings":14},[2742,2743,2744,2745,2746,2747,2748,2749,2750,2751],[618,619],[621,1147],[624,625],[627,1150],[324,1152],[632,633],[635,636],[638,1156],[641,642],[644,1159],{},{"id":648,"data":2754,"type":42,"tunes":2755},{"text":650,"level":219},{},{"id":653,"data":2757,"type":226,"tunes":2758},{"text":1166},{},{"id":658,"data":2760,"type":669,"tunes":2763},{"meta":2761,"items":2762,"style":668},{},[1172,663,1173,665,1174,1175],{},{"id":672,"data":2765,"type":42,"tunes":2766},{"text":674,"level":219},{},{"id":677,"data":2768,"type":226,"tunes":2769},{"text":1182},{},{"id":682,"data":2771,"type":226,"tunes":2772},{"text":1186},{},{"id":687,"data":2774,"type":42,"tunes":2775},{"text":689,"level":219},{},{"id":692,"data":2777,"type":226,"tunes":2778},{"text":1193},{},{"id":697,"data":2780,"type":226,"tunes":2781},{"text":1197},{},{"id":702,"data":2783,"type":42,"tunes":2784},{"text":704,"level":219},{},{"id":707,"data":2786,"type":226,"tunes":2787},{"text":1204},{},{"id":712,"data":2789,"type":226,"tunes":2790},{"text":1208},{},{"id":717,"data":2792,"type":42,"tunes":2793},{"text":719,"level":219},{},{"id":722,"data":2795,"type":226,"tunes":2796},{"text":1215},{},{"id":727,"data":2798,"type":226,"tunes":2799},{"text":1219},{},{"id":732,"data":2801,"type":42,"tunes":2802},{"text":734,"level":219},{},{"id":737,"data":2804,"type":737,"tunes":2811},{"items":2805,"title":760},[2806,2807,2808,2809,2810],{"id":741,"answer":1228,"question":743},{"id":745,"answer":1230,"question":747},{"id":749,"answer":1232,"question":1233},{"id":753,"answer":754,"question":755},{"id":757,"answer":1236,"question":1237},{},{"id":763,"data":2813,"type":42,"tunes":2814},{"text":765,"level":219},{},{"id":768,"data":2816,"type":768,"tunes":2824},{"title":770,"entries":2817},[2818,2819,2820,2821,2822,2823],{"term":773,"anchor":774,"definition":775},{"term":1247,"anchor":778,"definition":779},{"term":781,"anchor":782,"definition":1249},{"term":1251,"anchor":786,"definition":787},{"term":1253,"anchor":789,"definition":1254},{"term":574,"anchor":792,"definition":1256},{},{"id":796,"data":2826,"type":42,"tunes":2827},{"text":798,"level":219},{},{"id":801,"data":2829,"type":808,"tunes":2832},{"link":803,"meta":2830},{"image":2831,"title":806,"description":807},{"url":417},{},{"id":811,"data":2834,"type":808,"tunes":2837},{"link":813,"meta":2835},{"image":2836,"title":1270,"description":1271},{"url":417},{},{"id":820,"data":2839,"type":808,"tunes":2842},{"link":822,"meta":2840},{"image":2841,"title":825,"description":826},{"url":417},{},{"id":829,"data":2844,"type":808,"tunes":2847},{"link":831,"meta":2845},{"image":2846,"title":834,"description":1282},{"url":417},{},{"id":838,"data":2849,"type":808,"tunes":2852},{"link":840,"meta":2850},{"image":2851,"title":843,"description":844},{"url":417},{},{"id":847,"data":2854,"type":808,"tunes":2857},{"link":849,"meta":2855},{"image":2856,"title":852,"description":1293},{"url":417},{},{"id":856,"data":2859,"type":808,"tunes":2862},{"link":858,"meta":2860},{"image":2861,"title":1299,"description":862},{"url":417},{},{"id":865,"data":2864,"type":808,"tunes":2867},{"link":867,"meta":2865},{"image":2866,"title":1305,"description":871},{"url":417},{},{"id":874,"data":2869,"type":808,"tunes":2872},{"link":876,"meta":2870},{"image":2871,"title":1311,"description":1312},{"url":417},{},"Post erfolgreich abgerufen",{"items":2875,"source":2897,"manualIds":2898,"manualMatchedIds":2899},[2876,2883,2890],{"id":2877,"slug":2878,"title":2879,"excerpt":2880,"featuredImage":2881,"publishedAt":2882},"457","should-you-buy-5g-openwrt-router-old-firmware","Treba li kupiti 5G OpenWrt ruter sa starim firmverom? ZBT Z8102AX kao praktičan primer","Kupovina 5G OpenWrt rutera sa starijim firmverom može imati smisla, ali samo pod pravim uslovima. ZBT Z8102AX jasno pokazuje obe strane: hardver je koristan, modem radi, a ruter je ostao stabilan u testiranju, ali OpenWrt 21.02, slabo pakovanje i nejasni putevi nadogradnje zahtevaju pažljivu odluku o kupovini.","\u002Fuploads\u002F2026\u002F06\u002Fopenwrt-router-review-dual-sim-05-1781620596218-5ldld4.webp","2026-06-16T10:41:00.000Z",{"id":2884,"slug":2885,"title":2886,"excerpt":2887,"featuredImage":2888,"publishedAt":2889},"451","test-dev-enterprise","Sveobuhvatni vodič za Test DEv Enterprise Stajic.de: Arhitektura i najbolje prakse","Istražite arhitektonske principe, prednosti i tehničke detalje upravljanja okruženjem za razvoj i testiranje nivoa preduzeća pomoću Test DEv Enterprise Stajic.de.","\u002Fuploads\u002F2026\u002F05\u002Ftest-dev-enterprise-1779534260081-r4dvxn.webp","2026-05-22T23:01:00.000Z",{"id":2891,"slug":2892,"title":2893,"excerpt":2894,"featuredImage":2895,"publishedAt":2896},"477","computer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system","Agenti za korišćenje računara: Zašto uspešan demo i dalje može biti nepouzdan sistem","Agenti za korišćenje računara sada mogu da završe impresivne radne tokove u pregledaču i na radnoj površini, ali jedno uspešno izvršavanje dokazuje sposobnost—ne pouzdanost. Ovaj članak pokazuje kako testirati ponovljivost, robusnost u odnosu na okruženje, kontrolu dugog horizonta, svest o stanju, verifikaciju ishoda i bezbedno upravljanje ciljevima.","\u002Fuploads\u002F2026\u002F09\u002Fcomputer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system-1790352854690-75qnrg.webp","2026-09-25T12:13:00.000Z","fallback",[],[]]