Compatibilité avec le SDK OpenAI
Anthropic fournit une couche de compatibilité qui vous permet d'utiliser le SDK OpenAI pour tester l'API Claude. Avec quelques modifications de code, vous pouvez évaluer les capacités des modèles Anthropic.
Premiers pas avec le SDK OpenAI
Pour utiliser la fonctionnalité de compatibilité avec le SDK OpenAI, vous devez :
- Utiliser un SDK OpenAI officiel
- Modifier les éléments suivants
- Mettre à jour votre URL de base pour qu'elle pointe vers la Claude API
- Remplacer votre clé API par une clé API Claude provenant de la Claude Console
- Si votre clé est une clé personnelle ou de compte de service ayant accès à plusieurs espaces de travail, envoyer également l'en-tête
anthropic-workspace-idà chaque requête (par exemple,default_headersdans le SDK Python oudefaultHeadersen TypeScript) ; consultez Sélectionner un espace de travail - Mettre à jour le nom de votre modèle pour utiliser un modèle Claude
- Consulter les sections suivantes pour connaître les fonctionnalités prises en charge
Exemple de démarrage rapide
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("ANTHROPIC_API_KEY"), # Your Claude API key
base_url="https://api.anthropic.com/v1/", # the Claude API endpoint
)
response = client.chat.completions.create(
model="claude-opus-5-5", # Claude model name
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who are you?"},
],
)
print(response.choices[0].message.content)Limitations importantes de la compatibilité OpenAI
Comportement de l'API
Voici les différences les plus importantes par rapport à l'utilisation d'OpenAI :
- Le paramètre
strictpour l'appel de fonctions est ignoré, ce qui signifie que le JSON d'utilisation d'outils n'est pas garanti de respecter le schéma fourni. Pour une conformité garantie au schéma, utilisez la Claude API native avec les sorties structurées. - L'entrée audio n'est pas prise en charge ; elle sera ignorée et supprimée de l'entrée.
- La « prompt caching » (mise en cache des prompts) n'est pas prise en charge, mais elle l'est dans les SDK Anthropic.
- Les messages système/développeur sont remontés et concaténés dans le champ
systemde premier niveau, quel que soit leur emplacement dans la conversation. Pour ajouter des instructions système en cours de conversation, utilisez les messages système en cours de conversation dans la Claude API native.
La plupart des champs non pris en charge sont ignorés silencieusement plutôt que de produire des erreurs. Ils sont tous documentés dans les sections suivantes.
Considérations sur la qualité des sorties
Si vous avez considérablement ajusté votre prompt, il est probablement bien adapté spécifiquement à OpenAI. Envisagez de le retravailler pour Claude à l'aide du guide des bonnes pratiques de prompting.
Remontée des messages système / développeur
La plupart des entrées du SDK OpenAI correspondent clairement et directement aux paramètres de l'API Claude, mais une différence notable concerne le traitement des prompts système / développeur. Ces deux types de prompts peuvent être placés tout au long d'une conversation dans l'API OpenAI. La couche de compatibilité prend tous les messages système/développeur et les concatène avec un seul saut de ligne (\n) entre eux. Cette chaîne complète est ensuite fournie comme champ system de niveau supérieur, avant tous les messages.
Prise en charge de la réflexion
Vous pouvez activer la réflexion en ajoutant le paramètre thinking. Sur les modèles actuels, la réflexion est adaptative, Claude déterminant quand et avec quelle profondeur réfléchir, et sur les modèles Claude 5, elle est activée par défaut ; la réflexion étendue configurée manuellement est un mode hérité. Bien que la réflexion améliore le raisonnement de Claude pour les tâches complexes, le SDK OpenAI ne renvoie pas la réflexion de Claude. Pour bénéficier de toutes les fonctionnalités de réflexion, y compris la réflexion résumée, utilisez la Claude API native.
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "Who are you?"}],
extra_body={"thinking": {"type": "enabled", "budget_tokens": 2000}},
)Limites de débit
Les « rate limits » (limites de débit) suivent les limites standard d'Anthropic pour le point de terminaison /v1/messages.
Prise en charge détaillée de l'API compatible OpenAI
Champs de requête
Champs simples
| Champ | État de prise en charge |
|---|---|
model | Utilisez les noms de modèles Claude |
max_tokens | Entièrement pris en charge |
max_completion_tokens | Entièrement pris en charge |
stream | Entièrement pris en charge |
stream_options | Entièrement pris en charge |
top_p | Transmis au modèle. Les modèles Claude 4.7 et ultérieurs ainsi que Claude Mythos Preview renvoient une erreur 400 pour toute valeur autre que 0.99, la valeur par défaut ; omettez-le donc. Une requête qui définit à la fois temperature et top_p renvoie également une erreur 400. Consultez Utiliser l'API Messages. |
parallel_tool_calls | Entièrement pris en charge |
stop | Toutes les séquences d'arrêt sans espaces fonctionnent |
temperature | Entre 0 et 1 (inclus). Les valeurs supérieures à 1 sont plafonnées à 1. Sur les modèles Claude 4.7 et ultérieurs ainsi que Claude Mythos Preview, toute valeur inférieure à 1 renvoie une erreur 400 ; omettez-le donc. Consultez Utiliser l'API Messages. |
n | Doit être exactement 1 |
logprobs | Ignoré |
metadata | Ignoré |
response_format | Ignoré. Pour une sortie JSON, utilisez les sorties structurées avec l'API Claude native. |
prediction | Ignoré |
presence_penalty | Ignoré |
frequency_penalty | Ignoré |
seed | Ignoré |
service_tier | Ignoré |
audio | Ignoré |
logit_bias | Ignoré |
store | Ignoré |
user | Ignoré |
modalities | Ignoré |
top_logprobs | Ignoré |
reasoning_effort | Ignoré |
Champs tools / functions
Champs tools[n].function
| Champ | État de prise en charge |
|---|---|
name | Entièrement pris en charge |
description | Entièrement pris en charge |
parameters | Entièrement pris en charge |
strict | Ignoré. Utilisez les sorties structurées avec l'API Claude native pour une validation stricte du schéma. |
Champs functions[n]
| Champ | État de prise en charge |
|---|---|
name | Entièrement pris en charge |
description | Entièrement pris en charge |
parameters | Entièrement pris en charge |
strict | Ignoré. Utilisez les sorties structurées avec l'API Claude native pour une validation stricte du schéma. |
Champs du tableau messages
Champs pour messages[n].role == "developer"
| Champ | État de prise en charge |
|---|---|
content | Entièrement pris en charge, mais remonté |
name | Ignoré |
Champs pour messages[n].role == "system"
| Champ | État de prise en charge |
|---|---|
content | Entièrement pris en charge, mais remonté |
name | Ignoré |
Champs pour messages[n].role == "user"
| Champ | Variante | Sous-champ | État de prise en charge |
|---|---|---|---|
content | string | Entièrement pris en charge | |
array, type == "text" | Entièrement pris en charge | ||
array, type == "image_url" | url | Entièrement pris en charge | |
detail | Ignoré | ||
array, type == "input_audio" | Ignoré | ||
array, type == "file" | Ignoré | ||
name | Ignoré |
Champs pour messages[n].role == "assistant"
| Champ | Variante | État de prise en charge |
|---|---|---|
content | string | Entièrement pris en charge |
array, type == "text" | Entièrement pris en charge | |
array, type == "refusal" | Ignoré | |
tool_calls | Entièrement pris en charge | |
function_call | Entièrement pris en charge | |
audio | Ignoré | |
refusal | Ignoré |
Champs pour messages[n].role == "tool"
| Champ | Variante | État de prise en charge |
|---|---|---|
content | string | Entièrement pris en charge |
array, type == "text" | Entièrement pris en charge | |
tool_call_id | Entièrement pris en charge | |
tool_choice | Pris en charge. Les valeurs "required" et de fonction nommée forcent un appel d'outil ; Claude Opus 5.5, Claude Sonnet 5.5, Claude Fable 5.1 et Claude Mythos 5.1 ne prennent pas en charge l'utilisation d'outils forcée et renvoient une erreur ; utilisez donc "auto" sur ces modèles. Consultez Forcer l'utilisation d'outils. | |
name | Ignoré |
Champs pour messages[n].role == "function"
| Champ | Variante | État de prise en charge |
|---|---|---|
content | string | Entièrement pris en charge |
array, type == "text" | Entièrement pris en charge | |
tool_choice | Pris en charge. Les valeurs "required" et de fonction nommée forcent un appel d'outil ; Claude Opus 5.5, Claude Sonnet 5.5, Claude Fable 5.1 et Claude Mythos 5.1 ne prennent pas en charge l'utilisation d'outils forcée et renvoient une erreur ; utilisez donc "auto" sur ces modèles. Consultez Forcer l'utilisation d'outils. | |
name | Ignoré |
Champs de réponse
| Champ | État de prise en charge |
|---|---|
id | Entièrement pris en charge |
choices[] | A toujours une longueur de 1 |
choices[].finish_reason | Entièrement pris en charge |
choices[].index | Entièrement pris en charge |
choices[].message.role | Entièrement pris en charge |
choices[].message.content | Entièrement pris en charge |
choices[].message.tool_calls | Entièrement pris en charge |
object | Entièrement pris en charge |
created | Entièrement pris en charge |
model | Entièrement pris en charge |
finish_reason | Entièrement pris en charge |
content | Entièrement pris en charge |
usage.completion_tokens | Entièrement pris en charge |
usage.prompt_tokens | Entièrement pris en charge |
usage.total_tokens | Entièrement pris en charge |
usage.completion_tokens_details | Toujours vide |
usage.prompt_tokens_details | Toujours vide |
choices[].message.refusal | Toujours vide |
choices[].message.audio | Toujours vide |
logprobs | Toujours vide |
service_tier | Toujours vide |
system_fingerprint | Toujours vide |
Compatibilité des messages d'erreur
La couche de compatibilité maintient des formats d'erreur cohérents avec l'API OpenAI. Cependant, les messages d'erreur détaillés ne sont pas équivalents. N'utilisez les messages d'erreur que pour la journalisation et le débogage.
Compatibilité des en-têtes
Bien que le SDK OpenAI gère automatiquement les en-têtes, voici la liste complète des en-têtes pris en charge par l'API Claude pour les développeurs qui doivent les manipuler directement.
| En-tête | Statut de prise en charge |
|---|---|
x-ratelimit-limit-requests | Entièrement pris en charge |
x-ratelimit-limit-tokens | Entièrement pris en charge |
x-ratelimit-remaining-requests | Entièrement pris en charge |
x-ratelimit-remaining-tokens | Entièrement pris en charge |
x-ratelimit-reset-requests | Entièrement pris en charge |
x-ratelimit-reset-tokens | Entièrement pris en charge |
retry-after | Entièrement pris en charge |
request-id | Entièrement pris en charge |
openai-version | Toujours 2020-10-01 |
authorization | Entièrement pris en charge |
openai-processing-ms | Toujours vide |
Was this page helpful?