Source: https://aiprimetech.io/fr/learn/anthropic-python-sdk/ [Accueil](/fr/) / [Apprendre](/fr/learn/) / SDK Python Anthropic : installer, définir base_url, utiliser le streaming et gérer les erreurs # SDK Python Anthropic : installation, configuration de base_url, streaming et gestion des erreurs Le anthropic est le client Python officiel d’Anthropic pour l’API Claude. Ce paquet gère l’authentification, les nouvelles tentatives, le streaming et les erreurs typées, et fonctionne sans modification avec tout point de terminaison compatible avec Anthropic : définissez base_url (ou ANTHROPIC_BASE_URL) et le reste de votre code reste identique. ## Installation terminalCopier ``` pip install anthropic ``` Les versions 1.x fonctionnent avec httpx2 et nécessitent Python 3.10 ou une version ultérieure. Si vous fournissez votre propre client HTTP, utilisez celui du SDK DefaultHttpxClient afin de conserver ses délais d’expiration et ses limites de connexion par défaut. ## Créer un client app.pyCopier ``` import anthropic client = anthropic.Anthropic( api_key="your_key", # default: ANTHROPIC_API_KEY base_url="https://aiprimetech.io", # default: ANTHROPIC_BASE_URL, else https://api.anthropic.com ) ``` base_url est l’URL racine de l’hôte. Le SDK ajoute /v1/messages lui-même, donc https://aiprimetech.io/v1 produirait /v1/v1/messages et un 404 page not found. Lorsque les deux variables sont définies dans l’environnement, anthropic.Anthropic() ne nécessite aucun argument : terminalCopier ``` export ANTHROPIC_API_KEY=your_key export ANTHROPIC_BASE_URL=https://aiprimetech.io ``` ## Envoyer un message app.pyCopier ``` message = client.messages.create( model="claude-sonnet-5", max_tokens=1024, messages=[{"role": "user", "content": "Summarise TCP slow start in two sentences."}], ) for block in message.content: if block.type == "text": print(block.text) print(message.usage.input_tokens, message.usage.output_tokens) print(message._request_id) # log this with any failure report ``` content est une liste de blocs (texte, réflexion, utilisation d’outils) ; vérifiez donc block.type au lieu de lire content[0].text sans vérification. ## Recevoir les réponses en streaming stream.pyCopier ``` with client.messages.stream( model="claude-sonnet-5", max_tokens=16000, messages=[{"role": "user", "content": "Write a short story about a lighthouse."}], ) as stream: for text in stream.text_stream: print(text, end="", flush=True) final = stream.get_final_message() ``` Utilisez le streaming pour toute requête avec une entrée longue, une sortie longue ou une valeur élevée de max_tokens : une requête sans streaming doit se terminer avant le délai d’expiration, contrairement à un flux. messages.create(..., stream=True) vous donne l’itérateur d’événements brut si vous n’avez pas besoin de l’utilitaire. ## Client asynchrone async_app.pyCopier ``` import asyncio, anthropic client = anthropic.AsyncAnthropic(base_url="https://aiprimetech.io") limit = asyncio.Semaphore(3) # stay within your key's concurrency async def ask(question: str) -> str: async with limit: msg = await client.messages.create( model="claude-haiku-4-5", max_tokens=512, messages=[{"role": "user", "content": question}], ) return next(b.text for b in msg.content if b.type == "text") async def main(): answers = await asyncio.gather(*(ask(q) for q in ["What is DNS?", "What is BGP?"])) print(answers) asyncio.run(main()) ``` Le sémaphore est important. Lancer des centaines de requêtes simultanément avec asyncio.gather est la cause la plus fréquente des erreurs Concurrency limit exceeded que nous observons avec les clients Python. ## Délais d’attente et nouvelles tentatives Valeurs par défaut : un délai d’expiration de 10 minutes par requête et 2 nouvelles tentatives automatiques avec temporisation exponentielle. Le SDK réessaie en cas d’erreurs de connexion et de réponses 408, 409, 429 et 5xx. Comme les dépassements de délai déclenchent aussi de nouvelles tentatives, la durée totale dans le pire des cas correspond au délai d’expiration multiplié par le nombre de tentatives. app.pyCopier ``` client = anthropic.Anthropic(base_url="https://aiprimetech.io", timeout=60.0, max_retries=4) # override for one call only client.with_options(timeout=300.0).messages.create( model="claude-opus-5-5", max_tokens=4000, messages=[{"role": "user", "content": "Review this design doc..."}], ) ``` ## Gestion des erreurs | État | Exception | Réessayer ? | 400 | anthropic.BadRequestError | Non : corrigez la requête | 401 | anthropic.AuthenticationError | Non : clé incorrecte ou manquante | 403 | anthropic.PermissionDeniedError | Non | 404 | anthropic.NotFoundError | Non : identifiant du modèle ou URL | 429 | anthropic.RateLimitError | Oui, après une pause | 5xx, y compris 529 en cas de surcharge | anthropic.InternalServerError | Oui | Défaillance réseau | anthropic.APIConnectionError | Oui | Dépassement du délai | anthropic.APITimeoutError | Oui, ou utilisez le streaming errors.pyCopier ``` try: message = client.messages.create(model="claude-sonnet-5", max_tokens=1024, messages=[{"role": "user", "content": "Hi"}]) except anthropic.NotFoundError as e: print("Bad model ID or URL:", e.message) except anthropic.RateLimitError as e: print("Rate limited, retry after", e.response.headers.get("retry-after")) except anthropic.APIStatusError as e: print(e.status_code, e.type, e.message) except anthropic.APIConnectionError: print("Network problem") ``` Interceptez d’abord les classes spécifiques et APIStatusError en dernier ; un seul except générique masque la différence entre les erreurs qui méritent une nouvelle tentative et celles qui nécessitent une modification du code. e.type fournit la chaîne du type d’erreur de l’API, par exemple rate_limit_error ou overloaded_error. ## Identifiants des modèles | Identifiant du modèle | À utiliser pour | claude-sonnet-5 | Choix par défaut pour le développement et les tâches d’agents : rapide, performant, à prix intermédiaire. | claude-opus-5-5 | Raisonnement plus difficile, refactorisations importantes, longues exécutions d’agents. | claude-fable-5-1 | Le plus performant et le plus cher ; réservez-le aux tâches les plus difficiles. | claude-haiku-4-5 | Économique et rapide : titres, résumés, classification, petites étapes. client.models.list() renvoie les modèles proposés par un point de terminaison, ce qui vous permet de vérifier un identifiant avant de l’utiliser. Utilisez les identifiants exactement tels qu’ils sont écrits, sans suffixes de date. ## Résolution des problèmes sur une passerelle | Ce que vous voyez | Cause | Solution | NotFoundError par 404 page not found | /v1 dans base_url | Utilisez l’URL racine de l’hôte | AuthenticationError | Clé non définie dans le processus ou collée avec des espaces | Affichez len(os.environ["ANTHROPIC_API_KEY"]) | RateLimitError: Concurrency limit exceeded for user | Trop de requêtes en cours | Un asyncio.Semaphore comme ci-dessus | APITimeoutError sur les tâches longues | Requête sans streaming dépassant le délai d’expiration | Utilisez le streaming ou augmentez timeout | InternalServerError: No available accounts | Capacité temporairement insuffisante en amont | Laissez le SDK réessayer ; augmentez max_retries | Insufficient account balance | Solde épuisé | [Recharger](/fr/topup/) Pour en savoir plus sur les erreurs côté modèle : le [guide des erreurs de l’API Claude](/fr/learn/claude-api-errors-troubleshooting/). ## Questions fréquentes Comment installer le SDK Python Anthropic ? pip install anthropic. La version 1.x nécessite Python 3.10 ou une version ultérieure. Comment définir une URL de base personnalisée dans le SDK Python Anthropic ? Passez base_url à anthropic.Anthropic() ou définissez ANTHROPIC_BASE_URL. Utilisez l’URL racine de l’hôte ; le SDK ajoute /v1/messages. Quels sont le délai d’expiration et le nombre de nouvelles tentatives par défaut ? 10 minutes par requête et 2 nouvelles tentatives avec temporisation exponentielle, couvrant les erreurs de connexion et les réponses 408, 409, 429 et 5xx. Comment utiliser le streaming avec le SDK Python ? Utilisez with client.messages.stream(...) as stream: et parcourez stream.text_stream ; stream.get_final_message() renvoie le message complet. Commencez à utiliser Claude en quelques minutes Obtenez une clé API — aucun compte Anthropic ni inscription sur liste d’attente requis.[Obtenir votre clé API](/register) AI Prime Tech est une passerelle API indépendante. Elle n’est ni affiliée à Anthropic, ni approuvée par Anthropic, ni revendeuse d’Anthropic. Claude et les noms de modèles associés sont des marques de leurs propriétaires respectifs. ## Autres guides sur l’API Claude [Comment obtenir une clé API Claude](/fr/learn/how-to-get-a-claude-api-key/)[Comprendre la tarification de l’API Claude](/fr/learn/claude-api-pricing-explained/)[La façon la moins chère d’utiliser l’API Claude](/fr/learn/cheapest-way-to-use-claude-api/)[Cursor illimité avec l’API Claude](/learn/use-claude-api-with-cursor/)[Accès illimité à Claude Code](/fr/learn/use-claude-api-with-claude-code/)[Passerelle API Claude ou accès direct à Anthropic](/fr/learn/claude-api-vs-anthropic-direct/)[Utiliser Claude via une API compatible avec OpenAI](/fr/learn/openai-compatible-claude-api/)[Comprendre les modèles Claude : comparaison de Claude Opus, Sonnet, Haiku et Fable — tous les modèles de l’API Claude, noms des modèles Anthropic et prix (2026)](/fr/learn/claude-api-models-compared/)[Payer l’API Claude en cryptomonnaies](/fr/learn/claude-api-with-crypto-payment/)[Accéder à l’API Claude sans liste d’attente](/fr/learn/claude-api-without-waitlist/)[Comment réduire la consommation de tokens de Claude](/fr/learn/how-to-reduce-claude-token-usage/)[Cline illimité avec l’API Claude](/fr/learn/use-claude-api-with-cline/)[Roo Code illimité avec l’API Claude](/fr/learn/use-claude-api-with-roo-code/)[Claude illimité dans les IDE JetBrains](/fr/learn/use-claude-api-with-jetbrains/)[Utiliser Aider sans limites avec l’API Claude](/fr/learn/use-claude-api-with-aider/)[Claude illimité dans VS Code](/fr/learn/use-claude-api-with-vscode/)[Configuration d’OpenCode pour Claude : paramètres d’opencode.json, modèles et erreurs courantes](/fr/learn/use-claude-api-with-opencode/)[Exécuter un agent Hermes sans limites sur Claude](/fr/learn/run-hermes-agent-with-claude-api/)[Utiliser OpenClaw sans limites avec Claude](/fr/learn/run-openclaw-with-claude-api/)[Ce que signifie une API compatible avec Anthropic](/fr/learn/anthropic-compatible-api/)[Clé API Claude Code — ANTHROPIC_API_KEY : comment l’obtenir, la configurer et quand utiliser claude setup-token à la place](/fr/learn/claude-code-api-key-setup/)[Coûts de l’API Claude Code — Tarifs et moyens de les réduire](/fr/learn/claude-code-api-costs/)[Les erreurs de l’API Claude expliquées : erreur serveur 500, surcharge 529, limite de débit 429, requête incorrecte 400 — et le correctif pour chacune](/fr/learn/claude-api-errors-troubleshooting/)[Comment acheter des crédits pour l’API Claude — et pourquoi un crédit Claude vaut mieux que toute offre d’« achat de compte Claude »](/fr/learn/buy-claude-api-credits/)[API Claude gratuite : existe-t-il une clé API Claude gratuite, et qu’est-ce qui est réellement gratuit en 2026 ?](/fr/learn/claude-api-free-trial/)[API Claude ou abonnement Claude Pro/Max — Que choisir](/fr/learn/claude-api-vs-subscription/)[Exécuter la CLI Codex sur Claude](/fr/learn/use-claude-api-with-codex/)[Connecter Claude à n8n](/fr/learn/use-claude-api-with-n8n/)[Router LiteLLM vers Claude](/fr/learn/use-claude-api-with-litellm/)[Utiliser Claude dans Kilo Code](/fr/learn/use-claude-api-with-kilo-code/)[Intégrer Claude à GitHub Copilot](/fr/learn/use-claude-api-with-github-copilot/)[Connecter Zed à Claude via la passerelle](/fr/learn/use-claude-api-with-zed/)[Connecter Cherry Studio à Claude](/fr/learn/use-claude-api-with-cherry-studio/)[ChatAnthropic dans LangChain : importation, base_url, streaming, outils et erreurs](/fr/learn/use-claude-api-with-langchain/)[Claude avec Vercel AI SDK : baseURL de createAnthropic, streaming et corrections](/fr/learn/use-claude-api-with-vercel-ai-sdk/)[Utiliser Factory Droid avec Claude](/fr/learn/use-claude-api-with-factory-droid/)[L’API de Claude Code expliquée](/fr/learn/claude-code-api/)[Intégrer l’API Claude à votre application](/fr/learn/claude-api-integration/)[Comment utiliser Claude sans limites — et pourquoi il n’existe pas de « Claude Code piraté »](/fr/learn/get-unlimited-claude-usage/)