
Utiliser Claude avec le SDK OpenAI : endpoint compatible OpenAI, streaming, outils et limites
Le code écrit pour le SDK OpenAI peut appeler Claude sans réécriture : faites pointer base_url vers le /v1de la passerelle, utilisez une clé de passerelle et un identifiant de modèle Claude. Le point de terminaison accepte les requêtes Chat Completions, diffuse les réponses en streaming dans le même format et prend en charge l’appel de fonctions. Certaines fonctionnalités de Claude n’existent que dans le format natif d’Anthropic ; la dernière section explique quand changer de format.
Informations sur le point de terminaison
| Élément | Valeur |
|---|---|
| URL de base | https://aiprimetech.io/v1 |
| Point de terminaison de chat | POST https://aiprimetech.io/v1/chat/completions |
| Liste des modèles | GET https://aiprimetech.io/v1/models |
| Authentification | Authorization: Bearer <key>; x-api-key est également accepté |
| Modèles | Des identifiants Claude tels que claude-sonnet-5 ; des identifiants GPT avec une clé du groupe Codex |
Python
pip install openaiimport os
from openai import OpenAI
client = OpenAI(base_url="https://aiprimetech.io/v1", api_key=os.environ["AIPRIME_API_KEY"])
resp = client.chat.completions.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain idempotency keys in two sentences."},
],
)
print(resp.choices[0].message.content)
print(resp.usage)base_url doit se terminer par /v1 : le SDK y ajoute /chat/completions . Sans /v1 la requête arrive sur le site web et renvoie HTML ; avec /v1 deux fois, elle renvoie 404 page not found.
Node.js
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://aiprimetech.io/v1", apiKey: process.env.AIPRIME_API_KEY });
const resp = await client.chat.completions.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Write a haiku about retries." }],
});
console.log(resp.choices[0].message.content);Diffusion en continu
stream = client.chat.completions.create(
model="claude-sonnet-5",
max_tokens=2048,
stream=True,
stream_options={"include_usage": True},
messages=[{"role": "user", "content": "Outline a zero-downtime migration."}],
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.usage:
print("\n", chunk.usage)Utilisez le streaming pour les réponses longues : une requête sans streaming doit se terminer avant l’expiration du délai d’attente de votre client, contrairement à une requête en streaming. include_usage ajoute un dernier fragment contenant le nombre de tokens. Pour en savoir plus sur son importance, consultez les réponses des LLM en streaming.
Appel de fonctions
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Current weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
resp = client.chat.completions.create(
model="claude-sonnet-5", max_tokens=512, tools=tools,
messages=[{"role": "user", "content": "What is the weather in Paris?"}],
)
call = resp.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments) # get_weather {"city": "Paris"}La réponse contient finish_reason: "tool_calls" et, au format OpenAI, tool_calls. Exécutez la fonction, ajoutez un tool message contenant le résultat et la valeur correspondante de tool_call_id, puis effectuez un nouvel appel, exactement comme avec les modèles OpenAI.
Raisonnement et réflexion
reasoning_effort correspond au paramètre d’effort de Claude et accepte low, medium, high, xhigh ou max. La valeur none est rejetée. Lorsque le modèle réfléchit, son raisonnement arrive dans un champ distinct reasoning_content à côté de content, de sorte que le code qui lit message.content continue de fonctionner sans modification.
resp = client.chat.completions.create(
model="claude-opus-5-5", max_tokens=4096, reasoning_effort="high",
messages=[{"role": "user", "content": "Find the bug in this function: ..."}],
)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. |
Utilisez ces identifiants tels quels. Les anciens identifiants datés, comme claude-3-5-sonnet-20241022 figurent encore dans certaines listes de modèles, mais ne sont pas disponibles et renvoient une erreur indiquant que le modèle n’est pas pris en charge.
Quand utiliser plutôt l’API native d’Anthropic
Le format OpenAI prend en charge le chat, le streaming, les outils et les images. Utilisez le format Messages d’Anthropic, sur la même passerelle, lorsque vous avez besoin de points de mise en cache explicites pour les prompts, de blocs de réflexion à renvoyer entre les tours, de documents PDF ou de citations. Le guide du SDK Python Anthropic et le guide du SDK Vercel AI couvrent cette méthode.
Dépannage
| Ce que vous voyez | Cause | Solution |
|---|---|---|
Une erreur d’analyse JSON, une réponse commençant par < | base_url sans /v1 | https://aiprimetech.io/v1 |
404 page not found | /v1 deux fois | Exactement un /v1 |
401 Invalid API key | Clé absente ou incorrecte dans le processus | Vérifiez la variable ; une clé appartient à une seule passerelle |
| Modèle non pris en charge | Identifiant de modèle ancien et daté, ou mal orthographié | Utilisez un identifiant du tableau ci-dessus |
'none' is not supported | reasoning_effort="none" | Utilisez low ou une valeur supérieure, ou omettez ce paramètre |
429 Concurrency limit exceeded for user | Trop de requêtes en cours | Limitez le parallélisme ; consultez les limites de débit et les nouvelles tentatives |
| Délais d’attente dépassés pour les réponses longues | Requête longue sans streaming | Utilisez le streaming ou augmentez le délai d’attente du client |
Questions fréquentes
Puis-je utiliser Claude avec le SDK OpenAI ?
Quelle URL de base utiliser pour Claude dans le SDK OpenAI ?
L’appel de fonctions fonctionne-t-il avec Claude au format OpenAI ?
Quand dois-je utiliser plutôt l’API native d’Anthropic ?
Obtenez une clé API — aucun compte Anthropic ni inscription sur liste d’attente requis.
Obtenir votre clé APIAI 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.