Учебник

Урок по OpenAI Decisions API: ваш первый вызов решения

Это пошаговое руководство проведёт вас от пустого аккаунта до рабочего вызова решения на эндпоинте decisions-1 этого сайта — вызываемой альтернативе OpenAI Decisions API: ключ, один POST, вероятности в ответе и порог для дальнейших действий.

Обновлено

Шаг 1 — получите ключ

Откройте песочницу и нажмите Run один раз — гостевая сессия, API-ключ и 2 бесплатных кредита создадутся автоматически. Для продакшена войдите и создайте именной ключ в панели в разделе API keys. Ключи отправляются в заголовке Authorization Bearer..

Держите ключ на сервере. Каждый запрос с ним списывается с вашего баланса — никогда не включайте его в браузерный код или публичный репозиторий.

Шаг 2 — отправьте первый запрос

Запрос решения содержит три поля: model (decisions-1 или decisions-latest), state (контекст, который читает модель — строка, JSON-объект или массив текста) и questions (карта из 1–6 id вопросов). Сам вопрос пишите в instructions — id это лишь метка, под которой вернётся ответ.

Вопрос noul — это суждение да/нет: поле ответа noul — вероятность того, что утверждение истинно.

cURL

curl https://decisions-api.net/api/v1/decisions \
  -H "Authorization: Bearer $DECISIONS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "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?"
    }
  }
}'

Шаг 3 — добавьте вопрос choice

Вопрос choice выбирает одну метку из заданного вами списка. criteria — объект из 2–8 идентификаторов вариантов, каждый с коротким описанием — модель читает описание, поэтому пишите его как правило маршрутизации.

Вопрос score работает так же, но принимает упорядоченный массив из 2–10 описаний уровней, от низшего к высшему. Все три типа можно смешивать в одном вызове — до шести вопросов.

JSON

{
  "team": {
    "type": "choice",
    "instructions": "Which team should own this ticket?",
    "criteria": {
      "payments": "Checkout, billing, or payment processing.",
      "frontend": "Rendering or browser behavior.",
      "account": "Login, permissions, or profile."
    }
  }
}

Шаг 4 — прочитайте вероятности

Успешный ответ содержит model, answers по вашим ID вопросов, usage и credits_used. Ответ noul — просто вероятность. Ответ choice включает победивший choice, вероятность для каждого варианта и значение уверенности.

Второе место важно не меньше победителя. Два варианта около 0.5 — не то же самое, что 0.9 против 0.1: считайте близкие случаи кандидатами на ревью, а не уверенными выборами.

Ответ

{
  "model": "decisions-1",
  "answers": {
    "refund": { "type": "noul", "noul": 0.98 }
  },
  "credits_used": 1
}

Шаг 5 — задайте порог и обработайте ошибки

Выберите порог уверенности на своём трафике: выше — принимаем, остальное — человеку. Начните с высокого (0.7–0.8) и снижайте только после разбора случаев ниже порога.

402 — баланс пуст; 429 или 502 — повторите позже: неудачные вызовы не оплачиваются. 422 — ошибка валидации тела, сообщение называет поле.

JavaScript

const res = await fetch('https://decisions-api.net/api/v1/decisions', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.DECISIONS_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(body),
})

if (res.status === 402) { /* out of credits */ }
if (res.status === 429 || res.status === 502) { /* retry later */ }

const { answers } = await res.json()
const team = answers.team

if (team.type === 'choice' && team.confidence >= 0.7) {
  routeTo(team.choice)          // confident: auto-assign
} else {
  queueForHuman(team)           // low confidence or near-tie: review
}

Частые вопросы

Это вызывает Decisions API от OpenAI?

Нет. Этот эндпоинт обслуживает decisions-1 — модель, которую запускает сайт. Decisions API от OpenAI в ограниченном предпросмотре без публичной схемы; формат запроса здесь следует тому же паттерну решений.

Почему ключ ответа отличается от отправленного?

Не отличается — answers возвращается под теми же ID вопросов, что вы отправили в карте questions. Если ключа нет, вопрос не прошёл валидацию и вызов вернул 422.

Можно ли получать ответ потоком?

Нет. Вызов решения — один round-trip, возвращающий полный объект answers. Потокового режима у этого эндпоинта нет.

Что означает уверенность для моего порога?

Уверенность показывает, насколько разнесены варианты. Калибруйте на реальном трафике: запишите вероятности для нескольких сотен случаев и поставьте порог там, где автоприём перестаёт делать важные для вас ошибки.

Попробуйте в песочнице

Выполните этот запрос в браузере — 2 бесплатных вызова для новых посетителей, без настройки.