[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"portal-settings:stajic:fr":3,"public-menus:all":38,"post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:fr":205,"related:post:migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally:fr:1":2845},{"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","fr","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":2844},{"id":207,"title":208,"slug":209,"content":210,"contentJson":211,"excerpt":1288,"featuredImage":1289,"featuredImageAlt":1290,"featuredImageCaption":10,"featuredImageTitle":10,"featuredImageCopyright":10,"featuredImageAuthor":10,"featuredImageSourceUrl":10,"featuredImageLicense":10,"featuredImageIsAiGenerated":43,"status":1291,"publishedAt":1292,"createdAt":1293,"updatedAt":1294,"seoLocalePaths":1295,"categories":1304,"author":1317,"translations":1322},"474","Migration du SDK OpenAI Agents vers l'API Agents : qu'est-ce qui change réellement sur le plan architectural ?","migrating-from-openai-agents-sdk-to-the-agents-api-what-actually-changes-architecturally","\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Sommaire\">\u003Cstrong class=\"editorjs-toc__title\">Sommaire\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\">La migration va d&#39;une boucle détenue par l&#39;application vers un harnais géré\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">La Carte de migration des frontières d&#39;exécution\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Ce qui peut migrer conceptuellement sans changer de propriété\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Ce qui ne doit pas être migré de manière univoque\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Étape 1 — Séparer l&#39;état du domaine de l&#39;état de session de l&#39;agent\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Étape 2 — Convertir l&#39;état d&#39;esprit du runner en un état d&#39;esprit de session et d&#39;événements\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Étape 3 — Reconcevoir les outils de fonction autour des actions requises\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Étape 4 — Décider où l&#39;exécution doit avoir lieu\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Étape 5 — Remplacer la récupération implicite par une gestion explicite du cycle de vie\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Étape 6 — Reconstruire l&#39;observabilité autour de la nouvelle frontière de trace\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Étape 7 — Préserver les évaluations avant de modifier le runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">Le test de preuve de migration\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Ce qu&#39;il faut mesurer pendant la migration\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Quand ne pas encore migrer\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Quand la migration devient stratégiquement importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Qu&#39;est-ce qui changerait cette réponse ?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Limites\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Conclusion\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">FAQ\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Glossaire\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Sources primaires et lectures complémentaires\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">La migration va d&#39;une boucle gérée par l&#39;application à un harnais géré\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">La Carte de migration des frontières d&#39;exécution\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Ce qui peut migrer conceptuellement sans changer de propriété\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Ce qui ne doit pas être migré un à un\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Étape 1 — Séparer l&#39;état du domaine de l&#39;état de la session de l&#39;agent\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Étape 2 — Convertir l&#39;état d&#39;esprit du runner en état d&#39;esprit session et événements\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Étape 3 — Reconcevoir les outils de fonction autour des actions requises\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Étape 4 — Décider où l&#39;exécution doit avoir lieu\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Étape 5 — Remplacer la récupération implicite par une gestion explicite du cycle de vie\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Étape 6 — Reconstruire l&#39;observabilité autour de la nouvelle frontière de trace\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Étape 7 — Préserver les évaluations avant de changer le runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">Le test de preuve de migration\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Ce qu&#39;il faut mesurer pendant la migration\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Quand ne pas encore migrer\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Quand la migration devient stratégiquement importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">Qu&#39;est-ce qui changerait cette réponse ?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Limites\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Conclusion\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">FAQ\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Glossaire\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Sources primaires et lectures complémentaires\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Cp>Migrer du SDK OpenAI Agents vers l'API Agents n'est pas un simple renommage d'import. La frontière architecturale fondamentale change : le SDK exécute la boucle de l'agent à l'intérieur de votre application, tandis que l'API Agents exécute un harnais Codex géré et une session durable du côté d'OpenAI. La question de la migration n'est donc pas « Quelles classes correspondent à quels points de terminaison ? » mais « Quelles responsabilités d'exécution traversent la frontière, lesquelles restent dans notre application, et lesquelles doivent être repensées ? »\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\">Réponse directe\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Une véritable migration du SDK Agents vers l&#39;API Agents change la propriété de l&#39;exécution.&lt;\u002Fstrong&gt; Votre configuration d&#39;agent réutilisable peut toujours contenir le modèle, les instructions et les outils, mais la boucle, la session durable, l&#39;orchestration, la compaction du contexte et la récupération se déplacent vers l&#39;exécution gérée de l&#39;API Agents. Votre application doit conserver l&#39;état du domaine, l&#39;autorisation, les règles métier, les implémentations de fonctions et la logique d&#39;audit en dehors de la session de l&#39;agent. Traitez la migration comme une refonte de frontière, non comme une conversion mécanique de code.\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\">À jour au 25 septembre 2026\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">OpenAI marque actuellement le SDK Agents comme &lt;strong&gt;fonctionnellement complet&lt;\u002Fstrong&gt; et recommande l&#39;API Agents pour les nouvelles applications d&#39;agents. L&#39;API Agents est en bêta publique. Les applications SDK existantes restent prises en charge, et une migration immédiate n&#39;est pas automatiquement requise.\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\">À propos du modèle de migration\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">La Carte de migration des frontières d&#39;exécution et le Test de preuve de migration dans cet article sont des outils d&#39;architecture pratiques, et non des cadres de migration officiels d&#39;OpenAI. Ils sont dérivés des différences d&#39;exécution actuelles documentées par OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-6\">La migration va d'une boucle détenue par l'application vers un harnais géré\u003C\u002Fh2>\n\u003Cp>Dans le SDK Agents, une exécution est un tour au niveau de l'application. L'exécuteur du SDK appelle le modèle, inspecte la sortie, exécute les outils, suit les transferts et continue jusqu'à atteindre un point d'arrêt. Votre processus héberge cette boucle et en possède donc le cycle de vie.\u003C\u002Fp>\n\u003Cp>Dans l'API Agents, OpenAI exécute le harnais. Une session est une instance durable d'une configuration d'agent qui accepte des tâches, produit des événements, peut se mettre en pause pour des actions requises et peut continuer dans le temps. OpenAI gère les sessions, l'orchestration, la compaction du contexte et la récupération ; votre application envoie le travail, gère les outils de fonction, reçoit les événements et gère éventuellement un environnement d'exécution auto-hébergé.\u003C\u002Fp>\n\u003Cp>Ce transfert de propriété constitue la migration. Tout le reste — la syntaxe de l'API, les schémas d'outils, la gestion des événements, les identifiants de session — en découle.\u003C\u002Fp>\n\u003Ch2 id=\"section-10\">La Carte de migration des frontières d'exécution\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\">Préoccupation\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">SDK Agents\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Cible de migration de l'API Agents\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Boucle de l'agent\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">S'exécute dans votre application via l'exécuteur du SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">S'exécute dans le harnais Codex géré\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Définition d'agent réutilisable\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Objet Agent dans le code de l'application\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Configuration d'agent enregistrée ou en ligne avec modèle, instructions et outils\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuité de conversation \u002F de travail\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Stratégie de session du SDK, historique, continuation des résultats ou stockage applicatif\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Session durable de l'API Agents\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Exécution des outils\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le SDK coordonne les appels d'outils dans votre exécution\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le harnais demande des appels de fonction ; votre application renvoie les résultats\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gestion du contexte\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Votre exécution \u002F stratégie de session du SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Contexte de session géré, compaction et récupération, plus vos propres frontières de données applicatives\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Transferts \u002F spécialistes\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Primitives d'orchestration du SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportement du harnais \u002F sous-agent dans l'API Agents ; ne présumez pas d'une sémantique univoque\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Environnement d'exécution\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Votre exécution applicative ou environnement spécifique à l'outil\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Environnement facultatif hébergé par OpenAI ou auto-hébergé attaché à la session\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Diffusion en continu\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Diffusion en continu du SDK depuis l'exécution\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Flux d'événements de session de l'API Agents\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cycle de vie asynchrone\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Généralement géré par l'application autour de l'exécution du SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">États de session natifs, tours asynchrones et webhooks\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Traçage \u002F observabilité\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Traçage du SDK Agents et journaux applicatifs\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Journaux de session Agents, événements, tours, appels d'outils, sous-agents et traces exportables\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Récupération\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Responsabilité de l'application\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Récupération gérée du harnais \u002F de la session plus récupération détenue par l'application pour les systèmes externes et les environnements auto-hébergés\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-12\">Ce qui peut migrer conceptuellement sans changer de propriété\u003C\u002Fh2>\n\u003Cp>Plusieurs concepts applicatifs survivent proprement à la migration même si leur représentation change. Les modèles, les instructions, les définitions de fonctions au format JSON-schema, l'accès MCP, les descriptions d'outils et les exigences de sortie structurée restent des préoccupations de configuration d'agent.\u003C\u002Fp>\n\u003Cp>Le modèle de configuration de l'API Agents d'OpenAI définit explicitement un agent par le modèle, les instructions, les outils, le raisonnement et le comportement de sortie. Les outils de fonction restent du code applicatif : le harnais demande un appel de fonction, et votre gestionnaire renvoie le résultat. OpenAI note également que les implémentations de fonctions utilisées avec l'API Responses peuvent être réutilisées avec le flux de session de l'API Agents.\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\">Bon candidat à la migration\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Une fonction métier pure telle que &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt; ne devrait pas avoir besoin de savoir si l&#39;appelant est le SDK Agents ou l&#39;API Agents. Gardez sa logique métier derrière une interface applicative stable et ne migrez que l&#39;adaptateur côté agent.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-16\">Ce qui ne doit pas être migré de manière univoque\u003C\u002Fh2>\n\u003Cp>Le schéma de migration dangereux consiste à recréer chaque abstraction d'exécution du SDK à l'intérieur de l'API Agents. Cela peut vous amener à payer pour un harnais géré tout en exploitant encore un harnais fantôme dans votre application.\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\">Hypothèse de l'ère du SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Pourquoi une copie directe est risquée\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Question de migration\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La boucle applicative détient chaque continuation\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'API Agents détient déjà la boucle du harnais\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelle logique de continuation relève de la logique produit, et laquelle doit être déplacée vers la session gérée ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'objet de session local est le mécanisme de continuité principal\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les sessions de l'API Agents sont des ressources durables avec leur propre cycle de vie\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quel état appartient à la session par rapport à la base de données produit ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Chaque interruption est gérée de manière synchrone\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les tours de l'API Agents sont asynchrones et peuvent faire apparaître des états action_required\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelles actions nécessitent des webhooks, des workers, de l'idempotence et des gestionnaires reprenables ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Toute l'exécution des outils se produit là où le processus du SDK s'exécute\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les gestionnaires de fonctions et les environnements d'exécution peuvent être séparés\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Où chaque outil doit-il réellement s'exécuter ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La trace du SDK est la chronologie opérationnelle\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'API Agents expose les événements de session, les tours et les traces gérées\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelles données d'audit au niveau applicatif nécessitent encore leur propre enregistrement ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'objet de transfert correspond directement à un modèle de sous-agent hébergé\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les sémantiques d'exécution peuvent différer\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelle propriété visible par l'utilisateur et quel comportement de spécialiste doivent être préservés, et pas seulement l'ancienne structure de classes ?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-19\">Étape 1 — Séparer l'état du domaine de l'état de session de l'agent\u003C\u002Fh2>\n\u003Cp>Avant de toucher aux appels API, classez l'état que votre application SDK transporte actuellement. Certains états existent uniquement pour maintenir la conversation de l'agent en mouvement. D'autres états constituent la vérité métier : permissions utilisateur, statut de projet, données de commande, approbation de workflow, dossiers clients, versions de documents, état de politique ou configuration d'application.\u003C\u002Fp>\n\u003Cp>La seconde catégorie ne doit pas devenir dépendante d'une session de l'API Agents. Une session durable est une continuité utile pour l'agent ; elle ne remplace pas la source de vérité de votre produit. Si la session disparaît, expire, est reconstruite ou change d'implémentation, votre application doit toujours savoir ce qui est vrai.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Test de placement de l&#39;état\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\">Type d&#39;état\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\">Propriétaire préféré\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\">Raison\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\">Continuité de conversation\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\">Vérité métier\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\">Artefact durable\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\">État de travail temporaire\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\">Étape 2 — Convertir l'état d'esprit du runner en un état d'esprit de session et d'événements\u003C\u002Fh2>\n\u003Cp>Les applications SDK pensent souvent en termes d'appel de run et de réception d'un résultat. L'API Agents pense en termes de session durable dont les tours peuvent s'exécuter de manière asynchrone. Un message à une session inactive démarre le travail ; un message pendant un tour actif peut l'orienter. La progression arrive via le streaming ou les webhooks.\u003C\u002Fp>\n\u003Cp>Cela affecte l'architecture de l'application. Le travail de production de longue durée ne doit pas dépendre du maintien en vie d'une seule requête HTTP. Votre produit a besoin d'identifiants de session stables, d'une persistance du cycle de vie, d'une vérification des webhooks, de gestionnaires idempotents et d'un moyen de réconcilier l'état actuel de la session après le redémarrage des processus.\u003C\u002Fp>\n\u003Ch2 id=\"section-26\">Étape 3 — Reconcevoir les outils de fonction autour des actions requises\u003C\u002Fh2>\n\u003Cp>Les outils de fonction restent une frontière importante de l'application. Vous définissez la fonction et son schéma JSON dans la configuration de l'agent. Lorsque le harness a besoin de la fonction, la session peut entrer dans un état d'action requise. Votre application récupère l'action requise, exécute la logique métier et renvoie le résultat.\u003C\u002Fp>\n\u003Cp>Cela signifie que l'implémentation de la fonction doit pouvoir être reprise en toute sécurité. Un webhook peut être livré pendant qu'un autre worker traite. Une défaillance réseau peut survenir après l'effet de bord externe mais avant le renvoi du résultat. La migration est donc un bon moment pour ajouter des identifiants d'appel, des clés d'idempotence, une autorisation explicite, des politiques de timeout et des enregistrements d'audit aux outils conséquents.\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\">Piège de migration des outils\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Ne traitez pas un appel de fonction provenant du harness géré comme une autorisation d&#39;exécuter l&#39;action. Le harness décide &lt;em&gt;ce qu&#39;il veut appeler&lt;\u002Fem&gt; ; votre application décide toujours si l&#39;utilisateur actuel, la session et l&#39;état métier permettent cette action.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-30\">Étape 4 — Décider où l'exécution doit avoir lieu\u003C\u002Fh2>\n\u003Cp>L'API Agents sépare le harness géré de l'environnement d'exécution. Un agent peut fonctionner sans environnement dédié, dans un sandbox hébergé par OpenAI, ou via un environnement auto-hébergé connecté à la session.\u003C\u002Fp>\n\u003Cp>Cela crée une décision de migration que les applications SDK n'ont peut-être jamais prise explicitement : quel code doit s'exécuter comme fonction d'application, quel code appartient à un sandbox, et quelles charges de travail nécessitent une infrastructure que vous contrôlez ?\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\">Besoin\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Frontière probable\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Appeler un service interne existant via une logique métier contrôlée\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Outil de fonction géré par votre application\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Exécuter du code isolé ou travailler avec des fichiers temporaires sans infrastructure privée\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Environnement hébergé par OpenAI\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Accéder à des ressources réseau privées, des logiciels système personnalisés ou un calcul local contrôlé\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Environnement auto-hébergé\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Persister les artefacts produit acceptés\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Stockage appartenant à l'application, pas seulement le système de fichiers du sandbox\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Exécuter un effet de bord métier à fort impact\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Fonction d'application avec contrôles d'autorisation et d'audit\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-34\">Étape 5 — Remplacer la récupération implicite par une gestion explicite du cycle de vie\u003C\u002Fh2>\n\u003Cp>Le harness géré fournit une récupération au niveau de la session, mais votre application reste propriétaire de chaque dépendance externe qui l'entoure. Les environnements auto-hébergés nécessitent un provisionnement, une reconnexion et un arrêt. Les gestionnaires de fonction peuvent échouer. Les webhooks peuvent être réessayés. L'état côté produit peut changer pendant qu'un agent est inactif.\u003C\u002Fp>\n\u003Cp>La migration nécessite donc deux modèles de récupération : la récupération du runtime de l'agent et la récupération des opérations métier. La première est de plus en plus gérée par l'API Agents. La seconde reste votre responsabilité.\u003C\u002Fp>\n\u003Ch2 id=\"section-37\">Étape 6 — Reconstruire l'observabilité autour de la nouvelle frontière de trace\u003C\u002Fh2>\n\u003Cp>Les sessions de l'API Agents exposent les événements, l'historique enregistré, les tours, les appels d'outils, les sous-agents et l'utilisation des jetons. OpenAI fournit également des journaux de session dans la plateforme et l'export de trace.\u003C\u002Fp>\n\u003Cp>Ne rejetez pas l'observabilité de votre application parce que les traces de la plateforme se sont améliorées. Les journaux produit doivent toujours relier la session de l'agent à l'identité de l'utilisateur, la décision d'autorisation, l'objet métier, l'effet de bord de l'outil, l'enregistrement d'approbation et le résultat final accepté. La trace de production utile est la jonction entre les preuves du runtime de l'agent et les preuves du runtime métier.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Ffr\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\">Fiabilité des agents IA : pourquoi la réponse finale ne suffit pas\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">La fiabilité d'un agent dépend du chemin d'exécution, des outils et des décisions intermédiaires — pas seulement du résultat final.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Lire l'article sur la fiabilité →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-41\">Étape 7 — Préserver les évaluations avant de modifier le runtime\u003C\u002Fh2>\n\u003Cp>Une migration peut sembler réussie parce que le nouveau système produit toujours des réponses plausibles tout en modifiant silencieusement le choix des outils, la continuité de session, le comportement de transfert, la latence ou la reprise après échec. Établissez la référence comportementale avant de changer de runtime.\u003C\u002Fp>\n\u003Cp>La référence doit inclure des tâches représentatives, les appels d'outils attendus, les actions interdites, les points d'approbation, la continuité d'état, les scénarios de reprise et les critères d'acceptation du résultat final. Exécutez les anciennes et nouvelles architectures sur les mêmes cas dans la mesure du possible.\u003C\u002Fp>\n\u003Ch2 id=\"section-44\">Le test de preuve de migration\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Prouver le nouveau runtime avant de basculer\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. Figer la référence comportementale\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Capturez des traces SDK représentatives, les sorties attendues, les chemins d'outils, les points d'approbation et les cas d'échec.\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. Inventorier la propriété de l'état\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Marquez chaque champ d'état comme état de session d'agent, état métier faisant autorité, artefact durable ou état de travail éphémère.\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. Réutiliser les implémentations d'outils stables\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Gardez les fonctions métier derrière des interfaces applicatives ; ne remplacez que l'intégration côté agent lorsque c'est possible.\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. Construire une tranche verticale de l'API Agents\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Migrez un flux de travail de type production incluant la création de session, les outils, les événements, l'environnement et la persistance.\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. Injecter des interruptions\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Testez le redémarrage du processus, la nouvelle tentative de webhook, le délai d'expiration de fonction, la reconnexion d'environnement auto-hébergé et l'état métier obsolète.\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. Comparer les traces, pas seulement les réponses\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Vérifiez le choix des outils, l'autorisation, le chemin de preuve, les transitions d'état et les effets de bord par rapport à la référence.\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. Exécuter du trafic fantôme\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Lorsque c'est faisable, rejouez ou dupliquez des tâches représentatives avant de rendre le nouveau runtime faisant autorité.\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. Basculer derrière une frontière réversible\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Conservez les adaptateurs d'intégration et la capacité de restauration jusqu'à ce que le comportement en production soit stable.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-46\">Ce qu'il faut mesurer pendant la migration\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\">Dimension\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Vérification de migration\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Succès de la tâche\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le nouveau runtime répond-il aux mêmes critères d'acceptation, voire à de meilleurs ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Exactitude des outils\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Appelle-t-il le bon outil avec des arguments valides et une autorisation ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuité d'état\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le travail peut-il reprendre à travers les tours, les redémarrages et les attentes asynchrones ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Reprise\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Que se passe-t-il après une perte de webhook, un échec de gestionnaire, une déconnexion d'environnement ou un délai d'expiration ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Traçabilité\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Chaque action conséquente peut-elle être reliée à la session, l'utilisateur, l'appel d'outil et l'objet métier ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportement du contexte\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les sessions de longue durée préservent-elles les contraintes sans transporter de vérité applicative obsolète ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Latence\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comment le démarrage de session, le provisionnement d'environnement et le travail multi-tours affectent-ils le temps visible par l'utilisateur ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Coût\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quels changements surviennent dans l'utilisation du modèle, l'utilisation du bac à sable, le contexte répété et les opérations d'infrastructure ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Charge opérationnelle\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelles responsabilités auparavant détenues par l'application ont réellement disparu, et lesquelles ont simplement été déplacées ?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-48\">Quand ne pas encore migrer\u003C\u002Fh2>\n\u003Cp>Une application existante utilisant le SDK Agents ne devient pas une mauvaise architecture simplement parce que l'orientation de la plateforme a changé. OpenAI poursuit la maintenance, les correctifs de sécurité, les corrections de bugs critiques et le travail de compatibilité. Si l'application est stable, bien évaluée et n'a aucune exigence de feuille de route bloquée, une migration immédiate du runtime peut ne pas être justifiée.\u003C\u002Fp>\n\u003Cul>\u003Cli>Une capacité requise du SDK n'est pas encore disponible dans l'API Agents.\u003C\u002Fli>\u003Cli>La migration perturberait une période de production critique sans apporter de valeur à court terme.\u003C\u002Fli>\u003Cli>L'application dépend de sémantiques d'orchestration personnalisées qui n'ont pas été validées sur le harnais géré.\u003C\u002Fli>\u003Cli>La portabilité entre fournisseurs est une exigence stricte et l'abstraction actuelle du SDK a une valeur matérielle.\u003C\u002Fli>\u003Cli>Votre équipe n'a pas encore séparé l'état métier de l'état du runtime de l'agent, ce qui rend le basculement risqué.\u003C\u002Fli>\u003Cli>Le comportement de la nouvelle API Agents n'a pas été testé sur des charges de travail de production représentatives.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-51\">Quand la migration devient stratégiquement importante\u003C\u002Fh2>\n\u003Cp>La migration devient plus convaincante lorsque les exigences produit s'alignent sur le harnais géré : travail durable de longue durée, compactage et reprise du contexte gérés par la plateforme, capacités plus récentes du runtime d'agent, exécution en bac à sable, gestion de cycle de vie hébergée plus riche, ou volonté de réduire la quantité de code d'orchestration que votre application exploite.\u003C\u002Fp>\n\u003Cp>Le signal le plus fort n'est pas « l'ancien SDK est complet en fonctionnalités ». C'est « notre feuille de route dépend désormais de capacités dont le foyer naturel est le runtime géré de l'API Agents ».\u003C\u002Fp>\n\u003Ch2 id=\"section-54\">Qu'est-ce qui changerait cette réponse ?\u003C\u002Fh2>\n\u003Cp>La stratégie de migration changerait si OpenAI publie des outils de migration automatisés, introduit des couches de compatibilité explicites, modifie la sémantique des sessions de l'API Agents, élargit ou restreint la prise en charge des environnements auto-hébergés, ou modifie la politique de support du SDK Agents.\u003C\u002Fp>\n\u003Cp>Elle changerait également si les exigences de votre produit changent. Un assistant simple requête-réponse peut ne pas avoir besoin du tout d'un harnais géré durable. Un agent de codage, de recherche ou d'opérations de longue durée peut bénéficier beaucoup plus du modèle de propriété de l'API Agents.\u003C\u002Fp>\n\u003Ch2 id=\"section-57\">Limites\u003C\u002Fh2>\n\u003Cp>Il n'existe pas de correspondance universelle univoque entre le SDK et l'API, car les applications utilisent le SDK Agents différemment. Certaines s'appuient fortement sur les sessions et les transferts ; d'autres l'utilisent comme un simple exécuteur autour d'outils fonctionnels. La migration correcte dépend des responsabilités que votre application assume réellement aujourd'hui.\u003C\u002Fp>\n\u003Cp>L'API Agents est également en version bêta publique, les détails d'implémentation peuvent donc évoluer. Considérez les principes de propriété présentés dans cet article comme plus durables que toute forme de point de terminaison individuelle.\u003C\u002Fp>\n\u003Ch2 id=\"section-60\">Conclusion\u003C\u002Fh2>\n\u003Cp>Migrer du SDK Agents vers l'API Agents se comprend mieux comme un déplacement de la frontière d'exécution de l'agent. Le harnais géré prend en charge une plus grande partie de la boucle, de la continuité de session, de la compaction et de la récupération. Votre application doit devenir plus explicite quant aux responsabilités qui vous incombent encore : vérité métier, autorisation, effets de bord des fonctions, artefacts, auditabilité et cycle de vie du produit.\u003C\u002Fp>\n\u003Cp>Si une migration laisse en place toute l'ancienne machinerie d'orchestration et se contente de remplacer les appels au SDK par des appels à l'API Agents, elle a probablement manqué l'opportunité architecturale. L'objectif n'est pas de reproduire l'ancien environnement d'exécution au-dessus du nouveau. L'objectif est de décider quelles responsabilités d'exécution ne doivent plus incomber à votre application.\u003C\u002Fp>\n\u003Ch2 id=\"section-63\">FAQ\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\">Migration du SDK Agents vers l&#39;API Agents\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\">Migrer du SDK Agents vers l&#39;API Agents se résume-t-il à une réécriture d&#39;API ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Non. Le changement principal concerne la propriété de l&#39;exécution : le SDK Agents exécute la boucle de l&#39;agent dans votre application, tandis que l&#39;API Agents exécute un harnais Codex géré et une session durable. L&#39;état, le cycle de vie, la gestion des événements et la récupération doivent être examinés comme des préoccupations architecturales.\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\">Mes outils fonctionnels doivent-ils être réécrits ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">L&#39;implémentation métier peut souvent être réutilisée si elle se trouve déjà derrière une interface applicative stable. L&#39;intégration côté agent change car les appels de fonction de l&#39;API Agents sont gérés via des actions requises et des résultats de session.\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\">Dois-je déplacer l&#39;état métier dans la session de l&#39;API Agents ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">En général, non. Conservez l&#39;état métier et produit faisant autorité dans vos propres bases de données ou services. Utilisez la session de l&#39;agent pour la continuité de l&#39;agent et le contexte de travail, et non comme source unique de vérité pour votre produit.\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\">Ai-je besoin de webhooks pour l&#39;API Agents ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Pas toujours, car la diffusion en continu est également disponible. Les webhooks sont particulièrement utiles pour les sessions de longue durée ou asynchrones où votre application doit réagir aux changements de cycle de vie sans maintenir un flux ouvert.\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\">Toutes les applications existantes utilisant le SDK Agents doivent-elles migrer maintenant ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Non. Le SDK reste pris en charge en mode maintenance. Migrez lorsque le nouvel environnement d&#39;exécution apporte une valeur significative pour la feuille de route et après que le comportement requis a été validé par rapport à des évaluations représentatives de la production.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-65\">Glossaire\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\">Termes clés de la migration\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\">Frontière d'exécution\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">La répartition des responsabilités entre l'environnement d'exécution de l'agent géré par la plateforme et l'environnement d'exécution propre à l'application.\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\">Harnais\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">L'environnement d'exécution de l'agent qui coordonne les appels au modèle, les outils, le contexte, l'orchestration et la poursuite de l'exécution.\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\">Session\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Une instance durable de l'API Agents qui conserve la configuration d'un agent, la conversation et le travail sauvegardé au fil des tours.\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\">Action requise\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un état de session dans lequel l'API Agents a besoin d'une entrée externe, telle qu'un résultat de fonction ou une connexion à un environnement, avant que le travail puisse continuer.\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\">Environnement auto-hébergé\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un environnement d'exécution exploité par votre infrastructure et connecté au harnais géré de l'API Agents.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"migration-proof-test\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Test de preuve de migration\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Une méthode de validation par étapes qui compare le nouvel environnement d'exécution aux références comportementales, aux injections de défaillance, aux traces et aux critères de basculement réversibles.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-67\">Sources primaires et lectures complémentaires\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 — SDK Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Politique de support actuelle : le SDK Agents est complet en termes de fonctionnalités, reste maintenu, et les nouvelles applications doivent commencer avec l&#39;API Agents.\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 — Exécuter des agents avec le SDK Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documentation de la boucle d&#39;agent et du modèle de continuation propres à l&#39;application du 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 — Aperçu de l&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Définit les concepts fondamentaux de l&#39;API Agents : agent, environnement, session, événements et éléments.\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 — Architecture de l&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Explique le harnais hébergé, le serveur applicatif, les frontières des environnements d&#39;exécution hébergés par OpenAI et auto-hébergés.\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 — Configuration des agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Définit la configuration réutilisable des agents et la personnalisation au niveau de la session.\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 — Exécuter et poursuivre des sessions\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documente les sessions durables, les tours asynchrones, le streaming et le pilotage.\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 — Fonctions de l&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Définition de l&#39;outil de fonction et frontière du gestionnaire d&#39;application pour les résultats de fonction requis.\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 — Webhooks de session\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Événements de cycle de vie pour les sessions asynchrones, les actions requises et les connexions à un environnement auto-hébergé.\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 — Observabilité et utilisation de l&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Journaux de session, événements, tours, appels d&#39;outils, sous-agents, traces et inspection de l&#39;utilisation des jetons.\u003C\u002Fp>\u003C\u002Fa>\n\u003Cp>Migrer du SDK OpenAI Agents vers l'API Agents n'est pas un simple renommage d'import. La frontière architecturale fondamentale change : le SDK exécute la boucle de l'agent au sein de votre application, tandis que l'API Agents exécute un harnais Codex géré et une session durable du côté d'OpenAI. La question de la migration n'est donc pas « Quelles classes correspondent à quels points de terminaison ? » mais « Quelles responsabilités d'exécution traversent la frontière, lesquelles restent dans notre application, et lesquelles doivent être repensées ? »\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\">Réponse directe\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">&lt;strong&gt;Une véritable migration du SDK Agents vers l&#39;API Agents modifie la propriété de l&#39;exécution.&lt;\u002Fstrong&gt; Votre configuration d&#39;agent réutilisable peut toujours contenir le modèle, les instructions et les outils, mais la boucle, la session durable, l&#39;orchestration, la compaction du contexte et la récupération se déplacent vers l&#39;exécution gérée de l&#39;API Agents. Votre application doit conserver l&#39;état du domaine, l&#39;autorisation, les règles métier, les implémentations de fonctions et la logique d&#39;audit en dehors de la session de l&#39;agent. Traitez la migration comme une refonte de frontière, et non comme une conversion mécanique de code.\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\">À jour au 25 septembre 2026\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">OpenAI marque actuellement le SDK Agents comme &lt;strong&gt;fonctionnalités complètes&lt;\u002Fstrong&gt; et recommande l&#39;API Agents pour les nouvelles applications d&#39;agents. L&#39;API Agents est en bêta publique. Les applications SDK existantes restent prises en charge, et une migration immédiate n&#39;est pas automatiquement requise.\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\">À propos du modèle de migration\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">La Carte de migration des frontières d&#39;exécution et le Test de preuve de migration dans cet article sont des outils d&#39;architecture pratiques, et non des cadres de migration officiels d&#39;OpenAI. Ils sont dérivés des différences d&#39;exécution actuelles documentées par OpenAI.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Cnav class=\"editorjs-toc\" data-editorjs-toc=\"true\" aria-label=\"Sommaire\">\u003Cstrong class=\"editorjs-toc__title\">Sommaire\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\">La migration va d&#39;une boucle détenue par l&#39;application vers un harnais géré\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-10\" class=\"editorjs-toc__link\">La Carte de migration des frontières d&#39;exécution\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-12\" class=\"editorjs-toc__link\">Ce qui peut migrer conceptuellement sans changer de propriété\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-16\" class=\"editorjs-toc__link\">Ce qui ne doit pas être migré de manière univoque\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-19\" class=\"editorjs-toc__link\">Étape 1 — Séparer l&#39;état du domaine de l&#39;état de session de l&#39;agent\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-23\" class=\"editorjs-toc__link\">Étape 2 — Convertir l&#39;état d&#39;esprit du runner en un état d&#39;esprit de session et d&#39;événements\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-26\" class=\"editorjs-toc__link\">Étape 3 — Reconcevoir les outils de fonction autour des actions requises\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-30\" class=\"editorjs-toc__link\">Étape 4 — Décider où l&#39;exécution doit avoir lieu\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-34\" class=\"editorjs-toc__link\">Étape 5 — Remplacer la récupération implicite par une gestion explicite du cycle de vie\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-37\" class=\"editorjs-toc__link\">Étape 6 — Reconstruire l&#39;observabilité autour de la nouvelle frontière de trace\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-41\" class=\"editorjs-toc__link\">Étape 7 — Préserver les évaluations avant de modifier le runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-44\" class=\"editorjs-toc__link\">Le test de preuve de migration\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-46\" class=\"editorjs-toc__link\">Ce qu&#39;il faut mesurer pendant la migration\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-48\" class=\"editorjs-toc__link\">Quand ne pas encore migrer\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-51\" class=\"editorjs-toc__link\">Quand la migration devient stratégiquement importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-54\" class=\"editorjs-toc__link\">Qu&#39;est-ce qui changerait cette réponse ?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-57\" class=\"editorjs-toc__link\">Limites\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-60\" class=\"editorjs-toc__link\">Conclusion\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-63\" class=\"editorjs-toc__link\">FAQ\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-65\" class=\"editorjs-toc__link\">Glossaire\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-67\" class=\"editorjs-toc__link\">Sources primaires et lectures complémentaires\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-82\" class=\"editorjs-toc__link\">La migration va d&#39;une boucle gérée par l&#39;application à un harnais géré\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-86\" class=\"editorjs-toc__link\">La Carte de migration des frontières d&#39;exécution\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-88\" class=\"editorjs-toc__link\">Ce qui peut migrer conceptuellement sans changer de propriété\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-92\" class=\"editorjs-toc__link\">Ce qui ne doit pas être migré un à un\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-95\" class=\"editorjs-toc__link\">Étape 1 — Séparer l&#39;état du domaine de l&#39;état de la session de l&#39;agent\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-99\" class=\"editorjs-toc__link\">Étape 2 — Convertir l&#39;état d&#39;esprit du runner en état d&#39;esprit session et événements\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-102\" class=\"editorjs-toc__link\">Étape 3 — Reconcevoir les outils de fonction autour des actions requises\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-106\" class=\"editorjs-toc__link\">Étape 4 — Décider où l&#39;exécution doit avoir lieu\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-110\" class=\"editorjs-toc__link\">Étape 5 — Remplacer la récupération implicite par une gestion explicite du cycle de vie\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-113\" class=\"editorjs-toc__link\">Étape 6 — Reconstruire l&#39;observabilité autour de la nouvelle frontière de trace\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-117\" class=\"editorjs-toc__link\">Étape 7 — Préserver les évaluations avant de changer le runtime\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-120\" class=\"editorjs-toc__link\">Le test de preuve de migration\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-122\" class=\"editorjs-toc__link\">Ce qu&#39;il faut mesurer pendant la migration\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-124\" class=\"editorjs-toc__link\">Quand ne pas encore migrer\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-127\" class=\"editorjs-toc__link\">Quand la migration devient stratégiquement importante\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-130\" class=\"editorjs-toc__link\">Qu&#39;est-ce qui changerait cette réponse ?\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-133\" class=\"editorjs-toc__link\">Limites\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-136\" class=\"editorjs-toc__link\">Conclusion\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-139\" class=\"editorjs-toc__link\">FAQ\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-141\" class=\"editorjs-toc__link\">Glossaire\u003C\u002Fa>\u003C\u002Fli>\u003Cli class=\"editorjs-toc__item\">\u003Ca href=\"#section-143\" class=\"editorjs-toc__link\">Sources primaires et lectures complémentaires\u003C\u002Fa>\u003C\u002Fli>\u003C\u002Fol>\u003C\u002Fnav>\n\u003Ch2 id=\"section-82\">La migration va d'une boucle gérée par l'application à un harnais géré\u003C\u002Fh2>\n\u003Cp>Dans le SDK Agents, une exécution est un tour au niveau de l'application. Le runner du SDK appelle le modèle, inspecte la sortie, exécute les outils, suit les transferts et continue jusqu'à atteindre un point d'arrêt. Votre processus héberge cette boucle et en possède donc le cycle de vie.\u003C\u002Fp>\n\u003Cp>Dans l'API Agents, OpenAI exécute le harnais. Une session est une instance durable d'une configuration d'agent qui accepte des tâches, produit des événements, peut se mettre en pause pour des actions requises et peut se poursuivre dans le temps. OpenAI gère les sessions, l'orchestration, la compaction du contexte et la récupération ; votre application envoie le travail, gère les outils de fonction, reçoit les événements et gère éventuellement un environnement d'exécution auto-hébergé.\u003C\u002Fp>\n\u003Cp>Ce transfert de propriété constitue la migration. Tout le reste — syntaxe de l'API, schémas d'outils, gestion des événements, identifiants de session — en découle.\u003C\u002Fp>\n\u003Ch2 id=\"section-86\">La Carte de migration des frontières d'exécution\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\">Préoccupation\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">SDK Agents\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Cible de migration de l'API Agents\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Boucle de l'agent\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">S'exécute dans votre application via le runner du SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">S'exécute dans le harnais Codex géré\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Définition d'agent réutilisable\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Objet Agent dans le code de l'application\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Configuration d'agent enregistrée ou en ligne avec modèle, instructions et outils\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuité de conversation \u002F de travail\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Stratégie de session du SDK, historique, continuation des résultats ou stockage applicatif\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Session durable de l'API Agents\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Exécution des outils\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le SDK coordonne les appels d'outils dans votre exécution\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le harnais demande des appels de fonction ; votre application renvoie les résultats\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Gestion du contexte\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Votre exécution \u002F stratégie de session du SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Contexte de session géré, compaction et récupération, plus vos propres frontières de données applicatives\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Transferts \u002F spécialistes\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Primitives d'orchestration du SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportement du harnais \u002F des sous-agents dans l'API Agents ; ne présumez pas d'une sémantique univoque\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Environnement d'exécution\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Votre exécution applicative ou environnement spécifique à l'outil\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Environnement facultatif hébergé par OpenAI ou auto-hébergé attaché à la session\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Streaming\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Streaming du SDK depuis l'exécution\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Flux d'événements de session de l'API Agents\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Cycle de vie asynchrone\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Généralement géré par l'application autour de l'exécution du SDK\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">États de session natifs, tours asynchrones et webhooks\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Traçage \u002F observabilité\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Traçage du SDK Agents et journaux applicatifs\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Journaux de session Agents, événements, tours, appels d'outils, sous-agents et traces exportables\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Récupération\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Responsabilité de l'application\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Récupération gérée du harnais \u002F de la session plus récupération propre à l'application pour les systèmes externes et les environnements auto-hébergés\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-88\">Ce qui peut migrer conceptuellement sans changer de propriété\u003C\u002Fh2>\n\u003Cp>Plusieurs concepts applicatifs survivent proprement à la migration même si leur représentation change. Les modèles, les instructions, les définitions de fonctions au format JSON-schema, l'accès MCP, les descriptions d'outils et les exigences de sortie structurée restent des préoccupations de configuration d'agent.\u003C\u002Fp>\n\u003Cp>Le modèle de configuration de l'API Agents d'OpenAI définit explicitement un agent par le modèle, les instructions, les outils, le raisonnement et le comportement de sortie. Les outils de fonction restent du code applicatif : le harnais demande un appel de fonction, et votre gestionnaire renvoie le résultat. OpenAI note également que les implémentations de fonctions utilisées avec l'API Responses peuvent être réutilisées avec le flux de session de l'API Agents.\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\">Bon candidat à la migration\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Une fonction métier pure telle que &lt;code&gt;get_customer(customer_id)&lt;\u002Fcode&gt; ne devrait pas avoir besoin de savoir si l&#39;appelant est le SDK Agents ou l&#39;API Agents. Gardez sa logique métier derrière une interface applicative stable et ne migrez que l&#39;adaptateur côté agent.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-92\">Ce qui ne doit pas être migré un à un\u003C\u002Fh2>\n\u003Cp>Le schéma de migration dangereux consiste à recréer chaque abstraction d'exécution du SDK au sein de l'API Agents. Cela peut vous amener à payer pour un harnais managé tout en exploitant un harnais fantôme dans votre application.\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\">Hypothèse de l'ère du SDK\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Pourquoi une copie directe est risquée\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Question de migration\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La boucle applicative gère chaque continuation\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'API Agents gère déjà la boucle du harnais\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelle logique de continuation relève du produit, et laquelle doit être déplacée vers la session managée ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'objet de session local est le mécanisme principal de continuité\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les sessions de l'API Agents sont des ressources durables avec leur propre cycle de vie\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quel état appartient à la session plutôt qu'à la base de données du produit ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Chaque interruption est traitée de manière synchrone\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les tours de l'API Agents sont asynchrones et peuvent exposer des états action_required\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelles actions nécessitent des webhooks, des workers, de l'idempotence et des gestionnaires reprenables ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Toute l'exécution des outils se fait là où le processus du SDK s'exécute\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les gestionnaires de fonctions et les environnements d'exécution peuvent être séparés\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Où chaque outil doit-il réellement s'exécuter ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">La trace du SDK est la chronologie opérationnelle\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'API Agents expose les événements de session, les tours et les traces managées\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelles données d'audit au niveau applicatif nécessitent encore leur propre enregistrement ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">L'objet de transfert correspond directement à un modèle de sous-agent hébergé\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les sémantiques d'exécution peuvent différer\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelle propriété visible par l'utilisateur et quel comportement de spécialiste doivent être préservés, et pas seulement l'ancienne structure de classes ?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-95\">Étape 1 — Séparer l'état du domaine de l'état de la session de l'agent\u003C\u002Fh2>\n\u003Cp>Avant de toucher aux appels d'API, classez l'état que votre application SDK transporte actuellement. Certains états n'existent que pour maintenir la conversation de l'agent en mouvement. D'autres états constituent la vérité métier : permissions utilisateur, statut du projet, données de commande, approbation de workflow, dossiers clients, versions de documents, état des politiques ou configuration applicative.\u003C\u002Fp>\n\u003Cp>La seconde catégorie ne doit pas devenir dépendante d'une session de l'API Agents. Une session durable est une continuité utile pour l'agent ; elle ne remplace pas la source de vérité de votre produit. Si la session disparaît, expire, est reconstruite ou change d'implémentation, votre application doit toujours savoir ce qui est vrai.\u003C\u002Fp>\n\u003Csection class=\"editorjs-comparison my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Test de placement de l&#39;état\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\">Type d&#39;état\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\">Propriétaire préféré\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\">Raison\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\">Continuité de la conversation\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\">Vérité métier\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\">Artefact durable\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\">État de travail temporaire\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\">Étape 2 — Convertir l'état d'esprit du runner en état d'esprit session et événements\u003C\u002Fh2>\n\u003Cp>Les applications SDK pensent souvent en termes d'appel à run et de réception d'un résultat. L'API Agents pense en termes de session durable dont les tours peuvent s'exécuter de manière asynchrone. Un message à une session inactive démarre un travail ; un message pendant un tour actif peut l'orienter. La progression arrive via le streaming ou les webhooks.\u003C\u002Fp>\n\u003Cp>Cela affecte l'architecture applicative. Un travail de production de longue durée ne doit pas dépendre du maintien en vie d'une seule requête HTTP. Votre produit a besoin d'identifiants de session stables, de persistance du cycle de vie, de vérification des webhooks, de gestionnaires idempotents et d'un moyen de réconcilier l'état actuel de la session après un redémarrage de processus.\u003C\u002Fp>\n\u003Ch2 id=\"section-102\">Étape 3 — Reconcevoir les outils de fonction autour des actions requises\u003C\u002Fh2>\n\u003Cp>Les outils de fonction restent une frontière applicative importante. Vous définissez la fonction et son schéma JSON dans la configuration de l'agent. Lorsque le harnais a besoin de la fonction, la session peut entrer dans un état d'action requise. Votre application récupère l'action requise, exécute la logique métier et renvoie le résultat.\u003C\u002Fp>\n\u003Cp>Cela signifie que l'implémentation de la fonction doit pouvoir être reprise en toute sécurité. Un webhook peut être livré pendant qu'un autre worker traite. Une défaillance réseau peut survenir après l'effet de bord externe mais avant le renvoi du résultat. La migration est donc un bon moment pour ajouter des identifiants d'appel, des clés d'idempotence, une autorisation explicite, des politiques de délai d'attente et des enregistrements d'audit aux outils à conséquences.\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\">Piège de la migration des outils\u003C\u002Fstrong>\u003Cdiv class=\"text-gray-700 dark:text-gray-200\">Ne traitez pas un appel de fonction provenant du harnais managé comme une autorisation d&#39;exécuter l&#39;action. Le harnais décide &lt;em&gt;ce qu&#39;il veut appeler&lt;\u002Fem&gt; ; votre application décide toujours si l&#39;utilisateur actuel, la session et l&#39;état métier permettent cette action.\u003C\u002Fdiv>\u003C\u002Faside>\n\u003Ch2 id=\"section-106\">Étape 4 — Décider où l'exécution doit avoir lieu\u003C\u002Fh2>\n\u003Cp>L'API Agents sépare le harnais managé de l'environnement d'exécution. Un agent peut fonctionner sans environnement dédié, dans un bac à sable hébergé par OpenAI, ou via un environnement auto-hébergé connecté à la session.\u003C\u002Fp>\n\u003Cp>Cela crée une décision de migration que les applications SDK n'ont peut-être jamais prise explicitement : quel code doit s'exécuter comme fonction applicative, quel code appartient à un bac à sable, et quelles charges de travail nécessitent une infrastructure que vous contrôlez ?\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\">Besoin\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Frontière probable\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Appeler un service interne existant via une logique métier contrôlée\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Outil de fonction géré par votre application\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Exécuter du code isolé ou travailler avec des fichiers temporaires sans infrastructure privée\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Environnement hébergé par OpenAI\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Accéder à des ressources réseau privées, à des logiciels système personnalisés ou à une puissance de calcul locale contrôlée\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Environnement auto-hébergé\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Persister les artefacts produit acceptés\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Stockage détenu par l'application, pas seulement le système de fichiers du bac à sable\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Exécuter un effet de bord métier à fort impact\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Fonction applicative avec contrôles d'autorisation et d'audit\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-110\">Étape 5 — Remplacer la récupération implicite par une gestion explicite du cycle de vie\u003C\u002Fh2>\n\u003Cp>Le harnais géré assure une récupération au niveau de la session, mais votre application reste propriétaire de chaque dépendance externe qui l'entoure. Les environnements auto-hébergés nécessitent un provisionnement, une reconnexion et un arrêt. Les gestionnaires de fonctions peuvent échouer. Les webhooks peuvent être réessayés. L'état côté produit peut changer pendant qu'un agent est inactif.\u003C\u002Fp>\n\u003Cp>La migration nécessite donc deux modèles de récupération : la récupération du runtime de l'agent et la récupération des opérations métier. La première est de plus en plus gérée par l'API Agents. La seconde reste de votre responsabilité.\u003C\u002Fp>\n\u003Ch2 id=\"section-113\">Étape 6 — Reconstruire l'observabilité autour de la nouvelle frontière de trace\u003C\u002Fh2>\n\u003Cp>Les sessions de l'API Agents exposent les événements, l'historique sauvegardé, les tours, les appels d'outils, les sous-agents et l'utilisation des tokens. OpenAI fournit également des journaux de session dans la plateforme et l'export de traces.\u003C\u002Fp>\n\u003Cp>Ne renoncez pas à l'observabilité de votre application sous prétexte que les traces de la plateforme se sont améliorées. Les journaux produit doivent toujours relier la session de l'agent à l'identité de l'utilisateur, à la décision d'autorisation, à l'objet métier, à l'effet de bord de l'outil, à l'enregistrement d'approbation et au résultat final accepté. La trace de production utile est la jonction entre les preuves du runtime de l'agent et celles du runtime métier.\u003C\u002Fp>\n\u003Caside class=\"editorjs-referral my-6\">\u003Ca href=\"https:\u002F\u002Fstajic.de\u002Ffr\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\">Fiabilité des agents IA : pourquoi la réponse finale ne suffit pas\u003C\u002Fstrong>\u003Cp class=\"mt-2 text-sm text-gray-600 dark:text-gray-300\">La fiabilité d'un agent dépend du chemin d'exécution, des outils et des décisions intermédiaires — pas seulement du résultat final.\u003C\u002Fp>\u003Cspan class=\"mt-3 inline-flex text-sm font-medium text-primary-600 dark:text-primary-400\">Lire l'article sur la fiabilité →\u003C\u002Fspan>\u003C\u002Fdiv>\u003C\u002Fa>\u003C\u002Faside>\n\u003Ch2 id=\"section-117\">Étape 7 — Préserver les évaluations avant de changer le runtime\u003C\u002Fh2>\n\u003Cp>Une migration peut sembler réussie parce que le nouveau système produit toujours des réponses plausibles tout en modifiant silencieusement le choix des outils, la continuité de session, le comportement de transfert, la latence ou la récupération après échec. Établissez la référence comportementale avant de changer de runtime.\u003C\u002Fp>\n\u003Cp>La référence doit inclure des tâches représentatives, les appels d'outils attendus, les actions interdites, les points d'approbation, la continuité d'état, les scénarios de récupération et les critères d'acceptation du résultat final. Exécutez les anciennes et nouvelles architectures sur les mêmes cas chaque fois que possible.\u003C\u002Fp>\n\u003Ch2 id=\"section-120\">Le test de preuve de migration\u003C\u002Fh2>\n\u003Csection class=\"editorjs-process my-6\">\u003Ch3 class=\"mb-3 text-lg font-semibold\">Prouver le nouveau runtime avant de basculer\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. Figer la référence comportementale\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Capturez des traces SDK représentatives, les sorties attendues, les chemins d'outils, les points d'approbation et les cas d'échec.\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. Inventorier la propriété de l'état\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Marquez chaque champ d'état comme état de session d'agent, état métier faisant autorité, artefact durable ou état de travail éphémère.\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. Réutiliser les implémentations d'outils stables\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Gardez les fonctions métier derrière des interfaces applicatives ; ne remplacez que l'intégration côté agent lorsque c'est possible.\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. Construire une tranche verticale de l'API Agents\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Migrez un flux de travail de type production incluant la création de session, les outils, les événements, l'environnement et la persistance.\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. Injecter des interruptions\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Testez le redémarrage du processus, la nouvelle tentative de webhook, le délai d'expiration de fonction, la reconnexion d'environnement auto-hébergé et l'état métier obsolète.\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. Comparer les traces, pas seulement les réponses\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Vérifiez le choix des outils, l'autorisation, le chemin de preuve, les transitions d'état et les effets de bord par rapport à la référence.\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. Exécuter du trafic en mode fantôme\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Lorsque c'est faisable, rejouez ou dupliquez des tâches représentatives avant de rendre le nouveau runtime faisant autorité.\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. Basculer derrière une frontière réversible\u003C\u002Fdiv>\u003Cdiv class=\"mt-1 text-sm text-gray-600 dark:text-gray-300\">Conservez les adaptateurs d'intégration et la capacité de retour arrière jusqu'à ce que le comportement en production soit stable.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-122\">Ce qu'il faut mesurer pendant la migration\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\">Dimension\u003C\u002Fth>\u003Cth class=\"border border-gray-300 px-4 py-2 text-left font-semibold\">Vérification de migration\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\u003Ctbody>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Succès de la tâche\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le nouveau runtime répond-il aux mêmes critères d'acceptation, voire à de meilleurs ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Exactitude des outils\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Appelle-t-il le bon outil avec des arguments valides et une autorisation ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Continuité d'état\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Le travail peut-il reprendre entre les tours, les redémarrages et les attentes asynchrones ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Récupération\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Que se passe-t-il après une perte de webhook, un échec de gestionnaire, une déconnexion d'environnement ou un délai d'expiration ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Traçabilité\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Chaque action conséquente peut-elle être reliée à la session, à l'utilisateur, à l'appel d'outil et à l'objet métier ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comportement du contexte\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Les sessions de longue durée préservent-elles les contraintes sans transporter de vérité applicative obsolète ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Latence\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Comment le démarrage de session, le provisionnement d'environnement et le travail multi-tours affectent-ils le temps visible par l'utilisateur ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Coût\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quels changements dans l'utilisation des modèles, l'utilisation du bac à sable, le contexte répété et les opérations d'infrastructure ?\u003C\u002Ftd>\u003C\u002Ftr>\u003Ctr>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Charge opérationnelle\u003C\u002Ftd>\u003Ctd class=\"border border-gray-300 px-4 py-2\">Quelles responsabilités auparavant détenues par l'application ont réellement disparu, et lesquelles ont simplement été déplacées ?\u003C\u002Ftd>\u003C\u002Ftr>\u003C\u002Ftbody>\u003C\u002Ftable>\u003C\u002Fdiv>\n\u003Ch2 id=\"section-124\">Quand ne pas encore migrer\u003C\u002Fh2>\n\u003Cp>Une application existante basée sur le SDK Agents ne devient pas une mauvaise architecture simplement parce que l'orientation de la plateforme a changé. OpenAI poursuit la maintenance, les correctifs de sécurité, les corrections de bugs critiques et le travail de compatibilité. Si l'application est stable, bien évaluée et n'a aucune exigence de feuille de route bloquée, une migration immédiate du runtime peut ne pas être justifiée.\u003C\u002Fp>\n\u003Cul>\u003Cli>Une capacité requise du SDK n'est pas encore disponible dans l'API Agents.\u003C\u002Fli>\u003Cli>La migration perturberait une période de production critique sans apporter de valeur à court terme.\u003C\u002Fli>\u003Cli>L'application dépend de sémantiques d'orchestration personnalisées qui n'ont pas été validées sur le harnais géré.\u003C\u002Fli>\u003Cli>La portabilité entre fournisseurs est une exigence stricte et l'abstraction actuelle du SDK a une valeur matérielle.\u003C\u002Fli>\u003Cli>Votre équipe n'a pas encore séparé l'état métier de l'état du runtime de l'agent, ce qui rend le basculement dangereux.\u003C\u002Fli>\u003Cli>Le comportement de la nouvelle API Agents n'a pas été testé sur des charges de travail de production représentatives.\u003C\u002Fli>\u003C\u002Ful>\n\u003Ch2 id=\"section-127\">Quand la migration devient stratégiquement importante\u003C\u002Fh2>\n\u003Cp>La migration devient plus convaincante lorsque les exigences produit s'alignent avec le harnais managé : travail durable de longue durée, compaction et récupération du contexte gérées par la plateforme, capacités plus récentes du runtime d'agents, exécution en sandbox, gestion plus riche du cycle de vie hébergé, ou le désir de réduire la quantité de code d'orchestration que votre application exploite.\u003C\u002Fp>\n\u003Cp>Le signal le plus fort n'est pas « l'ancien SDK est complet en fonctionnalités ». C'est « notre feuille de route dépend désormais de capacités dont le foyer naturel est le runtime managé de l'API Agents ».\u003C\u002Fp>\n\u003Ch2 id=\"section-130\">Qu'est-ce qui changerait cette réponse ?\u003C\u002Fh2>\n\u003Cp>La stratégie de migration changerait si OpenAI publiait des outils de migration automatisés, introduisait des couches de compatibilité explicites, modifiait la sémantique des sessions de l'API Agents, élargissait ou réduisait la prise en charge des environnements auto-hébergés, ou modifiait la politique de support du SDK Agents.\u003C\u002Fp>\n\u003Cp>Cela changerait aussi si vos exigences produit changent. Un simple assistant requête-réponse peut ne pas avoir besoin du tout d'un harnais managé durable. Un agent de codage, de recherche ou d'opérations de longue durée peut bénéficier beaucoup plus du modèle de propriété de l'API Agents.\u003C\u002Fp>\n\u003Ch2 id=\"section-133\">Limites\u003C\u002Fh2>\n\u003Cp>Il n'existe pas de correspondance universelle un-à-un entre le SDK et l'API pour la migration, car les applications utilisent le SDK Agents différemment. Certaines s'appuient fortement sur les sessions et les transferts ; d'autres l'utilisent comme un simple exécuteur autour d'outils fonctionnels. La migration correcte dépend des responsabilités que votre application assume réellement aujourd'hui.\u003C\u002Fp>\n\u003Cp>L'API Agents est également en bêta publique, donc les détails d'implémentation peuvent évoluer. Considérez les principes de propriété dans cet article comme plus durables que toute forme d'endpoint individuelle.\u003C\u002Fp>\n\u003Ch2 id=\"section-136\">Conclusion\u003C\u002Fh2>\n\u003Cp>Migrer du SDK Agents vers l'API Agents se comprend mieux comme un déplacement de la frontière du runtime d'agents. Le harnais managé prend en charge davantage de la boucle, de la continuité de session, de la compaction et de la récupération. Votre application doit devenir plus explicite sur les responsabilités qui restent les vôtres : vérité métier, autorisation, effets de bord des fonctions, artefacts, auditabilité et cycle de vie produit.\u003C\u002Fp>\n\u003Cp>Si une migration laisse en place toute l'ancienne machinerie d'orchestration et se contente de remplacer les appels SDK par des appels à l'API Agents, elle a probablement manqué l'opportunité architecturale. L'objectif n'est pas de reproduire l'ancien runtime au-dessus du nouveau. L'objectif est de décider quelles responsabilités de runtime n'appartiennent plus à votre application.\u003C\u002Fp>\n\u003Ch2 id=\"section-139\">FAQ\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\">Migrer du SDK Agents vers l&#39;API Agents\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\">Migrer du SDK Agents vers l&#39;API Agents est-ce juste une réécriture d&#39;API ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Non. Le changement principal est la propriété du runtime : le SDK Agents exécute la boucle d&#39;agent dans votre application, tandis que l&#39;API Agents exécute un harnais Codex managé et une session durable. L&#39;état, le cycle de vie, la gestion des événements et la récupération doivent être revus comme des préoccupations architecturales.\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\">Mes outils fonctionnels doivent-ils être réécrits ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">L&#39;implémentation métier peut souvent être réutilisée si elle est déjà derrière une interface applicative stable. L&#39;intégration côté agent change car les appels de fonction de l&#39;API Agents sont gérés via les actions requises et les résultats de session.\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\">Dois-je déplacer l&#39;état métier dans la session de l&#39;API Agents ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Généralement non. Conservez l&#39;état métier et produit faisant autorité dans vos propres bases de données ou services. Utilisez la session d&#39;agent pour la continuité de l&#39;agent et le contexte de travail, pas comme seule source de vérité pour votre produit.\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\">Ai-je besoin de webhooks pour l&#39;API Agents ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Pas toujours, car le streaming est également disponible. Les webhooks sont particulièrement utiles pour les sessions de longue durée ou asynchrones où votre application doit réagir aux changements de cycle de vie sans maintenir un flux ouvert.\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\">Toutes les applications existantes utilisant le SDK Agents doivent-elles migrer maintenant ?\u003C\u002Fh4>\u003Cdiv class=\"mt-2 text-gray-600 dark:text-gray-300\">Non. Le SDK reste pris en charge en mode maintenance. Migrez lorsque le nouveau runtime apporte une valeur significative à la feuille de route et après que le comportement requis a été validé par rapport à des évaluations de production.\u003C\u002Fdiv>\u003C\u002Fdiv>\u003C\u002Fsection>\n\u003Ch2 id=\"section-141\">Glossaire\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\">Termes clés de la migration\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\">Frontière du runtime\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">La division des responsabilités entre le runtime d'agent géré par la plateforme et le runtime détenu par l'application.\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\">Harnais\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Le runtime d'agent qui coordonne les appels de modèle, les outils, le contexte, l'orchestration et l'exécution continue.\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\">Session\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Une instance durable de l'API Agents qui contient la configuration d'un agent, la conversation et le travail sauvegardé au fil des tours.\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\">Action requise\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un état de session dans lequel l'API Agents a besoin d'une entrée externe telle qu'un résultat de fonction ou une connexion d'environnement avant que le travail puisse continuer.\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\">Environnement auto-hébergé\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Un environnement d'exécution exploité par votre infrastructure et connecté au harnais managé de l'API Agents.\u003C\u002Fdd>\u003C\u002Fdiv>\u003Cdiv id=\"migration-proof-test\" class=\"border-t border-gray-200 dark:border-gray-700 py-3 first:border-t-0\">\u003Cdt class=\"font-semibold text-gray-900 dark:text-gray-100\">Test de preuve de migration\u003C\u002Fdt>\u003Cdd class=\"mt-1 text-gray-600 dark:text-gray-300\">Une méthode de validation par étapes qui compare le nouveau runtime aux références comportementales, aux injections de défaillance, aux traces et aux critères de basculement réversibles.\u003C\u002Fdd>\u003C\u002Fdiv>\u003C\u002Fdl>\u003C\u002Fsection>\n\u003Ch2 id=\"section-143\">Sources primaires et lectures complémentaires\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 — SDK Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Politique de support actuelle : le SDK Agents est complet en fonctionnalités, reste maintenu, et les nouvelles applications doivent commencer avec l&#39;API Agents.\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 — Exécuter des agents avec le SDK Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documentation de la boucle d&#39;agent détenue par l&#39;application du SDK et du modèle de continuation.\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 — Présentation de l&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Définit les concepts fondamentaux de l&#39;API Agents : agent, environnement, session, événements et éléments.\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 — Architecture de l&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Explique le harness hébergé, le serveur d&#39;application, les limites de l&#39;environnement d&#39;exécution hébergé par OpenAI et auto-hébergé.\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 — Configuration des agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Définit la configuration réutilisable des agents et la personnalisation au niveau de la session.\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 — Exécuter et poursuivre des sessions\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Documente les sessions durables, les tours asynchrones, le streaming et le pilotage.\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 — Fonctions de l&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Définition de l&#39;outil de fonction et limite du gestionnaire d&#39;application pour les résultats de fonction requis.\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 — Webhooks de session\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Événements de cycle de vie pour les sessions asynchrones, actions requises et connexions à l&#39;environnement auto-hébergé.\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 — Observabilité et utilisation de l&#39;API Agents\u003C\u002Fstrong>\u003Cp class=\"text-sm text-gray-600 dark:text-gray-400\">Journaux de session, événements, tours, appels d&#39;outils, sous-agents, traces et inspection de l&#39;utilisation des jetons.\u003C\u002Fp>\u003C\u002Fa>",{"time":212,"blocks":213,"version":1287},1790352479320,[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,648,653,658,672,677,682,687,692,697,702,707,712,717,722,727,732,737,763,768,797,802,812,821,830,839,848,857,866,875,884,888,892,896,899,903,907,911,915,919,922,943,946,949,952,955,959,963,983,987,991,994,1011,1015,1019,1023,1026,1030,1034,1039,1042,1046,1050,1063,1066,1070,1074,1077,1081,1085,1088,1092,1096,1100,1103,1117,1120,1137,1140,1144,1150,1153,1157,1161,1164,1168,1172,1175,1179,1183,1186,1190,1194,1197,1213,1216,1233,1236,1242,1248,1254,1260,1265,1270,1276,1282],{"id":215,"data":216,"type":220,"tunes":221},"24Foq4L2Wb",{"title":217,"maxLevel":218,"minLevel":219},"Sommaire",3,2,"tableOfContents",{},{"id":223,"data":224,"type":226,"tunes":227},"intro",{"text":225},"Migrer du SDK OpenAI Agents vers l'API Agents n'est pas un simple renommage d'import. La frontière architecturale fondamentale change : le SDK exécute la boucle de l'agent à l'intérieur de votre application, tandis que l'API Agents exécute un harnais Codex géré et une session durable du côté d'OpenAI. La question de la migration n'est donc pas « Quelles classes correspondent à quels points de terminaison ? » mais « Quelles responsabilités d'exécution traversent la frontière, lesquelles restent dans notre application, et lesquelles doivent être repensées ? »","paragraph",{},{"id":229,"data":230,"type":234,"tunes":235},"direct",{"body":231,"title":232,"variant":233},"\u003Cstrong>Une véritable migration du SDK Agents vers l'API Agents change la propriété de l'exécution.\u003C\u002Fstrong> Votre configuration d'agent réutilisable peut toujours contenir le modèle, les instructions et les outils, mais la boucle, la session durable, l'orchestration, la compaction du contexte et la récupération se déplacent vers l'exécution gérée de l'API Agents. Votre application doit conserver l'état du domaine, l'autorisation, les règles métier, les implémentations de fonctions et la logique d'audit en dehors de la session de l'agent. Traitez la migration comme une refonte de frontière, non comme une conversion mécanique de code.","Réponse directe","info","callout",{},{"id":237,"data":238,"type":234,"tunes":242},"current",{"body":239,"title":240,"variant":241},"OpenAI marque actuellement le SDK Agents comme \u003Cstrong>fonctionnellement complet\u003C\u002Fstrong> et recommande l'API Agents pour les nouvelles applications d'agents. L'API Agents est en bêta publique. Les applications SDK existantes restent prises en charge, et une migration immédiate n'est pas automatiquement requise.","À jour au 25 septembre 2026","warning",{},{"id":244,"data":245,"type":234,"tunes":249},"model-note",{"body":246,"title":247,"variant":248},"La Carte de migration des frontières d'exécution et le Test de preuve de migration dans cet article sont des outils d'architecture pratiques, et non des cadres de migration officiels d'OpenAI. Ils sont dérivés des différences d'exécution actuelles documentées par OpenAI.","À propos du modèle de migration","note",{},{"id":251,"data":252,"type":42,"tunes":254},"h-boundary",{"text":253,"level":219},"La migration va d'une boucle détenue par l'application vers un harnais géré",{},{"id":256,"data":257,"type":226,"tunes":259},"p-boundary-1",{"text":258},"Dans le SDK Agents, une exécution est un tour au niveau de l'application. L'exécuteur du SDK appelle le modèle, inspecte la sortie, exécute les outils, suit les transferts et continue jusqu'à atteindre un point d'arrêt. Votre processus héberge cette boucle et en possède donc le cycle de vie.",{},{"id":261,"data":262,"type":226,"tunes":264},"p-boundary-2",{"text":263},"Dans l'API Agents, OpenAI exécute le harnais. Une session est une instance durable d'une configuration d'agent qui accepte des tâches, produit des événements, peut se mettre en pause pour des actions requises et peut continuer dans le temps. OpenAI gère les sessions, l'orchestration, la compaction du contexte et la récupération ; votre application envoie le travail, gère les outils de fonction, reçoit les événements et gère éventuellement un environnement d'exécution auto-hébergé.",{},{"id":266,"data":267,"type":226,"tunes":269},"p-boundary-3",{"text":268},"Ce transfert de propriété constitue la migration. Tout le reste — la syntaxe de l'API, les schémas d'outils, la gestion des événements, les identifiants de session — en découle.",{},{"id":271,"data":272,"type":42,"tunes":274},"h-map",{"text":273,"level":219},"La Carte de migration des frontières d'exécution",{},{"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],"Préoccupation","SDK Agents","Cible de migration de l'API Agents",[284,285,286],"Boucle de l'agent","S'exécute dans votre application via l'exécuteur du SDK","S'exécute dans le harnais Codex géré",[288,289,290],"Définition d'agent réutilisable","Objet Agent dans le code de l'application","Configuration d'agent enregistrée ou en ligne avec modèle, instructions et outils",[292,293,294],"Continuité de conversation \u002F de travail","Stratégie de session du SDK, historique, continuation des résultats ou stockage applicatif","Session durable de l'API Agents",[296,297,298],"Exécution des outils","Le SDK coordonne les appels d'outils dans votre exécution","Le harnais demande des appels de fonction ; votre application renvoie les résultats",[300,301,302],"Gestion du contexte","Votre exécution \u002F stratégie de session du SDK","Contexte de session géré, compaction et récupération, plus vos propres frontières de données applicatives",[304,305,306],"Transferts \u002F spécialistes","Primitives d'orchestration du SDK","Comportement du harnais \u002F sous-agent dans l'API Agents ; ne présumez pas d'une sémantique univoque",[308,309,310],"Environnement d'exécution","Votre exécution applicative ou environnement spécifique à l'outil","Environnement facultatif hébergé par OpenAI ou auto-hébergé attaché à la session",[312,313,314],"Diffusion en continu","Diffusion en continu du SDK depuis l'exécution","Flux d'événements de session de l'API Agents",[316,317,318],"Cycle de vie asynchrone","Généralement géré par l'application autour de l'exécution du SDK","États de session natifs, tours asynchrones et webhooks",[320,321,322],"Traçage \u002F observabilité","Traçage du SDK Agents et journaux applicatifs","Journaux de session Agents, événements, tours, appels d'outils, sous-agents et traces exportables",[324,325,326],"Récupération","Responsabilité de l'application","Récupération gérée du harnais \u002F de la session plus récupération détenue par l'application pour les systèmes externes et les environnements auto-hébergés","table",{},{"id":330,"data":331,"type":42,"tunes":333},"h-conceptual",{"text":332,"level":219},"Ce qui peut migrer conceptuellement sans changer de propriété",{},{"id":335,"data":336,"type":226,"tunes":338},"p-conceptual-1",{"text":337},"Plusieurs concepts applicatifs survivent proprement à la migration même si leur représentation change. Les modèles, les instructions, les définitions de fonctions au format JSON-schema, l'accès MCP, les descriptions d'outils et les exigences de sortie structurée restent des préoccupations de configuration d'agent.",{},{"id":340,"data":341,"type":226,"tunes":343},"p-conceptual-2",{"text":342},"Le modèle de configuration de l'API Agents d'OpenAI définit explicitement un agent par le modèle, les instructions, les outils, le raisonnement et le comportement de sortie. Les outils de fonction restent du code applicatif : le harnais demande un appel de fonction, et votre gestionnaire renvoie le résultat. OpenAI note également que les implémentations de fonctions utilisées avec l'API Responses peuvent être réutilisées avec le flux de session de l'API Agents.",{},{"id":345,"data":346,"type":234,"tunes":350},"good-candidate",{"body":347,"title":348,"variant":349},"Une fonction métier pure telle que \u003Ccode>get_customer(customer_id)\u003C\u002Fcode> ne devrait pas avoir besoin de savoir si l'appelant est le SDK Agents ou l'API Agents. Gardez sa logique métier derrière une interface applicative stable et ne migrez que l'adaptateur côté agent.","Bon candidat à la migration","success",{},{"id":352,"data":353,"type":42,"tunes":355},"h-no-one",{"text":354,"level":219},"Ce qui ne doit pas être migré de manière univoque",{},{"id":357,"data":358,"type":226,"tunes":360},"p-no-one-1",{"text":359},"Le schéma de migration dangereux consiste à recréer chaque abstraction d'exécution du SDK à l'intérieur de l'API Agents. Cela peut vous amener à payer pour un harnais géré tout en exploitant encore un harnais fantôme dans votre application.",{},{"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],"Hypothèse de l'ère du SDK","Pourquoi une copie directe est risquée","Question de migration",[370,371,372],"La boucle applicative détient chaque continuation","L'API Agents détient déjà la boucle du harnais","Quelle logique de continuation relève de la logique produit, et laquelle doit être déplacée vers la session gérée ?",[374,375,376],"L'objet de session local est le mécanisme de continuité principal","Les sessions de l'API Agents sont des ressources durables avec leur propre cycle de vie","Quel état appartient à la session par rapport à la base de données produit ?",[378,379,380],"Chaque interruption est gérée de manière synchrone","Les tours de l'API Agents sont asynchrones et peuvent faire apparaître des états action_required","Quelles actions nécessitent des webhooks, des workers, de l'idempotence et des gestionnaires reprenables ?",[382,383,384],"Toute l'exécution des outils se produit là où le processus du SDK s'exécute","Les gestionnaires de fonctions et les environnements d'exécution peuvent être séparés","Où chaque outil doit-il réellement s'exécuter ?",[386,387,388],"La trace du SDK est la chronologie opérationnelle","L'API Agents expose les événements de session, les tours et les traces gérées","Quelles données d'audit au niveau applicatif nécessitent encore leur propre enregistrement ?",[390,391,392],"L'objet de transfert correspond directement à un modèle de sous-agent hébergé","Les sémantiques d'exécution peuvent différer","Quelle propriété visible par l'utilisateur et quel comportement de spécialiste doivent être préservés, et pas seulement l'ancienne structure de classes ?",{},{"id":395,"data":396,"type":42,"tunes":398},"h-domain",{"text":397,"level":219},"Étape 1 — Séparer l'état du domaine de l'état de session de l'agent",{},{"id":400,"data":401,"type":226,"tunes":403},"p-domain-1",{"text":402},"Avant de toucher aux appels API, classez l'état que votre application SDK transporte actuellement. Certains états existent uniquement pour maintenir la conversation de l'agent en mouvement. D'autres états constituent la vérité métier : permissions utilisateur, statut de projet, données de commande, approbation de workflow, dossiers clients, versions de documents, état de politique ou configuration d'application.",{},{"id":405,"data":406,"type":226,"tunes":408},"p-domain-2",{"text":407},"La seconde catégorie ne doit pas devenir dépendante d'une session de l'API Agents. Une session durable est une continuité utile pour l'agent ; elle ne remplace pas la source de vérité de votre produit. Si la session disparaît, expire, est reconstruite ou change d'implémentation, votre application doit toujours savoir ce qui est vrai.",{},{"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","Continuité de conversation",[417,417,417],"",{"id":419,"label":420,"values":421},"domain","Vérité métier",[417,417,417],{"id":423,"label":424,"values":425},"artifact","Artefact durable",[417,417,417],{"id":427,"label":428,"values":429},"ephemeral","État de travail temporaire",[417,417,417],"Test de placement de l'état",[432,435,438],{"id":433,"label":434},"type","Type d'état",{"id":436,"label":437},"place","Propriétaire préféré",{"id":439,"label":440},"reason","Raison","comparison",{},{"id":444,"data":445,"type":42,"tunes":447},"h-events",{"text":446,"level":219},"Étape 2 — Convertir l'état d'esprit du runner en un état d'esprit de session et d'événements",{},{"id":449,"data":450,"type":226,"tunes":452},"p-events-1",{"text":451},"Les applications SDK pensent souvent en termes d'appel de run et de réception d'un résultat. L'API Agents pense en termes de session durable dont les tours peuvent s'exécuter de manière asynchrone. Un message à une session inactive démarre le travail ; un message pendant un tour actif peut l'orienter. La progression arrive via le streaming ou les webhooks.",{},{"id":454,"data":455,"type":226,"tunes":457},"p-events-2",{"text":456},"Cela affecte l'architecture de l'application. Le travail de production de longue durée ne doit pas dépendre du maintien en vie d'une seule requête HTTP. Votre produit a besoin d'identifiants de session stables, d'une persistance du cycle de vie, d'une vérification des webhooks, de gestionnaires idempotents et d'un moyen de réconcilier l'état actuel de la session après le redémarrage des processus.",{},{"id":459,"data":460,"type":42,"tunes":462},"h-functions",{"text":461,"level":219},"Étape 3 — Reconcevoir les outils de fonction autour des actions requises",{},{"id":464,"data":465,"type":226,"tunes":467},"p-functions-1",{"text":466},"Les outils de fonction restent une frontière importante de l'application. Vous définissez la fonction et son schéma JSON dans la configuration de l'agent. Lorsque le harness a besoin de la fonction, la session peut entrer dans un état d'action requise. Votre application récupère l'action requise, exécute la logique métier et renvoie le résultat.",{},{"id":469,"data":470,"type":226,"tunes":472},"p-functions-2",{"text":471},"Cela signifie que l'implémentation de la fonction doit pouvoir être reprise en toute sécurité. Un webhook peut être livré pendant qu'un autre worker traite. Une défaillance réseau peut survenir après l'effet de bord externe mais avant le renvoi du résultat. La migration est donc un bon moment pour ajouter des identifiants d'appel, des clés d'idempotence, une autorisation explicite, des politiques de timeout et des enregistrements d'audit aux outils conséquents.",{},{"id":474,"data":475,"type":234,"tunes":478},"tool-trap",{"body":476,"title":477,"variant":241},"Ne traitez pas un appel de fonction provenant du harness géré comme une autorisation d'exécuter l'action. Le harness décide \u003Cem>ce qu'il veut appeler\u003C\u002Fem> ; votre application décide toujours si l'utilisateur actuel, la session et l'état métier permettent cette action.","Piège de migration des outils",{},{"id":480,"data":481,"type":42,"tunes":483},"h-environment",{"text":482,"level":219},"Étape 4 — Décider où l'exécution doit avoir lieu",{},{"id":485,"data":486,"type":226,"tunes":488},"p-env-1",{"text":487},"L'API Agents sépare le harness géré de l'environnement d'exécution. Un agent peut fonctionner sans environnement dédié, dans un sandbox hébergé par OpenAI, ou via un environnement auto-hébergé connecté à la session.",{},{"id":490,"data":491,"type":226,"tunes":493},"p-env-2",{"text":492},"Cela crée une décision de migration que les applications SDK n'ont peut-être jamais prise explicitement : quel code doit s'exécuter comme fonction d'application, quel code appartient à un sandbox, et quelles charges de travail nécessitent une infrastructure que vous contrôlez ?",{},{"id":495,"data":496,"type":327,"tunes":516},"environment-table",{"content":497,"stretched":43,"withHeadings":14},[498,501,504,507,510,513],[499,500],"Besoin","Frontière probable",[502,503],"Appeler un service interne existant via une logique métier contrôlée","Outil de fonction géré par votre application",[505,506],"Exécuter du code isolé ou travailler avec des fichiers temporaires sans infrastructure privée","Environnement hébergé par OpenAI",[508,509],"Accéder à des ressources réseau privées, des logiciels système personnalisés ou un calcul local contrôlé","Environnement auto-hébergé",[511,512],"Persister les artefacts produit acceptés","Stockage appartenant à l'application, pas seulement le système de fichiers du sandbox",[514,515],"Exécuter un effet de bord métier à fort impact","Fonction d'application avec contrôles d'autorisation et d'audit",{},{"id":518,"data":519,"type":42,"tunes":521},"h-recovery",{"text":520,"level":219},"Étape 5 — Remplacer la récupération implicite par une gestion explicite du cycle de vie",{},{"id":523,"data":524,"type":226,"tunes":526},"p-recovery-1",{"text":525},"Le harness géré fournit une récupération au niveau de la session, mais votre application reste propriétaire de chaque dépendance externe qui l'entoure. Les environnements auto-hébergés nécessitent un provisionnement, une reconnexion et un arrêt. Les gestionnaires de fonction peuvent échouer. Les webhooks peuvent être réessayés. L'état côté produit peut changer pendant qu'un agent est inactif.",{},{"id":528,"data":529,"type":226,"tunes":531},"p-recovery-2",{"text":530},"La migration nécessite donc deux modèles de récupération : la récupération du runtime de l'agent et la récupération des opérations métier. La première est de plus en plus gérée par l'API Agents. La seconde reste votre responsabilité.",{},{"id":533,"data":534,"type":42,"tunes":536},"h-observability",{"text":535,"level":219},"Étape 6 — Reconstruire l'observabilité autour de la nouvelle frontière de trace",{},{"id":538,"data":539,"type":226,"tunes":541},"p-obs-1",{"text":540},"Les sessions de l'API Agents exposent les événements, l'historique enregistré, les tours, les appels d'outils, les sous-agents et l'utilisation des jetons. OpenAI fournit également des journaux de session dans la plateforme et l'export de trace.",{},{"id":543,"data":544,"type":226,"tunes":546},"p-obs-2",{"text":545},"Ne rejetez pas l'observabilité de votre application parce que les traces de la plateforme se sont améliorées. Les journaux produit doivent toujours relier la session de l'agent à l'identité de l'utilisateur, la décision d'autorisation, l'objet métier, l'effet de bord de l'outil, l'enregistrement d'approbation et le résultat final accepté. La trace de production utile est la jonction entre les preuves du runtime de l'agent et les preuves du runtime métier.",{},{"id":548,"data":549,"type":554,"tunes":555},"ref-reliability",{"url":550,"title":551,"excerpt":552,"ctaLabel":553},"https:\u002F\u002Fstajic.de\u002Ffr\u002Fblog\u002Fai-agent-reliability-why-the-final-answer-is-not-enough","Fiabilité des agents IA : pourquoi la réponse finale ne suffit pas","La fiabilité d'un agent dépend du chemin d'exécution, des outils et des décisions intermédiaires — pas seulement du résultat final.","Lire l'article sur la fiabilité","referralArticle",{},{"id":557,"data":558,"type":42,"tunes":560},"h-evals",{"text":559,"level":219},"Étape 7 — Préserver les évaluations avant de modifier le runtime",{},{"id":562,"data":563,"type":226,"tunes":565},"p-evals-1",{"text":564},"Une migration peut sembler réussie parce que le nouveau système produit toujours des réponses plausibles tout en modifiant silencieusement le choix des outils, la continuité de session, le comportement de transfert, la latence ou la reprise après échec. Établissez la référence comportementale avant de changer de runtime.",{},{"id":567,"data":568,"type":226,"tunes":570},"p-evals-2",{"text":569},"La référence doit inclure des tâches représentatives, les appels d'outils attendus, les actions interdites, les points d'approbation, la continuité d'état, les scénarios de reprise et les critères d'acceptation du résultat final. Exécutez les anciennes et nouvelles architectures sur les mêmes cas dans la mesure du possible.",{},{"id":572,"data":573,"type":42,"tunes":575},"h-proof",{"text":574,"level":219},"Le test de preuve de migration",{},{"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. Figer la référence comportementale","Capturez des traces SDK représentatives, les sorties attendues, les chemins d'outils, les points d'approbation et les cas d'échec.",{"label":584,"description":585},"2. Inventorier la propriété de l'état","Marquez chaque champ d'état comme état de session d'agent, état métier faisant autorité, artefact durable ou état de travail éphémère.",{"label":587,"description":588},"3. Réutiliser les implémentations d'outils stables","Gardez les fonctions métier derrière des interfaces applicatives ; ne remplacez que l'intégration côté agent lorsque c'est possible.",{"label":590,"description":591},"4. Construire une tranche verticale de l'API Agents","Migrez un flux de travail de type production incluant la création de session, les outils, les événements, l'environnement et la persistance.",{"label":593,"description":594},"5. Injecter des interruptions","Testez le redémarrage du processus, la nouvelle tentative de webhook, le délai d'expiration de fonction, la reconnexion d'environnement auto-hébergé et l'état métier obsolète.",{"label":596,"description":597},"6. Comparer les traces, pas seulement les réponses","Vérifiez le choix des outils, l'autorisation, le chemin de preuve, les transitions d'état et les effets de bord par rapport à la référence.",{"label":599,"description":600},"7. Exécuter du trafic fantôme","Lorsque c'est faisable, rejouez ou dupliquez des tâches représentatives avant de rendre le nouveau runtime faisant autorité.",{"label":602,"description":603},"8. Basculer derrière une frontière réversible","Conservez les adaptateurs d'intégration et la capacité de restauration jusqu'à ce que le comportement en production soit stable.","Prouver le nouveau runtime avant de basculer","auto","processFlow",{},{"id":609,"data":610,"type":42,"tunes":612},"h-metrics",{"text":611,"level":219},"Ce qu'il faut mesurer pendant la migration",{},{"id":614,"data":615,"type":327,"tunes":647},"metrics-table",{"content":616,"stretched":43,"withHeadings":14},[617,620,623,626,629,632,635,638,641,644],[618,619],"Dimension","Vérification de migration",[621,622],"Succès de la tâche","Le nouveau runtime répond-il aux mêmes critères d'acceptation, voire à de meilleurs ?",[624,625],"Exactitude des outils","Appelle-t-il le bon outil avec des arguments valides et une autorisation ?",[627,628],"Continuité d'état","Le travail peut-il reprendre à travers les tours, les redémarrages et les attentes asynchrones ?",[630,631],"Reprise","Que se passe-t-il après une perte de webhook, un échec de gestionnaire, une déconnexion d'environnement ou un délai d'expiration ?",[633,634],"Traçabilité","Chaque action conséquente peut-elle être reliée à la session, l'utilisateur, l'appel d'outil et l'objet métier ?",[636,637],"Comportement du contexte","Les sessions de longue durée préservent-elles les contraintes sans transporter de vérité applicative obsolète ?",[639,640],"Latence","Comment le démarrage de session, le provisionnement d'environnement et le travail multi-tours affectent-ils le temps visible par l'utilisateur ?",[642,643],"Coût","Quels changements surviennent dans l'utilisation du modèle, l'utilisation du bac à sable, le contexte répété et les opérations d'infrastructure ?",[645,646],"Charge opérationnelle","Quelles responsabilités auparavant détenues par l'application ont réellement disparu, et lesquelles ont simplement été déplacées ?",{},{"id":649,"data":650,"type":42,"tunes":652},"h-not-yet",{"text":651,"level":219},"Quand ne pas encore migrer",{},{"id":654,"data":655,"type":226,"tunes":657},"p-not-yet-1",{"text":656},"Une application existante utilisant le SDK Agents ne devient pas une mauvaise architecture simplement parce que l'orientation de la plateforme a changé. OpenAI poursuit la maintenance, les correctifs de sécurité, les corrections de bugs critiques et le travail de compatibilité. Si l'application est stable, bien évaluée et n'a aucune exigence de feuille de route bloquée, une migration immédiate du runtime peut ne pas être justifiée.",{},{"id":659,"data":660,"type":670,"tunes":671},"not-yet-list",{"meta":661,"items":662,"style":669},{},[663,664,665,666,667,668],"Une capacité requise du SDK n'est pas encore disponible dans l'API Agents.","La migration perturberait une période de production critique sans apporter de valeur à court terme.","L'application dépend de sémantiques d'orchestration personnalisées qui n'ont pas été validées sur le harnais géré.","La portabilité entre fournisseurs est une exigence stricte et l'abstraction actuelle du SDK a une valeur matérielle.","Votre équipe n'a pas encore séparé l'état métier de l'état du runtime de l'agent, ce qui rend le basculement risqué.","Le comportement de la nouvelle API Agents n'a pas été testé sur des charges de travail de production représentatives.","unordered","list",{},{"id":673,"data":674,"type":42,"tunes":676},"h-when",{"text":675,"level":219},"Quand la migration devient stratégiquement importante",{},{"id":678,"data":679,"type":226,"tunes":681},"p-when-1",{"text":680},"La migration devient plus convaincante lorsque les exigences produit s'alignent sur le harnais géré : travail durable de longue durée, compactage et reprise du contexte gérés par la plateforme, capacités plus récentes du runtime d'agent, exécution en bac à sable, gestion de cycle de vie hébergée plus riche, ou volonté de réduire la quantité de code d'orchestration que votre application exploite.",{},{"id":683,"data":684,"type":226,"tunes":686},"p-when-2",{"text":685},"Le signal le plus fort n'est pas « l'ancien SDK est complet en fonctionnalités ». C'est « notre feuille de route dépend désormais de capacités dont le foyer naturel est le runtime géré de l'API Agents ».",{},{"id":688,"data":689,"type":42,"tunes":691},"h-change",{"text":690,"level":219},"Qu'est-ce qui changerait cette réponse ?",{},{"id":693,"data":694,"type":226,"tunes":696},"p-change-1",{"text":695},"La stratégie de migration changerait si OpenAI publie des outils de migration automatisés, introduit des couches de compatibilité explicites, modifie la sémantique des sessions de l'API Agents, élargit ou restreint la prise en charge des environnements auto-hébergés, ou modifie la politique de support du SDK Agents.",{},{"id":698,"data":699,"type":226,"tunes":701},"p-change-2",{"text":700},"Elle changerait également si les exigences de votre produit changent. Un assistant simple requête-réponse peut ne pas avoir besoin du tout d'un harnais géré durable. Un agent de codage, de recherche ou d'opérations de longue durée peut bénéficier beaucoup plus du modèle de propriété de l'API Agents.",{},{"id":703,"data":704,"type":42,"tunes":706},"h-limitations",{"text":705,"level":219},"Limites",{},{"id":708,"data":709,"type":226,"tunes":711},"p-limit-1",{"text":710},"Il n'existe pas de correspondance universelle univoque entre le SDK et l'API, car les applications utilisent le SDK Agents différemment. Certaines s'appuient fortement sur les sessions et les transferts ; d'autres l'utilisent comme un simple exécuteur autour d'outils fonctionnels. La migration correcte dépend des responsabilités que votre application assume réellement aujourd'hui.",{},{"id":713,"data":714,"type":226,"tunes":716},"p-limit-2",{"text":715},"L'API Agents est également en version bêta publique, les détails d'implémentation peuvent donc évoluer. Considérez les principes de propriété présentés dans cet article comme plus durables que toute forme de point de terminaison individuelle.",{},{"id":718,"data":719,"type":42,"tunes":721},"h-conclusion",{"text":720,"level":219},"Conclusion",{},{"id":723,"data":724,"type":226,"tunes":726},"p-conclusion-1",{"text":725},"Migrer du SDK Agents vers l'API Agents se comprend mieux comme un déplacement de la frontière d'exécution de l'agent. Le harnais géré prend en charge une plus grande partie de la boucle, de la continuité de session, de la compaction et de la récupération. Votre application doit devenir plus explicite quant aux responsabilités qui vous incombent encore : vérité métier, autorisation, effets de bord des fonctions, artefacts, auditabilité et cycle de vie du produit.",{},{"id":728,"data":729,"type":226,"tunes":731},"p-conclusion-2",{"text":730},"Si une migration laisse en place toute l'ancienne machinerie d'orchestration et se contente de remplacer les appels au SDK par des appels à l'API Agents, elle a probablement manqué l'opportunité architecturale. L'objectif n'est pas de reproduire l'ancien environnement d'exécution au-dessus du nouveau. L'objectif est de décider quelles responsabilités d'exécution ne doivent plus incomber à votre application.",{},{"id":733,"data":734,"type":42,"tunes":736},"h-faq",{"text":735,"level":219},"FAQ",{},{"id":738,"data":739,"type":738,"tunes":762},"faq",{"items":740,"title":761},[741,745,749,753,757],{"id":742,"answer":743,"question":744},"faq1","Non. Le changement principal concerne la propriété de l'exécution : le SDK Agents exécute la boucle de l'agent dans votre application, tandis que l'API Agents exécute un harnais Codex géré et une session durable. L'état, le cycle de vie, la gestion des événements et la récupération doivent être examinés comme des préoccupations architecturales.","Migrer du SDK Agents vers l'API Agents se résume-t-il à une réécriture d'API ?",{"id":746,"answer":747,"question":748},"faq2","L'implémentation métier peut souvent être réutilisée si elle se trouve déjà derrière une interface applicative stable. L'intégration côté agent change car les appels de fonction de l'API Agents sont gérés via des actions requises et des résultats de session.","Mes outils fonctionnels doivent-ils être réécrits ?",{"id":750,"answer":751,"question":752},"faq3","En général, non. Conservez l'état métier et produit faisant autorité dans vos propres bases de données ou services. Utilisez la session de l'agent pour la continuité de l'agent et le contexte de travail, et non comme source unique de vérité pour votre produit.","Dois-je déplacer l'état métier dans la session de l'API Agents ?",{"id":754,"answer":755,"question":756},"faq4","Pas toujours, car la diffusion en continu est également disponible. Les webhooks sont particulièrement utiles pour les sessions de longue durée ou asynchrones où votre application doit réagir aux changements de cycle de vie sans maintenir un flux ouvert.","Ai-je besoin de webhooks pour l'API Agents ?",{"id":758,"answer":759,"question":760},"faq5","Non. Le SDK reste pris en charge en mode maintenance. Migrez lorsque le nouvel environnement d'exécution apporte une valeur significative pour la feuille de route et après que le comportement requis a été validé par rapport à des évaluations représentatives de la production.","Toutes les applications existantes utilisant le SDK Agents doivent-elles migrer maintenant ?","Migration du SDK Agents vers l'API Agents",{},{"id":764,"data":765,"type":42,"tunes":767},"h-glossary",{"text":766,"level":219},"Glossaire",{},{"id":769,"data":770,"type":769,"tunes":796},"glossary",{"title":771,"entries":772},"Termes clés de la migration",[773,777,781,785,789,792],{"term":774,"anchor":775,"definition":776},"Frontière d'exécution","runtime-boundary","La répartition des responsabilités entre l'environnement d'exécution de l'agent géré par la plateforme et l'environnement d'exécution propre à l'application.",{"term":778,"anchor":779,"definition":780},"Harnais","harness","L'environnement d'exécution de l'agent qui coordonne les appels au modèle, les outils, le contexte, l'orchestration et la poursuite de l'exécution.",{"term":782,"anchor":783,"definition":784},"Session","session","Une instance durable de l'API Agents qui conserve la configuration d'un agent, la conversation et le travail sauvegardé au fil des tours.",{"term":786,"anchor":787,"definition":788},"Action requise","required-action","Un état de session dans lequel l'API Agents a besoin d'une entrée externe, telle qu'un résultat de fonction ou une connexion à un environnement, avant que le travail puisse continuer.",{"term":509,"anchor":790,"definition":791},"self-hosted-environment","Un environnement d'exécution exploité par votre infrastructure et connecté au harnais géré de l'API Agents.",{"term":793,"anchor":794,"definition":795},"Test de preuve de migration","migration-proof-test","Une méthode de validation par étapes qui compare le nouvel environnement d'exécution aux références comportementales, aux injections de défaillance, aux traces et aux critères de basculement réversibles.",{},{"id":798,"data":799,"type":42,"tunes":801},"h-sources",{"text":800,"level":219},"Sources primaires et lectures complémentaires",{},{"id":803,"data":804,"type":810,"tunes":811},"src-sdk",{"link":805,"meta":806},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Fsdk",{"image":807,"title":808,"description":809},{"url":417},"OpenAI — SDK Agents","Politique de support actuelle : le SDK Agents est complet en termes de fonctionnalités, reste maintenu, et les nouvelles applications doivent commencer avec l'API Agents.","linkTool",{},{"id":813,"data":814,"type":810,"tunes":820},"src-running-sdk",{"link":815,"meta":816},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents\u002Frunning-agents",{"image":817,"title":818,"description":819},{"url":417},"OpenAI — Exécuter des agents avec le SDK Agents","Documentation de la boucle d'agent et du modèle de continuation propres à l'application du SDK.",{},{"id":822,"data":823,"type":810,"tunes":829},"src-api-overview",{"link":824,"meta":825},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Foverview",{"image":826,"title":827,"description":828},{"url":417},"OpenAI — Aperçu de l'API Agents","Définit les concepts fondamentaux de l'API Agents : agent, environnement, session, événements et éléments.",{},{"id":831,"data":832,"type":810,"tunes":838},"src-api-architecture",{"link":833,"meta":834},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Farchitecture",{"image":835,"title":836,"description":837},{"url":417},"OpenAI — Architecture de l'API Agents","Explique le harnais hébergé, le serveur applicatif, les frontières des environnements d'exécution hébergés par OpenAI et auto-hébergés.",{},{"id":840,"data":841,"type":810,"tunes":847},"src-api-config",{"link":842,"meta":843},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fconfiguration",{"image":844,"title":845,"description":846},{"url":417},"OpenAI — Configuration des agents","Définit la configuration réutilisable des agents et la personnalisation au niveau de la session.",{},{"id":849,"data":850,"type":810,"tunes":856},"src-api-sessions",{"link":851,"meta":852},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions",{"image":853,"title":854,"description":855},{"url":417},"OpenAI — Exécuter et poursuivre des sessions","Documente les sessions durables, les tours asynchrones, le streaming et le pilotage.",{},{"id":858,"data":859,"type":810,"tunes":865},"src-api-functions",{"link":860,"meta":861},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Ftools\u002Ffunctions",{"image":862,"title":863,"description":864},{"url":417},"OpenAI — Fonctions de l'API Agents","Définition de l'outil de fonction et frontière du gestionnaire d'application pour les résultats de fonction requis.",{},{"id":867,"data":868,"type":810,"tunes":874},"src-api-webhooks",{"link":869,"meta":870},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fsessions\u002Fwebhooks",{"image":871,"title":872,"description":873},{"url":417},"OpenAI — Webhooks de session","Événements de cycle de vie pour les sessions asynchrones, les actions requises et les connexions à un environnement auto-hébergé.",{},{"id":876,"data":877,"type":810,"tunes":883},"src-api-observability",{"link":878,"meta":879},"https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fagents-api\u002Fobservability",{"image":880,"title":881,"description":882},{"url":417},"OpenAI — Observabilité et utilisation de l'API Agents","Journaux de session, événements, tours, appels d'outils, sous-agents, traces et inspection de l'utilisation des jetons.",{},{"id":223,"data":885,"type":226,"tunes":887},{"text":886},"Migrer du SDK OpenAI Agents vers l'API Agents n'est pas un simple renommage d'import. La frontière architecturale fondamentale change : le SDK exécute la boucle de l'agent au sein de votre application, tandis que l'API Agents exécute un harnais Codex géré et une session durable du côté d'OpenAI. La question de la migration n'est donc pas « Quelles classes correspondent à quels points de terminaison ? » mais « Quelles responsabilités d'exécution traversent la frontière, lesquelles restent dans notre application, et lesquelles doivent être repensées ? »",{},{"id":229,"data":889,"type":234,"tunes":891},{"body":890,"title":232,"variant":233},"\u003Cstrong>Une véritable migration du SDK Agents vers l'API Agents modifie la propriété de l'exécution.\u003C\u002Fstrong> Votre configuration d'agent réutilisable peut toujours contenir le modèle, les instructions et les outils, mais la boucle, la session durable, l'orchestration, la compaction du contexte et la récupération se déplacent vers l'exécution gérée de l'API Agents. Votre application doit conserver l'état du domaine, l'autorisation, les règles métier, les implémentations de fonctions et la logique d'audit en dehors de la session de l'agent. Traitez la migration comme une refonte de frontière, et non comme une conversion mécanique de code.",{},{"id":237,"data":893,"type":234,"tunes":895},{"body":894,"title":240,"variant":241},"OpenAI marque actuellement le SDK Agents comme \u003Cstrong>fonctionnalités complètes\u003C\u002Fstrong> et recommande l'API Agents pour les nouvelles applications d'agents. L'API Agents est en bêta publique. Les applications SDK existantes restent prises en charge, et une migration immédiate n'est pas automatiquement requise.",{},{"id":244,"data":897,"type":234,"tunes":898},{"body":246,"title":247,"variant":248},{},{"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},"La migration va d'une boucle gérée par l'application à un harnais géré",{},{"id":256,"data":908,"type":226,"tunes":910},{"text":909},"Dans le SDK Agents, une exécution est un tour au niveau de l'application. Le runner du SDK appelle le modèle, inspecte la sortie, exécute les outils, suit les transferts et continue jusqu'à atteindre un point d'arrêt. Votre processus héberge cette boucle et en possède donc le cycle de vie.",{},{"id":261,"data":912,"type":226,"tunes":914},{"text":913},"Dans l'API Agents, OpenAI exécute le harnais. Une session est une instance durable d'une configuration d'agent qui accepte des tâches, produit des événements, peut se mettre en pause pour des actions requises et peut se poursuivre dans le temps. OpenAI gère les sessions, l'orchestration, la compaction du contexte et la récupération ; votre application envoie le travail, gère les outils de fonction, reçoit les événements et gère éventuellement un environnement d'exécution auto-hébergé.",{},{"id":266,"data":916,"type":226,"tunes":918},{"text":917},"Ce transfert de propriété constitue la migration. Tout le reste — syntaxe de l'API, schémas d'outils, gestion des événements, identifiants de session — en découle.",{},{"id":271,"data":920,"type":42,"tunes":921},{"text":273,"level":219},{},{"id":276,"data":923,"type":327,"tunes":942},{"content":924,"stretched":43,"withHeadings":14},[925,926,928,929,930,931,932,934,935,938,939,940],[280,281,282],[284,927,286],"S'exécute dans votre application via le runner du SDK",[288,289,290],[292,293,294],[296,297,298],[300,301,302],[304,305,933],"Comportement du harnais \u002F des sous-agents dans l'API Agents ; ne présumez pas d'une sémantique univoque",[308,309,310],[936,937,314],"Streaming","Streaming du SDK depuis l'exécution",[316,317,318],[320,321,322],[324,325,941],"Récupération gérée du harnais \u002F de la session plus récupération propre à l'application pour les systèmes externes et les environnements auto-hébergés",{},{"id":330,"data":944,"type":42,"tunes":945},{"text":332,"level":219},{},{"id":335,"data":947,"type":226,"tunes":948},{"text":337},{},{"id":340,"data":950,"type":226,"tunes":951},{"text":342},{},{"id":345,"data":953,"type":234,"tunes":954},{"body":347,"title":348,"variant":349},{},{"id":352,"data":956,"type":42,"tunes":958},{"text":957,"level":219},"Ce qui ne doit pas être migré un à un",{},{"id":357,"data":960,"type":226,"tunes":962},{"text":961},"Le schéma de migration dangereux consiste à recréer chaque abstraction d'exécution du SDK au sein de l'API Agents. Cela peut vous amener à payer pour un harnais managé tout en exploitant un harnais fantôme dans votre application.",{},{"id":362,"data":964,"type":327,"tunes":982},{"content":965,"stretched":43,"withHeadings":14},[966,967,971,974,977,979,981],[366,367,368],[968,969,970],"La boucle applicative gère chaque continuation","L'API Agents gère déjà la boucle du harnais","Quelle logique de continuation relève du produit, et laquelle doit être déplacée vers la session managée ?",[972,375,973],"L'objet de session local est le mécanisme principal de continuité","Quel état appartient à la session plutôt qu'à la base de données du produit ?",[975,976,380],"Chaque interruption est traitée de manière synchrone","Les tours de l'API Agents sont asynchrones et peuvent exposer des états action_required",[978,383,384],"Toute l'exécution des outils se fait là où le processus du SDK s'exécute",[386,980,388],"L'API Agents expose les événements de session, les tours et les traces managées",[390,391,392],{},{"id":395,"data":984,"type":42,"tunes":986},{"text":985,"level":219},"Étape 1 — Séparer l'état du domaine de l'état de la session de l'agent",{},{"id":400,"data":988,"type":226,"tunes":990},{"text":989},"Avant de toucher aux appels d'API, classez l'état que votre application SDK transporte actuellement. Certains états n'existent que pour maintenir la conversation de l'agent en mouvement. D'autres états constituent la vérité métier : permissions utilisateur, statut du projet, données de commande, approbation de workflow, dossiers clients, versions de documents, état des politiques ou configuration applicative.",{},{"id":405,"data":992,"type":226,"tunes":993},{"text":407},{},{"id":410,"data":995,"type":441,"tunes":1010},{"rows":996,"title":430,"layout":327,"columns":1006},[997,1000,1002,1004],{"id":414,"label":998,"values":999},"Continuité de la conversation",[417,417,417],{"id":419,"label":420,"values":1001},[417,417,417],{"id":423,"label":424,"values":1003},[417,417,417],{"id":427,"label":428,"values":1005},[417,417,417],[1007,1008,1009],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":1012,"type":42,"tunes":1014},{"text":1013,"level":219},"Étape 2 — Convertir l'état d'esprit du runner en état d'esprit session et événements",{},{"id":449,"data":1016,"type":226,"tunes":1018},{"text":1017},"Les applications SDK pensent souvent en termes d'appel à run et de réception d'un résultat. L'API Agents pense en termes de session durable dont les tours peuvent s'exécuter de manière asynchrone. Un message à une session inactive démarre un travail ; un message pendant un tour actif peut l'orienter. La progression arrive via le streaming ou les webhooks.",{},{"id":454,"data":1020,"type":226,"tunes":1022},{"text":1021},"Cela affecte l'architecture applicative. Un travail de production de longue durée ne doit pas dépendre du maintien en vie d'une seule requête HTTP. Votre produit a besoin d'identifiants de session stables, de persistance du cycle de vie, de vérification des webhooks, de gestionnaires idempotents et d'un moyen de réconcilier l'état actuel de la session après un redémarrage de processus.",{},{"id":459,"data":1024,"type":42,"tunes":1025},{"text":461,"level":219},{},{"id":464,"data":1027,"type":226,"tunes":1029},{"text":1028},"Les outils de fonction restent une frontière applicative importante. Vous définissez la fonction et son schéma JSON dans la configuration de l'agent. Lorsque le harnais a besoin de la fonction, la session peut entrer dans un état d'action requise. Votre application récupère l'action requise, exécute la logique métier et renvoie le résultat.",{},{"id":469,"data":1031,"type":226,"tunes":1033},{"text":1032},"Cela signifie que l'implémentation de la fonction doit pouvoir être reprise en toute sécurité. Un webhook peut être livré pendant qu'un autre worker traite. Une défaillance réseau peut survenir après l'effet de bord externe mais avant le renvoi du résultat. La migration est donc un bon moment pour ajouter des identifiants d'appel, des clés d'idempotence, une autorisation explicite, des politiques de délai d'attente et des enregistrements d'audit aux outils à conséquences.",{},{"id":474,"data":1035,"type":234,"tunes":1038},{"body":1036,"title":1037,"variant":241},"Ne traitez pas un appel de fonction provenant du harnais managé comme une autorisation d'exécuter l'action. Le harnais décide \u003Cem>ce qu'il veut appeler\u003C\u002Fem> ; votre application décide toujours si l'utilisateur actuel, la session et l'état métier permettent cette action.","Piège de la migration des outils",{},{"id":480,"data":1040,"type":42,"tunes":1041},{"text":482,"level":219},{},{"id":485,"data":1043,"type":226,"tunes":1045},{"text":1044},"L'API Agents sépare le harnais managé de l'environnement d'exécution. Un agent peut fonctionner sans environnement dédié, dans un bac à sable hébergé par OpenAI, ou via un environnement auto-hébergé connecté à la session.",{},{"id":490,"data":1047,"type":226,"tunes":1049},{"text":1048},"Cela crée une décision de migration que les applications SDK n'ont peut-être jamais prise explicitement : quel code doit s'exécuter comme fonction applicative, quel code appartient à un bac à sable, et quelles charges de travail nécessitent une infrastructure que vous contrôlez ?",{},{"id":495,"data":1051,"type":327,"tunes":1062},{"content":1052,"stretched":43,"withHeadings":14},[1053,1054,1055,1056,1058,1060],[499,500],[502,503],[505,506],[1057,509],"Accéder à des ressources réseau privées, à des logiciels système personnalisés ou à une puissance de calcul locale contrôlée",[511,1059],"Stockage détenu par l'application, pas seulement le système de fichiers du bac à sable",[514,1061],"Fonction applicative avec contrôles d'autorisation et d'audit",{},{"id":518,"data":1064,"type":42,"tunes":1065},{"text":520,"level":219},{},{"id":523,"data":1067,"type":226,"tunes":1069},{"text":1068},"Le harnais géré assure une récupération au niveau de la session, mais votre application reste propriétaire de chaque dépendance externe qui l'entoure. Les environnements auto-hébergés nécessitent un provisionnement, une reconnexion et un arrêt. Les gestionnaires de fonctions peuvent échouer. Les webhooks peuvent être réessayés. L'état côté produit peut changer pendant qu'un agent est inactif.",{},{"id":528,"data":1071,"type":226,"tunes":1073},{"text":1072},"La migration nécessite donc deux modèles de récupération : la récupération du runtime de l'agent et la récupération des opérations métier. La première est de plus en plus gérée par l'API Agents. La seconde reste de votre responsabilité.",{},{"id":533,"data":1075,"type":42,"tunes":1076},{"text":535,"level":219},{},{"id":538,"data":1078,"type":226,"tunes":1080},{"text":1079},"Les sessions de l'API Agents exposent les événements, l'historique sauvegardé, les tours, les appels d'outils, les sous-agents et l'utilisation des tokens. OpenAI fournit également des journaux de session dans la plateforme et l'export de traces.",{},{"id":543,"data":1082,"type":226,"tunes":1084},{"text":1083},"Ne renoncez pas à l'observabilité de votre application sous prétexte que les traces de la plateforme se sont améliorées. Les journaux produit doivent toujours relier la session de l'agent à l'identité de l'utilisateur, à la décision d'autorisation, à l'objet métier, à l'effet de bord de l'outil, à l'enregistrement d'approbation et au résultat final accepté. La trace de production utile est la jonction entre les preuves du runtime de l'agent et celles du runtime métier.",{},{"id":548,"data":1086,"type":554,"tunes":1087},{"url":550,"title":551,"excerpt":552,"ctaLabel":553},{},{"id":557,"data":1089,"type":42,"tunes":1091},{"text":1090,"level":219},"Étape 7 — Préserver les évaluations avant de changer le runtime",{},{"id":562,"data":1093,"type":226,"tunes":1095},{"text":1094},"Une migration peut sembler réussie parce que le nouveau système produit toujours des réponses plausibles tout en modifiant silencieusement le choix des outils, la continuité de session, le comportement de transfert, la latence ou la récupération après échec. Établissez la référence comportementale avant de changer de runtime.",{},{"id":567,"data":1097,"type":226,"tunes":1099},{"text":1098},"La référence doit inclure des tâches représentatives, les appels d'outils attendus, les actions interdites, les points d'approbation, la continuité d'état, les scénarios de récupération et les critères d'acceptation du résultat final. Exécutez les anciennes et nouvelles architectures sur les mêmes cas chaque fois que possible.",{},{"id":572,"data":1101,"type":42,"tunes":1102},{"text":574,"level":219},{},{"id":577,"data":1104,"type":606,"tunes":1116},{"steps":1105,"title":604,"orientation":605},[1106,1107,1108,1109,1110,1111,1112,1114],{"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":1113,"description":600},"7. Exécuter du trafic en mode fantôme",{"label":602,"description":1115},"Conservez les adaptateurs d'intégration et la capacité de retour arrière jusqu'à ce que le comportement en production soit stable.",{},{"id":609,"data":1118,"type":42,"tunes":1119},{"text":611,"level":219},{},{"id":614,"data":1121,"type":327,"tunes":1136},{"content":1122,"stretched":43,"withHeadings":14},[1123,1124,1125,1126,1128,1129,1131,1132,1133,1135],[618,619],[621,622],[624,625],[627,1127],"Le travail peut-il reprendre entre les tours, les redémarrages et les attentes asynchrones ?",[324,631],[633,1130],"Chaque action conséquente peut-elle être reliée à la session, à l'utilisateur, à l'appel d'outil et à l'objet métier ?",[636,637],[639,640],[642,1134],"Quels changements dans l'utilisation des modèles, l'utilisation du bac à sable, le contexte répété et les opérations d'infrastructure ?",[645,646],{},{"id":649,"data":1138,"type":42,"tunes":1139},{"text":651,"level":219},{},{"id":654,"data":1141,"type":226,"tunes":1143},{"text":1142},"Une application existante basée sur le SDK Agents ne devient pas une mauvaise architecture simplement parce que l'orientation de la plateforme a changé. OpenAI poursuit la maintenance, les correctifs de sécurité, les corrections de bugs critiques et le travail de compatibilité. Si l'application est stable, bien évaluée et n'a aucune exigence de feuille de route bloquée, une migration immédiate du runtime peut ne pas être justifiée.",{},{"id":659,"data":1145,"type":670,"tunes":1149},{"meta":1146,"items":1147,"style":669},{},[663,664,665,666,1148,668],"Votre équipe n'a pas encore séparé l'état métier de l'état du runtime de l'agent, ce qui rend le basculement dangereux.",{},{"id":673,"data":1151,"type":42,"tunes":1152},{"text":675,"level":219},{},{"id":678,"data":1154,"type":226,"tunes":1156},{"text":1155},"La migration devient plus convaincante lorsque les exigences produit s'alignent avec le harnais managé : travail durable de longue durée, compaction et récupération du contexte gérées par la plateforme, capacités plus récentes du runtime d'agents, exécution en sandbox, gestion plus riche du cycle de vie hébergé, ou le désir de réduire la quantité de code d'orchestration que votre application exploite.",{},{"id":683,"data":1158,"type":226,"tunes":1160},{"text":1159},"Le signal le plus fort n'est pas « l'ancien SDK est complet en fonctionnalités ». C'est « notre feuille de route dépend désormais de capacités dont le foyer naturel est le runtime managé de l'API Agents ».",{},{"id":688,"data":1162,"type":42,"tunes":1163},{"text":690,"level":219},{},{"id":693,"data":1165,"type":226,"tunes":1167},{"text":1166},"La stratégie de migration changerait si OpenAI publiait des outils de migration automatisés, introduisait des couches de compatibilité explicites, modifiait la sémantique des sessions de l'API Agents, élargissait ou réduisait la prise en charge des environnements auto-hébergés, ou modifiait la politique de support du SDK Agents.",{},{"id":698,"data":1169,"type":226,"tunes":1171},{"text":1170},"Cela changerait aussi si vos exigences produit changent. Un simple assistant requête-réponse peut ne pas avoir besoin du tout d'un harnais managé durable. Un agent de codage, de recherche ou d'opérations de longue durée peut bénéficier beaucoup plus du modèle de propriété de l'API Agents.",{},{"id":703,"data":1173,"type":42,"tunes":1174},{"text":705,"level":219},{},{"id":708,"data":1176,"type":226,"tunes":1178},{"text":1177},"Il n'existe pas de correspondance universelle un-à-un entre le SDK et l'API pour la migration, car les applications utilisent le SDK Agents différemment. Certaines s'appuient fortement sur les sessions et les transferts ; d'autres l'utilisent comme un simple exécuteur autour d'outils fonctionnels. La migration correcte dépend des responsabilités que votre application assume réellement aujourd'hui.",{},{"id":713,"data":1180,"type":226,"tunes":1182},{"text":1181},"L'API Agents est également en bêta publique, donc les détails d'implémentation peuvent évoluer. Considérez les principes de propriété dans cet article comme plus durables que toute forme d'endpoint individuelle.",{},{"id":718,"data":1184,"type":42,"tunes":1185},{"text":720,"level":219},{},{"id":723,"data":1187,"type":226,"tunes":1189},{"text":1188},"Migrer du SDK Agents vers l'API Agents se comprend mieux comme un déplacement de la frontière du runtime d'agents. Le harnais managé prend en charge davantage de la boucle, de la continuité de session, de la compaction et de la récupération. Votre application doit devenir plus explicite sur les responsabilités qui restent les vôtres : vérité métier, autorisation, effets de bord des fonctions, artefacts, auditabilité et cycle de vie produit.",{},{"id":728,"data":1191,"type":226,"tunes":1193},{"text":1192},"Si une migration laisse en place toute l'ancienne machinerie d'orchestration et se contente de remplacer les appels SDK par des appels à l'API Agents, elle a probablement manqué l'opportunité architecturale. L'objectif n'est pas de reproduire l'ancien runtime au-dessus du nouveau. L'objectif est de décider quelles responsabilités de runtime n'appartiennent plus à votre application.",{},{"id":733,"data":1195,"type":42,"tunes":1196},{"text":735,"level":219},{},{"id":738,"data":1198,"type":738,"tunes":1212},{"items":1199,"title":1211},[1200,1203,1205,1207,1209],{"id":742,"answer":1201,"question":1202},"Non. Le changement principal est la propriété du runtime : le SDK Agents exécute la boucle d'agent dans votre application, tandis que l'API Agents exécute un harnais Codex managé et une session durable. L'état, le cycle de vie, la gestion des événements et la récupération doivent être revus comme des préoccupations architecturales.","Migrer du SDK Agents vers l'API Agents est-ce juste une réécriture d'API ?",{"id":746,"answer":1204,"question":748},"L'implémentation métier peut souvent être réutilisée si elle est déjà derrière une interface applicative stable. L'intégration côté agent change car les appels de fonction de l'API Agents sont gérés via les actions requises et les résultats de session.",{"id":750,"answer":1206,"question":752},"Généralement non. Conservez l'état métier et produit faisant autorité dans vos propres bases de données ou services. Utilisez la session d'agent pour la continuité de l'agent et le contexte de travail, pas comme seule source de vérité pour votre produit.",{"id":754,"answer":1208,"question":756},"Pas toujours, car le streaming est également disponible. Les webhooks sont particulièrement utiles pour les sessions de longue durée ou asynchrones où votre application doit réagir aux changements de cycle de vie sans maintenir un flux ouvert.",{"id":758,"answer":1210,"question":760},"Non. Le SDK reste pris en charge en mode maintenance. Migrez lorsque le nouveau runtime apporte une valeur significative à la feuille de route et après que le comportement requis a été validé par rapport à des évaluations de production.","Migrer du SDK Agents vers l'API Agents",{},{"id":764,"data":1214,"type":42,"tunes":1215},{"text":766,"level":219},{},{"id":769,"data":1217,"type":769,"tunes":1232},{"title":771,"entries":1218},[1219,1222,1224,1226,1228,1230],{"term":1220,"anchor":775,"definition":1221},"Frontière du runtime","La division des responsabilités entre le runtime d'agent géré par la plateforme et le runtime détenu par l'application.",{"term":778,"anchor":779,"definition":1223},"Le runtime d'agent qui coordonne les appels de modèle, les outils, le contexte, l'orchestration et l'exécution continue.",{"term":782,"anchor":783,"definition":1225},"Une instance durable de l'API Agents qui contient la configuration d'un agent, la conversation et le travail sauvegardé au fil des tours.",{"term":786,"anchor":787,"definition":1227},"Un état de session dans lequel l'API Agents a besoin d'une entrée externe telle qu'un résultat de fonction ou une connexion d'environnement avant que le travail puisse continuer.",{"term":509,"anchor":790,"definition":1229},"Un environnement d'exécution exploité par votre infrastructure et connecté au harnais managé de l'API Agents.",{"term":793,"anchor":794,"definition":1231},"Une méthode de validation par étapes qui compare le nouveau runtime aux références comportementales, aux injections de défaillance, aux traces et aux critères de basculement réversibles.",{},{"id":798,"data":1234,"type":42,"tunes":1235},{"text":800,"level":219},{},{"id":803,"data":1237,"type":810,"tunes":1241},{"link":805,"meta":1238},{"image":1239,"title":808,"description":1240},{"url":417},"Politique de support actuelle : le SDK Agents est complet en fonctionnalités, reste maintenu, et les nouvelles applications doivent commencer avec l'API Agents.",{},{"id":813,"data":1243,"type":810,"tunes":1247},{"link":815,"meta":1244},{"image":1245,"title":818,"description":1246},{"url":417},"Documentation de la boucle d'agent détenue par l'application du SDK et du modèle de continuation.",{},{"id":822,"data":1249,"type":810,"tunes":1253},{"link":824,"meta":1250},{"image":1251,"title":1252,"description":828},{"url":417},"OpenAI — Présentation de l'API Agents",{},{"id":831,"data":1255,"type":810,"tunes":1259},{"link":833,"meta":1256},{"image":1257,"title":836,"description":1258},{"url":417},"Explique le harness hébergé, le serveur d'application, les limites de l'environnement d'exécution hébergé par OpenAI et auto-hébergé.",{},{"id":840,"data":1261,"type":810,"tunes":1264},{"link":842,"meta":1262},{"image":1263,"title":845,"description":846},{"url":417},{},{"id":849,"data":1266,"type":810,"tunes":1269},{"link":851,"meta":1267},{"image":1268,"title":854,"description":855},{"url":417},{},{"id":858,"data":1271,"type":810,"tunes":1275},{"link":860,"meta":1272},{"image":1273,"title":863,"description":1274},{"url":417},"Définition de l'outil de fonction et limite du gestionnaire d'application pour les résultats de fonction requis.",{},{"id":867,"data":1277,"type":810,"tunes":1281},{"link":869,"meta":1278},{"image":1279,"title":872,"description":1280},{"url":417},"Événements de cycle de vie pour les sessions asynchrones, actions requises et connexions à l'environnement auto-hébergé.",{},{"id":876,"data":1283,"type":810,"tunes":1286},{"link":878,"meta":1284},{"image":1285,"title":881,"description":882},{"url":417},{},"2.31","La migration du SDK OpenAI Agents vers la nouvelle API Agents n'est pas un simple renommage d'import. La frontière d'exécution change : la boucle d'agent, la session durable, l'orchestration, la compaction du contexte et la récupération se déplacent vers un harnais managé. Ce guide montre ce qui doit être déplacé, ce qui doit rester dans votre application, et comment prouver la migration avant le basculement.","\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":1296,"de":1297,"sr":1298,"es":1299,"fr":1300,"it":1301,"ru":1302,"zh":1303},"\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",[1305,1309,1313],{"id":1306,"name":1307,"slug":1308},70,"Phases (Plan → Exécuter → Vérifier)","phases",{"id":1310,"name":1311,"slug":1312},73,"Vérification et diff","verification-and-diffing",{"id":1314,"name":1315,"slug":1316},71,"Registre des risques","risk-register",{"id":1318,"login":1319,"email":1320,"displayName":1321},"20","rooth8233","aleksandar@stajic.de","Aleksandar Stajić",[1323,2197],{"lang":1324,"title":1325,"content":1326,"contentJson":1327,"excerpt":2196},"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":1328,"blocks":1329,"version":2195},1790352173087,[1330,1334,1338,1343,1348,1353,1357,1361,1365,1369,1373,1424,1428,1432,1436,1441,1445,1449,1481,1485,1489,1493,1517,1521,1525,1529,1533,1537,1541,1546,1550,1554,1558,1580,1584,1588,1592,1596,1600,1604,1611,1615,1619,1623,1627,1656,1660,1692,1696,1700,1711,1715,1719,1723,1727,1731,1735,1739,1743,1747,1750,1754,1758,1761,1781,1785,1806,1810,1817,1824,1831,1838,1845,1852,1859,1866,1873,1876,1879,1882,1885,1888,1891,1894,1897,1900,1903,1919,1922,1925,1928,1931,1934,1937,1948,1951,1954,1957,1973,1976,1979,1982,1985,1988,1991,1994,1997,2000,2003,2013,2016,2019,2022,2025,2028,2031,2034,2037,2040,2043,2046,2058,2061,2075,2078,2081,2086,2089,2092,2095,2098,2101,2104,2107,2110,2113,2116,2119,2122,2125,2134,2137,2147,2150,2155,2160,2165,2170,2175,2180,2185,2190],{"id":215,"data":1331,"type":220,"tunes":1333},{"title":1332,"maxLevel":218,"minLevel":219},"Contents",{},{"id":223,"data":1335,"type":226,"tunes":1337},{"text":1336},"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":1339,"type":234,"tunes":1342},{"body":1340,"title":1341,"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":1344,"type":234,"tunes":1347},{"body":1345,"title":1346,"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":1349,"type":234,"tunes":1352},{"body":1350,"title":1351,"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":1354,"type":42,"tunes":1356},{"text":1355,"level":219},"The migration is from an application-owned loop to a managed harness",{},{"id":256,"data":1358,"type":226,"tunes":1360},{"text":1359},"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":1362,"type":226,"tunes":1364},{"text":1363},"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":1366,"type":226,"tunes":1368},{"text":1367},"That ownership shift is the migration. Everything else — API syntax, tool schemas, event handling, session IDs — follows from it.",{},{"id":271,"data":1370,"type":42,"tunes":1372},{"text":1371,"level":219},"The Runtime Boundary Migration Map",{},{"id":276,"data":1374,"type":327,"tunes":1423},{"content":1375,"stretched":43,"withHeadings":14},[1376,1380,1384,1388,1392,1396,1400,1404,1408,1411,1415,1419],[1377,1378,1379],"Concern","Agents SDK","Agents API migration target",[1381,1382,1383],"Agent loop","Runs in your application through the SDK runner","Runs in the managed Codex harness",[1385,1386,1387],"Reusable agent definition","Agent object in application code","Saved or inline agent configuration with model, instructions and tools",[1389,1390,1391],"Conversation \u002F work continuity","SDK session strategy, history, result continuation or application storage","Durable Agents API session",[1393,1394,1395],"Tool execution","SDK coordinates tool calls in your runtime","Harness requests function calls; your application returns results",[1397,1398,1399],"Context management","Your runtime \u002F SDK session strategy","Managed session context, compaction and recovery, plus your own application data boundaries",[1401,1402,1403],"Handoffs \u002F specialists","SDK orchestration primitives","Harness \u002F subagent behaviour in Agents API; do not assume one-to-one semantics",[1405,1406,1407],"Execution environment","Your application runtime or tool-specific environment","Optional OpenAI-hosted or self-hosted environment attached to the session",[936,1409,1410],"SDK streaming from the run","Agents API session event stream",[1412,1413,1414],"Async lifecycle","Usually application-managed around the SDK run","Native session states, asynchronous turns and webhooks",[1416,1417,1418],"Tracing \u002F observability","Agents SDK tracing and application logs","Agents session logs, events, turns, tool calls, subagents and exportable traces",[1420,1421,1422],"Recovery","Application responsibility","Managed harness\u002Fsession recovery plus application-owned recovery for external systems and self-hosted environments",{},{"id":330,"data":1425,"type":42,"tunes":1427},{"text":1426,"level":219},"What can migrate conceptually without changing ownership",{},{"id":335,"data":1429,"type":226,"tunes":1431},{"text":1430},"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":1433,"type":226,"tunes":1435},{"text":1434},"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":1437,"type":234,"tunes":1440},{"body":1438,"title":1439,"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":1442,"type":42,"tunes":1444},{"text":1443,"level":219},"What should not be migrated one-to-one",{},{"id":357,"data":1446,"type":226,"tunes":1448},{"text":1447},"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":1450,"type":327,"tunes":1480},{"content":1451,"stretched":43,"withHeadings":14},[1452,1456,1460,1464,1468,1472,1476],[1453,1454,1455],"SDK-era assumption","Why a direct copy is risky","Migration question",[1457,1458,1459],"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?",[1461,1462,1463],"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?",[1465,1466,1467],"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?",[1469,1470,1471],"All tool execution happens where the SDK process runs","Function handlers and execution environments can be separate","Where should each tool actually execute?",[1473,1474,1475],"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?",[1477,1478,1479],"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":1482,"type":42,"tunes":1484},{"text":1483,"level":219},"Step 1 — Separate domain state from agent session state",{},{"id":400,"data":1486,"type":226,"tunes":1488},{"text":1487},"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":1490,"type":226,"tunes":1492},{"text":1491},"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":1494,"type":441,"tunes":1516},{"rows":1495,"title":1508,"layout":327,"columns":1509},[1496,1499,1502,1505],{"id":414,"label":1497,"values":1498},"Conversation continuity",[417,417,417],{"id":419,"label":1500,"values":1501},"Business truth",[417,417,417],{"id":423,"label":1503,"values":1504},"Durable artifact",[417,417,417],{"id":427,"label":1506,"values":1507},"Working scratch state",[417,417,417],"State placement test",[1510,1512,1514],{"id":433,"label":1511},"State type",{"id":436,"label":1513},"Preferred owner",{"id":439,"label":1515},"Reason",{},{"id":444,"data":1518,"type":42,"tunes":1520},{"text":1519,"level":219},"Step 2 — Convert the runner mindset into a session-and-events mindset",{},{"id":449,"data":1522,"type":226,"tunes":1524},{"text":1523},"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":1526,"type":226,"tunes":1528},{"text":1527},"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":1530,"type":42,"tunes":1532},{"text":1531,"level":219},"Step 3 — Redesign function tools around required actions",{},{"id":464,"data":1534,"type":226,"tunes":1536},{"text":1535},"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":1538,"type":226,"tunes":1540},{"text":1539},"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":1542,"type":234,"tunes":1545},{"body":1543,"title":1544,"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":1547,"type":42,"tunes":1549},{"text":1548,"level":219},"Step 4 — Decide where execution should happen",{},{"id":485,"data":1551,"type":226,"tunes":1553},{"text":1552},"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":1555,"type":226,"tunes":1557},{"text":1556},"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":1559,"type":327,"tunes":1579},{"content":1560,"stretched":43,"withHeadings":14},[1561,1564,1567,1570,1573,1576],[1562,1563],"Need","Likely boundary",[1565,1566],"Call an existing internal service through controlled business logic","Function tool handled by your application",[1568,1569],"Run isolated code or work with temporary files without private infrastructure","OpenAI-hosted environment",[1571,1572],"Access private network resources, custom system software or controlled local compute","Self-hosted environment",[1574,1575],"Persist accepted product artifacts","Application-owned storage, not only sandbox filesystem",[1577,1578],"Execute a high-impact business side effect","Application function with authorization and audit controls",{},{"id":518,"data":1581,"type":42,"tunes":1583},{"text":1582,"level":219},"Step 5 — Replace implicit recovery with explicit lifecycle handling",{},{"id":523,"data":1585,"type":226,"tunes":1587},{"text":1586},"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":1589,"type":226,"tunes":1591},{"text":1590},"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":1593,"type":42,"tunes":1595},{"text":1594,"level":219},"Step 6 — Rebuild observability around the new trace boundary",{},{"id":538,"data":1597,"type":226,"tunes":1599},{"text":1598},"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":1601,"type":226,"tunes":1603},{"text":1602},"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":1605,"type":554,"tunes":1610},{"url":1606,"title":1607,"excerpt":1608,"ctaLabel":1609},"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":1612,"type":42,"tunes":1614},{"text":1613,"level":219},"Step 7 — Preserve evals before changing the runtime",{},{"id":562,"data":1616,"type":226,"tunes":1618},{"text":1617},"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":1620,"type":226,"tunes":1622},{"text":1621},"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":1624,"type":42,"tunes":1626},{"text":1625,"level":219},"The Migration Proof Test",{},{"id":577,"data":1628,"type":606,"tunes":1655},{"steps":1629,"title":1654,"orientation":605},[1630,1633,1636,1639,1642,1645,1648,1651],{"label":1631,"description":1632},"1. Freeze the behavioural baseline","Capture representative SDK traces, expected outputs, tool paths, approval points and failure cases.",{"label":1634,"description":1635},"2. Inventory state ownership","Mark each state field as agent-session state, authoritative domain state, durable artifact or ephemeral working state.",{"label":1637,"description":1638},"3. Reuse stable tool implementations","Keep business functions behind application interfaces; replace only the agent-facing integration where possible.",{"label":1640,"description":1641},"4. Build one Agents API vertical slice","Migrate one production-shaped workflow including session creation, tools, events, environment and persistence.",{"label":1643,"description":1644},"5. Inject interruptions","Test process restart, webhook retry, function timeout, self-hosted environment reconnect and stale domain state.",{"label":1646,"description":1647},"6. Compare traces, not only answers","Verify tool choice, authorization, evidence path, state transitions and side effects against the baseline.",{"label":1649,"description":1650},"7. Run shadow traffic","Where feasible, replay or mirror representative tasks before making the new runtime authoritative.",{"label":1652,"description":1653},"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":1657,"type":42,"tunes":1659},{"text":1658,"level":219},"What to measure during migration",{},{"id":614,"data":1661,"type":327,"tunes":1691},{"content":1662,"stretched":43,"withHeadings":14},[1663,1665,1668,1671,1674,1676,1679,1682,1685,1688],[618,1664],"Migration check",[1666,1667],"Task success","Does the new runtime meet the same or better acceptance criteria?",[1669,1670],"Tool correctness","Does it call the right tool with valid arguments and authorization?",[1672,1673],"State continuity","Can work resume across turns, restarts and asynchronous waits?",[1420,1675],"What happens after webhook loss, handler failure, environment disconnect or timeout?",[1677,1678],"Traceability","Can every consequential action be joined to session, user, tool call and domain object?",[1680,1681],"Context behaviour","Do long-running sessions preserve constraints without carrying stale application truth?",[1683,1684],"Latency","How do session startup, environment provisioning and multi-turn work affect user-visible time?",[1686,1687],"Cost","What changes in model usage, sandbox usage, repeated context and infrastructure operations?",[1689,1690],"Operational load","Which previously application-owned responsibilities actually disappeared, and which merely moved?",{},{"id":649,"data":1693,"type":42,"tunes":1695},{"text":1694,"level":219},"When not to migrate yet",{},{"id":654,"data":1697,"type":226,"tunes":1699},{"text":1698},"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":659,"data":1701,"type":670,"tunes":1710},{"meta":1702,"items":1703,"style":669},{},[1704,1705,1706,1707,1708,1709],"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":673,"data":1712,"type":42,"tunes":1714},{"text":1713,"level":219},"When the migration becomes strategically important",{},{"id":678,"data":1716,"type":226,"tunes":1718},{"text":1717},"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":683,"data":1720,"type":226,"tunes":1722},{"text":1721},"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":688,"data":1724,"type":42,"tunes":1726},{"text":1725,"level":219},"What would change this answer?",{},{"id":693,"data":1728,"type":226,"tunes":1730},{"text":1729},"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":698,"data":1732,"type":226,"tunes":1734},{"text":1733},"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":703,"data":1736,"type":42,"tunes":1738},{"text":1737,"level":219},"Limitations",{},{"id":708,"data":1740,"type":226,"tunes":1742},{"text":1741},"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":713,"data":1744,"type":226,"tunes":1746},{"text":1745},"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":718,"data":1748,"type":42,"tunes":1749},{"text":720,"level":219},{},{"id":723,"data":1751,"type":226,"tunes":1753},{"text":1752},"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":728,"data":1755,"type":226,"tunes":1757},{"text":1756},"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":733,"data":1759,"type":42,"tunes":1760},{"text":735,"level":219},{},{"id":738,"data":1762,"type":738,"tunes":1780},{"items":1763,"title":1779},[1764,1767,1770,1773,1776],{"id":742,"answer":1765,"question":1766},"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":746,"answer":1768,"question":1769},"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":750,"answer":1771,"question":1772},"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":754,"answer":1774,"question":1775},"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":758,"answer":1777,"question":1778},"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":764,"data":1782,"type":42,"tunes":1784},{"text":1783,"level":219},"Glossary",{},{"id":769,"data":1786,"type":769,"tunes":1805},{"title":1787,"entries":1788},"Key migration terms",[1789,1792,1795,1797,1800,1802],{"term":1790,"anchor":775,"definition":1791},"Runtime boundary","The division of responsibility between the platform-managed agent runtime and the application-owned runtime.",{"term":1793,"anchor":779,"definition":1794},"Harness","The agent runtime that coordinates model calls, tools, context, orchestration and continued execution.",{"term":782,"anchor":783,"definition":1796},"A durable Agents API instance that holds an agent's configuration, conversation and saved work across turns.",{"term":1798,"anchor":787,"definition":1799},"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":1572,"anchor":790,"definition":1801},"An execution environment operated by your infrastructure and connected to the managed Agents API harness.",{"term":1803,"anchor":794,"definition":1804},"Migration proof test","A staged validation method that compares the new runtime against behavioural baselines, failure injections, traces and reversible cutover criteria.",{},{"id":798,"data":1807,"type":42,"tunes":1809},{"text":1808,"level":219},"Primary sources and further reading",{},{"id":803,"data":1811,"type":810,"tunes":1816},{"link":805,"meta":1812},{"image":1813,"title":1814,"description":1815},{"url":417},"OpenAI — Agents SDK","Current support policy: the Agents SDK is feature complete, remains maintained, and new applications should start with the Agents API.",{},{"id":813,"data":1818,"type":810,"tunes":1823},{"link":815,"meta":1819},{"image":1820,"title":1821,"description":1822},{"url":417},"OpenAI — Running agents with the Agents SDK","Documentation of the SDK application-owned agent loop and continuation model.",{},{"id":822,"data":1825,"type":810,"tunes":1830},{"link":824,"meta":1826},{"image":1827,"title":1828,"description":1829},{"url":417},"OpenAI — Agents API overview","Defines the Agents API core concepts: agent, environment, session, events and items.",{},{"id":831,"data":1832,"type":810,"tunes":1837},{"link":833,"meta":1833},{"image":1834,"title":1835,"description":1836},{"url":417},"OpenAI — Agents API architecture","Explains the hosted harness, application server, OpenAI-hosted and self-hosted execution environment boundaries.",{},{"id":840,"data":1839,"type":810,"tunes":1844},{"link":842,"meta":1840},{"image":1841,"title":1842,"description":1843},{"url":417},"OpenAI — Configuring Agents","Defines reusable agent configuration and session-level customization.",{},{"id":849,"data":1846,"type":810,"tunes":1851},{"link":851,"meta":1847},{"image":1848,"title":1849,"description":1850},{"url":417},"OpenAI — Run and continue sessions","Documents durable sessions, asynchronous turns, streaming and steering.",{},{"id":858,"data":1853,"type":810,"tunes":1858},{"link":860,"meta":1854},{"image":1855,"title":1856,"description":1857},{"url":417},"OpenAI — Agents API Functions","Function-tool definition and the application handler boundary for required function results.",{},{"id":867,"data":1860,"type":810,"tunes":1865},{"link":869,"meta":1861},{"image":1862,"title":1863,"description":1864},{"url":417},"OpenAI — Session webhooks","Lifecycle events for asynchronous sessions, required actions and self-hosted environment connections.",{},{"id":876,"data":1867,"type":810,"tunes":1872},{"link":878,"meta":1868},{"image":1869,"title":1870,"description":1871},{"url":417},"OpenAI — Agents API observability and usage","Session logs, events, turns, tool calls, subagents, traces and token-usage inspection.",{},{"id":223,"data":1874,"type":226,"tunes":1875},{"text":1336},{},{"id":229,"data":1877,"type":234,"tunes":1878},{"body":1340,"title":1341,"variant":233},{},{"id":237,"data":1880,"type":234,"tunes":1881},{"body":1345,"title":1346,"variant":241},{},{"id":244,"data":1883,"type":234,"tunes":1884},{"body":1350,"title":1351,"variant":248},{},{"id":900,"data":1886,"type":220,"tunes":1887},{"title":1332,"maxLevel":218,"minLevel":219},{},{"id":251,"data":1889,"type":42,"tunes":1890},{"text":1355,"level":219},{},{"id":256,"data":1892,"type":226,"tunes":1893},{"text":1359},{},{"id":261,"data":1895,"type":226,"tunes":1896},{"text":1363},{},{"id":266,"data":1898,"type":226,"tunes":1899},{"text":1367},{},{"id":271,"data":1901,"type":42,"tunes":1902},{"text":1371,"level":219},{},{"id":276,"data":1904,"type":327,"tunes":1918},{"content":1905,"stretched":43,"withHeadings":14},[1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917],[1377,1378,1379],[1381,1382,1383],[1385,1386,1387],[1389,1390,1391],[1393,1394,1395],[1397,1398,1399],[1401,1402,1403],[1405,1406,1407],[936,1409,1410],[1412,1413,1414],[1416,1417,1418],[1420,1421,1422],{},{"id":330,"data":1920,"type":42,"tunes":1921},{"text":1426,"level":219},{},{"id":335,"data":1923,"type":226,"tunes":1924},{"text":1430},{},{"id":340,"data":1926,"type":226,"tunes":1927},{"text":1434},{},{"id":345,"data":1929,"type":234,"tunes":1930},{"body":1438,"title":1439,"variant":349},{},{"id":352,"data":1932,"type":42,"tunes":1933},{"text":1443,"level":219},{},{"id":357,"data":1935,"type":226,"tunes":1936},{"text":1447},{},{"id":362,"data":1938,"type":327,"tunes":1947},{"content":1939,"stretched":43,"withHeadings":14},[1940,1941,1942,1943,1944,1945,1946],[1453,1454,1455],[1457,1458,1459],[1461,1462,1463],[1465,1466,1467],[1469,1470,1471],[1473,1474,1475],[1477,1478,1479],{},{"id":395,"data":1949,"type":42,"tunes":1950},{"text":1483,"level":219},{},{"id":400,"data":1952,"type":226,"tunes":1953},{"text":1487},{},{"id":405,"data":1955,"type":226,"tunes":1956},{"text":1491},{},{"id":410,"data":1958,"type":441,"tunes":1972},{"rows":1959,"title":1508,"layout":327,"columns":1968},[1960,1962,1964,1966],{"id":414,"label":1497,"values":1961},[417,417,417],{"id":419,"label":1500,"values":1963},[417,417,417],{"id":423,"label":1503,"values":1965},[417,417,417],{"id":427,"label":1506,"values":1967},[417,417,417],[1969,1970,1971],{"id":433,"label":1511},{"id":436,"label":1513},{"id":439,"label":1515},{},{"id":444,"data":1974,"type":42,"tunes":1975},{"text":1519,"level":219},{},{"id":449,"data":1977,"type":226,"tunes":1978},{"text":1523},{},{"id":454,"data":1980,"type":226,"tunes":1981},{"text":1527},{},{"id":459,"data":1983,"type":42,"tunes":1984},{"text":1531,"level":219},{},{"id":464,"data":1986,"type":226,"tunes":1987},{"text":1535},{},{"id":469,"data":1989,"type":226,"tunes":1990},{"text":1539},{},{"id":474,"data":1992,"type":234,"tunes":1993},{"body":1543,"title":1544,"variant":241},{},{"id":480,"data":1995,"type":42,"tunes":1996},{"text":1548,"level":219},{},{"id":485,"data":1998,"type":226,"tunes":1999},{"text":1552},{},{"id":490,"data":2001,"type":226,"tunes":2002},{"text":1556},{},{"id":495,"data":2004,"type":327,"tunes":2012},{"content":2005,"stretched":43,"withHeadings":14},[2006,2007,2008,2009,2010,2011],[1562,1563],[1565,1566],[1568,1569],[1571,1572],[1574,1575],[1577,1578],{},{"id":518,"data":2014,"type":42,"tunes":2015},{"text":1582,"level":219},{},{"id":523,"data":2017,"type":226,"tunes":2018},{"text":1586},{},{"id":528,"data":2020,"type":226,"tunes":2021},{"text":1590},{},{"id":533,"data":2023,"type":42,"tunes":2024},{"text":1594,"level":219},{},{"id":538,"data":2026,"type":226,"tunes":2027},{"text":1598},{},{"id":543,"data":2029,"type":226,"tunes":2030},{"text":1602},{},{"id":548,"data":2032,"type":554,"tunes":2033},{"url":1606,"title":1607,"excerpt":1608,"ctaLabel":1609},{},{"id":557,"data":2035,"type":42,"tunes":2036},{"text":1613,"level":219},{},{"id":562,"data":2038,"type":226,"tunes":2039},{"text":1617},{},{"id":567,"data":2041,"type":226,"tunes":2042},{"text":1621},{},{"id":572,"data":2044,"type":42,"tunes":2045},{"text":1625,"level":219},{},{"id":577,"data":2047,"type":606,"tunes":2057},{"steps":2048,"title":1654,"orientation":605},[2049,2050,2051,2052,2053,2054,2055,2056],{"label":1631,"description":1632},{"label":1634,"description":1635},{"label":1637,"description":1638},{"label":1640,"description":1641},{"label":1643,"description":1644},{"label":1646,"description":1647},{"label":1649,"description":1650},{"label":1652,"description":1653},{},{"id":609,"data":2059,"type":42,"tunes":2060},{"text":1658,"level":219},{},{"id":614,"data":2062,"type":327,"tunes":2074},{"content":2063,"stretched":43,"withHeadings":14},[2064,2065,2066,2067,2068,2069,2070,2071,2072,2073],[618,1664],[1666,1667],[1669,1670],[1672,1673],[1420,1675],[1677,1678],[1680,1681],[1683,1684],[1686,1687],[1689,1690],{},{"id":649,"data":2076,"type":42,"tunes":2077},{"text":1694,"level":219},{},{"id":654,"data":2079,"type":226,"tunes":2080},{"text":1698},{},{"id":659,"data":2082,"type":670,"tunes":2085},{"meta":2083,"items":2084,"style":669},{},[1704,1705,1706,1707,1708,1709],{},{"id":673,"data":2087,"type":42,"tunes":2088},{"text":1713,"level":219},{},{"id":678,"data":2090,"type":226,"tunes":2091},{"text":1717},{},{"id":683,"data":2093,"type":226,"tunes":2094},{"text":1721},{},{"id":688,"data":2096,"type":42,"tunes":2097},{"text":1725,"level":219},{},{"id":693,"data":2099,"type":226,"tunes":2100},{"text":1729},{},{"id":698,"data":2102,"type":226,"tunes":2103},{"text":1733},{},{"id":703,"data":2105,"type":42,"tunes":2106},{"text":1737,"level":219},{},{"id":708,"data":2108,"type":226,"tunes":2109},{"text":1741},{},{"id":713,"data":2111,"type":226,"tunes":2112},{"text":1745},{},{"id":718,"data":2114,"type":42,"tunes":2115},{"text":720,"level":219},{},{"id":723,"data":2117,"type":226,"tunes":2118},{"text":1752},{},{"id":728,"data":2120,"type":226,"tunes":2121},{"text":1756},{},{"id":733,"data":2123,"type":42,"tunes":2124},{"text":735,"level":219},{},{"id":738,"data":2126,"type":738,"tunes":2133},{"items":2127,"title":1779},[2128,2129,2130,2131,2132],{"id":742,"answer":1765,"question":1766},{"id":746,"answer":1768,"question":1769},{"id":750,"answer":1771,"question":1772},{"id":754,"answer":1774,"question":1775},{"id":758,"answer":1777,"question":1778},{},{"id":764,"data":2135,"type":42,"tunes":2136},{"text":1783,"level":219},{},{"id":769,"data":2138,"type":769,"tunes":2146},{"title":1787,"entries":2139},[2140,2141,2142,2143,2144,2145],{"term":1790,"anchor":775,"definition":1791},{"term":1793,"anchor":779,"definition":1794},{"term":782,"anchor":783,"definition":1796},{"term":1798,"anchor":787,"definition":1799},{"term":1572,"anchor":790,"definition":1801},{"term":1803,"anchor":794,"definition":1804},{},{"id":798,"data":2148,"type":42,"tunes":2149},{"text":1808,"level":219},{},{"id":803,"data":2151,"type":810,"tunes":2154},{"link":805,"meta":2152},{"image":2153,"title":1814,"description":1815},{"url":417},{},{"id":813,"data":2156,"type":810,"tunes":2159},{"link":815,"meta":2157},{"image":2158,"title":1821,"description":1822},{"url":417},{},{"id":822,"data":2161,"type":810,"tunes":2164},{"link":824,"meta":2162},{"image":2163,"title":1828,"description":1829},{"url":417},{},{"id":831,"data":2166,"type":810,"tunes":2169},{"link":833,"meta":2167},{"image":2168,"title":1835,"description":1836},{"url":417},{},{"id":840,"data":2171,"type":810,"tunes":2174},{"link":842,"meta":2172},{"image":2173,"title":1842,"description":1843},{"url":417},{},{"id":849,"data":2176,"type":810,"tunes":2179},{"link":851,"meta":2177},{"image":2178,"title":1849,"description":1850},{"url":417},{},{"id":858,"data":2181,"type":810,"tunes":2184},{"link":860,"meta":2182},{"image":2183,"title":1856,"description":1857},{"url":417},{},{"id":867,"data":2186,"type":810,"tunes":2189},{"link":869,"meta":2187},{"image":2188,"title":1863,"description":1864},{"url":417},{},{"id":876,"data":2191,"type":810,"tunes":2194},{"link":878,"meta":2192},{"image":2193,"title":1870,"description":1871},{"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":2198,"excerpt":1288},{"time":212,"blocks":2199,"version":1287},[2200,2203,2206,2209,2212,2215,2218,2221,2224,2227,2230,2246,2249,2252,2255,2258,2261,2264,2275,2278,2281,2284,2300,2303,2306,2309,2312,2315,2318,2321,2324,2327,2330,2340,2343,2346,2349,2352,2355,2358,2361,2364,2367,2370,2373,2385,2388,2402,2405,2408,2413,2416,2419,2422,2425,2428,2431,2434,2437,2440,2443,2446,2449,2452,2461,2464,2474,2477,2482,2487,2492,2497,2502,2507,2512,2517,2522,2525,2528,2531,2534,2537,2540,2543,2546,2549,2552,2568,2571,2574,2577,2580,2583,2586,2597,2600,2603,2606,2622,2625,2628,2631,2634,2637,2640,2643,2646,2649,2652,2662,2665,2668,2671,2674,2677,2680,2683,2686,2689,2692,2695,2707,2710,2724,2727,2730,2735,2738,2741,2744,2747,2750,2753,2756,2759,2762,2765,2768,2771,2774,2783,2786,2796,2799,2804,2809,2814,2819,2824,2829,2834,2839],{"id":215,"data":2201,"type":220,"tunes":2202},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":223,"data":2204,"type":226,"tunes":2205},{"text":225},{},{"id":229,"data":2207,"type":234,"tunes":2208},{"body":231,"title":232,"variant":233},{},{"id":237,"data":2210,"type":234,"tunes":2211},{"body":239,"title":240,"variant":241},{},{"id":244,"data":2213,"type":234,"tunes":2214},{"body":246,"title":247,"variant":248},{},{"id":251,"data":2216,"type":42,"tunes":2217},{"text":253,"level":219},{},{"id":256,"data":2219,"type":226,"tunes":2220},{"text":258},{},{"id":261,"data":2222,"type":226,"tunes":2223},{"text":263},{},{"id":266,"data":2225,"type":226,"tunes":2226},{"text":268},{},{"id":271,"data":2228,"type":42,"tunes":2229},{"text":273,"level":219},{},{"id":276,"data":2231,"type":327,"tunes":2245},{"content":2232,"stretched":43,"withHeadings":14},[2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244],[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":2247,"type":42,"tunes":2248},{"text":332,"level":219},{},{"id":335,"data":2250,"type":226,"tunes":2251},{"text":337},{},{"id":340,"data":2253,"type":226,"tunes":2254},{"text":342},{},{"id":345,"data":2256,"type":234,"tunes":2257},{"body":347,"title":348,"variant":349},{},{"id":352,"data":2259,"type":42,"tunes":2260},{"text":354,"level":219},{},{"id":357,"data":2262,"type":226,"tunes":2263},{"text":359},{},{"id":362,"data":2265,"type":327,"tunes":2274},{"content":2266,"stretched":43,"withHeadings":14},[2267,2268,2269,2270,2271,2272,2273],[366,367,368],[370,371,372],[374,375,376],[378,379,380],[382,383,384],[386,387,388],[390,391,392],{},{"id":395,"data":2276,"type":42,"tunes":2277},{"text":397,"level":219},{},{"id":400,"data":2279,"type":226,"tunes":2280},{"text":402},{},{"id":405,"data":2282,"type":226,"tunes":2283},{"text":407},{},{"id":410,"data":2285,"type":441,"tunes":2299},{"rows":2286,"title":430,"layout":327,"columns":2295},[2287,2289,2291,2293],{"id":414,"label":415,"values":2288},[417,417,417],{"id":419,"label":420,"values":2290},[417,417,417],{"id":423,"label":424,"values":2292},[417,417,417],{"id":427,"label":428,"values":2294},[417,417,417],[2296,2297,2298],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2301,"type":42,"tunes":2302},{"text":446,"level":219},{},{"id":449,"data":2304,"type":226,"tunes":2305},{"text":451},{},{"id":454,"data":2307,"type":226,"tunes":2308},{"text":456},{},{"id":459,"data":2310,"type":42,"tunes":2311},{"text":461,"level":219},{},{"id":464,"data":2313,"type":226,"tunes":2314},{"text":466},{},{"id":469,"data":2316,"type":226,"tunes":2317},{"text":471},{},{"id":474,"data":2319,"type":234,"tunes":2320},{"body":476,"title":477,"variant":241},{},{"id":480,"data":2322,"type":42,"tunes":2323},{"text":482,"level":219},{},{"id":485,"data":2325,"type":226,"tunes":2326},{"text":487},{},{"id":490,"data":2328,"type":226,"tunes":2329},{"text":492},{},{"id":495,"data":2331,"type":327,"tunes":2339},{"content":2332,"stretched":43,"withHeadings":14},[2333,2334,2335,2336,2337,2338],[499,500],[502,503],[505,506],[508,509],[511,512],[514,515],{},{"id":518,"data":2341,"type":42,"tunes":2342},{"text":520,"level":219},{},{"id":523,"data":2344,"type":226,"tunes":2345},{"text":525},{},{"id":528,"data":2347,"type":226,"tunes":2348},{"text":530},{},{"id":533,"data":2350,"type":42,"tunes":2351},{"text":535,"level":219},{},{"id":538,"data":2353,"type":226,"tunes":2354},{"text":540},{},{"id":543,"data":2356,"type":226,"tunes":2357},{"text":545},{},{"id":548,"data":2359,"type":554,"tunes":2360},{"url":550,"title":551,"excerpt":552,"ctaLabel":553},{},{"id":557,"data":2362,"type":42,"tunes":2363},{"text":559,"level":219},{},{"id":562,"data":2365,"type":226,"tunes":2366},{"text":564},{},{"id":567,"data":2368,"type":226,"tunes":2369},{"text":569},{},{"id":572,"data":2371,"type":42,"tunes":2372},{"text":574,"level":219},{},{"id":577,"data":2374,"type":606,"tunes":2384},{"steps":2375,"title":604,"orientation":605},[2376,2377,2378,2379,2380,2381,2382,2383],{"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":2386,"type":42,"tunes":2387},{"text":611,"level":219},{},{"id":614,"data":2389,"type":327,"tunes":2401},{"content":2390,"stretched":43,"withHeadings":14},[2391,2392,2393,2394,2395,2396,2397,2398,2399,2400],[618,619],[621,622],[624,625],[627,628],[630,631],[633,634],[636,637],[639,640],[642,643],[645,646],{},{"id":649,"data":2403,"type":42,"tunes":2404},{"text":651,"level":219},{},{"id":654,"data":2406,"type":226,"tunes":2407},{"text":656},{},{"id":659,"data":2409,"type":670,"tunes":2412},{"meta":2410,"items":2411,"style":669},{},[663,664,665,666,667,668],{},{"id":673,"data":2414,"type":42,"tunes":2415},{"text":675,"level":219},{},{"id":678,"data":2417,"type":226,"tunes":2418},{"text":680},{},{"id":683,"data":2420,"type":226,"tunes":2421},{"text":685},{},{"id":688,"data":2423,"type":42,"tunes":2424},{"text":690,"level":219},{},{"id":693,"data":2426,"type":226,"tunes":2427},{"text":695},{},{"id":698,"data":2429,"type":226,"tunes":2430},{"text":700},{},{"id":703,"data":2432,"type":42,"tunes":2433},{"text":705,"level":219},{},{"id":708,"data":2435,"type":226,"tunes":2436},{"text":710},{},{"id":713,"data":2438,"type":226,"tunes":2439},{"text":715},{},{"id":718,"data":2441,"type":42,"tunes":2442},{"text":720,"level":219},{},{"id":723,"data":2444,"type":226,"tunes":2445},{"text":725},{},{"id":728,"data":2447,"type":226,"tunes":2448},{"text":730},{},{"id":733,"data":2450,"type":42,"tunes":2451},{"text":735,"level":219},{},{"id":738,"data":2453,"type":738,"tunes":2460},{"items":2454,"title":761},[2455,2456,2457,2458,2459],{"id":742,"answer":743,"question":744},{"id":746,"answer":747,"question":748},{"id":750,"answer":751,"question":752},{"id":754,"answer":755,"question":756},{"id":758,"answer":759,"question":760},{},{"id":764,"data":2462,"type":42,"tunes":2463},{"text":766,"level":219},{},{"id":769,"data":2465,"type":769,"tunes":2473},{"title":771,"entries":2466},[2467,2468,2469,2470,2471,2472],{"term":774,"anchor":775,"definition":776},{"term":778,"anchor":779,"definition":780},{"term":782,"anchor":783,"definition":784},{"term":786,"anchor":787,"definition":788},{"term":509,"anchor":790,"definition":791},{"term":793,"anchor":794,"definition":795},{},{"id":798,"data":2475,"type":42,"tunes":2476},{"text":800,"level":219},{},{"id":803,"data":2478,"type":810,"tunes":2481},{"link":805,"meta":2479},{"image":2480,"title":808,"description":809},{"url":417},{},{"id":813,"data":2483,"type":810,"tunes":2486},{"link":815,"meta":2484},{"image":2485,"title":818,"description":819},{"url":417},{},{"id":822,"data":2488,"type":810,"tunes":2491},{"link":824,"meta":2489},{"image":2490,"title":827,"description":828},{"url":417},{},{"id":831,"data":2493,"type":810,"tunes":2496},{"link":833,"meta":2494},{"image":2495,"title":836,"description":837},{"url":417},{},{"id":840,"data":2498,"type":810,"tunes":2501},{"link":842,"meta":2499},{"image":2500,"title":845,"description":846},{"url":417},{},{"id":849,"data":2503,"type":810,"tunes":2506},{"link":851,"meta":2504},{"image":2505,"title":854,"description":855},{"url":417},{},{"id":858,"data":2508,"type":810,"tunes":2511},{"link":860,"meta":2509},{"image":2510,"title":863,"description":864},{"url":417},{},{"id":867,"data":2513,"type":810,"tunes":2516},{"link":869,"meta":2514},{"image":2515,"title":872,"description":873},{"url":417},{},{"id":876,"data":2518,"type":810,"tunes":2521},{"link":878,"meta":2519},{"image":2520,"title":881,"description":882},{"url":417},{},{"id":223,"data":2523,"type":226,"tunes":2524},{"text":886},{},{"id":229,"data":2526,"type":234,"tunes":2527},{"body":890,"title":232,"variant":233},{},{"id":237,"data":2529,"type":234,"tunes":2530},{"body":894,"title":240,"variant":241},{},{"id":244,"data":2532,"type":234,"tunes":2533},{"body":246,"title":247,"variant":248},{},{"id":900,"data":2535,"type":220,"tunes":2536},{"title":217,"maxLevel":218,"minLevel":219},{},{"id":251,"data":2538,"type":42,"tunes":2539},{"text":905,"level":219},{},{"id":256,"data":2541,"type":226,"tunes":2542},{"text":909},{},{"id":261,"data":2544,"type":226,"tunes":2545},{"text":913},{},{"id":266,"data":2547,"type":226,"tunes":2548},{"text":917},{},{"id":271,"data":2550,"type":42,"tunes":2551},{"text":273,"level":219},{},{"id":276,"data":2553,"type":327,"tunes":2567},{"content":2554,"stretched":43,"withHeadings":14},[2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566],[280,281,282],[284,927,286],[288,289,290],[292,293,294],[296,297,298],[300,301,302],[304,305,933],[308,309,310],[936,937,314],[316,317,318],[320,321,322],[324,325,941],{},{"id":330,"data":2569,"type":42,"tunes":2570},{"text":332,"level":219},{},{"id":335,"data":2572,"type":226,"tunes":2573},{"text":337},{},{"id":340,"data":2575,"type":226,"tunes":2576},{"text":342},{},{"id":345,"data":2578,"type":234,"tunes":2579},{"body":347,"title":348,"variant":349},{},{"id":352,"data":2581,"type":42,"tunes":2582},{"text":957,"level":219},{},{"id":357,"data":2584,"type":226,"tunes":2585},{"text":961},{},{"id":362,"data":2587,"type":327,"tunes":2596},{"content":2588,"stretched":43,"withHeadings":14},[2589,2590,2591,2592,2593,2594,2595],[366,367,368],[968,969,970],[972,375,973],[975,976,380],[978,383,384],[386,980,388],[390,391,392],{},{"id":395,"data":2598,"type":42,"tunes":2599},{"text":985,"level":219},{},{"id":400,"data":2601,"type":226,"tunes":2602},{"text":989},{},{"id":405,"data":2604,"type":226,"tunes":2605},{"text":407},{},{"id":410,"data":2607,"type":441,"tunes":2621},{"rows":2608,"title":430,"layout":327,"columns":2617},[2609,2611,2613,2615],{"id":414,"label":998,"values":2610},[417,417,417],{"id":419,"label":420,"values":2612},[417,417,417],{"id":423,"label":424,"values":2614},[417,417,417],{"id":427,"label":428,"values":2616},[417,417,417],[2618,2619,2620],{"id":433,"label":434},{"id":436,"label":437},{"id":439,"label":440},{},{"id":444,"data":2623,"type":42,"tunes":2624},{"text":1013,"level":219},{},{"id":449,"data":2626,"type":226,"tunes":2627},{"text":1017},{},{"id":454,"data":2629,"type":226,"tunes":2630},{"text":1021},{},{"id":459,"data":2632,"type":42,"tunes":2633},{"text":461,"level":219},{},{"id":464,"data":2635,"type":226,"tunes":2636},{"text":1028},{},{"id":469,"data":2638,"type":226,"tunes":2639},{"text":1032},{},{"id":474,"data":2641,"type":234,"tunes":2642},{"body":1036,"title":1037,"variant":241},{},{"id":480,"data":2644,"type":42,"tunes":2645},{"text":482,"level":219},{},{"id":485,"data":2647,"type":226,"tunes":2648},{"text":1044},{},{"id":490,"data":2650,"type":226,"tunes":2651},{"text":1048},{},{"id":495,"data":2653,"type":327,"tunes":2661},{"content":2654,"stretched":43,"withHeadings":14},[2655,2656,2657,2658,2659,2660],[499,500],[502,503],[505,506],[1057,509],[511,1059],[514,1061],{},{"id":518,"data":2663,"type":42,"tunes":2664},{"text":520,"level":219},{},{"id":523,"data":2666,"type":226,"tunes":2667},{"text":1068},{},{"id":528,"data":2669,"type":226,"tunes":2670},{"text":1072},{},{"id":533,"data":2672,"type":42,"tunes":2673},{"text":535,"level":219},{},{"id":538,"data":2675,"type":226,"tunes":2676},{"text":1079},{},{"id":543,"data":2678,"type":226,"tunes":2679},{"text":1083},{},{"id":548,"data":2681,"type":554,"tunes":2682},{"url":550,"title":551,"excerpt":552,"ctaLabel":553},{},{"id":557,"data":2684,"type":42,"tunes":2685},{"text":1090,"level":219},{},{"id":562,"data":2687,"type":226,"tunes":2688},{"text":1094},{},{"id":567,"data":2690,"type":226,"tunes":2691},{"text":1098},{},{"id":572,"data":2693,"type":42,"tunes":2694},{"text":574,"level":219},{},{"id":577,"data":2696,"type":606,"tunes":2706},{"steps":2697,"title":604,"orientation":605},[2698,2699,2700,2701,2702,2703,2704,2705],{"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":1113,"description":600},{"label":602,"description":1115},{},{"id":609,"data":2708,"type":42,"tunes":2709},{"text":611,"level":219},{},{"id":614,"data":2711,"type":327,"tunes":2723},{"content":2712,"stretched":43,"withHeadings":14},[2713,2714,2715,2716,2717,2718,2719,2720,2721,2722],[618,619],[621,622],[624,625],[627,1127],[324,631],[633,1130],[636,637],[639,640],[642,1134],[645,646],{},{"id":649,"data":2725,"type":42,"tunes":2726},{"text":651,"level":219},{},{"id":654,"data":2728,"type":226,"tunes":2729},{"text":1142},{},{"id":659,"data":2731,"type":670,"tunes":2734},{"meta":2732,"items":2733,"style":669},{},[663,664,665,666,1148,668],{},{"id":673,"data":2736,"type":42,"tunes":2737},{"text":675,"level":219},{},{"id":678,"data":2739,"type":226,"tunes":2740},{"text":1155},{},{"id":683,"data":2742,"type":226,"tunes":2743},{"text":1159},{},{"id":688,"data":2745,"type":42,"tunes":2746},{"text":690,"level":219},{},{"id":693,"data":2748,"type":226,"tunes":2749},{"text":1166},{},{"id":698,"data":2751,"type":226,"tunes":2752},{"text":1170},{},{"id":703,"data":2754,"type":42,"tunes":2755},{"text":705,"level":219},{},{"id":708,"data":2757,"type":226,"tunes":2758},{"text":1177},{},{"id":713,"data":2760,"type":226,"tunes":2761},{"text":1181},{},{"id":718,"data":2763,"type":42,"tunes":2764},{"text":720,"level":219},{},{"id":723,"data":2766,"type":226,"tunes":2767},{"text":1188},{},{"id":728,"data":2769,"type":226,"tunes":2770},{"text":1192},{},{"id":733,"data":2772,"type":42,"tunes":2773},{"text":735,"level":219},{},{"id":738,"data":2775,"type":738,"tunes":2782},{"items":2776,"title":1211},[2777,2778,2779,2780,2781],{"id":742,"answer":1201,"question":1202},{"id":746,"answer":1204,"question":748},{"id":750,"answer":1206,"question":752},{"id":754,"answer":1208,"question":756},{"id":758,"answer":1210,"question":760},{},{"id":764,"data":2784,"type":42,"tunes":2785},{"text":766,"level":219},{},{"id":769,"data":2787,"type":769,"tunes":2795},{"title":771,"entries":2788},[2789,2790,2791,2792,2793,2794],{"term":1220,"anchor":775,"definition":1221},{"term":778,"anchor":779,"definition":1223},{"term":782,"anchor":783,"definition":1225},{"term":786,"anchor":787,"definition":1227},{"term":509,"anchor":790,"definition":1229},{"term":793,"anchor":794,"definition":1231},{},{"id":798,"data":2797,"type":42,"tunes":2798},{"text":800,"level":219},{},{"id":803,"data":2800,"type":810,"tunes":2803},{"link":805,"meta":2801},{"image":2802,"title":808,"description":1240},{"url":417},{},{"id":813,"data":2805,"type":810,"tunes":2808},{"link":815,"meta":2806},{"image":2807,"title":818,"description":1246},{"url":417},{},{"id":822,"data":2810,"type":810,"tunes":2813},{"link":824,"meta":2811},{"image":2812,"title":1252,"description":828},{"url":417},{},{"id":831,"data":2815,"type":810,"tunes":2818},{"link":833,"meta":2816},{"image":2817,"title":836,"description":1258},{"url":417},{},{"id":840,"data":2820,"type":810,"tunes":2823},{"link":842,"meta":2821},{"image":2822,"title":845,"description":846},{"url":417},{},{"id":849,"data":2825,"type":810,"tunes":2828},{"link":851,"meta":2826},{"image":2827,"title":854,"description":855},{"url":417},{},{"id":858,"data":2830,"type":810,"tunes":2833},{"link":860,"meta":2831},{"image":2832,"title":863,"description":1274},{"url":417},{},{"id":867,"data":2835,"type":810,"tunes":2838},{"link":869,"meta":2836},{"image":2837,"title":872,"description":1280},{"url":417},{},{"id":876,"data":2840,"type":810,"tunes":2843},{"link":878,"meta":2841},{"image":2842,"title":881,"description":882},{"url":417},{},"Post erfolgreich abgerufen",{"items":2846,"source":2868,"manualIds":2869,"manualMatchedIds":2870},[2847,2854,2861],{"id":2848,"slug":2849,"title":2850,"excerpt":2851,"featuredImage":2852,"publishedAt":2853},"451","test-dev-enterprise","Guide complet de Test DEv Enterprise Stajic.de : architecture et bonnes pratiques","Explorez les principes architecturaux, les avantages et les détails techniques de la gestion d'un environnement de développement et de test de niveau entreprise avec Test DEv Enterprise Stajic.de.","\u002Fuploads\u002F2026\u002F05\u002Ftest-dev-enterprise-1779534260081-r4dvxn.webp","2026-05-22T23:01:00.000Z",{"id":2855,"slug":2856,"title":2857,"excerpt":2858,"featuredImage":2859,"publishedAt":2860},"457","should-you-buy-5g-openwrt-router-old-firmware","Faut-il acheter un routeur 5G OpenWrt avec un ancien firmware ? Le ZBT Z8102AX comme exemple concret","Acheter un routeur 5G OpenWrt avec un ancien firmware peut avoir du sens, mais uniquement dans les bonnes conditions. Le ZBT Z8102AX illustre clairement les deux aspects : le matériel est utile, le modem fonctionne et le routeur est resté stable lors des tests, mais OpenWrt 21.02, un emballage faible et des chemins de mise à niveau peu clairs nécessitent une décision d'achat réfléchie.","\u002Fuploads\u002F2026\u002F06\u002Fopenwrt-router-review-dual-sim-05-1781620596218-5ldld4.webp","2026-06-16T10:41:00.000Z",{"id":2862,"slug":2863,"title":2864,"excerpt":2865,"featuredImage":2866,"publishedAt":2867},"477","computer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system","Agents d'utilisation de l'ordinateur : pourquoi une démonstration réussie peut tout de même être un système peu fiable","Les agents d'utilisation de l'ordinateur peuvent désormais accomplir d'impressionnants flux de travail sur navigateur et sur bureau, mais une seule exécution réussie prouve la capacité—non la fiabilité. Cet article montre comment tester la répétabilité, la robustesse environnementale, le contrôle à long horizon, la conscience de l'état, la vérification des résultats et la gestion sécurisée des objectifs.","\u002Fuploads\u002F2026\u002F09\u002Fcomputer-use-agents-why-a-successful-demo-can-still-be-an-unreliable-system-1790352854690-75qnrg.webp","2026-09-25T12:13:00.000Z","fallback",[],[]]