Модели принятия решений
API моделей принятия решений поддерживает протоколы OpenAI Decisions и TypeSafe System One. По обоим протоколам доступны GPT-6 Luna от OpenAI и модели JEV от TypeSafe.
Модели проверяют утверждения, выбирают категории и оценивают данные по заданной шкале. Запрос содержит общие входные данные и вопросы к ним. Тип вопроса определяет поля ответа: вероятность, выбранную категорию или числовую оценку.
Первый запрос
Получите ключ и пополните баланс по инструкции быстрого старта. Сохраните ключ в переменной окружения:
export COREINFRA_API_KEY="sk-ci2-..."
Отправьте запрос к jev-latest по протоколу OpenAI Decisions. Вопрос типа predicate используется для проверки утверждения:
curl https://hub.coreinfra.ai/openai/api/v1/decisions \
-H "Authorization: Bearer $COREINFRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"input": "Оплата по счёту получена.",
"questions": [
{
"type": "predicate",
"name": "paid",
"instructions": "Счёт оплачен?"
}
]
}'
Пример фрагмента ответа:
{
"model": "jev-latest",
"answers": [
{ "type": "predicate", "name": "paid", "probability": 0.9 }
]
}
Значение answers[0].probability — вероятность положительного ответа. Порог для принятия решения задаёт приложение. Для запроса к GPT-6 Luna укажите gpt-6-luna в поле model.
Адрес и модели
Базовый адрес хаба — https://hub.coreinfra.ai. Запросы по обоим протоколам передаются в JSON с заголовками Authorization: Bearer <ключ хаба> и Content-Type: application/json.
| Метод | Путь | Назначение |
|---|---|---|
| POST | /openai/api/v1/decisions | Доступ к моделям принятия решений по протоколу OpenAI Decisions. |
| POST | /typesafe/api/v1/systemone | Доступ к моделям принятия решений по протоколу TypeSafe System One. |
Адрес запроса определяет протокол, поле model — модель. Если протокол запроса отличается от протокола провайдера, хаб конвертирует запрос и ответ.
| Модель | Провайдер | OpenAI Decisions | TypeSafe System One |
|---|---|---|---|
gpt-6-luna | OpenAI | Без конвертации | Конвертация в OpenAI Decisions |
jev-1.13.0 | TypeSafe | Конвертация в TypeSafe System One | Без конвертации |
jev-latest | TypeSafe | Конвертация в TypeSafe System One | Без конвертации |
jev-preview | TypeSafe | Конвертация в TypeSafe System One | Без конвертации |
Для запросов к API моделей принятия решений используйте идентификаторы из таблицы. Каталоги /models предназначены для генеративных API и не включают JEV. Модель должна быть разрешена в настройках хаба.
Таблица возможностей
Возможности зависят от протокола запроса и выбранной модели.
| Возможность | OpenAI Decisions → GPT-6 Luna | OpenAI Decisions → JEV | TypeSafe System One → JEV или GPT-6 Luna |
|---|---|---|---|
| Текстовые данные | Поддерживаются | Поддерживаются | Поддерживаются |
| Изображения в base64 | Поддерживаются через input_image | Не поддерживаются; запрос с input_image возвращает HTTP 400 | Не поддерживаются, в том числе для GPT-6 Luna |
| Несколько вопросов с общими входными данными | Поддерживаются | Поддерживаются | Поддерживаются |
| Проверка утверждения, выбор категории, оценка по шкале | Поддерживаются | Поддерживаются | Поддерживаются |
Массив сообщений role: "user" | Поддерживается в input | Преобразуется в state | Отдельного типа сообщений нет; используется state |
| Объекты и массивы в данных, инструкциях и описаниях | Передаются строкой JSON; в input также допускается массив сообщений | Передаются строкой JSON; в input также допускается массив сообщений | Поддерживаются; для GPT-6 Luna преобразуются в строку JSON |
Варианты ответа choice | Строки и логические значения | Строки и логические значения; типы сохраняются в ответе | Строковые ключи criteria |
Внешние URL изображений и file_id | Не поддерживаются | Не поддерживаются | Не поддерживаются |
| Потоковые ответы | Не поддерживаются | Не поддерживаются | Не поддерживаются |
Инструменты, temperature, max_tokens, response_format, произвольная схема JSON ответа | Не поддерживаются | Не поддерживаются | Не поддерживаются |
Неизвестные поля запроса отклоняются с HTTP 400. Поле stream не принимается, в том числе со значением false. Для генерации текста, диалога и вызова инструментов используется API генеративных моделей.
Хаб проверяет структуру JSON и типы полей. Ограничения на число вопросов, вариантов и уровней, уникальность вариантов и содержимое изображений определяет провайдер. Хаб не проверяет диапазон и нормализацию вероятностей, не приводит их сумму к единице и не сверяет score с распределением вероятностей.
Схема OpenAI Decisions
Запрос
| Поле | Тип | Описание |
|---|---|---|
model | Строка, обязательно | Идентификатор модели из таблицы выше. |
input | Строка или массив сообщений, обязательно | Общие входные данные для всех вопросов. |
questions | Массив объектов, обязательно | Вопросы типов predicate, choice, score. |
safety_identifier | Строка, необязательно | Значение клиента не передаётся провайдеру. Для OpenAI хаб устанавливает собственный идентификатор. |
inference_geo | Игнорируется | Хаб удаляет поле; выбрать регион обработки через него нельзя. |
У каждого вопроса обязательны type и строка instructions. Необязательное поле name — строковое имя вопроса.
type | Дополнительные поля запроса | Результат |
|---|---|---|
predicate | Нет | probability — вероятность положительного ответа. |
choice | choices: массив объектов с обязательным value (строка или логическое значение) и необязательным строковым description. | choice, массив probabilities и confidence. |
score | levels: упорядоченный массив объектов с обязательным строковым label и необязательным строковым description. | score, массив probabilities и confidence. |
Пример запроса с выбором категории и оценкой по шкале:
{
"model": "gpt-6-luna",
"input": "С меня дважды списали оплату. Прошу вернуть лишнее списание сегодня.",
"questions": [
{
"type": "choice",
"name": "topic",
"instructions": "Определи тему обращения.",
"choices": [
{ "value": "delivery", "description": "Доставка заказа" },
{ "value": "payment", "description": "Оплата и возврат денег" }
]
},
{
"type": "score",
"name": "urgency",
"instructions": "Оцени срочность обращения.",
"levels": [
{ "label": "low", "description": "Срок не указан" },
{ "label": "medium", "description": "Нужно решить в течение недели" },
{ "label": "high", "description": "Нужно решить сегодня" }
]
}
]
}
Массив input содержит сообщения с обязательными role: "user" и content. Поле type можно опустить или указать как "message". Содержимое content — строка либо массив частей:
| Тип части | Поля |
|---|---|
input_text | text: строка. |
input_image | image_url: строка с изображением в base64, например data:image/png;base64,…; detail: необязательное low, high, auto или original. Поддержка по моделям указана в таблице возможностей. |
Ответ
Верхний уровень содержит model, массив answers и объект usage. Ответы соответствуют порядку вопросов; name содержит имя вопроса или null, если имя не задано.
answers[].type | Поля результата |
|---|---|
predicate | probability: число от 0 до 1. |
choice | choice: выбранная строка или логическое значение; probabilities: массив { "value": ..., "probability": ... }; confidence: число. |
score | score: числовая оценка; probabilities: массив { "value": 0, "label": "...", "probability": ... }; confidence: число. value — индекс уровня, начиная с 0. |
refusal | Отказ OpenAI выполнить оценку. Обрабатывайте его отдельно от результата вопроса. |
Шкала score задаётся порядком уровней: первый имеет индекс 0, следующий — 1 и так далее. Значение score может быть дробным.
В usage передаются input_tokens, output_tokens, total_tokens, а также input_tokens_details.cached_tokens, input_tokens_details.cache_write_tokens и output_tokens_details.reasoning_tokens. При конвертации ответа JEV поля детализации равны 0; отсутствующий или null-счётчик выходных токенов становится 0.
Схема TypeSafe System One
Запрос
| Поле | Тип | Описание |
|---|---|---|
model | Строка, обязательно | Идентификатор модели из таблицы выше. |
state | Строка, объект или массив, обязательно | Общие входные данные. Число, логическое значение и null на верхнем уровне не принимаются. |
questions | Объект, обязательно | Ключ — имя вопроса, значение — его описание. |
inference_geo | Игнорируется | Хаб удаляет поле; выбрать регион обработки через него нельзя. |
У каждого вопроса обязательны type и instructions. Инструкции и описания критериев могут быть строками, объектами или массивами JSON.
type | Поле criteria | Результат |
|---|---|---|
noul | Необязательный объект с описаниями "true" и "false". Оба ключа необязательны и допускают null. | noul — вероятность положительного ответа от 0 до 1. |
choice | Обязательный объект: ключи — строковые варианты ответа, значения — описания или null. | choice, объект probabilities и confidence. |
score | Обязательный упорядоченный массив описаний уровней. | score, объекты legend и probabilities, confidence. |
Первый запрос к jev-latest по протоколу TypeSafe System One:
curl https://hub.coreinfra.ai/typesafe/api/v1/systemone \
-H "Authorization: Bearer $COREINFRA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "jev-latest",
"state": "Оплата по счёту получена.",
"questions": {
"paid": { "type": "noul", "instructions": "Счёт оплачен?" }
}
}'
Пример содержимого questions для выбора категории и оценки срочности:
{
"topic": {
"type": "choice",
"instructions": "Определи тему обращения.",
"criteria": {
"delivery": "Доставка заказа",
"payment": "Оплата и возврат денег"
}
},
"urgency": {
"type": "score",
"instructions": "Оцени срочность обращения.",
"criteria": [
"Срок не указан",
"Нужно решить в течение недели",
"Нужно решить сегодня"
]
}
}
Ответ
Верхний уровень содержит model, объект answers с ключами из questions и объект usage. Пример ответа на вопрос paid:
{
"model": "jev-latest",
"answers": { "paid": { "type": "noul", "noul": 0.9 } },
"usage": { "input_tokens": 42 }
}
| Тип ответа | Поля результата |
|---|---|
noul | noul: вероятность положительного ответа. |
choice | choice: выбранный строковый ключ; probabilities: объект с вероятностью каждого варианта; confidence: число. |
score | score: числовая, в том числе дробная, оценка; legend: описания уровней; probabilities: вероятности уровней; confidence: число. Ключи уровней — "0", "1" и так далее. |
Пример ответа answers.urgency для шкалы из трёх уровней:
{
"type": "score",
"score": 1.7,
"legend": {
"0": "Срок не указан",
"1": "Нужно решить в течение недели",
"2": "Нужно решить сегодня"
},
"probabilities": { "0": 0.1, "1": 0.1, "2": 0.8 },
"confidence": 0.55
}
В usage обязателен input_tokens. Поле output_tokens может быть числом, null или отсутствовать.
Конвертация
Хаб преобразует запрос в протокол провайдера, а ответ — в протокол клиента. Для JEV используется TypeSafe System One, для GPT-6 Luna — OpenAI Decisions.
Например, запрос к jev-latest по протоколу OpenAI Decisions преобразуется в TypeSafe System One. Ответ JEV преобразуется обратно в OpenAI Decisions. При запросе к gpt-6-luna по протоколу TypeSafe System One преобразование выполняется в обратном направлении.
| Данные | Преобразование |
|---|---|
input ↔ state | Строка сохраняется. Массив сообщений Decisions становится массивом JSON-объектов в state. Объект или массив state становится строкой JSON в input. |
predicate ↔ noul без criteria | Вероятность переносится между probability и noul. |
noul с criteria → Decisions | Создаётся choice со значениями false и true. В ответе System One поле noul получает вероятность true. |
choice ↔ choice | Варианты и описания преобразуются в целевой формат. При обращении к JEV через Decisions исходные JSON-типы значений восстанавливаются: true и "true" различаются. |
score ↔ score | Сохраняется порядок уровней. При переводе из System One уровни получают метки "0", "1" и далее; исходные описания восстанавливаются в legend. |
| Объекты и массивы в инструкциях и описаниях System One | Сериализуются в JSON-текст для OpenAI. |
| Имена вопросов Decisions | Сохраняются порядок, повторяющиеся имена и отсутствие имени. В конвертированном ответе отсутствующее имя становится null. |
refusal OpenAI → System One | Не представим в целевом формате; хаб возвращает ошибку 502. Через Decisions отказ возвращается как ответ типа refusal. |
В ответе System One, полученном от OpenAI, хаб пересчитывает confidence из вероятностей по формулам TypeSafe. В ответе Decisions, полученном от JEV, сохраняется confidence провайдера. При смене модели проверяйте пороги принятия решений на своих данных.
В ответах без конвертации сохраняются дополнительные поля провайдера. При конвертации передаются только поля, описанные в схемах. Конвертация между API моделей принятия решений и API генеративных моделей не поддерживается.
Оплата
Запросы по протоколам OpenAI Decisions и TypeSafe System One оплачиваются по объёму input_tokens и тарифу на входящие токены выбранной модели. Скидки за кэш и плата за выходные токены не применяются, даже если эти счётчики присутствуют в usage. Правило действует для всех моделей из таблицы.
Хаб резервирует оценку стоимости до отправки запроса. Если провайдер передал корректные данные о расходе токенов, списывается фактическая стоимость. Если провайдер принял запрос, но хаб не получил корректные данные о расходе токенов (usage), списывается зарезервированная сумма. Например, если ответ оборвался или данные usage отсутствуют.
