Перейти к содержанию

OpenAI Decisions API: что это и как заменить его на GPT-6 Luna

Endpoint OpenAI выбирает ответ из вашего списка, но открыт лишь выбранным клиентам. Тот же выбор на GPT-6 Luna стоит около $47,50 за миллион вызовов.

A
AI Free API Team
••11 мин чтения•Руководства по API
Светящийся постамент с большим кубом Decisions API с пометкой «закрытое превью» и зелёным кубом GPT-6 Luna с пометкой «доступна сейчас»

Decisions API — новый endpoint OpenAI, который получает контекст (текст или изображения) и вопросы с заранее заданными вариантами ответа, а возвращает один вариант из вашего списка. OpenAI описывает три задачи: классифицировать входные данные, маршрутизировать запросы и выбирать следующее действие агента. Работает он на модели GPT-6 Luna (анонс DevDay 2026 на форуме OpenAI).

По состоянию на 6 октября 2026 года пользоваться им могут только клиенты, которых OpenAI включила в ограниченное превью. Документации, схемы запроса, цены и лимитов нет. С обычным ключом ждать не обязательно: то же ограниченное решение собирается на общедоступной GPT-6 Luna. Строгая JSON-схема с перечислением (enum) разрешает модели вернуть только значение из вашего списка, а при 400 входных и 15 выходных токенах миллион таких решений стоит около $47,50. Спрячьте вызов за своей функцией, и переход на Decisions API после открытия затронет один файл. Из России OpenAI API напрямую не работает — что делать в этом случае, разобрано ниже.

Что такое OpenAI Decisions API и для каких задач он нужен

Формулировка OpenAI: Decisions API «enables real-time decision-making by focusing Luna's intelligence on a specific set of user-defined questions with finite pre-defined answers». Иначе говоря, модель не пишет текст, а выбирает: вы задаёте вопрос и полный список допустимых ответов, присылаете контекст и получаете выбранный вариант, по которому ветвится ваш код.

Типичные задачи для такого вызова:

  • маршрутизация запросов — в какую очередь отправить обращение: оплата, доставка, техподдержка, другое;
  • классификация и модерация контента — спам или нет, нарушает ли сообщение правило, к какому продукту относится отзыв;
  • следующее действие агента — найти заказ, задать уточняющий вопрос, ответить или передать человеку.

Контекстом может быть изображение, поэтому в те же задачи попадают скриншоты ошибок и фотографии повреждённого товара. Зачем отдельный endpoint, если выбирать из списка умеет и обычная модель? OpenAI делает ставку на скорость: сотрудник компании Тибо Соттьо (Thibault Sottiaux) написал, что API «tuned to be able to make decisions in less than a few hundreds of milliseconds end to end» (цитата приведена в разборе eesel). Это заявление, а не опубликованный замер.

Не путайте Decisions API с платформой Decisions (decisions.com) и сайтом decisionapi.net — к OpenAI они отношения не имеют. Та же ли это Luna, что доступна в API, или специально настроенный вариант, OpenAI в документации не уточняет.

Что OpenAI опубликовала на 6 октября 2026 года, а чего нет

Анонс 29 сентября обещал широкий запуск «in the coming days», а доступ к превью, по словам аккаунта OpenAI Developers, получили «selected API customers for testing». Через неделю ни широкого запуска, ни документации нет: в индексе документации OpenAI для разработчиков, в журнале изменений API и на странице цен Decisions API не упоминается.

Что нужно разработчикуСостояние на 6 октября 2026 года
ДоступОграниченное превью, только выбранные клиенты; дата широкого запуска не названа
Схема запроса и ответа, метод в SDKНе опубликованы
ID моделиНе опубликован; известно только, что внутри Luna
Цена и единица тарификации (токены, вызов или вопрос)Не опубликованы
Лимиты, число вопросов и вариантов в одном вызове, размер изображенийНе опубликованы
СкоростьЗаявление сотрудника OpenAI: менее нескольких сотен миллисекунд от запроса до ответа. Цифры «150 мс» и «в 10 раз быстрее Luna» встречаются в прессе и на слайде презентации, но не в документации
Оценка уверенности в ответеСведения расходятся: The New Stack пишет, что она есть, а в материалах OpenAI такое поле не упоминается. Пока его не описали, проектируйте так, будто его нет
Хранение данных и регионыНе опубликованы

Отсюда практический вывод: любой пример «тела запроса Decisions API» сейчас — догадка, потому что OpenAI контракт не публиковала. Не стройте под него код и не закладывайте пороги на поле уверенности, которое никто не описал.

Ошибка 403 «Decision API is not enabled for this user»

Если вы попробовали вызвать endpoint наугад и получили 403, это ожидаемо. Автор блога eesel 1 и 2 октября отправлял POST https://api.openai.com/v1/decisions с обычным ключом и оба раза получал HTTP 403:

json
{
  "error": {
    "message": "Decision API is not enabled for this user.",
    "type": "invalid_request_error",
    "param": null,
    "code": null
  }
}

Соседние пути вроде /v1/decisions/create и /v1/beta/decisions в том же тесте возвращали 404. Автор разбора eesel делает вывод, что маршрут существует, но закрыт флагом доступа, а 403 приходит даже на пустое тело запроса, так что о формате запроса ошибка ничего не говорит.

Что с этим делать:

  • 403 с этим текстом значит, что превью для вашего аккаунта не включено. Публичного способа включить его OpenAI не описала, а повтор запроса на следующий день в тесте eesel дал тот же ответ.
  • 404 значит, что путь неверный.
  • В коде не повторяйте такой вызов в цикле: обрабатывайте 403 как «функции нет» и уходите в рабочую реализацию на Luna.

Путь и текст ошибки могут измениться при широком запуске: это наблюдение одного аккаунта за два дня, а не документированное поведение.

Ждать Decisions API или запускать на Luna: правило выбора

Для большинства задач ответ — запускать сейчас на Luna, а Decisions API подключить позже как вторую реализацию той же функции. Ждать имеет смысл только тогда, когда без заявленной скорости продукт не работает.

Ваша ситуацияЧто делатьЧто изменит решение
Фоновая разметка: обращения, модерация очереди, тегиЗапускать на Luna. Задержка в секунду-полторы здесь не виднаЦена Decisions API, если она окажется заметно ниже
Переразметка архива, ответ не нужен сразуLuna через Batch: асинхронно и за полцены—
Живой чат: решение до первого ответа ботаЗапускать на Luna и мерить задержку на своём трафикеЕсли пауза мешает, ждать Decisions API с его заявленной скоростью
Агент делает десятки мелких выборов на задачуНачать на Luna; при 20 выборах по 1,46 с ожидание — около 29 с на задачуСкорость Decisions API на вашем трафике после открытия
Нужны вероятности, чтобы автоматизировать по порогуLuna со схемой их не даёт, у Decisions API такое поле не описано: закладывайте вариант «не уверен» и проверку человекомДокументированное поле уверенности
Вы уже в превьюГонять Decisions API параллельно с Luna на теневом трафике, не переводя всё сразуИзменения контракта до широкого запуска

Цифра 1,46 с — медиана из теста eesel (Luna без рассуждений, замер с ноутбука, включая сеть); на вашем трафике она будет другой.

Как сделать то же на GPT-6 Luna: строгая JSON-схема с enum

На странице GPT-6 Luna указано всё, что нужно для такого вызова: вход текстом и изображениями, Structured Outputs, reasoning.effort от none до max, поддержка Responses API, Chat Completions и Batch. Structured Outputs с strict: true заставляет ответ соответствовать JSON-схеме; если единственное поле схемы — enum, модель может вернуть только значение из вашего списка. Требования руководства: все поля перечислены в required, в каждом объекте additionalProperties: false, во всей схеме не больше 1 000 значений enum.

Схема: ваш код передаёт вопрос, варианты и текст или фото в функцию decide(), которая сейчас вызывает GPT-6 Luna со строгой JSON-схемой, а после открытия — Decisions API; на выходе один вариант из списка или unsure

Функция decide() на Responses API

Полный скрипт для Python 3.10+ и пакета openai; ключ читается из переменной окружения OPENAI_API_KEY. Вариант unsure добавляется к каждому списку автоматически.

python
import json
import logging

import openai
from openai import OpenAI

client = OpenAI()
UNSURE = "unsure"


def decide(question: str, options: list[str], text: str,
           image_url: str | None = None) -> str:
    """Возвращает один вариант из options или UNSURE."""
    allowed = options + [UNSURE]
    schema = {
        "type": "object",
        "properties": {"answer": {"type": "string", "enum": allowed}},
        "required": ["answer"],
        "additionalProperties": False,
    }
    content = [{"type": "input_text", "text": text}]
    if image_url:
        content.append({"type": "input_image", "image_url": image_url})

    try:
        resp = client.responses.create(
            model="gpt-6-luna",
            reasoning={"effort": "none"},
            input=[
                {"role": "developer",
                 "content": f"{question} Если данных не хватает или ни один "
                            f"вариант не подходит, ответь {UNSURE}."},
                {"role": "user", "content": content},
            ],
            text={"format": {"type": "json_schema", "name": "decision",
                             "strict": True, "schema": schema}},
        )
    except openai.APIError as err:
        logging.warning("decide: ошибка API: %s", err)
        return UNSURE

    if resp.status != "completed":      # например, incomplete
        return UNSURE
    try:
        answer = json.loads(resp.output_text)["answer"]
    except (ValueError, KeyError, TypeError):
        return UNSURE                    # отказ модели или пустой ответ
    return answer if answer in allowed else UNSURE


if __name__ == "__main__":
    print(decide(
        "В какую очередь отправить обращение?",
        ["billing", "shipping", "technical", "other"],
        "С меня дважды списали деньги за заказ №4471",
    ))

Что здесь важно:

  • reasoning={"effort": "none"} отключает рассуждения: так ответ приходит быстрее и не тратит токены на рассуждения. Если точность на ваших примерах не устраивает, попробуйте low и сравните задержку и цену.
  • Инструкция про unsure нужна не для красоты. Руководство Structured Outputs предупреждает: на входе, который не подходит под схему, модель всё равно старается ей соответствовать и может выдумать ответ. Без отдельного варианта ей некуда деться.
  • Отказ модели, обрезанный ответ и ошибку API функция тоже превращает в unsure, так что вызывающему коду достаточно обработать один запасной исход.
  • Проверка answer in allowed дублирует схему. Она почти ничего не стоит и спасёт, если вызов однажды пойдёт через сервис, который схему не соблюдает.

Похожую форму запроса (Luna, effort: none, схема с одним полем enum) eesel опубликовала вместе со своим тестом: на обращение о двойном списании модель трижды вернула очередь billing.

Скриншоты и фото в том же вызове

Изображение передаётся вторым элементом content с типом input_image: в image_url подойдёт ссылка https://… или data URL вида data:image/png;base64,…. Так тот же decide() решает, к какой очереди относится скриншот ошибки или можно ли принять возврат по фото. Картинка добавляет входные токены, и их число зависит от размера изображения, поэтому стоимость таких решений считайте по фактическому расходу в первых вызовах.

Один интерфейс, чтобы потом подключить Decisions API

Сигнатура decide(question, options, text, image_url) и есть ваш контракт: остальной код знает только её. Когда Decisions API откроется и OpenAI опубликует схему, вы напишете вторую реализацию с той же сигнатурой и переключите их флагом. Чтобы потом было с чем сравнивать, уже сейчас пишите в лог вопрос, версию инструкции, список вариантов, ответ, задержку и итоговое решение человека, если оно было.

Строгая схема гарантирует формат, а не правильный ответ

Строгая схема отвечает за одно: в ответе будет значение из списка. Правильность она не гарантирует — руководство OpenAI прямо пишет, что Structured Outputs «can still contain mistakes».

Насколько велика разница между задачами, показывает тот же тест eesel: 20 обращений, по два прогона на каждую настройку, 160 вызовов. Очередь Luna выбрала верно в 40 случаях из 40, а на вопросе «можно ли ответить автоматически» без рассуждений — в 33 из 40. Выборка маленькая, и тест проводил поставщик, который продаёт собственный продукт для поддержки, но направление понятно: выбрать отдел легко, понять, когда не действовать, — трудно.

Поэтому разделяйте решения по цене ошибки:

  • ошибка дешёвая (не та очередь, не тот тег): действуйте по ответу сразу, ошибки найдутся при разборе;
  • ошибка дорогая — отправка сообщения клиенту, списание или возврат денег, изменение или удаление данных: автоматически действуйте только когда ответ не unsure и проходит ваше правило (белый список разрешённых действий), всё остальное отправляйте человеку.

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

Сколько стоят 1 000 и 1 000 000 решений на GPT-6 Luna

Цена Decisions API неизвестна, поэтому ориентиром служат ставки самой Luna в режиме Standard: $0,10 за 1 млн входных токенов и $0,50 за 1 млн выходных (страница модели). Batch и Flex стоят 50 % от Standard. При effort: none токенов рассуждений нет, и стоимость одного решения считается так:

цена вызова = входные токены × $0,10 / 1 000 000 + выходные токены × $0,50 / 1 000 000

Допущение на один вызовОдин вызов1 000 решений1 000 000 решений
400 входных + 15 выходных, Standard$0,0000475$0,0475$47,50
400 входных + 15 выходных, Batch$0,00002375$0,02375$23,75
800 входных + 15 выходных, Standard$0,0000875$0,0875$87,50

Проверка первой строки: 400 × 0,10 / 1 000 000 = $0,00004 плюс 15 × 0,50 / 1 000 000 = $0,0000075, итого $0,0000475. Числа токенов здесь — допущения для примера, а не замер: подставьте свои из поля usage в ответе. Короткая инструкция и короткое обращение дают меньше: в тесте eesel запрос на 60 входных и 12 выходных токенов обошёлся в $0,000012. Главное, что раздувает счёт, — длинная инструкция с примерами, история переписки и изображения. Для повторяющейся длинной инструкции работает кэш: кэшированный вход у Luna стоит $0,01 за 1 млн токенов (запись в кэш — $0,125).

Batch подходит только для разметки, которую можно ждать: он асинхронный. Для живых решений остаётся Standard.

Пропускную способность ограничивает уровень аккаунта: на Tier 1 у Luna 500 запросов в минуту, то есть не больше 500 × 60 × 24 = 720 000 решений в сутки при равномерной нагрузке. На старших уровнях лимит выше.

Как Luna соотносится по цене со старшей моделью Sol, если простой классификации окажется мало, разобрано в статье «GPT-6 Luna или Sol: сколько стоят и когда Sol окупается».

Из России: OpenAI API напрямую недоступен

В списке стран, где работает OpenAI API, России нет, а OpenAI предупреждает: «Accessing or offering access to our services outside of the countries and territories listed below may result in your account being blocked or suspended». Значит, вопрос, попадёт ли ваш аккаунт в превью Decisions API, для российской компании не главный: сначала нужен законный способ работать с моделями OpenAI. Обходить это ограничение чужими аккаунтами или подменой страны не стоит: OpenAI прямо пишет о блокировке.

Сам Decisions API через сторонние шлюзы получить нельзя: это закрытый endpoint OpenAI, и шлюзы его не маршрутизируют. Решение на Luna при этом переносится. Например, laozhang.ai даёт доступ к gpt-6-luna через OpenAI-совместимый API по тем же ставкам: на 6 октября 2026 года это $0,10 за вход и $0,50 за выход на 1 млн токенов (таблица моделей laozhang.ai). Decisions API там нет. Документация сервиса описывает запросы в формате Chat Completions, поэтому там удобнее вариант со схемой в response_format:

python
from openai import OpenAI

client = OpenAI(base_url="https://api.laozhang.ai/v1", api_key="ВАШ_КЛЮЧ")

schema = {
    "type": "object",
    "properties": {"answer": {"type": "string",
                              "enum": ["billing", "shipping", "technical",
                                       "other", "unsure"]}},
    "required": ["answer"],
    "additionalProperties": False,
}

resp = client.chat.completions.create(
    model="gpt-6-luna",
    reasoning_effort="none",
    messages=[
        {"role": "system",
         "content": "В какую очередь отправить обращение? "
                    "Если ни одна не подходит, ответь unsure."},
        {"role": "user", "content": "С меня дважды списали деньги за заказ №4471"},
    ],
    response_format={"type": "json_schema",
                     "json_schema": {"name": "decision", "strict": True,
                                     "schema": schema}},
)
print(resp.choices[0].message.content)

Передаёт ли шлюз строгую схему и reasoning_effort до модели без изменений, нужно проверить одним тестовым вызовом до запуска: ответ должен быть JSON с одним полем answer и значением из списка, а на постороннее сообщение («какая погода завтра?») — unsure. Проверку answer in allowed в своём коде оставьте в любом случае. Другие варианты доступа, включая российские модели GigaChat и YandexGPT, собраны в руководстве «Как использовать OpenAI API в России: прокси, GigaChat, YandexGPT и шлюзы».

Когда переходить с Luna на Decisions API: пять сигналов

Карточки пяти сигналов перехода на Decisions API: документация, ключ без 403, цена, поле уверенности, теневой трафик; итог — переключаться, когда выполнены сигналы 1, 2 и 5
  1. На developers.openai.com появилась страница Decisions API со схемой запроса и ответа. Без неё вторую реализацию decide() писать не по чему.
  2. Ваш ключ перестал получать 403 на тестовый вызов. До этого все остальные сигналы не имеют значения.
  3. Опубликована цена и единица тарификации. Пересчитайте стоимость одного решения и сравните с вашей цифрой на Luna из таблицы выше.
  4. Описано поле уверенности. Только тогда можно строить автоматизацию по порогу; до этого остаётся вариант unsure.
  5. На теневом трафике выигрыш виден. Пустите одни и те же входы через обе реализации: точность не ниже, а выигрыш в задержке приходится туда, где он вам нужен, — живой чат или агент.

Переключайтесь, когда выполнены первый, второй и пятый пункты; третий и четвёртый меняют экономику и устройство порогов, но не саму возможность перехода.

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

Сколько стоит OpenAI Decisions API?

На 6 октября 2026 года цена не опубликована, неизвестна и единица тарификации — токены, вызов или вопрос. Ближайший ориентир — ставки GPT-6 Luna: $0,10 за 1 млн входных и $0,50 за 1 млн выходных токенов. Это цена Luna, а не Decisions API: OpenAI может назначить endpoint другую.

Когда Decisions API откроют для всех?

Дату OpenAI не назвала. 29 сентября было сказано «in the coming days», но на 6 октября доступ всё ещё только у выбранных клиентов, а в документации endpoint не появился.

Чем Decisions API отличается от Jev?

Jev — отдельная модель для решений от компании TypeSafe, вышла 15 сентября 2026 года. Она открыта всем, принимает только текст и возвращает вероятность для каждого варианта (сравнение Firecrawl). Decisions API принимает и изображения, но цены, документации и описанного поля уверенности у него пока нет.

Есть ли Decisions API в ChatGPT?

Это endpoint OpenAI API для разработчиков: в анонсе DevDay он стоит в разделе моделей и API, а о функции в интерфейсе ChatGPT OpenAI не сообщала. Пользоваться им можно только из кода, и то при доступе к превью.