SDK Python
Deux voies en Python — anthropic pour du code Claude natif, openai pour les migrations. Les deux fonctionnent en changeant uniquement base_url.
Installation
bash
pip3 install anthropic
# or, for OpenAI-style code:
pip3 install openai
# In a venv (recommended):
# python3 -m venv .venv && source .venv/bin/activate
# pip install anthropic openaiSDK Anthropic
python
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["API_AI_KEY"],
base_url="https://api-ai.fr",
)
resp = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.content[0].text)OpenAI-compatible
python
from openai import OpenAI
client = OpenAI(
api_key=os.environ["API_AI_KEY"],
base_url="https://api-ai.fr/v1",
)
resp = client.chat.completions.create(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": "Say hi."}],
)
print(resp.choices[0].message.content)Client asynchrone
python
import asyncio
from anthropic import AsyncAnthropic
async def main():
client = AsyncAnthropic(base_url="https://api-ai.fr")
resp = await client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hi async."}],
)
print(resp.content[0].text)
asyncio.run(main())Streaming
python
with client.messages.stream(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Tell me a haiku."}],
) as stream:
for chunk in stream.text_stream:
print(chunk, end="", flush=True)Utilisation d’outils
python
tools = [{
"name": "get_weather",
"description": "Get current weather for a city.",
"input_schema": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
}]
resp = client.messages.create(
model="claude-sonnet-5-5",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "What's the weather in Paris?"}],
)
# resp.stop_reason == "tool_use"
# Inspect resp.content for tool_use blocks.Nouvelles tentatives et gestion des erreurs
python
from anthropic import APIStatusError
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(
stop=stop_after_attempt(3),
wait=wait_exponential(multiplier=0.5, min=0.5, max=4),
retry_error_cls=APIStatusError,
)
def call():
return client.messages.create(
model="claude-sonnet-5-5",
max_tokens=512,
messages=[{"role": "user", "content": "Hi."}],
)Ne codez pas la clé en dur
Lisez toujours la clé depuis une variable d’environnement ou un gestionnaire de secrets. Une clé codée en dur finit tôt ou tard dans le gestionnaire de versions.
Dernière mise à jour : 2 octobre 2026Une erreur ? support@minedom-france.fr