[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"portal-settings:stajic:ru":3,"public-menus:all":38,"post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:ru":205,"related:post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:ru:1":2855},{"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","ru","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":2854},{"id":207,"title":208,"slug":209,"content":210,"contentJson":211,"excerpt":1295,"featuredImage":1296,"featuredImageAlt":1297,"featuredImageCaption":10,"featuredImageTitle":10,"featuredImageCopyright":10,"featuredImageAuthor":10,"featuredImageSourceUrl":10,"featuredImageLicense":10,"featuredImageIsAiGenerated":43,"status":1298,"publishedAt":1299,"createdAt":1300,"updatedAt":1301,"seoLocalePaths":1302,"categories":1311,"author":1324,"translations":1329},"474","Миграция с OpenAI Agents SDK на Agents API: что на самом деле меняется архитектурно?","migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Содержание\">\u003Cstrong class=\"editorjs-toc__title\">Содержание\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\">Миграция — это переход от цикла, принадлежащего приложению, к управляемому каркасу\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">Карта миграции границ среды выполнения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Что может мигрировать концептуально без изменения владения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Что не следует мигрировать один к одному\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Шаг 1 — Отделите состояние домена от состояния сессии агента\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Шаг 2 — Преобразуйте мышление раннера в мышление сессии и событий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Шаг 3 — Перепроектируйте функциональные инструменты вокруг требуемых действий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Шаг 4 — Решите, где должно происходить выполнение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Шаг 5 — Замените неявное восстановление явной обработкой жизненного цикла\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Шаг 6 — Перестройте наблюдаемость вокруг новой границы трассировки\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Шаг 7 — Сохраните оценки до изменения среды выполнения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">Тест доказательства миграции\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Что измерять во время миграции\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Когда ещё не стоит мигрировать\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Когда миграция становится стратегически важной\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Что изменило бы этот ответ?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Ограничения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Заключение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">Часто задаваемые вопросы\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Глоссарий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Первоисточники и дополнительное чтение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">Миграция — от цикла, принадлежащего приложению, к управляемому харнессу\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">Карта миграции границ среды выполнения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Что может мигрировать концептуально без изменения владения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Что не следует мигрировать один к одному\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Шаг 1 — Отделите доменное состояние от состояния сессии агента\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Шаг 2 — Преобразуйте мышление раннера в мышление сессий и событий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Шаг 3 — Перепроектируйте функциональные инструменты вокруг требуемых действий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Шаг 4 — Решите, где должно происходить выполнение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Шаг 5 — Замените неявное восстановление явной обработкой жизненного цикла\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Шаг 6 — Перестройте наблюдаемость вокруг новой границы трассировки\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Шаг 7 — Сохраните оценки перед изменением среды выполнения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">Тест доказательства миграции\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Что измерять во время миграции\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Когда ещё не стоит мигрировать\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Когда миграция становится стратегически важной\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">Что могло бы изменить этот ответ?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Ограничения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Заключение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">Часто задаваемые вопросы\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Глоссарий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Первоисточники и дополнительное чтение\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Cp>Переход с OpenAI Agents SDK на Agents API — это не просто переименование импорта. Меняется ключевая архитектурная граница: SDK выполняет цикл агента внутри вашего приложения, тогда как Agents API запускает управляемый Codex-каркас и долговременную сессию на стороне OpenAI. Поэтому вопрос миграции не в том, «какие классы соответствуют каким эндпоинтам?», а в том, «какие обязанности среды выполнения переходят через границу, какие остаются в нашем приложении и какие нужно перепроектировать?»\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\">Прямой ответ\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Настоящая миграция с Agents SDK на Agents API меняет владение средой выполнения.&lt;\u002Fstrong&gt; Ваша переиспользуемая конфигурация агента по-прежнему может содержать модель, инструкции и инструменты, но цикл, долговременная сессия, оркестрация, сжатие контекста и восстановление переходят к управляемой среде выполнения Agents API. Ваше приложение должно сохранять доменное состояние, авторизацию, бизнес-правила, реализации функций и логику аудита вне сессии агента. Относитесь к миграции как к перепроектированию границы, а не как к механическому преобразованию кода.\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\">Актуально на 25 сентября 2026 г.\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">В настоящее время OpenAI помечает Agents SDK как &lt;strong&gt;функционально завершённый&lt;\u002Fstrong&gt; и рекомендует Agents API для новых агентных приложений. Agents API находится в публичной бете. Существующие приложения на SDK остаются поддерживаемыми, и немедленная миграция не является автоматически обязательной.\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\">О модели миграции\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Карта миграции границ среды выполнения и тест на доказательство миграции в этой статье — это практические инструменты архитектуры, а не официальные фреймворки миграции OpenAI. Они основаны на текущих различиях среды выполнения, задокументированных OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-6\">Миграция — это переход от цикла, принадлежащего приложению, к управляемому каркасу\u003C\u002Fh2>\n\u003Cp>В Agents SDK один запуск — это ход на уровне приложения. Исполнитель SDK вызывает модель, проверяет вывод, выполняет инструменты, следует передачам управления и продолжает, пока не достигнет точки остановки. Ваш процесс размещает этот цикл и, следовательно, владеет его жизненным циклом.\u003C\u002Fp>\n\u003Cp>В Agents API OpenAI запускает каркас. Сессия — это долговременный экземпляр конфигурации агента, который принимает задачи, создаёт события, может приостанавливаться для требуемых действий и может продолжаться во времени. OpenAI управляет сессиями, оркестрацией, сжатием контекста и восстановлением; ваше приложение отправляет работу, обрабатывает функциональные инструменты, получает события и при необходимости управляет самостоятельно размещённой средой выполнения.\u003C\u002Fp>\n\u003Cp>Этот сдвиг владения и есть миграция. Всё остальное — синтаксис API, схемы инструментов, обработка событий, идентификаторы сессий — следует из него.\u003C\u002Fp>\n\u003Ch2 id=\"section-10\">Карта миграции границ среды выполнения\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\">Аспект\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\">Цель миграции в Agents API\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Цикл агента\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Выполняется в вашем приложении через исполнитель SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Выполняется в управляемом каркасе Codex\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Переиспользуемое определение агента\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Объект Agent в коде приложения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Сохранённая или встроенная конфигурация агента с моделью, инструкциями и инструментами\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Непрерывность диалога \u002F работы\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Стратегия сессий SDK, история, продолжение результата или хранилище приложения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Долговременная сессия Agents API\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Выполнение инструментов\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK координирует вызовы инструментов в вашей среде выполнения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Каркас запрашивает вызовы функций; ваше приложение возвращает результаты\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Управление контекстом\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ваша среда выполнения \u002F стратегия сессий SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Управляемый контекст сессии, сжатие и восстановление, а также ваши собственные границы данных приложения\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Передачи управления \u002F специалисты\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Примитивы оркестрации SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Поведение каркаса \u002F субагентов в Agents API; не предполагайте семантику один к одному\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Среда выполнения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Среда выполнения вашего приложения или среда, специфичная для инструмента\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Необязательная среда, размещённая OpenAI или самостоятельно, привязанная к сессии\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Потоковая передача\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Потоковая передача SDK из запуска\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Поток событий сессии Agents API\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Асинхронный жизненный цикл\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Обычно управляется приложением вокруг запуска SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Собственные состояния сессии, асинхронные ходы и вебхуки\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Трассировка \u002F наблюдаемость\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Трассировка Agents SDK и журналы приложения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Журналы сессии Agents, события, ходы, вызовы инструментов, субагенты и экспортируемые трассировки\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Восстановление\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ответственность приложения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Управляемое восстановление каркаса\u002Fсессии плюс восстановление, принадлежащее приложению, для внешних систем и самостоятельно размещённых сред\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-12\">Что может мигрировать концептуально без изменения владения\u003C\u002Fh2>\n\u003Cp>Несколько концепций приложения без проблем переживают миграцию, хотя их представление меняется. Модели, инструкции, определения функций в формате JSON-схемы, доступ к MCP, описания инструментов и требования к структурированному выводу по-прежнему относятся к конфигурации агента.\u003C\u002Fp>\n\u003Cp>Модель конфигурации Agents API от OpenAI явно определяет агента через модель, инструкции, инструменты, рассуждения и поведение вывода. Функциональные инструменты остаются кодом приложения: каркас запрашивает вызов функции, а ваш обработчик возвращает результат. OpenAI также отмечает, что реализации функций, используемые с Responses API, можно переиспользовать с потоком сессий Agents API.\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\">Хороший кандидат на миграцию\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Чистая бизнес-функция, такая как &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt;, не должна знать, кто её вызывает — Agents SDK или Agents API. Держите её доменную логику за стабильным интерфейсом приложения и мигрируйте только адаптер, обращённый к агенту.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-16\">Что не следует мигрировать один к одному\u003C\u002Fh2>\n\u003Cp>Опасный шаблон миграции — воссоздать каждую абстракцию среды выполнения SDK внутри Agents API. Это может привести к тому, что вы будете платить за управляемый каркас, но при этом всё ещё будете эксплуатировать теневой каркас в своём приложении.\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\">Допущение эпохи SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Почему прямое копирование рискованно\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Вопрос миграции\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Цикл приложения владеет каждым продолжением\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API уже владеет циклом каркаса\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какая логика продолжения является продуктовой логикой, а какую следует перенести в управляемую сессию?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Локальный объект сессии — основной механизм непрерывности\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Сессии Agents API — это долговременные ресурсы с собственным жизненным циклом\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какое состояние принадлежит сессии, а какое — базе данных продукта?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Каждое прерывание обрабатывается синхронно\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ходы Agents API асинхронны и могут выдавать состояния action_required\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какие действия требуют вебхуков, воркеров, идемпотентности и возобновляемых обработчиков?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Всё выполнение инструментов происходит там, где работает процесс SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Обработчики функций и среды выполнения могут быть раздельными\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Где на самом деле должен выполняться каждый инструмент?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Трассировка SDK — это операционная временная шкала\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API предоставляет события сессии, ходы и управляемые трассировки\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какие данные аудита на уровне приложения всё ещё нужны в собственной записи?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Объект handoff напрямую соответствует размещённой модели субагента\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Семантика среды выполнения может различаться\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какое видимое пользователю владение и поведение специалистов нужно сохранить, а не просто старую структуру классов?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-19\">Шаг 1 — Отделите состояние домена от состояния сессии агента\u003C\u002Fh2>\n\u003Cp>Прежде чем трогать вызовы API, классифицируйте состояние, которое в настоящее время несёт ваше SDK-приложение. Часть состояния существует только для того, чтобы поддерживать движение диалога агента. Другое состояние — это бизнес-истина: права пользователя, статус проекта, данные заказа, утверждение рабочего процесса, записи клиентов, версии документов, состояние политики или конфигурация приложения.\u003C\u002Fp>\n\u003Cp>Вторая категория не должна становиться зависимой от сессии Agents API. Долговечная сессия — это полезная непрерывность для агента; она не заменяет источник истины вашего продукта. Если сессия исчезнет, истечёт, будет пересоздана или изменит реализацию, ваше приложение всё равно должно знать, что является истинным.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Тест на размещение состояния\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\">Тип состояния\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\">Предпочтительный владелец\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\">Причина\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\">Непрерывность диалога\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\">Бизнес-истина\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\">Долговечный артефакт\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\">Рабочее временное состояние\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\">Шаг 2 — Преобразуйте мышление раннера в мышление сессии и событий\u003C\u002Fh2>\n\u003Cp>SDK-приложения часто мыслят в терминах вызова run и получения результата. Agents API мыслит в терминах долговечной сессии, ходы которой могут выполняться асинхронно. Сообщение в бездействующую сессию запускает работу; сообщение во время активного хода может его направить. Прогресс поступает через потоковую передачу или вебхуки.\u003C\u002Fp>\n\u003Cp>Это влияет на архитектуру приложения. Длительная производственная работа не должна зависеть от того, что один HTTP-запрос остаётся активным. Вашему продукту нужны стабильные идентификаторы сессий, сохранение жизненного цикла, проверка вебхуков, идемпотентные обработчики и способ согласовать текущее состояние сессии после перезапуска процесса.\u003C\u002Fp>\n\u003Ch2 id=\"section-26\">Шаг 3 — Перепроектируйте функциональные инструменты вокруг требуемых действий\u003C\u002Fh2>\n\u003Cp>Функциональные инструменты остаются важной границей приложения. Вы определяете функцию и её JSON-схему в конфигурации агента. Когда среде выполнения нужна функция, сессия может перейти в состояние требуемого действия. Ваше приложение извлекает требуемое действие, выполняет бизнес-логику и возвращает результат.\u003C\u002Fp>\n\u003Cp>Это означает, что реализация функции должна быть безопасной для возобновления. Вебхук может быть доставлен, пока другой рабочий процесс обрабатывает. Сетевой сбой может произойти после внешнего побочного эффекта, но до возврата результата. Поэтому миграция — хороший момент, чтобы добавить идентификаторы вызовов, ключи идемпотентности, явную авторизацию, политики тайм-аутов и записи аудита к значимым инструментам.\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\">Ловушка миграции инструментов\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Не рассматривайте вызов функции из управляемой среды выполнения как авторизацию на выполнение действия. Среда выполнения решает &lt;em&gt;что она хочет вызвать&lt;\u002Fem&gt;; ваше приложение всё ещё решает, позволяют ли текущий пользователь, сессия и бизнес-состояние выполнить это действие.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-30\">Шаг 4 — Решите, где должно происходить выполнение\u003C\u002Fh2>\n\u003Cp>Agents API разделяет управляемую среду выполнения и среду исполнения. Агент может работать без выделенной среды, в песочнице, размещённой OpenAI, или через самостоятельно размещённую среду, подключённую к сессии.\u003C\u002Fp>\n\u003Cp>Это создаёт решение о миграции, которое SDK-приложения, возможно, никогда не принимали явно: какой код должен выполняться как функция приложения, какой код принадлежит песочнице и какие рабочие нагрузки требуют инфраструктуры, которую вы контролируете?\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\">Потребность\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Вероятная граница\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Вызов существующего внутреннего сервиса через контролируемую бизнес-логику\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Функциональный инструмент, обрабатываемый вашим приложением\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Запуск изолированного кода или работа с временными файлами без частной инфраструктуры\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Среда, размещённая OpenAI\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Доступ к ресурсам частной сети, пользовательскому системному программному обеспечению или контролируемым локальным вычислениям\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Самостоятельно размещённая среда\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Сохранение принятых продуктовых артефактов\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Хранилище, принадлежащее приложению, а не только файловая система песочницы\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Выполнение высокозначимого бизнес-побочного эффекта\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Функция приложения с контролем авторизации и аудита\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-34\">Шаг 5 — Замените неявное восстановление явной обработкой жизненного цикла\u003C\u002Fh2>\n\u003Cp>Управляемая среда выполнения обеспечивает восстановление на уровне сессии, но ваше приложение всё ещё владеет каждой внешней зависимостью вокруг неё. Самостоятельно размещённые среды нуждаются в подготовке, переподключении и завершении. Обработчики функций могут давать сбои. Вебхуки могут повторяться. Состояние на стороне продукта может измениться, пока агент бездействует.\u003C\u002Fp>\n\u003Cp>Поэтому миграция нуждается в двух моделях восстановления: восстановление среды выполнения агента и восстановление бизнес-операций. Первое всё больше управляется Agents API. Второе остаётся вашей ответственностью.\u003C\u002Fp>\n\u003Ch2 id=\"section-37\">Шаг 6 — Перестройте наблюдаемость вокруг новой границы трассировки\u003C\u002Fh2>\n\u003Cp>Сессии Agents API предоставляют события, сохранённую историю, ходы, вызовы инструментов, субагентов и использование токенов. OpenAI также предоставляет журналы сессий на платформе и экспорт трассировок.\u003C\u002Fp>\n\u003Cp>Не отказывайтесь от наблюдаемости вашего приложения только потому, что трассировки платформы улучшились. Журналы продукта по-прежнему должны связывать сессию агента с идентичностью пользователя, решением об авторизации, доменным объектом, побочным эффектом инструмента, записью об утверждении и окончательным принятым результатом. Полезная производственная трассировка — это соединение свидетельств среды выполнения агента и свидетельств бизнес-среды выполнения.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Fru\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\">Надёжность ИИ-агентов: почему окончательного ответа недостаточно\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">Надёжность агента зависит от пути выполнения, инструментов и промежуточных решений — а не только от окончательного вывода.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Читать статью о надёжности →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-41\">Шаг 7 — Сохраните оценки до изменения среды выполнения\u003C\u002Fh2>\n\u003Cp>Миграция может показаться успешной, потому что новая система по-прежнему выдаёт правдоподобные ответы, но при этом незаметно меняет выбор инструментов, непрерывность сессии, поведение при передаче управления, задержку или восстановление после сбоев. Постройте поведенческий базовый уровень до переключения сред выполнения.\u003C\u002Fp>\n\u003Cp>Базовый уровень должен включать репрезентативные задачи, ожидаемые вызовы инструментов, запрещённые действия, точки утверждения, непрерывность состояния, сценарии восстановления и критерии приёмки окончательного вывода. По возможности запускайте старую и новую архитектуры на одних и тех же случаях.\u003C\u002Fp>\n\u003Ch2 id=\"section-44\">Тест доказательства миграции\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Докажите новую среду выполнения до переключения\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. Зафиксируйте поведенческий базовый уровень\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Захватите репрезентативные трассировки SDK, ожидаемые выводы, пути инструментов, точки утверждения и случаи сбоев.\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. Проведите инвентаризацию владения состоянием\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Пометьте каждое поле состояния как состояние сессии агента, авторитетное доменное состояние, долговечный артефакт или эфемерное рабочее состояние.\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. Переиспользуйте стабильные реализации инструментов\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Сохраняйте бизнес-функции за интерфейсами приложения; где возможно, заменяйте только интеграцию, обращённую к агенту.\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. Постройте один вертикальный срез Agents API\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Перенесите один рабочий процесс, соответствующий производственному, включая создание сессии, инструменты, события, среду и персистентность.\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. Внедрите прерывания\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Проверьте перезапуск процесса, повтор вебхука, тайм-аут функции, переподключение самостоятельно размещённой среды и устаревшее доменное состояние.\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. Сравнивайте трассировки, а не только ответы\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Проверьте выбор инструментов, авторизацию, путь доказательств, переходы состояний и побочные эффекты относительно базового уровня.\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. Запустите теневой трафик\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Где это осуществимо, воспроизведите или зеркалируйте репрезентативные задачи, прежде чем делать новую среду выполнения авторитетной.\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. Переключитесь за обратимой границей\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Сохраняйте интеграционные адаптеры и возможность отката, пока производственное поведение не станет стабильным.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-46\">Что измерять во время миграции\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\">Измерение\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Проверка миграции\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Успех задачи\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Соответствует ли новая среда выполнения тем же или лучшим критериям приёмки?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Корректность инструментов\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Вызывает ли она нужный инструмент с допустимыми аргументами и авторизацией?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Непрерывность состояния\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Может ли работа возобновиться между ходами, перезапусками и асинхронными ожиданиями?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Восстановление\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Что происходит после потери вебхука, сбоя обработчика, отключения среды или тайм-аута?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Прослеживаемость\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Можно ли каждое значимое действие связать с сессией, пользователем, вызовом инструмента и доменным объектом?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Поведение контекста\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Сохраняют ли длительные сессии ограничения, не перенося устаревшую истину приложения?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Задержка\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Как запуск сессии, подготовка среды и многоходовая работа влияют на видимое пользователю время?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Стоимость\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Что меняется в использовании модели, использовании песочницы, повторяющемся контексте и инфраструктурных операциях?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Операционная нагрузка\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какие ранее принадлежавшие приложению обязанности действительно исчезли, а какие лишь переместились?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-48\">Когда ещё не стоит мигрировать\u003C\u002Fh2>\n\u003Cp>Существующее приложение на Agents SDK не становится плохой архитектурой просто потому, что направление платформы изменилось. OpenAI продолжает поддержку, исправления безопасности, критические исправления ошибок и работу над совместимостью. Если приложение стабильно, хорошо оценено и не имеет заблокированного требования дорожной карты, немедленная миграция среды выполнения может быть не оправдана.\u003C\u002Fp>\n\u003Cul>\u003Cli>Требуемая возможность SDK ещё недоступна в Agents API.\u003C\u002Fli>\u003Cli>Миграция нарушит критический производственный период, не принося ближайшей пользы.\u003C\u002Fli>\u003Cli>Приложение зависит от пользовательской семантики оркестрации, которая не была проверена на управляемом каркасе.\u003C\u002Fli>\u003Cli>Переносимость между провайдерами является жёстким требованием, и текущая абстракция SDK существенно ценна.\u003C\u002Fli>\u003Cli>Ваша команда ещё не отделила бизнес-состояние от состояния среды выполнения агента, что делает переключение небезопасным.\u003C\u002Fli>\u003Cli>Поведение нового Agents API не было протестировано на репрезентативных производственных нагрузках.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-51\">Когда миграция становится стратегически важной\u003C\u002Fh2>\n\u003Cp>Миграция становится более убедительной, когда требования продукта соответствуют управляемому каркасу: долговечная длительная работа, управляемое платформой сжатие и восстановление контекста, более новые возможности среды выполнения агента, выполнение в песочнице, более богатое управление жизненным циклом на хостинге или желание сократить объём кода оркестрации, который эксплуатирует ваше приложение.\u003C\u002Fp>\n\u003Cp>Самый сильный сигнал — не «старый SDK функционально завершён». Это «наша дорожная карта теперь зависит от возможностей, естественным домом которых является управляемая среда выполнения Agents API».\u003C\u002Fp>\n\u003Ch2 id=\"section-54\">Что изменило бы этот ответ?\u003C\u002Fh2>\n\u003Cp>Стратегия миграции изменится, если OpenAI опубликует инструменты автоматизированной миграции, представит явные слои совместимости, изменит семантику сессий Agents API, расширит или сузит поддержку сред с самостоятельным размещением или изменит политику поддержки Agents SDK.\u003C\u002Fp>\n\u003Cp>Она также изменится, если изменятся требования вашего продукта. Простому ассистенту с запросами и ответами может вообще не понадобиться долговечная управляемая среда выполнения. Долго работающий агент для программирования, исследований или операций может получить гораздо больше пользы от модели владения Agents API.\u003C\u002Fp>\n\u003Ch2 id=\"section-57\">Ограничения\u003C\u002Fh2>\n\u003Cp>Не существует универсального взаимно однозначного соответствия между SDK и API для миграции, поскольку приложения используют Agents SDK по-разному. Некоторые сильно полагаются на сессии и передачи управления; другие используют его как тонкую обёртку вокруг функциональных инструментов. Правильная миграция зависит от того, какие обязанности ваше приложение фактически несёт сегодня.\u003C\u002Fp>\n\u003Cp>Agents API также находится в публичной бета-версии, поэтому детали реализации могут меняться. Рассматривайте принципы распределения ответственности из этой статьи как более долговечные, чем любая отдельная форма эндпоинта.\u003C\u002Fp>\n\u003Ch2 id=\"section-60\">Заключение\u003C\u002Fh2>\n\u003Cp>Миграцию с Agents SDK на Agents API лучше всего понимать как перемещение границы среды выполнения агента. Управляемая среда выполнения берёт на себя большую часть цикла, непрерывности сессии, сжатия и восстановления. Ваше приложение должно стать более явным в отношении обязанностей, которые остаются за вами: доменная истина, авторизация, побочные эффекты функций, артефакты, аудируемость и жизненный цикл продукта.\u003C\u002Fp>\n\u003Cp>Если миграция оставляет всю старую оркестрационную машинерию на месте и лишь заменяет вызовы SDK на вызовы Agents API, она, вероятно, упустила архитектурную возможность. Цель не в том, чтобы воспроизвести старую среду выполнения поверх новой. Цель в том, чтобы решить, какие обязанности среды выполнения больше не должны принадлежать вашему приложению.\u003C\u002Fp>\n\u003Ch2 id=\"section-63\">Часто задаваемые вопросы\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\">Миграция с Agents SDK на 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\">Миграция с Agents SDK на Agents API — это просто переписывание API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Нет. Основное изменение — это владение средой выполнения: Agents SDK запускает цикл агента в вашем приложении, тогда как Agents API запускает управляемую среду выполнения Codex и долговечную сессию. Состояние, жизненный цикл, обработку событий и восстановление следует рассматривать как архитектурные вопросы.\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\">Нужно ли переписывать мои функциональные инструменты?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Бизнес-реализацию часто можно переиспользовать, если она уже находится за стабильным интерфейсом приложения. Интеграция, обращённая к агенту, меняется, поскольку вызовы функций Agents API обрабатываются через обязательные действия и результаты сессии.\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\">Следует ли переносить бизнес-состояние в сессию Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Как правило, нет. Храните авторитетное бизнес- и продуктовое состояние в собственных базах данных или сервисах. Используйте сессию агента для непрерывности агента и рабочего контекста, а не как единственный источник истины для вашего продукта.\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\">Нужны ли мне вебхуки для Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Не всегда, поскольку также доступна потоковая передача. Вебхуки особенно полезны для долго работающих или асинхронных сессий, когда ваше приложение должно реагировать на изменения жизненного цикла, не удерживая открытый поток.\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\">Следует ли всем существующим приложениям на Agents SDK мигрировать сейчас?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Нет. SDK остаётся поддерживаемым в режиме сопровождения. Мигрируйте, когда новая среда выполнения даёт значимую ценность для дорожной карты и после того, как требуемое поведение было проверено на оценках, приближенных к продакшену.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-65\">Глоссарий\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\">Ключевые термины миграции\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\">Граница среды выполнения\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Разделение ответственности между управляемой платформой средой выполнения агента и средой выполнения, принадлежащей приложению.\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\">Среда выполнения\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Среда выполнения агента, которая координирует вызовы модели, инструменты, контекст, оркестрацию и продолжение выполнения.\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\">Сессия\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Долговечный экземпляр Agents API, который хранит конфигурацию агента, разговор и сохранённую работу между ходами.\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\">Обязательное действие\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Состояние сессии, в котором Agents API нуждается во внешнем вводе, таком как результат функции или подключение к среде, прежде чем работа может продолжиться.\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\">Среда с самостоятельным размещением\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Среда выполнения, управляемая вашей инфраструктурой и подключённая к управляемой среде выполнения Agents API.\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\">Тест подтверждения миграции\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Поэтапный метод проверки, который сравнивает новую среду выполнения с поведенческими базовыми линиями, инъекциями отказов, трассировками и обратимыми критериями переключения.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-67\">Первоисточники и дополнительное чтение\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\">Текущая политика поддержки: Agents SDK функционально завершён, продолжает поддерживаться, а новые приложения должны начинать с Agents API.\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 — Запуск агентов с помощью Agents SDK\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Документация по циклу агента и модели продолжения, принадлежащим приложению на SDK.\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 — Обзор Agents API\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Определяет основные концепции Agents API: агент, среда, сессия, события и элементы.\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 — Архитектура Agents API\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Объясняет границы размещённой среды выполнения, сервера приложения, среды выполнения, размещённой OpenAI, и среды с самостоятельным размещением.\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 — Настройка агентов\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Определяет переиспользуемую конфигурацию агента и настройку на уровне сессии.\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 — Запуск и продолжение сессий\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Описывает долговременные сессии, асинхронные ходы, потоковую передачу и управление.\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\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Определение функции-инструмента и граница обработчика приложения для требуемых результатов функций.\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 — Вебхуки сессий\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">События жизненного цикла для асинхронных сессий, требуемые действия и подключения к самостоятельно размещённым средам.\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\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Журналы сессий, события, ходы, вызовы инструментов, субагенты, трассировки и анализ использования токенов.\u003C\u002Fp>\u003C\u002Fa>\n\u003Cp>Переход с OpenAI Agents SDK на Agents API — это не просто переименование импорта. Меняется ключевая архитектурная граница: SDK выполняет цикл агента внутри вашего приложения, тогда как Agents API запускает управляемый харнесс Codex и долговременную сессию на стороне OpenAI. Поэтому вопрос миграции не в том, «какие классы соответствуют каким эндпоинтам?», а в том, «какие обязанности среды выполнения перемещаются через границу, какие остаются в нашем приложении и какие нужно перепроектировать?»\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\">Прямой ответ\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Настоящая миграция с Agents SDK на Agents API меняет владение средой выполнения.&lt;\u002Fstrong&gt; Ваша переиспользуемая конфигурация агента по-прежнему может содержать модель, инструкции и инструменты, но цикл, долговременная сессия, оркестрация, сжатие контекста и восстановление переходят к управляемой среде выполнения Agents API. Ваше приложение должно сохранять доменное состояние, авторизацию, бизнес-правила, реализации функций и логику аудита вне сессии агента. Рассматривайте миграцию как перепроектирование границы, а не как механическое преобразование кода.\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\">Актуально на 25 сентября 2026 г.\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">В настоящее время OpenAI помечает Agents SDK как &lt;strong&gt;функционально завершённый&lt;\u002Fstrong&gt; и рекомендует Agents API для новых агентных приложений. Agents API находится в публичной бета-версии. Существующие приложения на SDK остаются поддерживаемыми, и немедленная миграция не требуется автоматически.\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\">О модели миграции\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Карта миграции границ среды выполнения и Тест подтверждения миграции в этой статье — это практические инструменты архитектуры, а не официальные фреймворки миграции OpenAI. Они основаны на текущих различиях среды выполнения, задокументированных OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Содержание\">\u003Cstrong class=\"editorjs-toc__title\">Содержание\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\">Миграция — это переход от цикла, принадлежащего приложению, к управляемому каркасу\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">Карта миграции границ среды выполнения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Что может мигрировать концептуально без изменения владения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Что не следует мигрировать один к одному\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Шаг 1 — Отделите состояние домена от состояния сессии агента\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Шаг 2 — Преобразуйте мышление раннера в мышление сессии и событий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Шаг 3 — Перепроектируйте функциональные инструменты вокруг требуемых действий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Шаг 4 — Решите, где должно происходить выполнение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Шаг 5 — Замените неявное восстановление явной обработкой жизненного цикла\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Шаг 6 — Перестройте наблюдаемость вокруг новой границы трассировки\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Шаг 7 — Сохраните оценки до изменения среды выполнения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">Тест доказательства миграции\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Что измерять во время миграции\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Когда ещё не стоит мигрировать\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Когда миграция становится стратегически важной\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Что изменило бы этот ответ?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Ограничения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Заключение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">Часто задаваемые вопросы\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Глоссарий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Первоисточники и дополнительное чтение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">Миграция — от цикла, принадлежащего приложению, к управляемому харнессу\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">Карта миграции границ среды выполнения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Что может мигрировать концептуально без изменения владения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Что не следует мигрировать один к одному\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Шаг 1 — Отделите доменное состояние от состояния сессии агента\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Шаг 2 — Преобразуйте мышление раннера в мышление сессий и событий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Шаг 3 — Перепроектируйте функциональные инструменты вокруг требуемых действий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Шаг 4 — Решите, где должно происходить выполнение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Шаг 5 — Замените неявное восстановление явной обработкой жизненного цикла\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Шаг 6 — Перестройте наблюдаемость вокруг новой границы трассировки\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Шаг 7 — Сохраните оценки перед изменением среды выполнения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">Тест доказательства миграции\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Что измерять во время миграции\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Когда ещё не стоит мигрировать\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Когда миграция становится стратегически важной\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">Что могло бы изменить этот ответ?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Ограничения\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Заключение\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">Часто задаваемые вопросы\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Глоссарий\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Первоисточники и дополнительное чтение\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Ch2 id=\"section-82\">Миграция — от цикла, принадлежащего приложению, к управляемому харнессу\u003C\u002Fh2>\n\u003Cp>В Agents SDK один запуск — это ход на уровне приложения. Раннер SDK вызывает модель, проверяет вывод, выполняет инструменты, следует передачам и продолжает, пока не достигнет точки остановки. Ваш процесс размещает этот цикл и, следовательно, владеет его жизненным циклом.\u003C\u002Fp>\n\u003Cp>В Agents API харнесс запускает OpenAI. Сессия — это долговременный экземпляр конфигурации агента, который принимает задачи, создаёт события, может приостанавливаться для требуемых действий и может продолжаться во времени. OpenAI управляет сессиями, оркестрацией, сжатием контекста и восстановлением; ваше приложение отправляет работу, обрабатывает функциональные инструменты, получает события и, при необходимости, управляет самостоятельно размещённой средой выполнения.\u003C\u002Fp>\n\u003Cp>Этот сдвиг владения и есть миграция. Всё остальное — синтаксис API, схемы инструментов, обработка событий, идентификаторы сессий — следует из него.\u003C\u002Fp>\n\u003Ch2 id=\"section-86\">Карта миграции границ среды выполнения\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\">Аспект\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\">Цель миграции Agents API\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Цикл агента\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Выполняется в вашем приложении через раннер SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Выполняется в управляемом харнессе Codex\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Переиспользуемое определение агента\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Объект Agent в коде приложения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Сохранённая или встроенная конфигурация агента с моделью, инструкциями и инструментами\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Непрерывность разговора \u002F работы\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Стратегия сессии SDK, история, продолжение результата или хранилище приложения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Долговременная сессия Agents API\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Выполнение инструментов\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">SDK координирует вызовы инструментов в вашей среде выполнения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Харнесс запрашивает вызовы функций; ваше приложение возвращает результаты\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Управление контекстом\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ваша среда выполнения \u002F стратегия сессии SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Управляемый контекст сессии, сжатие и восстановление, а также ваши собственные границы данных приложения\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Передачи \u002F специалисты\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Примитивы оркестрации SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Поведение харнесса \u002F субагентов в Agents API; не предполагайте взаимно однозначную семантику\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Среда выполнения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Среда выполнения вашего приложения или среда, специфичная для инструмента\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Необязательная среда, размещённая OpenAI или самостоятельно, привязанная к сессии\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Потоковая передача\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Потоковая передача SDK из запуска\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Поток событий сессии Agents API\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Асинхронный жизненный цикл\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Обычно управляется приложением вокруг запуска SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Собственные состояния сессии, асинхронные ходы и вебхуки\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Трассировка \u002F наблюдаемость\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Трассировка Agents SDK и журналы приложения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Журналы сессий Agents, события, ходы, вызовы инструментов, субагенты и экспортируемые трассировки\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Восстановление\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ответственность приложения\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Управляемое восстановление харнесса\u002Fсессии плюс восстановление, принадлежащее приложению, для внешних систем и самостоятельно размещённых сред\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-88\">Что может мигрировать концептуально без изменения владения\u003C\u002Fh2>\n\u003Cp>Несколько концепций приложения без проблем переживают миграцию, хотя их представление меняется. Модели, инструкции, определения функций в формате JSON-схемы, доступ к MCP, описания инструментов и требования к структурированному выводу по-прежнему относятся к конфигурации агента.\u003C\u002Fp>\n\u003Cp>Модель конфигурации Agents API от OpenAI явно определяет агента через модель, инструкции, инструменты, рассуждения и поведение вывода. Функциональные инструменты остаются кодом приложения: харнесс запрашивает вызов функции, а ваш обработчик возвращает результат. OpenAI также отмечает, что реализации функций, используемые с Responses API, можно переиспользовать с потоком сессий Agents API.\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\">Хороший кандидат для миграции\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Чистая бизнес-функция, такая как &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt;, не должна знать, кто её вызывает — Agents SDK или Agents API. Держите её доменную логику за стабильным интерфейсом приложения и мигрируйте только адаптер, обращённый к агенту.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-92\">Что не следует мигрировать один к одному\u003C\u002Fh2>\n\u003Cp>Опасный шаблон миграции — воссоздать каждую абстракцию среды выполнения SDK внутри Agents API. Это может привести к тому, что вы будете платить за управляемую обвязку, продолжая при этом эксплуатировать теневую обвязку в своём приложении.\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\">Допущение эпохи SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Почему прямое копирование рискованно\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Вопрос миграции\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Цикл приложения управляет каждым продолжением\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API уже управляет циклом обвязки\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какая логика продолжения является продуктовой, а какую следует перенести в управляемую сессию?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Локальный объект сессии — основной механизм непрерывности\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Сессии Agents API — это долговечные ресурсы с собственным жизненным циклом\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какое состояние принадлежит сессии, а какое — базе данных продукта?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Каждое прерывание обрабатывается синхронно\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Ходы Agents API асинхронны и могут порождать состояния action_required\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какие действия требуют вебхуков, воркеров, идемпотентности и возобновляемых обработчиков?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Всё выполнение инструментов происходит там, где работает процесс SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Обработчики функций и среды выполнения могут быть разделены\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Где на самом деле должен выполняться каждый инструмент?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Трассировка SDK — это операционная временная шкала\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Agents API предоставляет события сессии, ходы и управляемые трассировки\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какие данные аудита уровня приложения всё ещё нужны в собственной записи?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Объект передачи напрямую соответствует модели размещённого субагента\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Семантика среды выполнения может различаться\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какое видимое пользователю владение и поведение специалиста должно быть сохранено, а не просто старая структура классов?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-95\">Шаг 1 — Отделите доменное состояние от состояния сессии агента\u003C\u002Fh2>\n\u003Cp>Прежде чем трогать вызовы API, классифицируйте состояние, которое в настоящее время несёт ваше приложение на SDK. Часть состояния существует только для того, чтобы поддерживать движение разговора агента. Другое состояние — это бизнес-истина: права пользователя, статус проекта, данные заказа, утверждение рабочего процесса, записи клиентов, версии документов, состояние политики или конфигурация приложения.\u003C\u002Fp>\n\u003Cp>Вторая категория не должна становиться зависимой от сессии Agents API. Долговечная сессия — это полезная непрерывность для агента; она не является заменой источника истины вашего продукта. Если сессия исчезнет, истечёт, будет перестроена или изменит реализацию, ваше приложение всё равно должно знать, что является истинным.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Тест на размещение состояния\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\">Тип состояния\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\">Предпочтительный владелец\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\">Причина\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\">Непрерывность разговора\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\">Бизнес-истина\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\">Долговечный артефакт\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\">Рабочее черновое состояние\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\">Шаг 2 — Преобразуйте мышление раннера в мышление сессий и событий\u003C\u002Fh2>\n\u003Cp>Приложения на SDK часто мыслят в терминах вызова run и получения результата. Agents API мыслит в терминах долговечной сессии, ходы которой могут выполняться асинхронно. Сообщение в бездействующую сессию запускает работу; сообщение во время активного хода может его направлять. Прогресс поступает через потоковую передачу или вебхуки.\u003C\u002Fp>\n\u003Cp>Это влияет на архитектуру приложения. Длительная производственная работа не должна зависеть от того, что один HTTP-запрос остаётся активным. Вашему продукту нужны стабильные идентификаторы сессий, сохранение жизненного цикла, проверка вебхуков, идемпотентные обработчики и способ согласовать текущее состояние сессии после перезапуска процесса.\u003C\u002Fp>\n\u003Ch2 id=\"section-102\">Шаг 3 — Перепроектируйте функциональные инструменты вокруг требуемых действий\u003C\u002Fh2>\n\u003Cp>Функциональные инструменты остаются важной границей приложения. Вы определяете функцию и её JSON-схему в конфигурации агента. Когда обвязке нужна функция, сессия может перейти в состояние action-required. Ваше приложение извлекает требуемое действие, выполняет бизнес-логику и возвращает результат.\u003C\u002Fp>\n\u003Cp>Это означает, что реализация функции должна быть безопасной для возобновления. Вебхук может быть доставлен, пока другой воркер выполняет обработку. Сетевой сбой может произойти после внешнего побочного эффекта, но до возврата результата. Поэтому миграция — хороший момент, чтобы добавить идентификаторы вызовов, ключи идемпотентности, явную авторизацию, политики тайм-аутов и записи аудита к значимым инструментам.\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\">Ловушка миграции инструментов\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Не рассматривайте вызов функции из управляемой обвязки как разрешение выполнить действие. Обвязка решает, &lt;em&gt;что она хочет вызвать&lt;\u002Fem&gt;; ваше приложение по-прежнему решает, позволяют ли текущий пользователь, сессия и бизнес-состояние выполнить это действие.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-106\">Шаг 4 — Решите, где должно происходить выполнение\u003C\u002Fh2>\n\u003Cp>Agents API разделяет управляемую обвязку и среду выполнения. Агент может работать без выделенной среды, в песочнице, размещённой OpenAI, или через самостоятельно размещённую среду, подключённую к сессии.\u003C\u002Fp>\n\u003Cp>Это создаёт решение о миграции, которое приложения на SDK, возможно, никогда не принимали явно: какой код должен выполняться как функция приложения, какой код принадлежит песочнице и какие рабочие нагрузки требуют инфраструктуры, которую вы контролируете?\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\">Потребность\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Вероятная граница\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Вызов существующего внутреннего сервиса через контролируемую бизнес-логику\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Функциональный инструмент, обрабатываемый вашим приложением\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Запуск изолированного кода или работа с временными файлами без частной инфраструктуры\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Среда, размещённая OpenAI\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Доступ к ресурсам частной сети, пользовательскому системному ПО или контролируемым локальным вычислениям\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Самостоятельно размещённая среда\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Сохранение принятых продуктовых артефактов\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Хранилище, принадлежащее приложению, а не только файловая система песочницы\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Выполнение бизнес-побочного эффекта с высоким влиянием\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Функция приложения с контролем авторизации и аудита\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-110\">Шаг 5 — Замените неявное восстановление явной обработкой жизненного цикла\u003C\u002Fh2>\n\u003Cp>Управляемая среда обеспечивает восстановление на уровне сессии, но ваше приложение по-прежнему отвечает за каждую внешнюю зависимость вокруг неё. Самостоятельно размещённые среды требуют подготовки, переподключения и завершения работы. Обработчики функций могут давать сбои. Вебхуки могут повторяться. Состояние на стороне продукта может измениться, пока агент бездействует.\u003C\u002Fp>\n\u003Cp>Поэтому миграция требует двух моделей восстановления: восстановление среды выполнения агента и восстановление бизнес-операций. Первое всё больше управляется Agents API. Второе остаётся вашей ответственностью.\u003C\u002Fp>\n\u003Ch2 id=\"section-113\">Шаг 6 — Перестройте наблюдаемость вокруг новой границы трассировки\u003C\u002Fh2>\n\u003Cp>Сессии Agents API предоставляют события, сохранённую историю, ходы, вызовы инструментов, субагентов и использование токенов. OpenAI также предоставляет журналы сессий на платформе и экспорт трассировок.\u003C\u002Fp>\n\u003Cp>Не отказывайтесь от наблюдаемости вашего приложения только потому, что трассировки платформы улучшились. Журналы продукта по-прежнему должны связывать сессию агента с идентификацией пользователя, решением об авторизации, доменным объектом, побочным эффектом инструмента, записью об одобрении и окончательным принятым результатом. Полезная производственная трассировка — это соединение доказательств среды выполнения агента и доказательств бизнес-среды выполнения.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Fru\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\">Надёжность ИИ-агентов: почему окончательного ответа недостаточно\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">Надёжность агента зависит от пути выполнения, инструментов и промежуточных решений — не только от окончательного вывода.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Читать статью о надёжности →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-117\">Шаг 7 — Сохраните оценки перед изменением среды выполнения\u003C\u002Fh2>\n\u003Cp>Миграция может показаться успешной, потому что новая система по-прежнему выдаёт правдоподобные ответы, но при этом незаметно меняет выбор инструментов, непрерывность сессии, поведение при передаче, задержку или восстановление после сбоев. Постройте поведенческую базовую линию перед переключением сред выполнения.\u003C\u002Fp>\n\u003Cp>Базовая линия должна включать репрезентативные задачи, ожидаемые вызовы инструментов, запрещённые действия, точки одобрения, непрерывность состояния, сценарии восстановления и критерии приёмки окончательного вывода. По возможности запускайте старую и новую архитектуры на одних и тех же случаях.\u003C\u002Fp>\n\u003Ch2 id=\"section-120\">Тест доказательства миграции\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Докажите новую среду выполнения перед переключением\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. Заморозьте поведенческую базовую линию\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Зафиксируйте репрезентативные трассировки SDK, ожидаемые выводы, пути инструментов, точки одобрения и случаи сбоев.\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. Инвентаризируйте владение состоянием\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Отметьте каждое поле состояния как состояние сессии агента, авторитетное доменное состояние, долговечный артефакт или эфемерное рабочее состояние.\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. Переиспользуйте стабильные реализации инструментов\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Сохраняйте бизнес-функции за интерфейсами приложения; где возможно, заменяйте только интеграцию, обращённую к агенту.\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. Постройте один вертикальный срез Agents API\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Перенесите один рабочий процесс производственной формы, включая создание сессии, инструменты, события, среду и сохранение.\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. Внедрите прерывания\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Проверьте перезапуск процесса, повтор вебхука, тайм-аут функции, переподключение самостоятельно размещённой среды и устаревшее доменное состояние.\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. Сравнивайте трассировки, а не только ответы\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Проверьте выбор инструментов, авторизацию, путь доказательств, переходы состояния и побочные эффекты относительно базовой линии.\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. Запустите теневой трафик\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Где возможно, воспроизведите или зеркалируйте репрезентативные задачи, прежде чем делать новую среду выполнения авторитетной.\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. Переключитесь за обратимой границей\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Сохраняйте интеграционные адаптеры и возможность отката, пока производственное поведение не станет стабильным.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-122\">Что измерять во время миграции\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\">Измерение\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Проверка миграции\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Успех задачи\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Соответствует ли новая среда выполнения тем же или лучшим критериям приёмки?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Корректность инструментов\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Вызывает ли она нужный инструмент с допустимыми аргументами и авторизацией?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Непрерывность состояния\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Может ли работа возобновиться между ходами, перезапусками и асинхронными ожиданиями?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Восстановление\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Что происходит после потери вебхука, сбоя обработчика, отключения среды или тайм-аута?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Прослеживаемость\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Можно ли каждое значимое действие связать с сессией, пользователем, вызовом инструмента и доменным объектом?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Поведение контекста\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Сохраняют ли длительные сессии ограничения, не перенося устаревшую истину приложения?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Задержка\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Как запуск сессии, подготовка среды и многоходовая работа влияют на видимое пользователю время?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Стоимость\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Что меняется в использовании модели, использовании песочницы, повторяющемся контексте и инфраструктурных операциях?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Операционная нагрузка\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Какие ранее принадлежавшие приложению обязанности действительно исчезли, а какие лишь переместились?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-124\">Когда ещё не стоит мигрировать\u003C\u002Fh2>\n\u003Cp>Существующее приложение на Agents SDK не становится плохой архитектурой просто потому, что направление платформы изменилось. OpenAI продолжает поддержку, исправления безопасности, критических ошибок и работу над совместимостью. Если приложение стабильно, хорошо оценено и не имеет заблокированного требования дорожной карты, немедленная миграция среды выполнения может быть не оправдана.\u003C\u002Fp>\n\u003Cul>\u003Cli>Требуемая возможность SDK ещё недоступна в Agents API.\u003C\u002Fli>\u003Cli>Миграция нарушит критический производственный период, не принося ближайшей пользы.\u003C\u002Fli>\u003Cli>Приложение зависит от пользовательской семантики оркестрации, которая не была проверена на управляемой среде.\u003C\u002Fli>\u003Cli>Переносимость между поставщиками является жёстким требованием, и текущая абстракция SDK существенно ценна.\u003C\u002Fli>\u003Cli>Ваша команда ещё не отделила бизнес-состояние от состояния среды выполнения агента, что делает переключение небезопасным.\u003C\u002Fli>\u003Cli>Поведение нового Agents API не было протестировано на репрезентативных производственных нагрузках.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-127\">Когда миграция становится стратегически важной\u003C\u002Fh2>\n\u003Cp>Миграция становится более убедительной, когда требования продукта соответствуют управляемой среде выполнения: долговременная работа, управляемое платформой сжатие и восстановление контекста, новые возможности агентной среды выполнения, изолированное выполнение, более богатое управление жизненным циклом на хостинге или желание сократить объём кода оркестрации, который эксплуатирует ваше приложение.\u003C\u002Fp>\n\u003Cp>Самый сильный сигнал — не «старый SDK функционально завершён». Это «наш план развития теперь зависит от возможностей, естественным домом для которых является управляемая среда выполнения Agents API».\u003C\u002Fp>\n\u003Ch2 id=\"section-130\">Что могло бы изменить этот ответ?\u003C\u002Fh2>\n\u003Cp>Стратегия миграции изменилась бы, если бы OpenAI опубликовала автоматизированные инструменты миграции, ввела явные слои совместимости, изменила семантику сессий Agents API, расширила или сузила поддержку самостоятельно размещаемых сред или изменила политику поддержки Agents SDK.\u003C\u002Fp>\n\u003Cp>Она также изменилась бы, если бы изменились требования вашего продукта. Простому ассистенту запрос-ответ может вообще не понадобиться долговременная управляемая среда выполнения. Долго работающий агент для программирования, исследований или операций может получить гораздо больше пользы от модели владения Agents API.\u003C\u002Fp>\n\u003Ch2 id=\"section-133\">Ограничения\u003C\u002Fh2>\n\u003Cp>Не существует универсального взаимно однозначного соответствия миграции от SDK к API, потому что приложения используют Agents SDK по-разному. Некоторые сильно полагаются на сессии и передачи; другие используют его как тонкий запускатель вокруг функциональных инструментов. Правильная миграция зависит от того, какие обязанности ваше приложение фактически несёт сегодня.\u003C\u002Fp>\n\u003Cp>Agents API также находится в публичной бета-версии, поэтому детали реализации могут меняться. Относитесь к принципам владения в этой статье как к более долговечным, чем любая отдельная форма конечной точки.\u003C\u002Fp>\n\u003Ch2 id=\"section-136\">Заключение\u003C\u002Fh2>\n\u003Cp>Миграцию с Agents SDK на Agents API лучше всего понимать как перемещение границы среды выполнения агента. Управляемая среда выполнения берёт на себя большую часть цикла, непрерывности сессии, сжатия и восстановления. Ваше приложение должно стать более явным в отношении обязанностей, которые остаются за ним: доменная истина, авторизация, побочные эффекты функций, артефакты, аудируемость и жизненный цикл продукта.\u003C\u002Fp>\n\u003Cp>Если миграция оставляет всю старую машинерию оркестрации на месте и лишь заменяет вызовы SDK на вызовы Agents API, она, вероятно, упустила архитектурную возможность. Цель не в том, чтобы воспроизвести старую среду выполнения поверх новой. Цель — решить, какие обязанности среды выполнения больше не должны принадлежать вашему приложению.\u003C\u002Fp>\n\u003Ch2 id=\"section-139\">Часто задаваемые вопросы\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\">Миграция с Agents SDK на 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\">Миграция с Agents SDK на Agents API — это просто переписывание API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Нет. Основное изменение — владение средой выполнения: Agents SDK запускает цикл агента в вашем приложении, тогда как Agents API запускает управляемую среду Codex и долговременную сессию. Состояние, жизненный цикл, обработку событий и восстановление следует рассматривать как архитектурные вопросы.\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\">Нужно ли переписывать мои функциональные инструменты?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Бизнес-реализацию часто можно переиспользовать, если она уже находится за стабильным интерфейсом приложения. Интеграция, обращённая к агенту, меняется, потому что вызовы функций Agents API обрабатываются через требуемые действия и результаты сессии.\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\">Следует ли переносить бизнес-состояние в сессию Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Обычно нет. Храните авторитетное бизнес- и продуктовое состояние в своих собственных базах данных или сервисах. Используйте сессию агента для непрерывности агента и рабочего контекста, а не как единственный источник истины для вашего продукта.\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\">Нужны ли мне вебхуки для Agents API?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Не всегда, потому что также доступна потоковая передача. Вебхуки особенно полезны для долго работающих или асинхронных сессий, где ваше приложение должно реагировать на изменения жизненного цикла, не удерживая открытый поток.\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\">Должны ли все существующие приложения на Agents SDK мигрировать сейчас?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Нет. SDK остаётся поддерживаемым в режиме сопровождения. Мигрируйте, когда новая среда выполнения даёт значимую ценность для плана развития и после того, как требуемое поведение было проверено на оценках, соответствующих продакшену.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-141\">Глоссарий\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\">Ключевые термины миграции\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\">Граница среды выполнения\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Разделение ответственности между управляемой платформой средой выполнения агента и средой выполнения, принадлежащей приложению.\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\">Среда выполнения\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Среда выполнения агента, которая координирует вызовы модели, инструменты, контекст, оркестрацию и продолжение выполнения.\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\">Сессия\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Долговременный экземпляр Agents API, который хранит конфигурацию агента, разговор и сохранённую работу между ходами.\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\">Требуемое действие\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Состояние сессии, в котором Agents API нуждается во внешнем вводе, таком как результат функции или подключение к среде, прежде чем работа может продолжиться.\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\">Самостоятельно размещаемая среда\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Среда выполнения, управляемая вашей инфраструктурой и подключённая к управляемой среде Agents API.\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\">Тест доказательства миграции\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Поэтапный метод проверки, который сравнивает новую среду выполнения с поведенческими базовыми линиями, внедрением отказов, трассировками и обратимыми критериями переключения.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-143\">Первоисточники и дополнительное чтение\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\">Текущая политика поддержки: Agents SDK функционально завершён, продолжает поддерживаться, а новые приложения должны начинать с Agents API.\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 — Запуск агентов с помощью Agents SDK\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Документация по циклу агента, управляемому приложением, и модели продолжения в SDK.\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 — Обзор Agents API\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Определяет основные понятия Agents API: агент, среда, сессия, события и элементы.\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 — Архитектура Agents API\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Объясняет границы размещённого harness, сервера приложения, среды выполнения, размещённой OpenAI, и самостоятельно размещённой среды выполнения.\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 — Настройка агентов\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Определяет переиспользуемую конфигурацию агента и настройку на уровне сессии.\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 — Запуск и продолжение сессий\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Документирует долговременные сессии, асинхронные ходы, потоковую передачу и управление.\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\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Определение инструмента-функции и граница обработчика приложения для требуемых результатов функции.\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 — Вебхуки сессий\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">События жизненного цикла для асинхронных сессий, требуемые действия и подключения к самостоятельно размещённой среде.\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\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Журналы сессий, события, ходы, вызовы инструментов, субагенты, трассировки и анализ использования токенов.\u003C\u002Fp>\u003C\u002Fa>",{"time":212,"blocks":213,"version":1294},1790352619266,[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,796,801,811,820,829,838,847,856,865,874,883,887,891,895,899,903,907,911,915,918,921,948,951,954,958,962,965,969,989,993,997,1001,1019,1023,1027,1030,1033,1037,1041,1045,1048,1052,1056,1068,1071,1075,1079,1082,1085,1089,1093,1097,1101,1105,1108,1128,1131,1145,1148,1152,1159,1162,1166,1170,1174,1178,1182,1185,1189,1193,1196,1200,1204,1207,1222,1225,1240,1243,1248,1254,1260,1266,1271,1277,1283,1289],{"id":215,"data":216,"type":220,"tunes":221},"24Foq4L2Wb",{"title":217,"maxLevel":218,"minLevel":219},"Содержание",3,2,"tableOfContents",{},{"id":223,"data":224,"type":226,"tunes":227},"intro",{"text":225},"Переход с OpenAI Agents SDK на Agents API — это не просто переименование импорта. Меняется ключевая архитектурная граница: SDK выполняет цикл агента внутри вашего приложения, тогда как Agents API запускает управляемый Codex-каркас и долговременную сессию на стороне OpenAI. Поэтому вопрос миграции не в том, «какие классы соответствуют каким эндпоинтам?», а в том, «какие обязанности среды выполнения переходят через границу, какие остаются в нашем приложении и какие нужно перепроектировать?»","paragraph",{},{"id":229,"data":230,"type":234,"tunes":235},"direct",{"body":231,"title":232,"variant":233},"\u003Cstrong>Настоящая миграция с Agents SDK на Agents API меняет владение средой выполнения.\u003C\u002Fstrong> Ваша переиспользуемая конфигурация агента по-прежнему может содержать модель, инструкции и инструменты, но цикл, долговременная сессия, оркестрация, сжатие контекста и восстановление переходят к управляемой среде выполнения Agents API. Ваше приложение должно сохранять доменное состояние, авторизацию, бизнес-правила, реализации функций и логику аудита вне сессии агента. Относитесь к миграции как к перепроектированию границы, а не как к механическому преобразованию кода.","Прямой ответ","info","callout",{},{"id":237,"data":238,"type":234,"tunes":242},"current",{"body":239,"title":240,"variant":241},"В настоящее время OpenAI помечает Agents SDK как \u003Cstrong>функционально завершённый\u003C\u002Fstrong> и рекомендует Agents API для новых агентных приложений. Agents API находится в публичной бете. Существующие приложения на SDK остаются поддерживаемыми, и немедленная миграция не является автоматически обязательной.","Актуально на 25 сентября 2026 г.","warning",{},{"id":244,"data":245,"type":234,"tunes":249},"model-note",{"body":246,"title":247,"variant":248},"Карта миграции границ среды выполнения и тест на доказательство миграции в этой статье — это практические инструменты архитектуры, а не официальные фреймворки миграции OpenAI. Они основаны на текущих различиях среды выполнения, задокументированных OpenAI.","О модели миграции","note",{},{"id":251,"data":252,"type":42,"tunes":254},"h-boundary",{"text":253,"level":219},"Миграция — это переход от цикла, принадлежащего приложению, к управляемому каркасу",{},{"id":256,"data":257,"type":226,"tunes":259},"p-boundary-1",{"text":258},"В Agents SDK один запуск — это ход на уровне приложения. Исполнитель SDK вызывает модель, проверяет вывод, выполняет инструменты, следует передачам управления и продолжает, пока не достигнет точки остановки. Ваш процесс размещает этот цикл и, следовательно, владеет его жизненным циклом.",{},{"id":261,"data":262,"type":226,"tunes":264},"p-boundary-2",{"text":263},"В Agents API OpenAI запускает каркас. Сессия — это долговременный экземпляр конфигурации агента, который принимает задачи, создаёт события, может приостанавливаться для требуемых действий и может продолжаться во времени. OpenAI управляет сессиями, оркестрацией, сжатием контекста и восстановлением; ваше приложение отправляет работу, обрабатывает функциональные инструменты, получает события и при необходимости управляет самостоятельно размещённой средой выполнения.",{},{"id":266,"data":267,"type":226,"tunes":269},"p-boundary-3",{"text":268},"Этот сдвиг владения и есть миграция. Всё остальное — синтаксис API, схемы инструментов, обработка событий, идентификаторы сессий — следует из него.",{},{"id":271,"data":272,"type":42,"tunes":274},"h-map",{"text":273,"level":219},"Карта миграции границ среды выполнения",{},{"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],"Аспект","Agents SDK","Цель миграции в Agents API",[284,285,286],"Цикл агента","Выполняется в вашем приложении через исполнитель SDK","Выполняется в управляемом каркасе Codex",[288,289,290],"Переиспользуемое определение агента","Объект Agent в коде приложения","Сохранённая или встроенная конфигурация агента с моделью, инструкциями и инструментами",[292,293,294],"Непрерывность диалога \u002F работы","Стратегия сессий SDK, история, продолжение результата или хранилище приложения","Долговременная сессия Agents API",[296,297,298],"Выполнение инструментов","SDK координирует вызовы инструментов в вашей среде выполнения","Каркас запрашивает вызовы функций; ваше приложение возвращает результаты",[300,301,302],"Управление контекстом","Ваша среда выполнения \u002F стратегия сессий SDK","Управляемый контекст сессии, сжатие и восстановление, а также ваши собственные границы данных приложения",[304,305,306],"Передачи управления \u002F специалисты","Примитивы оркестрации SDK","Поведение каркаса \u002F субагентов в Agents API; не предполагайте семантику один к одному",[308,309,310],"Среда выполнения","Среда выполнения вашего приложения или среда, специфичная для инструмента","Необязательная среда, размещённая OpenAI или самостоятельно, привязанная к сессии",[312,313,314],"Потоковая передача","Потоковая передача SDK из запуска","Поток событий сессии Agents API",[316,317,318],"Асинхронный жизненный цикл","Обычно управляется приложением вокруг запуска SDK","Собственные состояния сессии, асинхронные ходы и вебхуки",[320,321,322],"Трассировка \u002F наблюдаемость","Трассировка Agents SDK и журналы приложения","Журналы сессии Agents, события, ходы, вызовы инструментов, субагенты и экспортируемые трассировки",[324,325,326],"Восстановление","Ответственность приложения","Управляемое восстановление каркаса\u002Fсессии плюс восстановление, принадлежащее приложению, для внешних систем и самостоятельно размещённых сред","table",{},{"id":330,"data":331,"type":42,"tunes":333},"h-conceptual",{"text":332,"level":219},"Что может мигрировать концептуально без изменения владения",{},{"id":335,"data":336,"type":226,"tunes":338},"p-conceptual-1",{"text":337},"Несколько концепций приложения без проблем переживают миграцию, хотя их представление меняется. Модели, инструкции, определения функций в формате JSON-схемы, доступ к MCP, описания инструментов и требования к структурированному выводу по-прежнему относятся к конфигурации агента.",{},{"id":340,"data":341,"type":226,"tunes":343},"p-conceptual-2",{"text":342},"Модель конфигурации Agents API от OpenAI явно определяет агента через модель, инструкции, инструменты, рассуждения и поведение вывода. Функциональные инструменты остаются кодом приложения: каркас запрашивает вызов функции, а ваш обработчик возвращает результат. OpenAI также отмечает, что реализации функций, используемые с Responses API, можно переиспользовать с потоком сессий Agents API.",{},{"id":345,"data":346,"type":234,"tunes":350},"good-candidate",{"body":347,"title":348,"variant":349},"Чистая бизнес-функция, такая как \u003Ccode>get_customer(customer_id)\u003C\u002Fcode>, не должна знать, кто её вызывает — Agents SDK или Agents API. Держите её доменную логику за стабильным интерфейсом приложения и мигрируйте только адаптер, обращённый к агенту.","Хороший кандидат на миграцию","success",{},{"id":352,"data":353,"type":42,"tunes":355},"h-no-one",{"text":354,"level":219},"Что не следует мигрировать один к одному",{},{"id":357,"data":358,"type":226,"tunes":360},"p-no-one-1",{"text":359},"Опасный шаблон миграции — воссоздать каждую абстракцию среды выполнения SDK внутри Agents API. Это может привести к тому, что вы будете платить за управляемый каркас, но при этом всё ещё будете эксплуатировать теневой каркас в своём приложении.",{},{"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],"Допущение эпохи SDK","Почему прямое копирование рискованно","Вопрос миграции",[370,371,372],"Цикл приложения владеет каждым продолжением","Agents API уже владеет циклом каркаса","Какая логика продолжения является продуктовой логикой, а какую следует перенести в управляемую сессию?",[374,375,376],"Локальный объект сессии — основной механизм непрерывности","Сессии Agents API — это долговременные ресурсы с собственным жизненным циклом","Какое состояние принадлежит сессии, а какое — базе данных продукта?",[378,379,380],"Каждое прерывание обрабатывается синхронно","Ходы Agents API асинхронны и могут выдавать состояния action_required","Какие действия требуют вебхуков, воркеров, идемпотентности и возобновляемых обработчиков?",[382,383,384],"Всё выполнение инструментов происходит там, где работает процесс SDK","Обработчики функций и среды выполнения могут быть раздельными","Где на самом деле должен выполняться каждый инструмент?",[386,387,388],"Трассировка SDK — это операционная временная шкала","Agents API предоставляет события сессии, ходы и управляемые трассировки","Какие данные аудита на уровне приложения всё ещё нужны в собственной записи?",[390,391,392],"Объект handoff напрямую соответствует размещённой модели субагента","Семантика среды выполнения может различаться","Какое видимое пользователю владение и поведение специалистов нужно сохранить, а не просто старую структуру классов?",{},{"id":395,"data":396,"type":42,"tunes":398},"h-domain",{"text":397,"level":219},"Шаг 1 — Отделите состояние домена от состояния сессии агента",{},{"id":400,"data":401,"type":226,"tunes":403},"p-domain-1",{"text":402},"Прежде чем трогать вызовы API, классифицируйте состояние, которое в настоящее время несёт ваше SDK-приложение. Часть состояния существует только для того, чтобы поддерживать движение диалога агента. Другое состояние — это бизнес-истина: права пользователя, статус проекта, данные заказа, утверждение рабочего процесса, записи клиентов, версии документов, состояние политики или конфигурация приложения.",{},{"id":405,"data":406,"type":226,"tunes":408},"p-domain-2",{"text":407},"Вторая категория не должна становиться зависимой от сессии Agents API. Долговечная сессия — это полезная непрерывность для агента; она не заменяет источник истины вашего продукта. Если сессия исчезнет, истечёт, будет пересоздана или изменит реализацию, ваше приложение всё равно должно знать, что является истинным.",{},{"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","Непрерывность диалога",[417,417,417],"",{"id":419,"label":420,"values":421},"domain","Бизнес-истина",[417,417,417],{"id":423,"label":424,"values":425},"artifact","Долговечный артефакт",[417,417,417],{"id":427,"label":428,"values":429},"ephemeral","Рабочее временное состояние",[417,417,417],"Тест на размещение состояния",[432,435,438],{"id":433,"label":434},"type","Тип состояния",{"id":436,"label":437},"place","Предпочтительный владелец",{"id":439,"label":440},"reason","Причина","comparison",{},{"id":444,"data":445,"type":42,"tunes":447},"h-events",{"text":446,"level":219},"Шаг 2 — Преобразуйте мышление раннера в мышление сессии и событий",{},{"id":449,"data":450,"type":226,"tunes":452},"p-events-1",{"text":451},"SDK-приложения часто мыслят в терминах вызова run и получения результата. Agents API мыслит в терминах долговечной сессии, ходы которой могут выполняться асинхронно. Сообщение в бездействующую сессию запускает работу; сообщение во время активного хода может его направить. Прогресс поступает через потоковую передачу или вебхуки.",{},{"id":454,"data":455,"type":226,"tunes":457},"p-events-2",{"text":456},"Это влияет на архитектуру приложения. Длительная производственная работа не должна зависеть от того, что один HTTP-запрос остаётся активным. Вашему продукту нужны стабильные идентификаторы сессий, сохранение жизненного цикла, проверка вебхуков, идемпотентные обработчики и способ согласовать текущее состояние сессии после перезапуска процесса.",{},{"id":459,"data":460,"type":42,"tunes":462},"h-functions",{"text":461,"level":219},"Шаг 3 — Перепроектируйте функциональные инструменты вокруг требуемых действий",{},{"id":464,"data":465,"type":226,"tunes":467},"p-functions-1",{"text":466},"Функциональные инструменты остаются важной границей приложения. Вы определяете функцию и её JSON-схему в конфигурации агента. Когда среде выполнения нужна функция, сессия может перейти в состояние требуемого действия. Ваше приложение извлекает требуемое действие, выполняет бизнес-логику и возвращает результат.",{},{"id":469,"data":470,"type":226,"tunes":472},"p-functions-2",{"text":471},"Это означает, что реализация функции должна быть безопасной для возобновления. Вебхук может быть доставлен, пока другой рабочий процесс обрабатывает. Сетевой сбой может произойти после внешнего побочного эффекта, но до возврата результата. Поэтому миграция — хороший момент, чтобы добавить идентификаторы вызовов, ключи идемпотентности, явную авторизацию, политики тайм-аутов и записи аудита к значимым инструментам.",{},{"id":474,"data":475,"type":234,"tunes":478},"tool-trap",{"body":476,"title":477,"variant":241},"Не рассматривайте вызов функции из управляемой среды выполнения как авторизацию на выполнение действия. Среда выполнения решает \u003Cem>что она хочет вызвать\u003C\u002Fem>; ваше приложение всё ещё решает, позволяют ли текущий пользователь, сессия и бизнес-состояние выполнить это действие.","Ловушка миграции инструментов",{},{"id":480,"data":481,"type":42,"tunes":483},"h-environment",{"text":482,"level":219},"Шаг 4 — Решите, где должно происходить выполнение",{},{"id":485,"data":486,"type":226,"tunes":488},"p-env-1",{"text":487},"Agents API разделяет управляемую среду выполнения и среду исполнения. Агент может работать без выделенной среды, в песочнице, размещённой OpenAI, или через самостоятельно размещённую среду, подключённую к сессии.",{},{"id":490,"data":491,"type":226,"tunes":493},"p-env-2",{"text":492},"Это создаёт решение о миграции, которое SDK-приложения, возможно, никогда не принимали явно: какой код должен выполняться как функция приложения, какой код принадлежит песочнице и какие рабочие нагрузки требуют инфраструктуры, которую вы контролируете?",{},{"id":495,"data":496,"type":327,"tunes":516},"environment-table",{"content":497,"stretched":43,"withHeadings":14},[498,501,504,507,510,513],[499,500],"Потребность","Вероятная граница",[502,503],"Вызов существующего внутреннего сервиса через контролируемую бизнес-логику","Функциональный инструмент, обрабатываемый вашим приложением",[505,506],"Запуск изолированного кода или работа с временными файлами без частной инфраструктуры","Среда, размещённая OpenAI",[508,509],"Доступ к ресурсам частной сети, пользовательскому системному программному обеспечению или контролируемым локальным вычислениям","Самостоятельно размещённая среда",[511,512],"Сохранение принятых продуктовых артефактов","Хранилище, принадлежащее приложению, а не только файловая система песочницы",[514,515],"Выполнение высокозначимого бизнес-побочного эффекта","Функция приложения с контролем авторизации и аудита",{},{"id":518,"data":519,"type":42,"tunes":521},"h-recovery",{"text":520,"level":219},"Шаг 5 — Замените неявное восстановление явной обработкой жизненного цикла",{},{"id":523,"data":524,"type":226,"tunes":526},"p-recovery-1",{"text":525},"Управляемая среда выполнения обеспечивает восстановление на уровне сессии, но ваше приложение всё ещё владеет каждой внешней зависимостью вокруг неё. Самостоятельно размещённые среды нуждаются в подготовке, переподключении и завершении. Обработчики функций могут давать сбои. Вебхуки могут повторяться. Состояние на стороне продукта может измениться, пока агент бездействует.",{},{"id":528,"data":529,"type":226,"tunes":531},"p-recovery-2",{"text":530},"Поэтому миграция нуждается в двух моделях восстановления: восстановление среды выполнения агента и восстановление бизнес-операций. Первое всё больше управляется Agents API. Второе остаётся вашей ответственностью.",{},{"id":533,"data":534,"type":42,"tunes":536},"h-observability",{"text":535,"level":219},"Шаг 6 — Перестройте наблюдаемость вокруг новой границы трассировки",{},{"id":538,"data":539,"type":226,"tunes":541},"p-obs-1",{"text":540},"Сессии Agents API предоставляют события, сохранённую историю, ходы, вызовы инструментов, субагентов и использование токенов. OpenAI также предоставляет журналы сессий на платформе и экспорт трассировок.",{},{"id":543,"data":544,"type":226,"tunes":546},"p-obs-2",{"text":545},"Не отказывайтесь от наблюдаемости вашего приложения только потому, что трассировки платформы улучшились. Журналы продукта по-прежнему должны связывать сессию агента с идентичностью пользователя, решением об авторизации, доменным объектом, побочным эффектом инструмента, записью об утверждении и окончательным принятым результатом. Полезная производственная трассировка — это соединение свидетельств среды выполнения агента и свидетельств бизнес-среды выполнения.",{},{"id":548,"data":549,"type":554,"tunes":555},"ref-reliability",{"url":550,"title":551,"excerpt":552,"ctaLabel":553},"https:\u002F\u002Fstajic.de\u002Fru\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough","Надёжность ИИ-агентов: почему окончательного ответа недостаточно","Надёжность агента зависит от пути выполнения, инструментов и промежуточных решений — а не только от окончательного вывода.","Читать статью о надёжности","referralArticle",{},{"id":557,"data":558,"type":42,"tunes":560},"h-evals",{"text":559,"level":219},"Шаг 7 — Сохраните оценки до изменения среды выполнения",{},{"id":562,"data":563,"type":226,"tunes":565},"p-evals-1",{"text":564},"Миграция может показаться успешной, потому что новая система по-прежнему выдаёт правдоподобные ответы, но при этом незаметно меняет выбор инструментов, непрерывность сессии, поведение при передаче управления, задержку или восстановление после сбоев. Постройте поведенческий базовый уровень до переключения сред выполнения.",{},{"id":567,"data":568,"type":226,"tunes":570},"p-evals-2",{"text":569},"Базовый уровень должен включать репрезентативные задачи, ожидаемые вызовы инструментов, запрещённые действия, точки утверждения, непрерывность состояния, сценарии восстановления и критерии приёмки окончательного вывода. По возможности запускайте старую и новую архитектуры на одних и тех же случаях.",{},{"id":572,"data":573,"type":42,"tunes":575},"h-proof",{"text":574,"level":219},"Тест доказательства миграции",{},{"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. Зафиксируйте поведенческий базовый уровень","Захватите репрезентативные трассировки SDK, ожидаемые выводы, пути инструментов, точки утверждения и случаи сбоев.",{"label":584,"description":585},"2. Проведите инвентаризацию владения состоянием","Пометьте каждое поле состояния как состояние сессии агента, авторитетное доменное состояние, долговечный артефакт или эфемерное рабочее состояние.",{"label":587,"description":588},"3. Переиспользуйте стабильные реализации инструментов","Сохраняйте бизнес-функции за интерфейсами приложения; где возможно, заменяйте только интеграцию, обращённую к агенту.",{"label":590,"description":591},"4. Постройте один вертикальный срез Agents API","Перенесите один рабочий процесс, соответствующий производственному, включая создание сессии, инструменты, события, среду и персистентность.",{"label":593,"description":594},"5. Внедрите прерывания","Проверьте перезапуск процесса, повтор вебхука, тайм-аут функции, переподключение самостоятельно размещённой среды и устаревшее доменное состояние.",{"label":596,"description":597},"6. Сравнивайте трассировки, а не только ответы","Проверьте выбор инструментов, авторизацию, путь доказательств, переходы состояний и побочные эффекты относительно базового уровня.",{"label":599,"description":600},"7. Запустите теневой трафик","Где это осуществимо, воспроизведите или зеркалируйте репрезентативные задачи, прежде чем делать новую среду выполнения авторитетной.",{"label":602,"description":603},"8. Переключитесь за обратимой границей","Сохраняйте интеграционные адаптеры и возможность отката, пока производственное поведение не станет стабильным.","Докажите новую среду выполнения до переключения","auto","processFlow",{},{"id":609,"data":610,"type":42,"tunes":612},"h-metrics",{"text":611,"level":219},"Что измерять во время миграции",{},{"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],"Измерение","Проверка миграции",[621,622],"Успех задачи","Соответствует ли новая среда выполнения тем же или лучшим критериям приёмки?",[624,625],"Корректность инструментов","Вызывает ли она нужный инструмент с допустимыми аргументами и авторизацией?",[627,628],"Непрерывность состояния","Может ли работа возобновиться между ходами, перезапусками и асинхронными ожиданиями?",[324,630],"Что происходит после потери вебхука, сбоя обработчика, отключения среды или тайм-аута?",[632,633],"Прослеживаемость","Можно ли каждое значимое действие связать с сессией, пользователем, вызовом инструмента и доменным объектом?",[635,636],"Поведение контекста","Сохраняют ли длительные сессии ограничения, не перенося устаревшую истину приложения?",[638,639],"Задержка","Как запуск сессии, подготовка среды и многоходовая работа влияют на видимое пользователю время?",[641,642],"Стоимость","Что меняется в использовании модели, использовании песочницы, повторяющемся контексте и инфраструктурных операциях?",[644,645],"Операционная нагрузка","Какие ранее принадлежавшие приложению обязанности действительно исчезли, а какие лишь переместились?",{},{"id":648,"data":649,"type":42,"tunes":651},"h-not-yet",{"text":650,"level":219},"Когда ещё не стоит мигрировать",{},{"id":653,"data":654,"type":226,"tunes":656},"p-not-yet-1",{"text":655},"Существующее приложение на Agents SDK не становится плохой архитектурой просто потому, что направление платформы изменилось. OpenAI продолжает поддержку, исправления безопасности, критические исправления ошибок и работу над совместимостью. Если приложение стабильно, хорошо оценено и не имеет заблокированного требования дорожной карты, немедленная миграция среды выполнения может быть не оправдана.",{},{"id":658,"data":659,"type":669,"tunes":670},"not-yet-list",{"meta":660,"items":661,"style":668},{},[662,663,664,665,666,667],"Требуемая возможность SDK ещё недоступна в Agents API.","Миграция нарушит критический производственный период, не принося ближайшей пользы.","Приложение зависит от пользовательской семантики оркестрации, которая не была проверена на управляемом каркасе.","Переносимость между провайдерами является жёстким требованием, и текущая абстракция SDK существенно ценна.","Ваша команда ещё не отделила бизнес-состояние от состояния среды выполнения агента, что делает переключение небезопасным.","Поведение нового Agents API не было протестировано на репрезентативных производственных нагрузках.","unordered","list",{},{"id":672,"data":673,"type":42,"tunes":675},"h-when",{"text":674,"level":219},"Когда миграция становится стратегически важной",{},{"id":677,"data":678,"type":226,"tunes":680},"p-when-1",{"text":679},"Миграция становится более убедительной, когда требования продукта соответствуют управляемому каркасу: долговечная длительная работа, управляемое платформой сжатие и восстановление контекста, более новые возможности среды выполнения агента, выполнение в песочнице, более богатое управление жизненным циклом на хостинге или желание сократить объём кода оркестрации, который эксплуатирует ваше приложение.",{},{"id":682,"data":683,"type":226,"tunes":685},"p-when-2",{"text":684},"Самый сильный сигнал — не «старый SDK функционально завершён». Это «наша дорожная карта теперь зависит от возможностей, естественным домом которых является управляемая среда выполнения Agents API».",{},{"id":687,"data":688,"type":42,"tunes":690},"h-change",{"text":689,"level":219},"Что изменило бы этот ответ?",{},{"id":692,"data":693,"type":226,"tunes":695},"p-change-1",{"text":694},"Стратегия миграции изменится, если OpenAI опубликует инструменты автоматизированной миграции, представит явные слои совместимости, изменит семантику сессий Agents API, расширит или сузит поддержку сред с самостоятельным размещением или изменит политику поддержки Agents SDK.",{},{"id":697,"data":698,"type":226,"tunes":700},"p-change-2",{"text":699},"Она также изменится, если изменятся требования вашего продукта. Простому ассистенту с запросами и ответами может вообще не понадобиться долговечная управляемая среда выполнения. Долго работающий агент для программирования, исследований или операций может получить гораздо больше пользы от модели владения Agents API.",{},{"id":702,"data":703,"type":42,"tunes":705},"h-limitations",{"text":704,"level":219},"Ограничения",{},{"id":707,"data":708,"type":226,"tunes":710},"p-limit-1",{"text":709},"Не существует универсального взаимно однозначного соответствия между SDK и API для миграции, поскольку приложения используют Agents SDK по-разному. Некоторые сильно полагаются на сессии и передачи управления; другие используют его как тонкую обёртку вокруг функциональных инструментов. Правильная миграция зависит от того, какие обязанности ваше приложение фактически несёт сегодня.",{},{"id":712,"data":713,"type":226,"tunes":715},"p-limit-2",{"text":714},"Agents API также находится в публичной бета-версии, поэтому детали реализации могут меняться. Рассматривайте принципы распределения ответственности из этой статьи как более долговечные, чем любая отдельная форма эндпоинта.",{},{"id":717,"data":718,"type":42,"tunes":720},"h-conclusion",{"text":719,"level":219},"Заключение",{},{"id":722,"data":723,"type":226,"tunes":725},"p-conclusion-1",{"text":724},"Миграцию с Agents SDK на Agents API лучше всего понимать как перемещение границы среды выполнения агента. Управляемая среда выполнения берёт на себя большую часть цикла, непрерывности сессии, сжатия и восстановления. Ваше приложение должно стать более явным в отношении обязанностей, которые остаются за вами: доменная истина, авторизация, побочные эффекты функций, артефакты, аудируемость и жизненный цикл продукта.",{},{"id":727,"data":728,"type":226,"tunes":730},"p-conclusion-2",{"text":729},"Если миграция оставляет всю старую оркестрационную машинерию на месте и лишь заменяет вызовы SDK на вызовы Agents API, она, вероятно, упустила архитектурную возможность. Цель не в том, чтобы воспроизвести старую среду выполнения поверх новой. Цель в том, чтобы решить, какие обязанности среды выполнения больше не должны принадлежать вашему приложению.",{},{"id":732,"data":733,"type":42,"tunes":735},"h-faq",{"text":734,"level":219},"Часто задаваемые вопросы",{},{"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","Нет. Основное изменение — это владение средой выполнения: Agents SDK запускает цикл агента в вашем приложении, тогда как Agents API запускает управляемую среду выполнения Codex и долговечную сессию. Состояние, жизненный цикл, обработку событий и восстановление следует рассматривать как архитектурные вопросы.","Миграция с Agents SDK на Agents API — это просто переписывание API?",{"id":745,"answer":746,"question":747},"faq2","Бизнес-реализацию часто можно переиспользовать, если она уже находится за стабильным интерфейсом приложения. Интеграция, обращённая к агенту, меняется, поскольку вызовы функций Agents API обрабатываются через обязательные действия и результаты сессии.","Нужно ли переписывать мои функциональные инструменты?",{"id":749,"answer":750,"question":751},"faq3","Как правило, нет. Храните авторитетное бизнес- и продуктовое состояние в собственных базах данных или сервисах. Используйте сессию агента для непрерывности агента и рабочего контекста, а не как единственный источник истины для вашего продукта.","Следует ли переносить бизнес-состояние в сессию Agents API?",{"id":753,"answer":754,"question":755},"faq4","Не всегда, поскольку также доступна потоковая передача. Вебхуки особенно полезны для долго работающих или асинхронных сессий, когда ваше приложение должно реагировать на изменения жизненного цикла, не удерживая открытый поток.","Нужны ли мне вебхуки для Agents API?",{"id":757,"answer":758,"question":759},"faq5","Нет. SDK остаётся поддерживаемым в режиме сопровождения. Мигрируйте, когда новая среда выполнения даёт значимую ценность для дорожной карты и после того, как требуемое поведение было проверено на оценках, приближенных к продакшену.","Следует ли всем существующим приложениям на Agents SDK мигрировать сейчас?","Миграция с Agents SDK на Agents API",{},{"id":763,"data":764,"type":42,"tunes":766},"h-glossary",{"text":765,"level":219},"Глоссарий",{},{"id":768,"data":769,"type":768,"tunes":795},"glossary",{"title":770,"entries":771},"Ключевые термины миграции",[772,776,779,783,787,791],{"term":773,"anchor":774,"definition":775},"Граница среды выполнения","runtime-boundary","Разделение ответственности между управляемой платформой средой выполнения агента и средой выполнения, принадлежащей приложению.",{"term":308,"anchor":777,"definition":778},"harness","Среда выполнения агента, которая координирует вызовы модели, инструменты, контекст, оркестрацию и продолжение выполнения.",{"term":780,"anchor":781,"definition":782},"Сессия","session","Долговечный экземпляр Agents API, который хранит конфигурацию агента, разговор и сохранённую работу между ходами.",{"term":784,"anchor":785,"definition":786},"Обязательное действие","required-action","Состояние сессии, в котором Agents API нуждается во внешнем вводе, таком как результат функции или подключение к среде, прежде чем работа может продолжиться.",{"term":788,"anchor":789,"definition":790},"Среда с самостоятельным размещением","self-hosted-environment","Среда выполнения, управляемая вашей инфраструктурой и подключённая к управляемой среде выполнения Agents API.",{"term":792,"anchor":793,"definition":794},"Тест подтверждения миграции","migration-proof-test","Поэтапный метод проверки, который сравнивает новую среду выполнения с поведенческими базовыми линиями, инъекциями отказов, трассировками и обратимыми критериями переключения.",{},{"id":797,"data":798,"type":42,"tunes":800},"h-sources",{"text":799,"level":219},"Первоисточники и дополнительное чтение",{},{"id":802,"data":803,"type":809,"tunes":810},"src-sdk",{"link":804,"meta":805},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk",{"image":806,"title":807,"description":808},{"url":417},"OpenAI — Agents SDK","Текущая политика поддержки: Agents SDK функционально завершён, продолжает поддерживаться, а новые приложения должны начинать с Agents API.","linkTool",{},{"id":812,"data":813,"type":809,"tunes":819},"src-running-sdk",{"link":814,"meta":815},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents",{"image":816,"title":817,"description":818},{"url":417},"OpenAI — Запуск агентов с помощью Agents SDK","Документация по циклу агента и модели продолжения, принадлежащим приложению на SDK.",{},{"id":821,"data":822,"type":809,"tunes":828},"src-api-overview",{"link":823,"meta":824},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview",{"image":825,"title":826,"description":827},{"url":417},"OpenAI — Обзор Agents API","Определяет основные концепции Agents API: агент, среда, сессия, события и элементы.",{},{"id":830,"data":831,"type":809,"tunes":837},"src-api-architecture",{"link":832,"meta":833},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture",{"image":834,"title":835,"description":836},{"url":417},"OpenAI — Архитектура Agents API","Объясняет границы размещённой среды выполнения, сервера приложения, среды выполнения, размещённой OpenAI, и среды с самостоятельным размещением.",{},{"id":839,"data":840,"type":809,"tunes":846},"src-api-config",{"link":841,"meta":842},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration",{"image":843,"title":844,"description":845},{"url":417},"OpenAI — Настройка агентов","Определяет переиспользуемую конфигурацию агента и настройку на уровне сессии.",{},{"id":848,"data":849,"type":809,"tunes":855},"src-api-sessions",{"link":850,"meta":851},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions",{"image":852,"title":853,"description":854},{"url":417},"OpenAI — Запуск и продолжение сессий","Описывает долговременные сессии, асинхронные ходы, потоковую передачу и управление.",{},{"id":857,"data":858,"type":809,"tunes":864},"src-api-functions",{"link":859,"meta":860},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions",{"image":861,"title":862,"description":863},{"url":417},"OpenAI — Функции Agents API","Определение функции-инструмента и граница обработчика приложения для требуемых результатов функций.",{},{"id":866,"data":867,"type":809,"tunes":873},"src-api-webhooks",{"link":868,"meta":869},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks",{"image":870,"title":871,"description":872},{"url":417},"OpenAI — Вебхуки сессий","События жизненного цикла для асинхронных сессий, требуемые действия и подключения к самостоятельно размещённым средам.",{},{"id":875,"data":876,"type":809,"tunes":882},"src-api-observability",{"link":877,"meta":878},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability",{"image":879,"title":880,"description":881},{"url":417},"OpenAI — Наблюдаемость и использование Agents API","Журналы сессий, события, ходы, вызовы инструментов, субагенты, трассировки и анализ использования токенов.",{},{"id":223,"data":884,"type":226,"tunes":886},{"text":885},"Переход с OpenAI Agents SDK на Agents API — это не просто переименование импорта. Меняется ключевая архитектурная граница: SDK выполняет цикл агента внутри вашего приложения, тогда как Agents API запускает управляемый харнесс Codex и долговременную сессию на стороне OpenAI. Поэтому вопрос миграции не в том, «какие классы соответствуют каким эндпоинтам?», а в том, «какие обязанности среды выполнения перемещаются через границу, какие остаются в нашем приложении и какие нужно перепроектировать?»",{},{"id":229,"data":888,"type":234,"tunes":890},{"body":889,"title":232,"variant":233},"\u003Cstrong>Настоящая миграция с Agents SDK на Agents API меняет владение средой выполнения.\u003C\u002Fstrong> Ваша переиспользуемая конфигурация агента по-прежнему может содержать модель, инструкции и инструменты, но цикл, долговременная сессия, оркестрация, сжатие контекста и восстановление переходят к управляемой среде выполнения Agents API. Ваше приложение должно сохранять доменное состояние, авторизацию, бизнес-правила, реализации функций и логику аудита вне сессии агента. Рассматривайте миграцию как перепроектирование границы, а не как механическое преобразование кода.",{},{"id":237,"data":892,"type":234,"tunes":894},{"body":893,"title":240,"variant":241},"В настоящее время OpenAI помечает Agents SDK как \u003Cstrong>функционально завершённый\u003C\u002Fstrong> и рекомендует Agents API для новых агентных приложений. Agents API находится в публичной бета-версии. Существующие приложения на SDK остаются поддерживаемыми, и немедленная миграция не требуется автоматически.",{},{"id":244,"data":896,"type":234,"tunes":898},{"body":897,"title":247,"variant":248},"Карта миграции границ среды выполнения и Тест подтверждения миграции в этой статье — это практические инструменты архитектуры, а не официальные фреймворки миграции OpenAI. Они основаны на текущих различиях среды выполнения, задокументированных OpenAI.",{},{"id":900,"data":901,"type":220,"tunes":902},"toc",{"title":217,"maxLevel":218,"minLevel":219},{},{"id":251,"data":904,"type":42,"tunes":906},{"text":905,"level":219},"Миграция — от цикла, принадлежащего приложению, к управляемому харнессу",{},{"id":256,"data":908,"type":226,"tunes":910},{"text":909},"В Agents SDK один запуск — это ход на уровне приложения. Раннер SDK вызывает модель, проверяет вывод, выполняет инструменты, следует передачам и продолжает, пока не достигнет точки остановки. Ваш процесс размещает этот цикл и, следовательно, владеет его жизненным циклом.",{},{"id":261,"data":912,"type":226,"tunes":914},{"text":913},"В Agents API харнесс запускает OpenAI. Сессия — это долговременный экземпляр конфигурации агента, который принимает задачи, создаёт события, может приостанавливаться для требуемых действий и может продолжаться во времени. OpenAI управляет сессиями, оркестрацией, сжатием контекста и восстановлением; ваше приложение отправляет работу, обрабатывает функциональные инструменты, получает события и, при необходимости, управляет самостоятельно размещённой средой выполнения.",{},{"id":266,"data":916,"type":226,"tunes":917},{"text":268},{},{"id":271,"data":919,"type":42,"tunes":920},{"text":273,"level":219},{},{"id":276,"data":922,"type":327,"tunes":947},{"content":923,"stretched":43,"withHeadings":14},[924,926,929,930,933,935,937,940,941,942,943,945],[280,281,925],"Цель миграции Agents API",[284,927,928],"Выполняется в вашем приложении через раннер SDK","Выполняется в управляемом харнессе Codex",[288,289,290],[931,932,294],"Непрерывность разговора \u002F работы","Стратегия сессии SDK, история, продолжение результата или хранилище приложения",[296,297,934],"Харнесс запрашивает вызовы функций; ваше приложение возвращает результаты",[300,936,302],"Ваша среда выполнения \u002F стратегия сессии SDK",[938,305,939],"Передачи \u002F специалисты","Поведение харнесса \u002F субагентов в Agents API; не предполагайте взаимно однозначную семантику",[308,309,310],[312,313,314],[316,317,318],[320,321,944],"Журналы сессий Agents, события, ходы, вызовы инструментов, субагенты и экспортируемые трассировки",[324,325,946],"Управляемое восстановление харнесса\u002Fсессии плюс восстановление, принадлежащее приложению, для внешних систем и самостоятельно размещённых сред",{},{"id":330,"data":949,"type":42,"tunes":950},{"text":332,"level":219},{},{"id":335,"data":952,"type":226,"tunes":953},{"text":337},{},{"id":340,"data":955,"type":226,"tunes":957},{"text":956},"Модель конфигурации Agents API от OpenAI явно определяет агента через модель, инструкции, инструменты, рассуждения и поведение вывода. Функциональные инструменты остаются кодом приложения: харнесс запрашивает вызов функции, а ваш обработчик возвращает результат. OpenAI также отмечает, что реализации функций, используемые с Responses API, можно переиспользовать с потоком сессий Agents API.",{},{"id":345,"data":959,"type":234,"tunes":961},{"body":347,"title":960,"variant":349},"Хороший кандидат для миграции",{},{"id":352,"data":963,"type":42,"tunes":964},{"text":354,"level":219},{},{"id":357,"data":966,"type":226,"tunes":968},{"text":967},"Опасный шаблон миграции — воссоздать каждую абстракцию среды выполнения SDK внутри Agents API. Это может привести к тому, что вы будете платить за управляемую обвязку, продолжая при этом эксплуатировать теневую обвязку в своём приложении.",{},{"id":362,"data":970,"type":327,"tunes":988},{"content":971,"stretched":43,"withHeadings":14},[972,973,977,979,981,983,985],[366,367,368],[974,975,976],"Цикл приложения управляет каждым продолжением","Agents API уже управляет циклом обвязки","Какая логика продолжения является продуктовой, а какую следует перенести в управляемую сессию?",[374,978,376],"Сессии Agents API — это долговечные ресурсы с собственным жизненным циклом",[378,980,380],"Ходы Agents API асинхронны и могут порождать состояния action_required",[382,982,384],"Обработчики функций и среды выполнения могут быть разделены",[386,387,984],"Какие данные аудита уровня приложения всё ещё нужны в собственной записи?",[986,391,987],"Объект передачи напрямую соответствует модели размещённого субагента","Какое видимое пользователю владение и поведение специалиста должно быть сохранено, а не просто старая структура классов?",{},{"id":395,"data":990,"type":42,"tunes":992},{"text":991,"level":219},"Шаг 1 — Отделите доменное состояние от состояния сессии агента",{},{"id":400,"data":994,"type":226,"tunes":996},{"text":995},"Прежде чем трогать вызовы API, классифицируйте состояние, которое в настоящее время несёт ваше приложение на SDK. Часть состояния существует только для того, чтобы поддерживать движение разговора агента. Другое состояние — это бизнес-истина: права пользователя, статус проекта, данные заказа, утверждение рабочего процесса, записи клиентов, версии документов, состояние политики или конфигурация приложения.",{},{"id":405,"data":998,"type":226,"tunes":1000},{"text":999},"Вторая категория не должна становиться зависимой от сессии Agents API. Долговечная сессия — это полезная непрерывность для агента; она не является заменой источника истины вашего продукта. Если сессия исчезнет, истечёт, будет перестроена или изменит реализацию, ваше приложение всё равно должно знать, что является истинным.",{},{"id":410,"data":1002,"type":441,"tunes":1018},{"rows":1003,"title":430,"layout":327,"columns":1014},[1004,1007,1009,1011],{"id":414,"label":1005,"values":1006},"Непрерывность разговора",[417,417,417],{"id":419,"label":420,"values":1008},[417,417,417],{"id":423,"label":424,"values":1010},[417,417,417],{"id":427,"label":1012,"values":1013},"Рабочее черновое состояние",[417,417,417],[1015,1016,1017],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":1020,"type":42,"tunes":1022},{"text":1021,"level":219},"Шаг 2 — Преобразуйте мышление раннера в мышление сессий и событий",{},{"id":449,"data":1024,"type":226,"tunes":1026},{"text":1025},"Приложения на SDK часто мыслят в терминах вызова run и получения результата. Agents API мыслит в терминах долговечной сессии, ходы которой могут выполняться асинхронно. Сообщение в бездействующую сессию запускает работу; сообщение во время активного хода может его направлять. Прогресс поступает через потоковую передачу или вебхуки.",{},{"id":454,"data":1028,"type":226,"tunes":1029},{"text":456},{},{"id":459,"data":1031,"type":42,"tunes":1032},{"text":461,"level":219},{},{"id":464,"data":1034,"type":226,"tunes":1036},{"text":1035},"Функциональные инструменты остаются важной границей приложения. Вы определяете функцию и её JSON-схему в конфигурации агента. Когда обвязке нужна функция, сессия может перейти в состояние action-required. Ваше приложение извлекает требуемое действие, выполняет бизнес-логику и возвращает результат.",{},{"id":469,"data":1038,"type":226,"tunes":1040},{"text":1039},"Это означает, что реализация функции должна быть безопасной для возобновления. Вебхук может быть доставлен, пока другой воркер выполняет обработку. Сетевой сбой может произойти после внешнего побочного эффекта, но до возврата результата. Поэтому миграция — хороший момент, чтобы добавить идентификаторы вызовов, ключи идемпотентности, явную авторизацию, политики тайм-аутов и записи аудита к значимым инструментам.",{},{"id":474,"data":1042,"type":234,"tunes":1044},{"body":1043,"title":477,"variant":241},"Не рассматривайте вызов функции из управляемой обвязки как разрешение выполнить действие. Обвязка решает, \u003Cem>что она хочет вызвать\u003C\u002Fem>; ваше приложение по-прежнему решает, позволяют ли текущий пользователь, сессия и бизнес-состояние выполнить это действие.",{},{"id":480,"data":1046,"type":42,"tunes":1047},{"text":482,"level":219},{},{"id":485,"data":1049,"type":226,"tunes":1051},{"text":1050},"Agents API разделяет управляемую обвязку и среду выполнения. Агент может работать без выделенной среды, в песочнице, размещённой OpenAI, или через самостоятельно размещённую среду, подключённую к сессии.",{},{"id":490,"data":1053,"type":226,"tunes":1055},{"text":1054},"Это создаёт решение о миграции, которое приложения на SDK, возможно, никогда не принимали явно: какой код должен выполняться как функция приложения, какой код принадлежит песочнице и какие рабочие нагрузки требуют инфраструктуры, которую вы контролируете?",{},{"id":495,"data":1057,"type":327,"tunes":1067},{"content":1058,"stretched":43,"withHeadings":14},[1059,1060,1061,1062,1064,1065],[499,500],[502,503],[505,506],[1063,509],"Доступ к ресурсам частной сети, пользовательскому системному ПО или контролируемым локальным вычислениям",[511,512],[1066,515],"Выполнение бизнес-побочного эффекта с высоким влиянием",{},{"id":518,"data":1069,"type":42,"tunes":1070},{"text":520,"level":219},{},{"id":523,"data":1072,"type":226,"tunes":1074},{"text":1073},"Управляемая среда обеспечивает восстановление на уровне сессии, но ваше приложение по-прежнему отвечает за каждую внешнюю зависимость вокруг неё. Самостоятельно размещённые среды требуют подготовки, переподключения и завершения работы. Обработчики функций могут давать сбои. Вебхуки могут повторяться. Состояние на стороне продукта может измениться, пока агент бездействует.",{},{"id":528,"data":1076,"type":226,"tunes":1078},{"text":1077},"Поэтому миграция требует двух моделей восстановления: восстановление среды выполнения агента и восстановление бизнес-операций. Первое всё больше управляется Agents API. Второе остаётся вашей ответственностью.",{},{"id":533,"data":1080,"type":42,"tunes":1081},{"text":535,"level":219},{},{"id":538,"data":1083,"type":226,"tunes":1084},{"text":540},{},{"id":543,"data":1086,"type":226,"tunes":1088},{"text":1087},"Не отказывайтесь от наблюдаемости вашего приложения только потому, что трассировки платформы улучшились. Журналы продукта по-прежнему должны связывать сессию агента с идентификацией пользователя, решением об авторизации, доменным объектом, побочным эффектом инструмента, записью об одобрении и окончательным принятым результатом. Полезная производственная трассировка — это соединение доказательств среды выполнения агента и доказательств бизнес-среды выполнения.",{},{"id":548,"data":1090,"type":554,"tunes":1092},{"url":550,"title":551,"excerpt":1091,"ctaLabel":553},"Надёжность агента зависит от пути выполнения, инструментов и промежуточных решений — не только от окончательного вывода.",{},{"id":557,"data":1094,"type":42,"tunes":1096},{"text":1095,"level":219},"Шаг 7 — Сохраните оценки перед изменением среды выполнения",{},{"id":562,"data":1098,"type":226,"tunes":1100},{"text":1099},"Миграция может показаться успешной, потому что новая система по-прежнему выдаёт правдоподобные ответы, но при этом незаметно меняет выбор инструментов, непрерывность сессии, поведение при передаче, задержку или восстановление после сбоев. Постройте поведенческую базовую линию перед переключением сред выполнения.",{},{"id":567,"data":1102,"type":226,"tunes":1104},{"text":1103},"Базовая линия должна включать репрезентативные задачи, ожидаемые вызовы инструментов, запрещённые действия, точки одобрения, непрерывность состояния, сценарии восстановления и критерии приёмки окончательного вывода. По возможности запускайте старую и новую архитектуры на одних и тех же случаях.",{},{"id":572,"data":1106,"type":42,"tunes":1107},{"text":574,"level":219},{},{"id":577,"data":1109,"type":606,"tunes":1127},{"steps":1110,"title":1126,"orientation":605},[1111,1114,1117,1118,1120,1121,1123,1125],{"label":1112,"description":1113},"1. Заморозьте поведенческую базовую линию","Зафиксируйте репрезентативные трассировки SDK, ожидаемые выводы, пути инструментов, точки одобрения и случаи сбоев.",{"label":1115,"description":1116},"2. Инвентаризируйте владение состоянием","Отметьте каждое поле состояния как состояние сессии агента, авторитетное доменное состояние, долговечный артефакт или эфемерное рабочее состояние.",{"label":587,"description":588},{"label":590,"description":1119},"Перенесите один рабочий процесс производственной формы, включая создание сессии, инструменты, события, среду и сохранение.",{"label":593,"description":594},{"label":596,"description":1122},"Проверьте выбор инструментов, авторизацию, путь доказательств, переходы состояния и побочные эффекты относительно базовой линии.",{"label":599,"description":1124},"Где возможно, воспроизведите или зеркалируйте репрезентативные задачи, прежде чем делать новую среду выполнения авторитетной.",{"label":602,"description":603},"Докажите новую среду выполнения перед переключением",{},{"id":609,"data":1129,"type":42,"tunes":1130},{"text":611,"level":219},{},{"id":614,"data":1132,"type":327,"tunes":1144},{"content":1133,"stretched":43,"withHeadings":14},[1134,1135,1136,1137,1138,1139,1140,1141,1142,1143],[618,619],[621,622],[624,625],[627,628],[324,630],[632,633],[635,636],[638,639],[641,642],[644,645],{},{"id":648,"data":1146,"type":42,"tunes":1147},{"text":650,"level":219},{},{"id":653,"data":1149,"type":226,"tunes":1151},{"text":1150},"Существующее приложение на Agents SDK не становится плохой архитектурой просто потому, что направление платформы изменилось. OpenAI продолжает поддержку, исправления безопасности, критических ошибок и работу над совместимостью. Если приложение стабильно, хорошо оценено и не имеет заблокированного требования дорожной карты, немедленная миграция среды выполнения может быть не оправдана.",{},{"id":658,"data":1153,"type":669,"tunes":1158},{"meta":1154,"items":1155,"style":668},{},[662,663,1156,1157,666,667],"Приложение зависит от пользовательской семантики оркестрации, которая не была проверена на управляемой среде.","Переносимость между поставщиками является жёстким требованием, и текущая абстракция SDK существенно ценна.",{},{"id":672,"data":1160,"type":42,"tunes":1161},{"text":674,"level":219},{},{"id":677,"data":1163,"type":226,"tunes":1165},{"text":1164},"Миграция становится более убедительной, когда требования продукта соответствуют управляемой среде выполнения: долговременная работа, управляемое платформой сжатие и восстановление контекста, новые возможности агентной среды выполнения, изолированное выполнение, более богатое управление жизненным циклом на хостинге или желание сократить объём кода оркестрации, который эксплуатирует ваше приложение.",{},{"id":682,"data":1167,"type":226,"tunes":1169},{"text":1168},"Самый сильный сигнал — не «старый SDK функционально завершён». Это «наш план развития теперь зависит от возможностей, естественным домом для которых является управляемая среда выполнения Agents API».",{},{"id":687,"data":1171,"type":42,"tunes":1173},{"text":1172,"level":219},"Что могло бы изменить этот ответ?",{},{"id":692,"data":1175,"type":226,"tunes":1177},{"text":1176},"Стратегия миграции изменилась бы, если бы OpenAI опубликовала автоматизированные инструменты миграции, ввела явные слои совместимости, изменила семантику сессий Agents API, расширила или сузила поддержку самостоятельно размещаемых сред или изменила политику поддержки Agents SDK.",{},{"id":697,"data":1179,"type":226,"tunes":1181},{"text":1180},"Она также изменилась бы, если бы изменились требования вашего продукта. Простому ассистенту запрос-ответ может вообще не понадобиться долговременная управляемая среда выполнения. Долго работающий агент для программирования, исследований или операций может получить гораздо больше пользы от модели владения Agents API.",{},{"id":702,"data":1183,"type":42,"tunes":1184},{"text":704,"level":219},{},{"id":707,"data":1186,"type":226,"tunes":1188},{"text":1187},"Не существует универсального взаимно однозначного соответствия миграции от SDK к API, потому что приложения используют Agents SDK по-разному. Некоторые сильно полагаются на сессии и передачи; другие используют его как тонкий запускатель вокруг функциональных инструментов. Правильная миграция зависит от того, какие обязанности ваше приложение фактически несёт сегодня.",{},{"id":712,"data":1190,"type":226,"tunes":1192},{"text":1191},"Agents API также находится в публичной бета-версии, поэтому детали реализации могут меняться. Относитесь к принципам владения в этой статье как к более долговечным, чем любая отдельная форма конечной точки.",{},{"id":717,"data":1194,"type":42,"tunes":1195},{"text":719,"level":219},{},{"id":722,"data":1197,"type":226,"tunes":1199},{"text":1198},"Миграцию с Agents SDK на Agents API лучше всего понимать как перемещение границы среды выполнения агента. Управляемая среда выполнения берёт на себя большую часть цикла, непрерывности сессии, сжатия и восстановления. Ваше приложение должно стать более явным в отношении обязанностей, которые остаются за ним: доменная истина, авторизация, побочные эффекты функций, артефакты, аудируемость и жизненный цикл продукта.",{},{"id":727,"data":1201,"type":226,"tunes":1203},{"text":1202},"Если миграция оставляет всю старую машинерию оркестрации на месте и лишь заменяет вызовы SDK на вызовы Agents API, она, вероятно, упустила архитектурную возможность. Цель не в том, чтобы воспроизвести старую среду выполнения поверх новой. Цель — решить, какие обязанности среды выполнения больше не должны принадлежать вашему приложению.",{},{"id":732,"data":1205,"type":42,"tunes":1206},{"text":734,"level":219},{},{"id":737,"data":1208,"type":737,"tunes":1221},{"items":1209,"title":760},[1210,1212,1214,1216,1218],{"id":741,"answer":1211,"question":743},"Нет. Основное изменение — владение средой выполнения: Agents SDK запускает цикл агента в вашем приложении, тогда как Agents API запускает управляемую среду Codex и долговременную сессию. Состояние, жизненный цикл, обработку событий и восстановление следует рассматривать как архитектурные вопросы.",{"id":745,"answer":1213,"question":747},"Бизнес-реализацию часто можно переиспользовать, если она уже находится за стабильным интерфейсом приложения. Интеграция, обращённая к агенту, меняется, потому что вызовы функций Agents API обрабатываются через требуемые действия и результаты сессии.",{"id":749,"answer":1215,"question":751},"Обычно нет. Храните авторитетное бизнес- и продуктовое состояние в своих собственных базах данных или сервисах. Используйте сессию агента для непрерывности агента и рабочего контекста, а не как единственный источник истины для вашего продукта.",{"id":753,"answer":1217,"question":755},"Не всегда, потому что также доступна потоковая передача. Вебхуки особенно полезны для долго работающих или асинхронных сессий, где ваше приложение должно реагировать на изменения жизненного цикла, не удерживая открытый поток.",{"id":757,"answer":1219,"question":1220},"Нет. SDK остаётся поддерживаемым в режиме сопровождения. Мигрируйте, когда новая среда выполнения даёт значимую ценность для плана развития и после того, как требуемое поведение было проверено на оценках, соответствующих продакшену.","Должны ли все существующие приложения на Agents SDK мигрировать сейчас?",{},{"id":763,"data":1223,"type":42,"tunes":1224},{"text":765,"level":219},{},{"id":768,"data":1226,"type":768,"tunes":1239},{"title":770,"entries":1227},[1228,1229,1230,1232,1234,1237],{"term":773,"anchor":774,"definition":775},{"term":308,"anchor":777,"definition":778},{"term":780,"anchor":781,"definition":1231},"Долговременный экземпляр Agents API, который хранит конфигурацию агента, разговор и сохранённую работу между ходами.",{"term":1233,"anchor":785,"definition":786},"Требуемое действие",{"term":1235,"anchor":789,"definition":1236},"Самостоятельно размещаемая среда","Среда выполнения, управляемая вашей инфраструктурой и подключённая к управляемой среде Agents API.",{"term":574,"anchor":793,"definition":1238},"Поэтапный метод проверки, который сравнивает новую среду выполнения с поведенческими базовыми линиями, внедрением отказов, трассировками и обратимыми критериями переключения.",{},{"id":797,"data":1241,"type":42,"tunes":1242},{"text":799,"level":219},{},{"id":802,"data":1244,"type":809,"tunes":1247},{"link":804,"meta":1245},{"image":1246,"title":807,"description":808},{"url":417},{},{"id":812,"data":1249,"type":809,"tunes":1253},{"link":814,"meta":1250},{"image":1251,"title":817,"description":1252},{"url":417},"Документация по циклу агента, управляемому приложением, и модели продолжения в SDK.",{},{"id":821,"data":1255,"type":809,"tunes":1259},{"link":823,"meta":1256},{"image":1257,"title":826,"description":1258},{"url":417},"Определяет основные понятия Agents API: агент, среда, сессия, события и элементы.",{},{"id":830,"data":1261,"type":809,"tunes":1265},{"link":832,"meta":1262},{"image":1263,"title":835,"description":1264},{"url":417},"Объясняет границы размещённого harness, сервера приложения, среды выполнения, размещённой OpenAI, и самостоятельно размещённой среды выполнения.",{},{"id":839,"data":1267,"type":809,"tunes":1270},{"link":841,"meta":1268},{"image":1269,"title":844,"description":845},{"url":417},{},{"id":848,"data":1272,"type":809,"tunes":1276},{"link":850,"meta":1273},{"image":1274,"title":853,"description":1275},{"url":417},"Документирует долговременные сессии, асинхронные ходы, потоковую передачу и управление.",{},{"id":857,"data":1278,"type":809,"tunes":1282},{"link":859,"meta":1279},{"image":1280,"title":862,"description":1281},{"url":417},"Определение инструмента-функции и граница обработчика приложения для требуемых результатов функции.",{},{"id":866,"data":1284,"type":809,"tunes":1288},{"link":868,"meta":1285},{"image":1286,"title":871,"description":1287},{"url":417},"События жизненного цикла для асинхронных сессий, требуемые действия и подключения к самостоятельно размещённой среде.",{},{"id":875,"data":1290,"type":809,"tunes":1293},{"link":877,"meta":1291},{"image":1292,"title":880,"description":881},{"url":417},{},"2.31","Переход с OpenAI Agents SDK на новый Agents API — это не просто переименование импорта. Меняется граница среды выполнения: цикл агента, долговечная сессия, оркестрация, сжатие контекста и восстановление смещаются в сторону управляемой обвязки. Это руководство показывает, что следует перенести, что должно остаться в вашем приложении и как подтвердить миграцию до переключения.","\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":1303,"de":1304,"sr":1305,"es":1306,"fr":1307,"it":1308,"ru":1309,"zh":1310},"\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",[1312,1316,1320],{"id":1313,"name":1314,"slug":1315},70,"Этапы (План → Выполнение → Проверка)","phases",{"id":1317,"name":1318,"slug":1319},73,"Проверка и сравнение","verification-and-diffing",{"id":1321,"name":1322,"slug":1323},71,"Реестр рисков","risk-register",{"id":1325,"login":1326,"email":1327,"displayName":1328},"20","rooth8233","aleksandar@stajic.de","Aleksandar Stajić",[1330,2207],{"lang":1331,"title":1332,"content":1333,"contentJson":1334,"excerpt":2206},"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":1335,"blocks":1336,"version":2205},1790352173087,[1337,1341,1345,1350,1355,1360,1364,1368,1372,1376,1380,1431,1435,1439,1443,1448,1452,1456,1488,1492,1496,1500,1524,1528,1532,1536,1540,1544,1548,1553,1557,1561,1565,1587,1591,1595,1599,1603,1607,1611,1618,1622,1626,1630,1634,1663,1667,1700,1704,1708,1719,1723,1727,1731,1735,1739,1743,1747,1751,1755,1759,1763,1767,1771,1791,1795,1817,1821,1827,1834,1841,1848,1855,1862,1869,1876,1883,1886,1889,1892,1895,1898,1901,1904,1907,1910,1913,1929,1932,1935,1938,1941,1944,1947,1958,1961,1964,1967,1983,1986,1989,1992,1995,1998,2001,2004,2007,2010,2013,2023,2026,2029,2032,2035,2038,2041,2044,2047,2050,2053,2056,2068,2071,2085,2088,2091,2096,2099,2102,2105,2108,2111,2114,2117,2120,2123,2126,2129,2132,2135,2144,2147,2157,2160,2165,2170,2175,2180,2185,2190,2195,2200],{"id":215,"data":1338,"type":220,"tunes":1340},{"title":1339,"maxLevel":218,"minLevel":219},"Contents",{},{"id":223,"data":1342,"type":226,"tunes":1344},{"text":1343},"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":1346,"type":234,"tunes":1349},{"body":1347,"title":1348,"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":1351,"type":234,"tunes":1354},{"body":1352,"title":1353,"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":1356,"type":234,"tunes":1359},{"body":1357,"title":1358,"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":1361,"type":42,"tunes":1363},{"text":1362,"level":219},"The migration is from an application-owned loop to a managed harness",{},{"id":256,"data":1365,"type":226,"tunes":1367},{"text":1366},"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":1369,"type":226,"tunes":1371},{"text":1370},"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":1373,"type":226,"tunes":1375},{"text":1374},"That ownership shift is the migration. Everything else — API syntax, tool schemas, event handling, session IDs — follows from it.",{},{"id":271,"data":1377,"type":42,"tunes":1379},{"text":1378,"level":219},"The Runtime Boundary Migration Map",{},{"id":276,"data":1381,"type":327,"tunes":1430},{"content":1382,"stretched":43,"withHeadings":14},[1383,1386,1390,1394,1398,1402,1406,1410,1414,1418,1422,1426],[1384,281,1385],"Concern","Agents API migration target",[1387,1388,1389],"Agent loop","Runs in your application through the SDK runner","Runs in the managed Codex harness",[1391,1392,1393],"Reusable agent definition","Agent object in application code","Saved or inline agent configuration with model, instructions and tools",[1395,1396,1397],"Conversation \u002F work continuity","SDK session strategy, history, result continuation or application storage","Durable Agents API session",[1399,1400,1401],"Tool execution","SDK coordinates tool calls in your runtime","Harness requests function calls; your application returns results",[1403,1404,1405],"Context management","Your runtime \u002F SDK session strategy","Managed session context, compaction and recovery, plus your own application data boundaries",[1407,1408,1409],"Handoffs \u002F specialists","SDK orchestration primitives","Harness \u002F subagent behaviour in Agents API; do not assume one-to-one semantics",[1411,1412,1413],"Execution environment","Your application runtime or tool-specific environment","Optional OpenAI-hosted or self-hosted environment attached to the session",[1415,1416,1417],"Streaming","SDK streaming from the run","Agents API session event stream",[1419,1420,1421],"Async lifecycle","Usually application-managed around the SDK run","Native session states, asynchronous turns and webhooks",[1423,1424,1425],"Tracing \u002F observability","Agents SDK tracing and application logs","Agents session logs, events, turns, tool calls, subagents and exportable traces",[1427,1428,1429],"Recovery","Application responsibility","Managed harness\u002Fsession recovery plus application-owned recovery for external systems and self-hosted environments",{},{"id":330,"data":1432,"type":42,"tunes":1434},{"text":1433,"level":219},"What can migrate conceptually without changing ownership",{},{"id":335,"data":1436,"type":226,"tunes":1438},{"text":1437},"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":1440,"type":226,"tunes":1442},{"text":1441},"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":1444,"type":234,"tunes":1447},{"body":1445,"title":1446,"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":1449,"type":42,"tunes":1451},{"text":1450,"level":219},"What should not be migrated one-to-one",{},{"id":357,"data":1453,"type":226,"tunes":1455},{"text":1454},"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":1457,"type":327,"tunes":1487},{"content":1458,"stretched":43,"withHeadings":14},[1459,1463,1467,1471,1475,1479,1483],[1460,1461,1462],"SDK-era assumption","Why a direct copy is risky","Migration question",[1464,1465,1466],"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?",[1468,1469,1470],"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?",[1472,1473,1474],"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?",[1476,1477,1478],"All tool execution happens where the SDK process runs","Function handlers and execution environments can be separate","Where should each tool actually execute?",[1480,1481,1482],"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?",[1484,1485,1486],"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":1489,"type":42,"tunes":1491},{"text":1490,"level":219},"Step 1 — Separate domain state from agent session state",{},{"id":400,"data":1493,"type":226,"tunes":1495},{"text":1494},"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":1497,"type":226,"tunes":1499},{"text":1498},"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":1501,"type":441,"tunes":1523},{"rows":1502,"title":1515,"layout":327,"columns":1516},[1503,1506,1509,1512],{"id":414,"label":1504,"values":1505},"Conversation continuity",[417,417,417],{"id":419,"label":1507,"values":1508},"Business truth",[417,417,417],{"id":423,"label":1510,"values":1511},"Durable artifact",[417,417,417],{"id":427,"label":1513,"values":1514},"Working scratch state",[417,417,417],"State placement test",[1517,1519,1521],{"id":433,"label":1518},"State type",{"id":436,"label":1520},"Preferred owner",{"id":439,"label":1522},"Reason",{},{"id":444,"data":1525,"type":42,"tunes":1527},{"text":1526,"level":219},"Step 2 — Convert the runner mindset into a session-and-events mindset",{},{"id":449,"data":1529,"type":226,"tunes":1531},{"text":1530},"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":1533,"type":226,"tunes":1535},{"text":1534},"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":1537,"type":42,"tunes":1539},{"text":1538,"level":219},"Step 3 — Redesign function tools around required actions",{},{"id":464,"data":1541,"type":226,"tunes":1543},{"text":1542},"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":1545,"type":226,"tunes":1547},{"text":1546},"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":1549,"type":234,"tunes":1552},{"body":1550,"title":1551,"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":1554,"type":42,"tunes":1556},{"text":1555,"level":219},"Step 4 — Decide where execution should happen",{},{"id":485,"data":1558,"type":226,"tunes":1560},{"text":1559},"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":1562,"type":226,"tunes":1564},{"text":1563},"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":1566,"type":327,"tunes":1586},{"content":1567,"stretched":43,"withHeadings":14},[1568,1571,1574,1577,1580,1583],[1569,1570],"Need","Likely boundary",[1572,1573],"Call an existing internal service through controlled business logic","Function tool handled by your application",[1575,1576],"Run isolated code or work with temporary files without private infrastructure","OpenAI-hosted environment",[1578,1579],"Access private network resources, custom system software or controlled local compute","Self-hosted environment",[1581,1582],"Persist accepted product artifacts","Application-owned storage, not only sandbox filesystem",[1584,1585],"Execute a high-impact business side effect","Application function with authorization and audit controls",{},{"id":518,"data":1588,"type":42,"tunes":1590},{"text":1589,"level":219},"Step 5 — Replace implicit recovery with explicit lifecycle handling",{},{"id":523,"data":1592,"type":226,"tunes":1594},{"text":1593},"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":1596,"type":226,"tunes":1598},{"text":1597},"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":1600,"type":42,"tunes":1602},{"text":1601,"level":219},"Step 6 — Rebuild observability around the new trace boundary",{},{"id":538,"data":1604,"type":226,"tunes":1606},{"text":1605},"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":1608,"type":226,"tunes":1610},{"text":1609},"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":1612,"type":554,"tunes":1617},{"url":1613,"title":1614,"excerpt":1615,"ctaLabel":1616},"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":1619,"type":42,"tunes":1621},{"text":1620,"level":219},"Step 7 — Preserve evals before changing the runtime",{},{"id":562,"data":1623,"type":226,"tunes":1625},{"text":1624},"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":1627,"type":226,"tunes":1629},{"text":1628},"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":1631,"type":42,"tunes":1633},{"text":1632,"level":219},"The Migration Proof Test",{},{"id":577,"data":1635,"type":606,"tunes":1662},{"steps":1636,"title":1661,"orientation":605},[1637,1640,1643,1646,1649,1652,1655,1658],{"label":1638,"description":1639},"1. Freeze the behavioural baseline","Capture representative SDK traces, expected outputs, tool paths, approval points and failure cases.",{"label":1641,"description":1642},"2. Inventory state ownership","Mark each state field as agent-session state, authoritative domain state, durable artifact or ephemeral working state.",{"label":1644,"description":1645},"3. Reuse stable tool implementations","Keep business functions behind application interfaces; replace only the agent-facing integration where possible.",{"label":1647,"description":1648},"4. Build one Agents API vertical slice","Migrate one production-shaped workflow including session creation, tools, events, environment and persistence.",{"label":1650,"description":1651},"5. Inject interruptions","Test process restart, webhook retry, function timeout, self-hosted environment reconnect and stale domain state.",{"label":1653,"description":1654},"6. Compare traces, not only answers","Verify tool choice, authorization, evidence path, state transitions and side effects against the baseline.",{"label":1656,"description":1657},"7. Run shadow traffic","Where feasible, replay or mirror representative tasks before making the new runtime authoritative.",{"label":1659,"description":1660},"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":1664,"type":42,"tunes":1666},{"text":1665,"level":219},"What to measure during migration",{},{"id":614,"data":1668,"type":327,"tunes":1699},{"content":1669,"stretched":43,"withHeadings":14},[1670,1673,1676,1679,1682,1684,1687,1690,1693,1696],[1671,1672],"Dimension","Migration check",[1674,1675],"Task success","Does the new runtime meet the same or better acceptance criteria?",[1677,1678],"Tool correctness","Does it call the right tool with valid arguments and authorization?",[1680,1681],"State continuity","Can work resume across turns, restarts and asynchronous waits?",[1427,1683],"What happens after webhook loss, handler failure, environment disconnect or timeout?",[1685,1686],"Traceability","Can every consequential action be joined to session, user, tool call and domain object?",[1688,1689],"Context behaviour","Do long-running sessions preserve constraints without carrying stale application truth?",[1691,1692],"Latency","How do session startup, environment provisioning and multi-turn work affect user-visible time?",[1694,1695],"Cost","What changes in model usage, sandbox usage, repeated context and infrastructure operations?",[1697,1698],"Operational load","Which previously application-owned responsibilities actually disappeared, and which merely moved?",{},{"id":648,"data":1701,"type":42,"tunes":1703},{"text":1702,"level":219},"When not to migrate yet",{},{"id":653,"data":1705,"type":226,"tunes":1707},{"text":1706},"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":1709,"type":669,"tunes":1718},{"meta":1710,"items":1711,"style":668},{},[1712,1713,1714,1715,1716,1717],"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":1720,"type":42,"tunes":1722},{"text":1721,"level":219},"When the migration becomes strategically important",{},{"id":677,"data":1724,"type":226,"tunes":1726},{"text":1725},"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":1728,"type":226,"tunes":1730},{"text":1729},"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":1732,"type":42,"tunes":1734},{"text":1733,"level":219},"What would change this answer?",{},{"id":692,"data":1736,"type":226,"tunes":1738},{"text":1737},"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":1740,"type":226,"tunes":1742},{"text":1741},"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":1744,"type":42,"tunes":1746},{"text":1745,"level":219},"Limitations",{},{"id":707,"data":1748,"type":226,"tunes":1750},{"text":1749},"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":1752,"type":226,"tunes":1754},{"text":1753},"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":1756,"type":42,"tunes":1758},{"text":1757,"level":219},"Conclusion",{},{"id":722,"data":1760,"type":226,"tunes":1762},{"text":1761},"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":1764,"type":226,"tunes":1766},{"text":1765},"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":1768,"type":42,"tunes":1770},{"text":1769,"level":219},"FAQ",{},{"id":737,"data":1772,"type":737,"tunes":1790},{"items":1773,"title":1789},[1774,1777,1780,1783,1786],{"id":741,"answer":1775,"question":1776},"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":1778,"question":1779},"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":1781,"question":1782},"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":1784,"question":1785},"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":1787,"question":1788},"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":1792,"type":42,"tunes":1794},{"text":1793,"level":219},"Glossary",{},{"id":768,"data":1796,"type":768,"tunes":1816},{"title":1797,"entries":1798},"Key migration terms",[1799,1802,1805,1808,1811,1813],{"term":1800,"anchor":774,"definition":1801},"Runtime boundary","The division of responsibility between the platform-managed agent runtime and the application-owned runtime.",{"term":1803,"anchor":777,"definition":1804},"Harness","The agent runtime that coordinates model calls, tools, context, orchestration and continued execution.",{"term":1806,"anchor":781,"definition":1807},"Session","A durable Agents API instance that holds an agent's configuration, conversation and saved work across turns.",{"term":1809,"anchor":785,"definition":1810},"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":1579,"anchor":789,"definition":1812},"An execution environment operated by your infrastructure and connected to the managed Agents API harness.",{"term":1814,"anchor":793,"definition":1815},"Migration proof test","A staged validation method that compares the new runtime against behavioural baselines, failure injections, traces and reversible cutover criteria.",{},{"id":797,"data":1818,"type":42,"tunes":1820},{"text":1819,"level":219},"Primary sources and further reading",{},{"id":802,"data":1822,"type":809,"tunes":1826},{"link":804,"meta":1823},{"image":1824,"title":807,"description":1825},{"url":417},"Current support policy: the Agents SDK is feature complete, remains maintained, and new applications should start with the Agents API.",{},{"id":812,"data":1828,"type":809,"tunes":1833},{"link":814,"meta":1829},{"image":1830,"title":1831,"description":1832},{"url":417},"OpenAI — Running agents with the Agents SDK","Documentation of the SDK application-owned agent loop and continuation model.",{},{"id":821,"data":1835,"type":809,"tunes":1840},{"link":823,"meta":1836},{"image":1837,"title":1838,"description":1839},{"url":417},"OpenAI — Agents API overview","Defines the Agents API core concepts: agent, environment, session, events and items.",{},{"id":830,"data":1842,"type":809,"tunes":1847},{"link":832,"meta":1843},{"image":1844,"title":1845,"description":1846},{"url":417},"OpenAI — Agents API architecture","Explains the hosted harness, application server, OpenAI-hosted and self-hosted execution environment boundaries.",{},{"id":839,"data":1849,"type":809,"tunes":1854},{"link":841,"meta":1850},{"image":1851,"title":1852,"description":1853},{"url":417},"OpenAI — Configuring Agents","Defines reusable agent configuration and session-level customization.",{},{"id":848,"data":1856,"type":809,"tunes":1861},{"link":850,"meta":1857},{"image":1858,"title":1859,"description":1860},{"url":417},"OpenAI — Run and continue sessions","Documents durable sessions, asynchronous turns, streaming and steering.",{},{"id":857,"data":1863,"type":809,"tunes":1868},{"link":859,"meta":1864},{"image":1865,"title":1866,"description":1867},{"url":417},"OpenAI — Agents API Functions","Function-tool definition and the application handler boundary for required function results.",{},{"id":866,"data":1870,"type":809,"tunes":1875},{"link":868,"meta":1871},{"image":1872,"title":1873,"description":1874},{"url":417},"OpenAI — Session webhooks","Lifecycle events for asynchronous sessions, required actions and self-hosted environment connections.",{},{"id":875,"data":1877,"type":809,"tunes":1882},{"link":877,"meta":1878},{"image":1879,"title":1880,"description":1881},{"url":417},"OpenAI — Agents API observability and usage","Session logs, events, turns, tool calls, subagents, traces and token-usage inspection.",{},{"id":223,"data":1884,"type":226,"tunes":1885},{"text":1343},{},{"id":229,"data":1887,"type":234,"tunes":1888},{"body":1347,"title":1348,"variant":233},{},{"id":237,"data":1890,"type":234,"tunes":1891},{"body":1352,"title":1353,"variant":241},{},{"id":244,"data":1893,"type":234,"tunes":1894},{"body":1357,"title":1358,"variant":248},{},{"id":900,"data":1896,"type":220,"tunes":1897},{"title":1339,"maxLevel":218,"minLevel":219},{},{"id":251,"data":1899,"type":42,"tunes":1900},{"text":1362,"level":219},{},{"id":256,"data":1902,"type":226,"tunes":1903},{"text":1366},{},{"id":261,"data":1905,"type":226,"tunes":1906},{"text":1370},{},{"id":266,"data":1908,"type":226,"tunes":1909},{"text":1374},{},{"id":271,"data":1911,"type":42,"tunes":1912},{"text":1378,"level":219},{},{"id":276,"data":1914,"type":327,"tunes":1928},{"content":1915,"stretched":43,"withHeadings":14},[1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927],[1384,281,1385],[1387,1388,1389],[1391,1392,1393],[1395,1396,1397],[1399,1400,1401],[1403,1404,1405],[1407,1408,1409],[1411,1412,1413],[1415,1416,1417],[1419,1420,1421],[1423,1424,1425],[1427,1428,1429],{},{"id":330,"data":1930,"type":42,"tunes":1931},{"text":1433,"level":219},{},{"id":335,"data":1933,"type":226,"tunes":1934},{"text":1437},{},{"id":340,"data":1936,"type":226,"tunes":1937},{"text":1441},{},{"id":345,"data":1939,"type":234,"tunes":1940},{"body":1445,"title":1446,"variant":349},{},{"id":352,"data":1942,"type":42,"tunes":1943},{"text":1450,"level":219},{},{"id":357,"data":1945,"type":226,"tunes":1946},{"text":1454},{},{"id":362,"data":1948,"type":327,"tunes":1957},{"content":1949,"stretched":43,"withHeadings":14},[1950,1951,1952,1953,1954,1955,1956],[1460,1461,1462],[1464,1465,1466],[1468,1469,1470],[1472,1473,1474],[1476,1477,1478],[1480,1481,1482],[1484,1485,1486],{},{"id":395,"data":1959,"type":42,"tunes":1960},{"text":1490,"level":219},{},{"id":400,"data":1962,"type":226,"tunes":1963},{"text":1494},{},{"id":405,"data":1965,"type":226,"tunes":1966},{"text":1498},{},{"id":410,"data":1968,"type":441,"tunes":1982},{"rows":1969,"title":1515,"layout":327,"columns":1978},[1970,1972,1974,1976],{"id":414,"label":1504,"values":1971},[417,417,417],{"id":419,"label":1507,"values":1973},[417,417,417],{"id":423,"label":1510,"values":1975},[417,417,417],{"id":427,"label":1513,"values":1977},[417,417,417],[1979,1980,1981],{"id":433,"label":1518},{"id":436,"label":1520},{"id":439,"label":1522},{},{"id":444,"data":1984,"type":42,"tunes":1985},{"text":1526,"level":219},{},{"id":449,"data":1987,"type":226,"tunes":1988},{"text":1530},{},{"id":454,"data":1990,"type":226,"tunes":1991},{"text":1534},{},{"id":459,"data":1993,"type":42,"tunes":1994},{"text":1538,"level":219},{},{"id":464,"data":1996,"type":226,"tunes":1997},{"text":1542},{},{"id":469,"data":1999,"type":226,"tunes":2000},{"text":1546},{},{"id":474,"data":2002,"type":234,"tunes":2003},{"body":1550,"title":1551,"variant":241},{},{"id":480,"data":2005,"type":42,"tunes":2006},{"text":1555,"level":219},{},{"id":485,"data":2008,"type":226,"tunes":2009},{"text":1559},{},{"id":490,"data":2011,"type":226,"tunes":2012},{"text":1563},{},{"id":495,"data":2014,"type":327,"tunes":2022},{"content":2015,"stretched":43,"withHeadings":14},[2016,2017,2018,2019,2020,2021],[1569,1570],[1572,1573],[1575,1576],[1578,1579],[1581,1582],[1584,1585],{},{"id":518,"data":2024,"type":42,"tunes":2025},{"text":1589,"level":219},{},{"id":523,"data":2027,"type":226,"tunes":2028},{"text":1593},{},{"id":528,"data":2030,"type":226,"tunes":2031},{"text":1597},{},{"id":533,"data":2033,"type":42,"tunes":2034},{"text":1601,"level":219},{},{"id":538,"data":2036,"type":226,"tunes":2037},{"text":1605},{},{"id":543,"data":2039,"type":226,"tunes":2040},{"text":1609},{},{"id":548,"data":2042,"type":554,"tunes":2043},{"url":1613,"title":1614,"excerpt":1615,"ctaLabel":1616},{},{"id":557,"data":2045,"type":42,"tunes":2046},{"text":1620,"level":219},{},{"id":562,"data":2048,"type":226,"tunes":2049},{"text":1624},{},{"id":567,"data":2051,"type":226,"tunes":2052},{"text":1628},{},{"id":572,"data":2054,"type":42,"tunes":2055},{"text":1632,"level":219},{},{"id":577,"data":2057,"type":606,"tunes":2067},{"steps":2058,"title":1661,"orientation":605},[2059,2060,2061,2062,2063,2064,2065,2066],{"label":1638,"description":1639},{"label":1641,"description":1642},{"label":1644,"description":1645},{"label":1647,"description":1648},{"label":1650,"description":1651},{"label":1653,"description":1654},{"label":1656,"description":1657},{"label":1659,"description":1660},{},{"id":609,"data":2069,"type":42,"tunes":2070},{"text":1665,"level":219},{},{"id":614,"data":2072,"type":327,"tunes":2084},{"content":2073,"stretched":43,"withHeadings":14},[2074,2075,2076,2077,2078,2079,2080,2081,2082,2083],[1671,1672],[1674,1675],[1677,1678],[1680,1681],[1427,1683],[1685,1686],[1688,1689],[1691,1692],[1694,1695],[1697,1698],{},{"id":648,"data":2086,"type":42,"tunes":2087},{"text":1702,"level":219},{},{"id":653,"data":2089,"type":226,"tunes":2090},{"text":1706},{},{"id":658,"data":2092,"type":669,"tunes":2095},{"meta":2093,"items":2094,"style":668},{},[1712,1713,1714,1715,1716,1717],{},{"id":672,"data":2097,"type":42,"tunes":2098},{"text":1721,"level":219},{},{"id":677,"data":2100,"type":226,"tunes":2101},{"text":1725},{},{"id":682,"data":2103,"type":226,"tunes":2104},{"text":1729},{},{"id":687,"data":2106,"type":42,"tunes":2107},{"text":1733,"level":219},{},{"id":692,"data":2109,"type":226,"tunes":2110},{"text":1737},{},{"id":697,"data":2112,"type":226,"tunes":2113},{"text":1741},{},{"id":702,"data":2115,"type":42,"tunes":2116},{"text":1745,"level":219},{},{"id":707,"data":2118,"type":226,"tunes":2119},{"text":1749},{},{"id":712,"data":2121,"type":226,"tunes":2122},{"text":1753},{},{"id":717,"data":2124,"type":42,"tunes":2125},{"text":1757,"level":219},{},{"id":722,"data":2127,"type":226,"tunes":2128},{"text":1761},{},{"id":727,"data":2130,"type":226,"tunes":2131},{"text":1765},{},{"id":732,"data":2133,"type":42,"tunes":2134},{"text":1769,"level":219},{},{"id":737,"data":2136,"type":737,"tunes":2143},{"items":2137,"title":1789},[2138,2139,2140,2141,2142],{"id":741,"answer":1775,"question":1776},{"id":745,"answer":1778,"question":1779},{"id":749,"answer":1781,"question":1782},{"id":753,"answer":1784,"question":1785},{"id":757,"answer":1787,"question":1788},{},{"id":763,"data":2145,"type":42,"tunes":2146},{"text":1793,"level":219},{},{"id":768,"data":2148,"type":768,"tunes":2156},{"title":1797,"entries":2149},[2150,2151,2152,2153,2154,2155],{"term":1800,"anchor":774,"definition":1801},{"term":1803,"anchor":777,"definition":1804},{"term":1806,"anchor":781,"definition":1807},{"term":1809,"anchor":785,"definition":1810},{"term":1579,"anchor":789,"definition":1812},{"term":1814,"anchor":793,"definition":1815},{},{"id":797,"data":2158,"type":42,"tunes":2159},{"text":1819,"level":219},{},{"id":802,"data":2161,"type":809,"tunes":2164},{"link":804,"meta":2162},{"image":2163,"title":807,"description":1825},{"url":417},{},{"id":812,"data":2166,"type":809,"tunes":2169},{"link":814,"meta":2167},{"image":2168,"title":1831,"description":1832},{"url":417},{},{"id":821,"data":2171,"type":809,"tunes":2174},{"link":823,"meta":2172},{"image":2173,"title":1838,"description":1839},{"url":417},{},{"id":830,"data":2176,"type":809,"tunes":2179},{"link":832,"meta":2177},{"image":2178,"title":1845,"description":1846},{"url":417},{},{"id":839,"data":2181,"type":809,"tunes":2184},{"link":841,"meta":2182},{"image":2183,"title":1852,"description":1853},{"url":417},{},{"id":848,"data":2186,"type":809,"tunes":2189},{"link":850,"meta":2187},{"image":2188,"title":1859,"description":1860},{"url":417},{},{"id":857,"data":2191,"type":809,"tunes":2194},{"link":859,"meta":2192},{"image":2193,"title":1866,"description":1867},{"url":417},{},{"id":866,"data":2196,"type":809,"tunes":2199},{"link":868,"meta":2197},{"image":2198,"title":1873,"description":1874},{"url":417},{},{"id":875,"data":2201,"type":809,"tunes":2204},{"link":877,"meta":2202},{"image":2203,"title":1880,"description":1881},{"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":2208,"excerpt":1295},{"time":212,"blocks":2209,"version":1294},[2210,2213,2216,2219,2222,2225,2228,2231,2234,2237,2240,2256,2259,2262,2265,2268,2271,2274,2285,2288,2291,2294,2310,2313,2316,2319,2322,2325,2328,2331,2334,2337,2340,2350,2353,2356,2359,2362,2365,2368,2371,2374,2377,2380,2383,2395,2398,2412,2415,2418,2423,2426,2429,2432,2435,2438,2441,2444,2447,2450,2453,2456,2459,2462,2471,2474,2484,2487,2492,2497,2502,2507,2512,2517,2522,2527,2532,2535,2538,2541,2544,2547,2550,2553,2556,2559,2562,2578,2581,2584,2587,2590,2593,2596,2607,2610,2613,2616,2632,2635,2638,2641,2644,2647,2650,2653,2656,2659,2662,2672,2675,2678,2681,2684,2687,2690,2693,2696,2699,2702,2705,2717,2720,2734,2737,2740,2745,2748,2751,2754,2757,2760,2763,2766,2769,2772,2775,2778,2781,2784,2793,2796,2806,2809,2814,2819,2824,2829,2834,2839,2844,2849],{"id":215,"data":2211,"type":220,"tunes":2212},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":223,"data":2214,"type":226,"tunes":2215},{"text":225},{},{"id":229,"data":2217,"type":234,"tunes":2218},{"body":231,"title":232,"variant":233},{},{"id":237,"data":2220,"type":234,"tunes":2221},{"body":239,"title":240,"variant":241},{},{"id":244,"data":2223,"type":234,"tunes":2224},{"body":246,"title":247,"variant":248},{},{"id":251,"data":2226,"type":42,"tunes":2227},{"text":253,"level":219},{},{"id":256,"data":2229,"type":226,"tunes":2230},{"text":258},{},{"id":261,"data":2232,"type":226,"tunes":2233},{"text":263},{},{"id":266,"data":2235,"type":226,"tunes":2236},{"text":268},{},{"id":271,"data":2238,"type":42,"tunes":2239},{"text":273,"level":219},{},{"id":276,"data":2241,"type":327,"tunes":2255},{"content":2242,"stretched":43,"withHeadings":14},[2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254],[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":2257,"type":42,"tunes":2258},{"text":332,"level":219},{},{"id":335,"data":2260,"type":226,"tunes":2261},{"text":337},{},{"id":340,"data":2263,"type":226,"tunes":2264},{"text":342},{},{"id":345,"data":2266,"type":234,"tunes":2267},{"body":347,"title":348,"variant":349},{},{"id":352,"data":2269,"type":42,"tunes":2270},{"text":354,"level":219},{},{"id":357,"data":2272,"type":226,"tunes":2273},{"text":359},{},{"id":362,"data":2275,"type":327,"tunes":2284},{"content":2276,"stretched":43,"withHeadings":14},[2277,2278,2279,2280,2281,2282,2283],[366,367,368],[370,371,372],[374,375,376],[378,379,380],[382,383,384],[386,387,388],[390,391,392],{},{"id":395,"data":2286,"type":42,"tunes":2287},{"text":397,"level":219},{},{"id":400,"data":2289,"type":226,"tunes":2290},{"text":402},{},{"id":405,"data":2292,"type":226,"tunes":2293},{"text":407},{},{"id":410,"data":2295,"type":441,"tunes":2309},{"rows":2296,"title":430,"layout":327,"columns":2305},[2297,2299,2301,2303],{"id":414,"label":415,"values":2298},[417,417,417],{"id":419,"label":420,"values":2300},[417,417,417],{"id":423,"label":424,"values":2302},[417,417,417],{"id":427,"label":428,"values":2304},[417,417,417],[2306,2307,2308],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2311,"type":42,"tunes":2312},{"text":446,"level":219},{},{"id":449,"data":2314,"type":226,"tunes":2315},{"text":451},{},{"id":454,"data":2317,"type":226,"tunes":2318},{"text":456},{},{"id":459,"data":2320,"type":42,"tunes":2321},{"text":461,"level":219},{},{"id":464,"data":2323,"type":226,"tunes":2324},{"text":466},{},{"id":469,"data":2326,"type":226,"tunes":2327},{"text":471},{},{"id":474,"data":2329,"type":234,"tunes":2330},{"body":476,"title":477,"variant":241},{},{"id":480,"data":2332,"type":42,"tunes":2333},{"text":482,"level":219},{},{"id":485,"data":2335,"type":226,"tunes":2336},{"text":487},{},{"id":490,"data":2338,"type":226,"tunes":2339},{"text":492},{},{"id":495,"data":2341,"type":327,"tunes":2349},{"content":2342,"stretched":43,"withHeadings":14},[2343,2344,2345,2346,2347,2348],[499,500],[502,503],[505,506],[508,509],[511,512],[514,515],{},{"id":518,"data":2351,"type":42,"tunes":2352},{"text":520,"level":219},{},{"id":523,"data":2354,"type":226,"tunes":2355},{"text":525},{},{"id":528,"data":2357,"type":226,"tunes":2358},{"text":530},{},{"id":533,"data":2360,"type":42,"tunes":2361},{"text":535,"level":219},{},{"id":538,"data":2363,"type":226,"tunes":2364},{"text":540},{},{"id":543,"data":2366,"type":226,"tunes":2367},{"text":545},{},{"id":548,"data":2369,"type":554,"tunes":2370},{"url":550,"title":551,"excerpt":552,"ctaLabel":553},{},{"id":557,"data":2372,"type":42,"tunes":2373},{"text":559,"level":219},{},{"id":562,"data":2375,"type":226,"tunes":2376},{"text":564},{},{"id":567,"data":2378,"type":226,"tunes":2379},{"text":569},{},{"id":572,"data":2381,"type":42,"tunes":2382},{"text":574,"level":219},{},{"id":577,"data":2384,"type":606,"tunes":2394},{"steps":2385,"title":604,"orientation":605},[2386,2387,2388,2389,2390,2391,2392,2393],{"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":2396,"type":42,"tunes":2397},{"text":611,"level":219},{},{"id":614,"data":2399,"type":327,"tunes":2411},{"content":2400,"stretched":43,"withHeadings":14},[2401,2402,2403,2404,2405,2406,2407,2408,2409,2410],[618,619],[621,622],[624,625],[627,628],[324,630],[632,633],[635,636],[638,639],[641,642],[644,645],{},{"id":648,"data":2413,"type":42,"tunes":2414},{"text":650,"level":219},{},{"id":653,"data":2416,"type":226,"tunes":2417},{"text":655},{},{"id":658,"data":2419,"type":669,"tunes":2422},{"meta":2420,"items":2421,"style":668},{},[662,663,664,665,666,667],{},{"id":672,"data":2424,"type":42,"tunes":2425},{"text":674,"level":219},{},{"id":677,"data":2427,"type":226,"tunes":2428},{"text":679},{},{"id":682,"data":2430,"type":226,"tunes":2431},{"text":684},{},{"id":687,"data":2433,"type":42,"tunes":2434},{"text":689,"level":219},{},{"id":692,"data":2436,"type":226,"tunes":2437},{"text":694},{},{"id":697,"data":2439,"type":226,"tunes":2440},{"text":699},{},{"id":702,"data":2442,"type":42,"tunes":2443},{"text":704,"level":219},{},{"id":707,"data":2445,"type":226,"tunes":2446},{"text":709},{},{"id":712,"data":2448,"type":226,"tunes":2449},{"text":714},{},{"id":717,"data":2451,"type":42,"tunes":2452},{"text":719,"level":219},{},{"id":722,"data":2454,"type":226,"tunes":2455},{"text":724},{},{"id":727,"data":2457,"type":226,"tunes":2458},{"text":729},{},{"id":732,"data":2460,"type":42,"tunes":2461},{"text":734,"level":219},{},{"id":737,"data":2463,"type":737,"tunes":2470},{"items":2464,"title":760},[2465,2466,2467,2468,2469],{"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":2472,"type":42,"tunes":2473},{"text":765,"level":219},{},{"id":768,"data":2475,"type":768,"tunes":2483},{"title":770,"entries":2476},[2477,2478,2479,2480,2481,2482],{"term":773,"anchor":774,"definition":775},{"term":308,"anchor":777,"definition":778},{"term":780,"anchor":781,"definition":782},{"term":784,"anchor":785,"definition":786},{"term":788,"anchor":789,"definition":790},{"term":792,"anchor":793,"definition":794},{},{"id":797,"data":2485,"type":42,"tunes":2486},{"text":799,"level":219},{},{"id":802,"data":2488,"type":809,"tunes":2491},{"link":804,"meta":2489},{"image":2490,"title":807,"description":808},{"url":417},{},{"id":812,"data":2493,"type":809,"tunes":2496},{"link":814,"meta":2494},{"image":2495,"title":817,"description":818},{"url":417},{},{"id":821,"data":2498,"type":809,"tunes":2501},{"link":823,"meta":2499},{"image":2500,"title":826,"description":827},{"url":417},{},{"id":830,"data":2503,"type":809,"tunes":2506},{"link":832,"meta":2504},{"image":2505,"title":835,"description":836},{"url":417},{},{"id":839,"data":2508,"type":809,"tunes":2511},{"link":841,"meta":2509},{"image":2510,"title":844,"description":845},{"url":417},{},{"id":848,"data":2513,"type":809,"tunes":2516},{"link":850,"meta":2514},{"image":2515,"title":853,"description":854},{"url":417},{},{"id":857,"data":2518,"type":809,"tunes":2521},{"link":859,"meta":2519},{"image":2520,"title":862,"description":863},{"url":417},{},{"id":866,"data":2523,"type":809,"tunes":2526},{"link":868,"meta":2524},{"image":2525,"title":871,"description":872},{"url":417},{},{"id":875,"data":2528,"type":809,"tunes":2531},{"link":877,"meta":2529},{"image":2530,"title":880,"description":881},{"url":417},{},{"id":223,"data":2533,"type":226,"tunes":2534},{"text":885},{},{"id":229,"data":2536,"type":234,"tunes":2537},{"body":889,"title":232,"variant":233},{},{"id":237,"data":2539,"type":234,"tunes":2540},{"body":893,"title":240,"variant":241},{},{"id":244,"data":2542,"type":234,"tunes":2543},{"body":897,"title":247,"variant":248},{},{"id":900,"data":2545,"type":220,"tunes":2546},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":251,"data":2548,"type":42,"tunes":2549},{"text":905,"level":219},{},{"id":256,"data":2551,"type":226,"tunes":2552},{"text":909},{},{"id":261,"data":2554,"type":226,"tunes":2555},{"text":913},{},{"id":266,"data":2557,"type":226,"tunes":2558},{"text":268},{},{"id":271,"data":2560,"type":42,"tunes":2561},{"text":273,"level":219},{},{"id":276,"data":2563,"type":327,"tunes":2577},{"content":2564,"stretched":43,"withHeadings":14},[2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576],[280,281,925],[284,927,928],[288,289,290],[931,932,294],[296,297,934],[300,936,302],[938,305,939],[308,309,310],[312,313,314],[316,317,318],[320,321,944],[324,325,946],{},{"id":330,"data":2579,"type":42,"tunes":2580},{"text":332,"level":219},{},{"id":335,"data":2582,"type":226,"tunes":2583},{"text":337},{},{"id":340,"data":2585,"type":226,"tunes":2586},{"text":956},{},{"id":345,"data":2588,"type":234,"tunes":2589},{"body":347,"title":960,"variant":349},{},{"id":352,"data":2591,"type":42,"tunes":2592},{"text":354,"level":219},{},{"id":357,"data":2594,"type":226,"tunes":2595},{"text":967},{},{"id":362,"data":2597,"type":327,"tunes":2606},{"content":2598,"stretched":43,"withHeadings":14},[2599,2600,2601,2602,2603,2604,2605],[366,367,368],[974,975,976],[374,978,376],[378,980,380],[382,982,384],[386,387,984],[986,391,987],{},{"id":395,"data":2608,"type":42,"tunes":2609},{"text":991,"level":219},{},{"id":400,"data":2611,"type":226,"tunes":2612},{"text":995},{},{"id":405,"data":2614,"type":226,"tunes":2615},{"text":999},{},{"id":410,"data":2617,"type":441,"tunes":2631},{"rows":2618,"title":430,"layout":327,"columns":2627},[2619,2621,2623,2625],{"id":414,"label":1005,"values":2620},[417,417,417],{"id":419,"label":420,"values":2622},[417,417,417],{"id":423,"label":424,"values":2624},[417,417,417],{"id":427,"label":1012,"values":2626},[417,417,417],[2628,2629,2630],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2633,"type":42,"tunes":2634},{"text":1021,"level":219},{},{"id":449,"data":2636,"type":226,"tunes":2637},{"text":1025},{},{"id":454,"data":2639,"type":226,"tunes":2640},{"text":456},{},{"id":459,"data":2642,"type":42,"tunes":2643},{"text":461,"level":219},{},{"id":464,"data":2645,"type":226,"tunes":2646},{"text":1035},{},{"id":469,"data":2648,"type":226,"tunes":2649},{"text":1039},{},{"id":474,"data":2651,"type":234,"tunes":2652},{"body":1043,"title":477,"variant":241},{},{"id":480,"data":2654,"type":42,"tunes":2655},{"text":482,"level":219},{},{"id":485,"data":2657,"type":226,"tunes":2658},{"text":1050},{},{"id":490,"data":2660,"type":226,"tunes":2661},{"text":1054},{},{"id":495,"data":2663,"type":327,"tunes":2671},{"content":2664,"stretched":43,"withHeadings":14},[2665,2666,2667,2668,2669,2670],[499,500],[502,503],[505,506],[1063,509],[511,512],[1066,515],{},{"id":518,"data":2673,"type":42,"tunes":2674},{"text":520,"level":219},{},{"id":523,"data":2676,"type":226,"tunes":2677},{"text":1073},{},{"id":528,"data":2679,"type":226,"tunes":2680},{"text":1077},{},{"id":533,"data":2682,"type":42,"tunes":2683},{"text":535,"level":219},{},{"id":538,"data":2685,"type":226,"tunes":2686},{"text":540},{},{"id":543,"data":2688,"type":226,"tunes":2689},{"text":1087},{},{"id":548,"data":2691,"type":554,"tunes":2692},{"url":550,"title":551,"excerpt":1091,"ctaLabel":553},{},{"id":557,"data":2694,"type":42,"tunes":2695},{"text":1095,"level":219},{},{"id":562,"data":2697,"type":226,"tunes":2698},{"text":1099},{},{"id":567,"data":2700,"type":226,"tunes":2701},{"text":1103},{},{"id":572,"data":2703,"type":42,"tunes":2704},{"text":574,"level":219},{},{"id":577,"data":2706,"type":606,"tunes":2716},{"steps":2707,"title":1126,"orientation":605},[2708,2709,2710,2711,2712,2713,2714,2715],{"label":1112,"description":1113},{"label":1115,"description":1116},{"label":587,"description":588},{"label":590,"description":1119},{"label":593,"description":594},{"label":596,"description":1122},{"label":599,"description":1124},{"label":602,"description":603},{},{"id":609,"data":2718,"type":42,"tunes":2719},{"text":611,"level":219},{},{"id":614,"data":2721,"type":327,"tunes":2733},{"content":2722,"stretched":43,"withHeadings":14},[2723,2724,2725,2726,2727,2728,2729,2730,2731,2732],[618,619],[621,622],[624,625],[627,628],[324,630],[632,633],[635,636],[638,639],[641,642],[644,645],{},{"id":648,"data":2735,"type":42,"tunes":2736},{"text":650,"level":219},{},{"id":653,"data":2738,"type":226,"tunes":2739},{"text":1150},{},{"id":658,"data":2741,"type":669,"tunes":2744},{"meta":2742,"items":2743,"style":668},{},[662,663,1156,1157,666,667],{},{"id":672,"data":2746,"type":42,"tunes":2747},{"text":674,"level":219},{},{"id":677,"data":2749,"type":226,"tunes":2750},{"text":1164},{},{"id":682,"data":2752,"type":226,"tunes":2753},{"text":1168},{},{"id":687,"data":2755,"type":42,"tunes":2756},{"text":1172,"level":219},{},{"id":692,"data":2758,"type":226,"tunes":2759},{"text":1176},{},{"id":697,"data":2761,"type":226,"tunes":2762},{"text":1180},{},{"id":702,"data":2764,"type":42,"tunes":2765},{"text":704,"level":219},{},{"id":707,"data":2767,"type":226,"tunes":2768},{"text":1187},{},{"id":712,"data":2770,"type":226,"tunes":2771},{"text":1191},{},{"id":717,"data":2773,"type":42,"tunes":2774},{"text":719,"level":219},{},{"id":722,"data":2776,"type":226,"tunes":2777},{"text":1198},{},{"id":727,"data":2779,"type":226,"tunes":2780},{"text":1202},{},{"id":732,"data":2782,"type":42,"tunes":2783},{"text":734,"level":219},{},{"id":737,"data":2785,"type":737,"tunes":2792},{"items":2786,"title":760},[2787,2788,2789,2790,2791],{"id":741,"answer":1211,"question":743},{"id":745,"answer":1213,"question":747},{"id":749,"answer":1215,"question":751},{"id":753,"answer":1217,"question":755},{"id":757,"answer":1219,"question":1220},{},{"id":763,"data":2794,"type":42,"tunes":2795},{"text":765,"level":219},{},{"id":768,"data":2797,"type":768,"tunes":2805},{"title":770,"entries":2798},[2799,2800,2801,2802,2803,2804],{"term":773,"anchor":774,"definition":775},{"term":308,"anchor":777,"definition":778},{"term":780,"anchor":781,"definition":1231},{"term":1233,"anchor":785,"definition":786},{"term":1235,"anchor":789,"definition":1236},{"term":574,"anchor":793,"definition":1238},{},{"id":797,"data":2807,"type":42,"tunes":2808},{"text":799,"level":219},{},{"id":802,"data":2810,"type":809,"tunes":2813},{"link":804,"meta":2811},{"image":2812,"title":807,"description":808},{"url":417},{},{"id":812,"data":2815,"type":809,"tunes":2818},{"link":814,"meta":2816},{"image":2817,"title":817,"description":1252},{"url":417},{},{"id":821,"data":2820,"type":809,"tunes":2823},{"link":823,"meta":2821},{"image":2822,"title":826,"description":1258},{"url":417},{},{"id":830,"data":2825,"type":809,"tunes":2828},{"link":832,"meta":2826},{"image":2827,"title":835,"description":1264},{"url":417},{},{"id":839,"data":2830,"type":809,"tunes":2833},{"link":841,"meta":2831},{"image":2832,"title":844,"description":845},{"url":417},{},{"id":848,"data":2835,"type":809,"tunes":2838},{"link":850,"meta":2836},{"image":2837,"title":853,"description":1275},{"url":417},{},{"id":857,"data":2840,"type":809,"tunes":2843},{"link":859,"meta":2841},{"image":2842,"title":862,"description":1281},{"url":417},{},{"id":866,"data":2845,"type":809,"tunes":2848},{"link":868,"meta":2846},{"image":2847,"title":871,"description":1287},{"url":417},{},{"id":875,"data":2850,"type":809,"tunes":2853},{"link":877,"meta":2851},{"image":2852,"title":880,"description":881},{"url":417},{},"Post erfolgreich abgerufen",{"items":2856,"source":2878,"manualIds":2879,"manualMatchedIds":2880},[2857,2864,2871],{"id":2858,"slug":2859,"title":2860,"excerpt":2861,"featuredImage":2862,"publishedAt":2863},"477","computer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system","Агенты для управления компьютером: почему успешная демонстрация всё ещё может быть ненадёжной системой","Агенты для управления компьютером теперь могут выполнять впечатляющие рабочие процессы в браузере и на рабочем столе, но один успешный запуск доказывает способность—а не надежность. В этой статье показано, как проверять повторяемость, устойчивость к условиям среды, управление на длинном горизонте, осведомленность о состоянии, верификацию результатов и безопасную обработку целей.","\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",{"id":2865,"slug":2866,"title":2867,"excerpt":2868,"featuredImage":2869,"publishedAt":2870},"457","should-you-buy-5g-openwrt-router-old-firmware","Стоит ли покупать 5G OpenWrt-роутер со старой прошивкой? ZBT Z8102AX как практический пример","Покупка 5G-роутера с OpenWrt на старой прошивке может иметь смысл, но только при определённых условиях. ZBT Z8102AX наглядно демонстрирует обе стороны: железо полезное, модем работает, а роутер оставался стабильным в ходе тестов, однако OpenWrt 21.02, слабая упаковка и неясные пути обновления требуют взвешенного решения о покупке.","\u002Fuploads\u002F2026\u002F06\u002Fopenwrt-router-review-dual-sim-05-1781620596218-5ldld4.webp","2026-06-16T10:41:00.000Z",{"id":2872,"slug":2873,"title":2874,"excerpt":2875,"featuredImage":2876,"publishedAt":2877},"451","test-dev-enterprise","Полное руководство по Test DEv Enterprise Stajic.de: архитектура и лучшие практики","Изучите архитектурные принципы, преимущества и технические детали управления средой разработки и тестирования корпоративного уровня с помощью Test DEv Enterprise Stajic.de.","\u002Fuploads\u002F2026\u002F05\u002Ftest-dev-enterprise-1779534260081-r4dvxn.webp","2026-05-22T23:01:00.000Z","fallback",[],[]]