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.