Guia Python
OpenAI Decisions API em Python
A OpenAI não publicou um SDK para sua Decisions API — não existe client.decisions.create para copiar. Esta página mostra Python funcional para o endpoint deste site — uma alternativa chamável à OpenAI Decisions API que serve decisions-1 e segue o mesmo padrão de decisão restrita.
Atualizado
Faça a chamada
Um POST para /api/v1/decisions com uma chave Bearer. O corpo é model, state e questions — 1 a 6 perguntas, cada uma de tipo noul, choice ou score. Defina DECISIONS_API_KEY com uma chave do painel.
Use requests (ou httpx para async — o formato da chamada é idêntico). Mantenha timeout em toda chamada; uma decisão travada deve falhar rápido, não travar o 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"])Leia as probabilidades
answers volta indexada pelos seus ids de pergunta. Uma resposta noul é a probabilidade de a afirmação ser verdadeira. Uma resposta choice traz o choice vencedor, uma probabilidade por opção e um valor de confiança — use a confiança, não só o vencedor, para decidir se age automaticamente.
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 e tentativas
429 e 502 merecem uma tentativa curta com backoff — chamadas que falham não são cobradas. 402 significa saldo vazio: recarregue, não tente de novo. 422 é erro de validação; a mensagem indica o campo, então corrija o corpo em vez de tentar de novo.
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")Embrulhe a chamada num helper
Quem chama deve ver uma função que recebe texto e devolve um rótulo — não detalhes de HTTP. Coloque o timeout, a checagem de 402 e o loop de retry dentro de decide() uma vez só, e cada ponto de chamada fica limpo.
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"Perguntas frequentes
Existe um exemplo oficial do SDK da OpenAI para a Decisions API?
Não. A OpenAI não publicou métodos de SDK nem um esquema de requisição para sua Decisions API — qualquer código com client.decisions.create é inventado. Esta página usa HTTP puro.
Posso usar httpx em vez de requests?
Sim — o endpoint é um simples POST HTTPS. Use httpx.AsyncClient com os mesmos headers, corpo, timeout e tratamento de status.
Como envio contexto estruturado?
state aceita um objeto JSON ou array, não só string — passe dicts diretamente no corpo json e o modelo os lê como contexto.
Execute uma decisão no navegador
Sem configuração — rode uma chamada real no playground com 1 crédito grátis para novos visitantes.