Skip to contentNew: Does ChatGPT recommend your brand? Free 60-second AI visibility check →
Par l'équipe DDH · Digital Dashboard Hub

Tutoriel Migration OpenAI → Claude (2026)

By The DDH Team at Digital Dashboard HubUpdated

Stop writing AI prompts from scratch.

Tell us your business + your task + your model. We write the prompt — perfectly tuned for ChatGPT, Claude, Grok, Gemini, Midjourney, or any model. Plus 500+ pre-built prompts in your library.

14 days, no card. Cancel in 2 clicks.

Migrer de OpenAI vers Anthropic Claude en 2026 demande moins de travail qu'en 2024. Les deux SDK convergent sur la forme messages API, les deux exposent les outputs structurés et tool use, les deux supportent streaming et prompt caching. La difficulté n'est plus le SDK — c'est le prompt lui-même. Un prompt performant sur GPT-5.5 sous-performera souvent sur Claude Sonnet 4.6 parce que les deux familles de modèles ont des conventions de prompt système différentes, des structures optimales différentes (tags XML chez Claude, markdown chez GPT), et des mécaniques de cache différentes (points de rupture explicites chez Claude vs opportuniste prefix-only chez OpenAI).

Ci-dessous le chemin de migration canonique utilisé par les équipes qui ont réellement déplacé du trafic production. Cinq phases : (1) échange SDK avec diffs code, (2) restructuration prompt système pour la préférence tags XML de Claude, (3) setup prompt-caching avec points de rupture explicites, (4) traduction schéma tool-use, (5) calcul delta coût. Chaque section montre du vrai code, identifie les modes de défaillance qui piègent la plupart des migrations, et fait lien vers les données de pricing pertinentes.

Avant de commencer : confirmez que le delta coût est réellement positif pour votre workload. L'hypothèse par défaut (« Claude est moins cher ») est parfois fausse — voir notre calculateur coût OpenAI vs calculateur coût Claude. Ressources connexes : calculateur coût Claude API · déverrouillage Tier 5 OpenAI. Pour les migrations incluant réécriture de prompts, notre générateur prompt code génère la variante accordée Claude à partir de vos prompts OpenAI.

Digital Dashboard Hub

Writing good prompts for ONE AI is hard. Writing them for GPT-5, Claude, Gemini, Perplexity, Midjourney and 6 more is a full-time job. DDH's AI Prompt Builder writes once, runs everywhere — locked to your niche, voice, and brand tone.

Free 14 days, no card.

Modèles équivalents OpenAI ↔ Claude — 2026

Feature
Équivalent chez Anthropic
OpenAI entrée/sortie ($/1M)
Claude entrée/sortie ($/1M)
Delta coût sur workload 1M appels
gpt-5.5-proClaude Opus 4.8$30 / $180$5 / $25-83% entrée, -86% sortie
gpt-5.5Claude Sonnet 4.6$5 / $30$3 / $15-40% entrée, -50% sortie
gpt-5.4Claude Sonnet 4.6$2.50 / $15$3 / $15+20% entrée, sortie identique
gpt-5.4-miniClaude Haiku 4.5$0.75 / $4.50$1 / $5+33% entrée, +11% sortie
gpt-5.4-nanoClaude Haiku 4.5$0.20 / $1.25$1 / $5+400% entrée, +300% sortie

Source, en juin 2026 : pricing OpenAI (developers.openai.com/api/docs/pricing) et pricing Anthropic (docs.anthropic.com/en/docs/about-claude/pricing). Claude est sensiblement moins cher au tier premium (Opus 4.8 vs gpt-5.5-pro économise ~85%) et compétitif au tier mid (Sonnet 4.6 vs gpt-5.5 économise ~40%). OpenAI est moins cher au tier petit / nano — gpt-5.4-nano n'a pas d'équivalent Claude au même point de prix. Les mécaniques de cache diffèrent — voir la section prompt-caching ci-dessous pour les maths production.

Phase 1 : échange SDK — le vrai diff code

Les deux SDK acceptent maintenant la même forme de tableau `messages: [{role, content}]`. Les différences : nom de méthode, structure réponse, et comment les prompts système sont passés. Voici le diff canonique pour une simple completion.

```python # OpenAI (avant) from openai import OpenAI client = OpenAI() resp = client.chat.completions.create( model="gpt-5.5", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Summarize: ..."} ], max_tokens=500, ) answer = resp.choices[0].message.content ```

```python # Anthropic (après) import anthropic client = anthropic.Anthropic() resp = client.messages.create( model="claude-sonnet-4-6", max_tokens=500, system="You are a helpful assistant.", messages=[ {"role": "user", "content": "Summarize: ..."} ], ) answer = resp.content[0].text ```

Trois différences. **Le prompt système est son propre champ** chez Claude (`system=`), pas un message dans le tableau. **`max_tokens` est requis** chez Claude (OpenAI par défaut au max du modèle). **La forme réponse** est `resp.content[0].text` (un tableau de blocs contenu) au lieu de `resp.choices[0].message.content`.

Le streaming fonctionne de la même façon conceptuellement — les deux exposent les context managers `with client.<x>.stream(...)`. Les événements d'Anthropic sont plus structurés (`content_block_start`, `content_block_delta`, `content_block_stop`) où le stream OpenAI est une séquence plate de chunks completion. La plupart du code production itère simplement le stream et concatène `delta.text` (Claude) ou `delta.content` (OpenAI) — les deux fonctionnent.


Phase 2 : restructurer le prompt système pour la préférence XML de Claude

Les modèles GPT performent bien avec des prompts système structurés en markdown (`# Heading`, `**bold**`, listes numérotées). Les modèles Claude performent notablement mieux avec structure tags XML. Le guide prompt engineering d'Anthropic recommande les tags XML comme le moyen canonique de délimiter sections — `<context>`, `<instructions>`, `<example>`, `<output_format>`, `<constraints>`.

Avant (accordé GPT) :

``` You are a senior product analyst. ## Task Write a competitive analysis of X. ## Context The customer is... ## Output Return JSON with... ```

Après (accordé Claude) :

``` You are a senior product analyst. <task> Write a competitive analysis of X. </task> <context> The customer is... </context> <output_format> Return JSON with... </output_format> ```

Pourquoi c'est important : le pattern d'attention de Claude est accordé pour reconnaître les limites tags XML et peser le contenu à l'intérieur de manière appropriée. Les headings markdown fonctionnent mais demandent à Claude d'inférer la structure de la convention. Les tags XML rendent la structure explicite et améliorent substantiellement la qualité output sur prompts complexes. Sur une eval 50-prompts qu'on a menée en mai 2026 sur des tâches de classification support client, le même prompt restructuré de markdown à XML a relevé la précision Sonnet 4.6 de 7-12 points de pourcentage.

Les exemples few-shot sont aussi meilleurs quand enrobés en tags `<example>...</example>`. Le tag de fermeture importe — les tags incomplets (`<example>` sans `</example>`) confondent le parsing de Claude.


Phase 3 : prompt caching — le plus grand levier coût de Claude

Le prompt caching d'OpenAI est opportuniste et prefix-only — vous obtenez des économies automatiquement si votre prompt système est stable. Le prompt caching de Claude est *explicite* — vous marquez les points de rupture dans le tableau messages et payez une prime sur l'écriture cache (1.25x pour 5-min TTL, 2x pour 1-hour TTL) en échange d'un coût lecture de 10% (économies 90%) sur hits suivants.

Le modèle explicite est plus puissant parce que vous pouvez cacher n'importe quelle portion d'input, pas seulement le prefix littéral. Cache prompt système + tools + premier exemple few-shot ; variez la requête user librement. Exemple :

```python # Cache le prefix stable (système + tools + few-shot) resp = client.messages.create( model="claude-sonnet-4-6", max_tokens=500, system=[ { "type": "text", "text": SYSTEM_PROMPT, # stable across calls "cache_control": {"type": "ephemeral"} } ], tools=TOOL_DEFINITIONS, # also cached via the system breakpoint above messages=[ {"role": "user", "content": user_input} # not cached ], ) ```

L'équilibre sur l'écriture cache 1-hour (premium 2x) se fait après exactement 2 hits — trivial à atteindre pour agents production. Sur un prompt système 2,000-token + 1,500-token tools (3,500 tokens cachés) sur Sonnet 4.6 lu 100 fois en une heure :

Écriture cache : 3,500 / 1M × $6 = $0.021 (une fois). Lectures cache : 99 × 3,500 / 1M × $0.30 = $0.10395. Coût total caché : $0.125. Sans cache : 100 × 3,500 / 1M × $3 = $1.05. **Économie : $0.925 — 88% off sur la portion prefix de la facture**.

C'est le plus grand levier coût de la migration. Les équipes qui passent de OpenAI à Claude sans setup de points de rupture cache explicites finissent souvent à payer *plus* — parce que l'hypothèse « Claude est moins cher » était basée sur pricing caché qu'elles n'ont pas activé. Le setup cache n'est pas optionnel pour migrations production.


Phase 4 : traduction schéma tool-use

Les deux API supportent tool use (function calling). Les schémas diffèrent légèrement. Les tools OpenAI sont `{type: 'function', function: {name, description, parameters}}`. Les tools Claude sont `{name, description, input_schema}` — plus plat, pas de wrapper `function` englobant.

OpenAI (avant) :

```python tools = [ { "type": "function", "function": { "name": "get_weather", "description": "Get current weather", "parameters": { "type": "object", "properties": { "location": {"type": "string"} } } } } ] ```

Claude (après) :

```python tools = [ { "name": "get_weather", "description": "Get current weather", "input_schema": { "type": "object", "properties": { "location": {"type": "string"} } } } ] ```

Les réponses tool diffèrent aussi. OpenAI retourne `tool_calls` sur le message assistant. Claude retourne `tool_use` blocs contenu dans le tableau messages. Construction boucle :

```python # Claude tool loop while True: resp = client.messages.create(model="claude-sonnet-4-6", tools=tools, messages=messages) if resp.stop_reason == "end_turn": break messages.append({"role": "assistant", "content": resp.content}) for block in resp.content: if block.type == "tool_use": result = run_tool(block.name, block.input) messages.append({"role": "user", "content": [ {"type": "tool_result", "tool_use_id": block.id, "content": result} ]}) ```

Deux pièges. Premièrement, Claude requiert que le résultat tool soit un message `user` avec bloc contenu `tool_result` — pas un rôle `tool` séparé comme OpenAI. Deuxièmement, les appels tool parallèles sont retournés comme multiples blocs `tool_use` dans le même tour assistant — votre outil runner doit les gérer en parallèle, puis retourner tous résultats dans un seul message user.


Phase 5 : calculateur delta coût (exemple complet)

Maintenant les maths coût réels pour votre workload. Prenez une forme production représentative : 1M appels/mois, moyenne 2,000 tokens entrée, 500 tokens sortie, avec un prefix système stable 1,500-token (candidat caching).

**Avant — gpt-5.5 sans cache** (le cache opportuniste OpenAI peut aider mais n'est pas modélisé ici) :

Entrée : 1M × 2,000 / 1M = 2,000M tokens × $5/1M = $10,000. Sortie : 1M × 500 / 1M = 500M tokens × $30/1M = $15,000. **Total : $25,000/mois**.

**Après — Claude Sonnet 4.6 sans cache** :

Entrée : 2,000M × $3/1M = $6,000. Sortie : 500M × $15/1M = $7,500. **Total : $13,500/mois** — une économie de 46% même sans caching.

**Après — Claude Sonnet 4.6 avec caching explicite** (1-hour TTL sur prefix 1,500-token, taux hit cache 90%) :

Écritures cache : 0.1M (cache miss) × 1,500/1M × $6 = $900. Lectures cache : 0.9M × 1,500/1M × $0.30 = $405. Portion entrée non-cachée (500 tokens restants × 1M) = 500M × $3/1M = $1,500. Sortie : $7,500. **Total : $10,305/mois** — une économie de 59% vs OpenAI.

**Delta annuel** : $25,000 × 12 - $10,305 × 12 = $300,000 - $123,660 = **$176,340/an économisés** sur ce workload.

Caveat important : gpt-5.5 → Sonnet 4.6 est la migration haut levier. gpt-5.4 → Sonnet 4.6 coûte réellement *plus* par appel ($3 entrée vs $2.50). gpt-5.4-mini → Haiku 4.5 coûte aussi plus (+33% entrée). Au tier petit / nano, OpenAI gagne en prix. Migrez les tiers premium et mid ; gardez le tier petit et nano sur OpenAI. Le calculateur delta coût devient par-workload, pas par-organisation.


Checklist readiness production pour la cutover

**Eval parity d'abord**. Lancez les deux providers sur votre ensemble eval retenu avant de basculer. Le même prompt restructuré pour Claude doit égaler ou battre la baseline GPT ; s'il ne le fait pas, vous avez un problème prompt, pas un problème modèle.

**Trafic shadow une semaine**. Routez 5-10% du trafic production vers Claude aux côtés d'OpenAI, loguez les deux outputs, comparez la qualité. Attrapez les régressions silencieuses avant qu'elles n'arrivent aux utilisateurs.

**Configurez votre monitoring avant cutover**. Nombres tokens, latence, taux d'erreur, taux hit cache. Le taux hit cache est la métrique qui détermine si vos maths migration se concrétisent en production — trackez-la explicitement.

**Planifiez un chemin rollback**. Feature-flag le choix modèle dans votre code ; basculez vers OpenAI en secondes si la qualité baisse. Ne supprimez pas OpenAI de votre liste dépendances le jour 1 de la cutover.

**Communiquez aux utilisateurs seulement quand pertinent**. La plupart des features AI face-utilisateur n'ont pas besoin d'annoncer les changements de modèle. Les outils internes oui (les développeurs se soucient quel modèle suggère leur code).


Streaming response handling : la différence de forme importe

Les deux API stream les tokens. La forme événement est assez différente que le copy-paste naïf du code streaming échoue subtilement. OpenAI stream une séquence plate de chaînes `chunk.choices[0].delta.content` ; Claude stream des événements structurés avec limites explicites start/delta/stop sur chaque bloc contenu.

Pattern streaming OpenAI :

```python stream = client.chat.completions.create( model="gpt-5.5", messages=messages, stream=True, ) for chunk in stream: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="") ```

Pattern streaming Claude :

```python with client.messages.stream( model="claude-sonnet-4-6", max_tokens=500, messages=messages, ) as stream: for text in stream.text_stream: print(text, end="") ```

Le helper `text_stream` chez Claude aplatit les événements structurés en simple stream chaîne — la plupart du code production l'utilise. Si vous besoin de contrôle plus fin (par ex. gérer les blocs tool_use mid-stream, surfer le contenu reasoning séparément), descendez à l'API niveau événement et pattern-match sur `event.type`.

Le streaming tool-use est sensiblement différent chez Claude. L'input tool JSON stream en deltas JSON partiels dans les événements `content_block_delta` avec `delta.type === 'input_json_delta'`. La concaténation chaîne naïve marche mais vous devez attendre l'événement `content_block_stop` avant parser le JSON complet. Le streaming tool calls OpenAI a un pattern JSON partiel similaire ; les noms champs diffèrent.


Erreurs migration communes

**Erreur 1 : supposer Claude est moins cher sans vérifier le tier.** Sonnet 4.6 vs gpt-5.4 est à peu près égal, et Haiku 4.5 est réellement *plus cher* que gpt-5.4-mini. Les économies viennent du tier premium (Opus 4.8 vs gpt-5.5-pro) et du tier mid avec caching (Sonnet 4.6 + 1-hour cache vs gpt-5.5).

**Erreur 2 : copier les prompts verbatim.** La structure markdown marche sur Claude mais la structure tags XML marche mieux. Sauter la restructuration prompt laisse de la qualité sur la table.

**Erreur 3 : sauter les points de rupture cache explicites.** La revendication « Claude est moins cher » dépend du caching. Sans points de rupture explicites, vous pouvez payer plus par appel que l'équivalent OpenAI. Configurez le caching comme partie de la migration, pas comme suivi.

**Erreur 4 : ne pas gérer les appels tool parallèles.** Claude retourne plusieurs blocs `tool_use` par tour quand il fait des appels tool parallèles. Votre outil runner doit les gérer concurremment et retourner tous résultats dans un seul message user.

**Erreur 5 : garder `max_tokens` défini sur les defaults OpenAI.** Claude requiert `max_tokens` d'être explicite. L'ancien code qui reposait sur le default OpenAI (model max) doit mettre un plafond réel — typiquement 500-2,000 pour usages chat. Ne le mettez pas trop haut ; vous payerez pour output dont vous n'avez pas besoin.

Plan migration 5-phase

  1. 1

    Échanger le SDK (changement un jour)

    Remplacez le package `openai` par `anthropic`. Changez `chat.completions.create(...)` en `messages.create(...)`. Déplacez le prompt système du tableau messages vers un argument top-level `system=`. Mettez à jour le parsing réponse de `resp.choices[0].message.content` vers `resp.content[0].text`. Définissez `max_tokens` explicitement sur chaque appel.

    → Open the Code prompt builder (mode refactor)
  2. 2

    Restructurer les prompts système pour les tags XML

    Remplacez les headings markdown (## Task, ## Context) par des tags XML (<task>, <context>, <output_format>). Enrobez les exemples few-shot en <example>...</example>. Le changement de structure relève typiquement la précision Claude de 7-12 points sur prompts complexes.

  3. 3

    Configurer les points de rupture prompt-caching explicites

    Marquez le prefix cacheable (prompt système + tools + few-shot stable) avec `cache_control: {type: 'ephemeral'}`. Utilisez le 1-hour TTL pour tout prefix re-lu dans une heure — l'équilibre est 2 hits, après quoi chaque lecture économise 90% sur la portion cachée.

  4. 4

    Traduire les schémas tool-use

    Aplatissez `{type: 'function', function: {...}}` d'OpenAI vers `{name, description, input_schema}` de Claude. Mettez à jour la gestion résultat tool : Claude veut les résultats comme un message `user` avec blocs contenu `tool_result`, pas un rôle `tool` séparé. Gérez les appels tool parallèles (multiples blocs `tool_use` par tour).

  5. 5

    Lancer le calculateur delta coût sur votre workload réel

    Utilisez les maths exemple travaillé ci-dessus avec VOS nombres tokens. Confirmez que la migration est positive EV avant de basculer. Migrez les workloads premium et mid-tier (gpt-5.5-pro → Opus 4.8, gpt-5.5 → Sonnet 4.6 + cache) ; gardez le tier petit/nano sur OpenAI où il gagne en prix.

Frequently Asked Questions

Combien de temps dure une migration OpenAI vers Claude ?

L'échange SDK prend typiquement 1-2 jours pour un seul service. La restructuration prompt pour tags XML est 2-3 jours additionnels. Le setup point de rupture cache est 1 jour par pattern. La traduction tool-use est 1-3 jours selon le nombre tools. Le test eval parity est 3-5 jours. Le trafic shadow 5-7 jours. Total : 2-3 semaines pour un service bien scopé ; plus long pour migration multi-service.

Claude est-il réellement moins cher que OpenAI en 2026 ?

Dépend du tier. Claude Opus 4.8 ($5/$25) est dramatiquement moins cher que gpt-5.5-pro ($30/$180) — environ 85% moins cher. Claude Sonnet 4.6 ($3/$15) est moins cher que gpt-5.5 ($5/$30) de ~40-50% même sans caching, plus avec points de rupture cache explicites. Claude Haiku 4.5 ($1/$5) est *plus cher* que gpt-5.4-mini ($0.75/$4.50) d'environ 30%, et il n'y a pas d'équivalent Claude au $0.20/$1.25 de gpt-5.4-nano. Migrez premium et mid-tier ; gardez les workloads nano-tier sur OpenAI.

Dois-je réécrire mes prompts lors de la migration de GPT vers Claude ?

Fortement recommandé. Les prompts structurés en markdown marchent sur Claude mais les prompts structurés en tags XML marchent mieux — typiquement 7-12 points de pourcentage de lift de précision sur tâches classification par notre eval interne. Enrobez les sections distinctes en tags <task>, <context>, <example>, <output_format>. Sauter cela laisse de la qualité sur la table.

Quelle est la différence entre le prompt caching OpenAI et Claude ?

Le cache OpenAI est opportuniste et prefix-only — automatique si votre prompt système est stable, vous payez 10% de l'entrée standard sur cache hits. Le cache Claude est explicite — vous marquez les points de rupture avec `cache_control: {type: 'ephemeral'}`, payez 1.25x (5-min TTL) ou 2x (1-hour TTL) sur cache write, puis 10% sur read. Le modèle explicite Claude est plus puissant — vous pouvez cacher n'importe quelle portion d'input, pas seulement le prefix littéral.

Comment traduire les définitions tools OpenAI vers Claude ?

Aplatissez le schéma. OpenAI utilise `{type: 'function', function: {name, description, parameters}}`. Claude utilise `{name, description, input_schema}` — même contenu, pas de wrapper `function` englobant. Le schéma paramètre (JSON Schema) est identique. La gestion résultat tool diffère : Claude retourne les blocs contenu `tool_use` et attend les résultats comme blocs `tool_result` dans un message user.

Dois-je migrer tout d'OpenAI ou faire tourner les deux providers ?

La plupart des équipes production finissent à faire tourner les deux. OpenAI gagne sur le tier petit/nano ($0.20-$0.75 plage entrée — Claude n'a pas d'équivalent). Claude gagne sur le tier premium (Opus 4.8 vs gpt-5.5-pro) et mid-tier avec caching. Le routage adaptatif — envoyer chaque requête au provider le moins cher qui rencontre le quality bar — est le pattern production à grande échelle.

Claude supporte-t-il les outputs structurés comme le JSON mode d'OpenAI ?

Oui. Claude supporte l'output JSON via tool use — définissez un tool avec le schéma output désiré comme `input_schema`, puis promptez Claude pour l'appeler. Anthropic expose aussi un mode JSON direct similaire à OpenAI. Le pattern tool-use est plus flexible et vous donne la validation par-champ ; le mode JSON direct est plus simple pour extraction one-shot.

Mon tier rate-limit OpenAI se transférera-t-il vers Anthropic ?

Non — Anthropic a sa propre échelle rate-limit indépendante des tiers OpenAI. Les nouveaux comptes commencent à un tier bas et graduent basé sur l'usage payé. Planifiez une rampe rate-limit 2-4 semaines chez Anthropic en parallèle de votre migration. Lancez le trafic shadow à un taux inférieur pendant la rampe.

Migrez le SDK en un jour. Migrez les prompts pour garder la qualité.

Un prompt accordé GPT sous-performera sur Claude. Notre générateur prompt IA réécrit vos prompts OpenAI pour Claude (tags XML, ancré-cache, prêt tool-use) basé sur VOTRE business + tâche. Essai gratuit 14 jours, pas de carte.

Browse all prompt tools →

Bibliothèque de prompts gratuite — plus de 100 prompts prêts à copier

Une sélection de prompts chaque semaine pour ChatGPT, Claude, Midjourney et DALL·E. Sans spam. Désinscription en un clic.

Sans spam. Un e-mail par semaine. Plus de ~12 000 utilisateurs de prompts déjà inscrits.