Guide Python
OpenAI Decisions API en Python
OpenAI n'a pas publié de SDK pour sa Decisions API — il n'y a pas de client.decisions.create à copier. Cette page montre du Python fonctionnel pour l'endpoint de ce site — une alternative appelable à l'OpenAI Decisions API qui sert decisions-1 et suit le même motif de décision contrainte.
Mis à jour
Faire l'appel
Un POST vers /api/v1/decisions avec une clé Bearer. Le corps est model, state et questions — 1 à 6 questions, chacune de type noul, choice ou score. Définissez DECISIONS_API_KEY avec une clé du tableau de bord.
Utilisez requests (ou httpx pour l'async — la forme de l'appel est identique). Mettez un timeout sur chaque appel : une décision bloquée doit échouer vite, pas figer le pipeline.
Python
import os
import requests
res = requests.post(
"https://decisions-api.net/api/v1/decisions",
headers={"Authorization": f"Bearer {os.environ['DECISIONS_API_KEY']}"},
json={
"model": "decisions-1",
"state": "I was charged twice for my subscription this morning.",
"questions": {
"refund": {
"type": "noul",
"instructions": "Is the customer asking for money back?",
}
},
},
timeout=30,
)
res.raise_for_status()
answers = res.json()["answers"]
print(answers["refund"]["noul"])Lire les probabilités
answers revient indexé par vos ids de questions. Une réponse noul est la probabilité que l'énoncé soit vrai. Une réponse choice porte le choice gagnant, une probabilité par option et une valeur de confiance — utilisez la confiance, pas seulement le gagnant, pour décider d'agir automatiquement.
Python
answers = res.json()["answers"]
# noul: probability the statement is true
if answers["refund"]["noul"] >= 0.8:
route_to_refunds()
# choice: winning label + per-option probabilities + confidence
team = answers["team"]
print(team["choice"], team["probabilities"], team["confidence"])Timeouts et retries
429 et 502 méritent un retry court avec backoff — les appels échoués ne sont pas facturés. 402 signifie solde vide : rechargez, ne réessayez pas. 422 est une erreur de validation ; le message nomme le champ, corrigez donc le corps plutôt que de réessayer.
Python
import time
import requests
def decide(body, attempts=3):
for i in range(attempts):
try:
res = requests.post(
"https://decisions-api.net/api/v1/decisions",
headers={"Authorization": f"Bearer {os.environ['DECISIONS_API_KEY']}"},
json=body,
timeout=30,
)
if res.status_code in (429, 502):
time.sleep(2 ** i)
continue
if res.status_code == 402:
raise RuntimeError("out of credits")
res.raise_for_status()
return res.json()["answers"]
except requests.Timeout:
time.sleep(2 ** i)
raise RuntimeError("decision call failed")Encapsulez l'appel dans un helper
L'appelant doit voir une fonction qui prend du texte et renvoie une étiquette — pas les détails HTTP. Mettez le timeout, le test du 402 et la boucle de retry dans decide() une fois, et chaque point d'appel reste propre.
Python
# Keep the call behind one function — timeouts, 402s,
# and retries live inside it, not at every call site.
def route_ticket(text: str) -> str:
answers = decide({
"model": "decisions-1",
"state": text,
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should own this ticket?",
"criteria": {
"payments": "Checkout or billing.",
"frontend": "Rendering or browser behavior.",
"account": "Login or permissions.",
},
}
},
})
team = answers["team"]
return team["choice"] if team["confidence"] >= 0.7 else "triage"FAQ
Existe-t-il un exemple officiel du SDK OpenAI pour la Decisions API ?
Non. OpenAI n'a publié ni méthodes SDK ni schéma de requête pour sa Decisions API — tout code montrant client.decisions.create est inventé. Cette page utilise du HTTP simple.
Puis-je utiliser httpx au lieu de requests ?
Oui — l'endpoint est un simple POST HTTPS. Utilisez httpx.AsyncClient avec les mêmes en-têtes, corps, timeout et gestion de statut.
Comment envoyer un contexte structuré ?
state accepte un objet JSON ou un tableau, pas seulement une chaîne — passez des dicts directement dans le corps json et le modèle les lit comme contexte.
Lancez une décision depuis le navigateur
Aucune configuration — exécutez un vrai appel dans le bac à sable avec 1 crédit offert aux nouveaux visiteurs.