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

Модели принятия решений

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 DecisionsTypeSafe System One
gpt-6-lunaOpenAIБез конвертацииКонвертация в OpenAI Decisions
jev-1.13.0TypeSafeКонвертация в TypeSafe System OneБез конвертации
jev-latestTypeSafeКонвертация в TypeSafe System OneБез конвертации
jev-previewTypeSafeКонвертация в TypeSafe System OneБез конвертации

Для запросов к API моделей принятия решений используйте идентификаторы из таблицы. Каталоги /models предназначены для генеративных API и не включают JEV. Модель должна быть разрешена в настройках хаба.

Таблица возможностей​

Возможности зависят от протокола запроса и выбранной модели.

ВозможностьOpenAI Decisions → GPT-6 LunaOpenAI Decisions → JEVTypeSafe 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 — вероятность положительного ответа.
choicechoices: массив объектов с обязательным value (строка или логическое значение) и необязательным строковым description.choice, массив probabilities и confidence.
scorelevels: упорядоченный массив объектов с обязательным строковым 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_texttext: строка.
input_imageimage_url: строка с изображением в base64, например data:image/png;base64,…; detail: необязательное low, high, auto или original. Поддержка по моделям указана в таблице возможностей.

Ответ​

Верхний уровень содержит model, массив answers и объект usage. Ответы соответствуют порядку вопросов; name содержит имя вопроса или null, если имя не задано.

answers[].typeПоля результата
predicateprobability: число от 0 до 1.
choicechoice: выбранная строка или логическое значение; probabilities: массив { "value": ..., "probability": ... }; confidence: число.
scorescore: числовая оценка; 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 }
}
Тип ответаПоля результата
noulnoul: вероятность положительного ответа.
choicechoice: выбранный строковый ключ; probabilities: объект с вероятностью каждого варианта; confidence: число.
scorescore: числовая, в том числе дробная, оценка; 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 отсутствуют.