Choice, Score и Noul
Сравните Choice, Score и Noul, прежде чем составлять запрос.
Каждый вызов Jev представляет собой набор типизированных вопросов к одному состоянию. Choice выбирает из заданного набора максимум из 255 вариантов. Score помещает состояние на шкалу из 2–10 упорядоченных уровней, включая промежуточные значения. Noul возвращает P(да) как noul в диапазоне [0, 1] и не имеет отдельного поля уверенности. Выберите примитив, соответствующий решению, а арифметику, даты и генерацию оставьте другим инструментам.
Как выбрать примитив
Используйте Choice, когда ответом должен быть один именованный вариант: очередь, навык, метка класса или следующая ссылка. TypeSafe выводит вопрос «Какой из этих вариантов?». Возвращаются выбранный вариант, вероятности и уверенность. Критерии представляют собой карту размером до 255 вариантов. Сотни ссылок Wikipedia нельзя поместить в один Choice: демо Wikiracing сначала выставляет оценки, а затем выбирает из сокращённого списка.
Используйте Score, когда ответом служит степень на короткой упорядоченной шкале: спокоен / раздражён / очень раздражён или серьёзность 1-5. Возвращаются оценка, шкала, вероятности и уверенность. Критерии задаются упорядоченным массивом из 2–10 уровней. Не интерпретируйте оценку как точную величину. Уровни Jev 1.13 плохо подходят для восстановления числа между двумя ступенями; используйте математическое ожидание только для проверки порога.
Используйте Noul для вопросов с ответом «да» или «нет»: «Это правда?» Результат — noul от 0 до 1. В критериях при необходимости можно описать, что считать истиной и ложью. Поля уверенности нет. Значение Noul около 0.5 означает неопределённость, а не среднюю интенсивность. Не считайте Noul эквивалентом Choice с двумя вариантами и не переносите порог, настроенный для одного, на другой. На странице jaggedness от TypeSafe для одной и той же заявки рядом показаны Noul возврата средств со значением 0.22 и утвердительный Choice со значением 0.01.
Choice
- Поле типа
- choice
- question
- Какой из этих вариантов?
- returns
- выбор, вероятности, уверенность
- criteria
- набор максимум из 255 вариантов
- Макс. вариантов
- 255
Score
- Поле типа
- score
- question
- Какой уровень?
- returns
- оценка, шкала, вероятности, уверенность
- criteria
- упорядоченный массив из 2–10 уровней
- минимальные уровни
- 2
- Максимальное число уровней
- 10
Noul
- Поле типа
- noul
- question
- Это верно?
- returns
- noul (от 0 до 1)
- Наличие уверенности
- false
- criteria
- необязательные описания истинного и ложного значений
Параллельные вопросы и идентификаторы
Вопросы одного запроса используют общее состояние, независимо выполняются параллельно и при добавлении почти не влияют на задержку. В одной карте можно смешивать Choice, Score и Noul. Ключи задаёте вы: urgency, department, frustration. Соответствующий ответ возвращается под тем же ключом. Ключ не передаётся базовой модели и не участвует в выводе.
Это правило для ID важно при создании ключей в цикле. В примере подсчёта на странице jaggedness для каждого элемента списка задаётся по одному Noul (item_0, item_1, …), после чего ответы суммируются в Python. Jev никогда не получает эти имена как токены. Не меняйте имена в журналах, чтобы при повторных попытках можно было сопоставить их с исходной картой.
Общие метаданные каждого ответа примитива включают requestId, timestamp, latency и metadata. Используйте requestId для связывания трассировок. Считайте timestamp и latency характеристиками передачи, а не поводом задать вопрос снова. Metadata — необязательные данные, приложенные к основной полезной нагрузке. Сначала сравните три примитива, а затем рассматривайте общие поля как оболочку типизированного ответа.
Ограничения на практике
Лимит в 255 вариантов Choice жёсткий, а не рекомендательный. Wikiracing обходит его с помощью сокращённого списка Score и последующего Choice. Если в вашей таксономии 400 меток, нужна та же двухэтапная схема или иерархия Choices. Не рассчитывайте, что API примет 256.
Диапазон Score от 2 до 10 уровней предназначен для коротких шкал, которые человек может прочитать вслух. 100-балльная шкала качества требует другого примитива: разбейте её на элементарные Scores и сложите их в коде. Промежуточные оценки вроде 1.4 допустимы. Восстанавливать по этим дробям денежную сумму нельзя.
У Noul нет поля уверенности, поэтому условием допуска служит значение noul вместе с любым добавленным вторым вопросом. Распространённая связка: Noul определяет, «входит ли это в область задачи», а Choice отвечает, «к какой категории это относится», только при высоком noul. Запись об инвариантах jaggedness предупреждает, что эти два числа нельзя считать одной и той же статистикой.
Запрос, объединяющий все три примитива для одной заявки, — обычная схема, а не продвинутый приём. Срочность как Noul, отдел как Choice, раздражение как Score, а затем код. Та же карта показана в кратком руководстве для curl. Сравнение на этой странице помогает выбрать тип до написания JSON.
Общие поля оболочки — не четвёртый примитив. requestId, timestamp, latency и metadata сопровождают каждый ответ, чтобы вызов можно было отследить. Данные продукта должны находиться в состоянии. Если вы помещаете правила в metadata, перенесите их в объект, который фактически читает Jev.
Пишите критерии так, словно завтра их будет читать новый коллега. Названия вариантов в Choice и уровней в Score — часть вопроса. Неоднозначные метки приводят к буквальному толкованию в продакшене.
Noul — имя собственное. Сохраняйте это написание, даже если остальная часть запроса составлена на английском.
Источники