Accueil / Apprendre / SDK Python Anthropic : installer, définir base_url, utiliser le streaming et gérer les erreurs
Claude dans Python. Une élégante courbe de serpent en forme de ruban s’enroulant autour d’une page de code et se raccordant à une petite prise API.

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

terminal
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.py
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 :

terminal
export ANTHROPIC_API_KEY=your_key
export ANTHROPIC_BASE_URL=https://aiprimetech.io

Envoyer un message

app.py
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.py
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.py
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.py
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 ?
400anthropic.BadRequestErrorNon : corrigez la requête
401anthropic.AuthenticationErrorNon : clé incorrecte ou manquante
403anthropic.PermissionDeniedErrorNon
404anthropic.NotFoundErrorNon : identifiant du modèle ou URL
429anthropic.RateLimitErrorOui, après une pause
5xx, y compris 529 en cas de surchargeanthropic.InternalServerErrorOui
Défaillance réseauanthropic.APIConnectionErrorOui
Dépassement du délaianthropic.APITimeoutErrorOui, ou utilisez le streaming
errors.py
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-5Choix par défaut pour le développement et les tâches d’agents : rapide, performant, à prix intermédiaire.
claude-opus-5-5Raisonnement plus difficile, refactorisations importantes, longues exécutions d’agents.
claude-fable-5-1Le 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_urlUtilisez l’URL racine de l’hôte
AuthenticationErrorClé non définie dans le processus ou collée avec des espacesAffichez len(os.environ["ANTHROPIC_API_KEY"])
RateLimitError: Concurrency limit exceeded for userTrop de requêtes en coursUn asyncio.Semaphore comme ci-dessus
APITimeoutError sur les tâches longuesRequête sans streaming dépassant le délai d’expirationUtilisez le streaming ou augmentez timeout
InternalServerError: No available accountsCapacité temporairement insuffisante en amontLaissez le SDK réessayer ; augmentez max_retries
Insufficient account balanceSolde épuiséRecharger

Pour en savoir plus sur les erreurs côté modèle : le guide des erreurs de l’API Claude.

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

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 ClaudeComprendre la tarification de l’API ClaudeLa façon la moins chère d’utiliser l’API ClaudeCursor illimité avec l’API ClaudeAccès illimité à Claude CodePasserelle API Claude ou accès direct à AnthropicUtiliser Claude via une API compatible avec OpenAIComprendre 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)Payer l’API Claude en cryptomonnaiesAccéder à l’API Claude sans liste d’attenteComment réduire la consommation de tokens de ClaudeCline illimité avec l’API ClaudeRoo Code illimité avec l’API ClaudeClaude illimité dans les IDE JetBrainsUtiliser Aider sans limites avec l’API ClaudeClaude illimité dans VS CodeConfiguration d’OpenCode pour Claude : paramètres d’opencode.json, modèles et erreurs courantesExécuter un agent Hermes sans limites sur ClaudeUtiliser OpenClaw sans limites avec ClaudeCe que signifie une API compatible avec AnthropicClé API Claude Code — ANTHROPIC_API_KEY : comment l’obtenir, la configurer et quand utiliser claude setup-token à la placeCoûts de l’API Claude Code — Tarifs et moyens de les réduireLes 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 chacuneComment acheter des crédits pour l’API Claude — et pourquoi un crédit Claude vaut mieux que toute offre d’« achat de compte Claude »API Claude gratuite : existe-t-il une clé API Claude gratuite, et qu’est-ce qui est réellement gratuit en 2026 ?API Claude ou abonnement Claude Pro/Max — Que choisirExécuter la CLI Codex sur ClaudeConnecter Claude à n8nRouter LiteLLM vers ClaudeUtiliser Claude dans Kilo CodeIntégrer Claude à GitHub CopilotConnecter Zed à Claude via la passerelleConnecter Cherry Studio à ClaudeChatAnthropic dans LangChain : importation, base_url, streaming, outils et erreursClaude avec Vercel AI SDK : baseURL de createAnthropic, streaming et correctionsUtiliser Factory Droid avec ClaudeL’API de Claude Code expliquéeIntégrer l’API Claude à votre applicationComment utiliser Claude sans limites — et pourquoi il n’existe pas de « Claude Code piraté »