Choice, Score і Noul

Порівняйте Choice, Score і Noul, перш ніж складати запит.

Кожен виклик Jev — це карта типізованих запитань до одного стану. Choice вибирає із заданого набору щонайбільше з 255 варіантів. Score розміщує стан на впорядкованій шкалі з 2–10 рівнів і може дати значення між двома рівнями. Noul повертає P(так) як noul у діапазоні [0, 1] і не має окремого поля впевненості. Виберіть примітив, що відповідає рішенню, а арифметику, дати та генерацію залиште іншим інструментам.

Як вибрати примітив

Використовуйте Choice, коли відповіддю має бути один іменований варіант: черга, навичка, мітка класу чи наступне посилання. Запитання, яке виводить TypeSafe: «Який із цих варіантів?». Повертаються вибір, імовірності та впевненість. Criteria — це мапа щонайбільше з 255 варіантів. Якщо у вас сотні посилань Wikipedia, їх не можна вмістити в один Choice; демо Wikiracing спочатку оцінює їх, а потім вибирає зі стислого списку.

Використовуйте Score, коли відповідь — це ступінь на короткій упорядкованій шкалі: спокійний / роздратований / дуже роздратований або серйозність 1-5. Повертаються score, legend, probabilities і confidence. Criteria — упорядкований масив із 2–10 рівнів. Не перетворюйте оцінку інтерполяцією на точну величину. Рівні Jev 1.13 погано відновлюють число між двома щаблями; математичне сподівання використовуйте лише для перевірки порога.

Використовуйте Noul для запитань із відповіддю «так» або «ні»: «Це правда?». Повертає noul від 0 до 1. У критеріях за потреби можна описати істинне й хибне значення. Поля впевненості немає. Значення Noul близько 0.5 означає невизначеність, а не середню інтенсивність. Не вважайте, що Noul дорівнює Choice із двома варіантами, і не переносьте налаштований для одного поріг на інше. На сторінці jaggedness від TypeSafe для тієї самої заявки показано Noul повернення коштів зі значенням 0.22 і ствердний Choice зі значенням 0.01.

Choice, Score, and Noul primitives with return fields and limits
Choice, Score і Noul з полями повернення та обмеженнями.

Choice

typeField
choice
question
Який із цих варіантів?
returns
вибір, імовірності, впевненість
criteria
карта щонайбільше з 255 варіантів
maxOptions
255

Score

typeField
score
question
Який рівень?
returns
оцінка, шкала, імовірності, впевненість
criteria
упорядкований масив із 2–10 рівнів
minLevels
2
maxLevels
10

Noul

typeField
noul
question
Чи це правда?
returns
noul (від 0 до 1)
hasConfidence
false
criteria
необов’язкові описи істинного та хибного результатів

Спільні поля відповіді

requestId
Ідентифікатор виклику для об’єднання трасувань і повторних спроб у журналах.
timestamp
Час сервера, доданий до оболонки відповіді, а не привід повторно надсилати запитання.
latency
Виміряна тривалість цього оцінювання. Для Jev сервіс TypeSafe заявляє наскрізний час 70ms-500ms.
metadata
Необов’язкові додаткові дані поруч із типізованими відповідями. Дані продукту зберігайте у стані, а не тут.

Паралельні запитання та ідентифікатори

Запитання в одному запиті використовують спільний стан, виконуються незалежно й паралельно, а їх додавання майже не впливає на затримку. Поєднуйте Choice, Score і Noul в одній карті. Ключі задаєте ви: urgency, department, frustration. Відповідна відповідь повертається під тим самим ключем. Ключ не надсилається базовій моделі та не використовується під час виведення.

Це правило щодо ідентифікаторів важливе, коли ключі генеруються в циклі. У прикладі підрахунку на сторінці 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.

Від 2 до 10 рівнів Score призначено для коротких шкал, які людина може прочитати вголос. 100-бальна шкала якості потребує іншого примітива: розділіть її на атомарні Scores і складіть їх у коді. Проміжні оцінки на кшталт 1.4 є нормальними, але відновлювати за цими дробами суму в доларах не можна.

У Noul немає поля впевненості, тому умовою спрацювання слугує значення noul разом із будь-яким доданим другим запитанням. Типова пара: Noul для перевірки, чи належить випадок до потрібної області, і Choice для визначення категорії, але лише за високого noul. Перелік інваріантів jaggedness застерігає: ці два числа не можна вважати однією статистичною величиною.

Запит, який поєднує всі три примітиви для однієї заявки, — звичайна схема, а не складний трюк. Терміновість як Noul, відділ як Choice, роздратування як Score, а далі — код. Таку саму карту показано в короткому посібнику для curl. Порівняння на цій сторінці допомагає вибрати тип до написання JSON.

Спільні поля оболонки — не четвертий примітив. requestId, timestamp, latency і metadata додаються до кожної відповіді, щоб можна було простежити виклик. Відомості про продукт мають бути у стані. Якщо ви додаєте правила в metadata, перенесіть їх до об’єкта, який фактично читає Jev.

Пишіть критерії так, ніби завтра їх читатиме новий колега. Назви варіантів у Choice і назви рівнів у Score є частиною запитання. Через нечіткі мітки буквальне прочитання потрапляє в продакшен.

Noul — власна назва. Зберігайте її написання, навіть якщо решта запиту подана англійською прозою.

Джерела