Choice — 在 Jev 裡選出一個選項
Choice 是 TypeSafe 的 Jev 模型三種提問型別之一。它從你定義的集合裡恰好挑出一個選項,回傳勝出者、每個選項的機率,以及一個信賴度。
Choice 把一組有名字的選項交給模型,拿回其中恰好一個。選項名是你取的,所以答案本身就是你的程式可以 switch 的值——沒有字串要正規化,也不可能出現你從未定義過的名字。
有意思的不是勝出者,而是隨它一起回來的分布。每個選項都有機率,它們之和為一,而第二名會告訴你模型差一點選了什麼。
一個真實的答案
送給 jev-1.13.0。下面的數字就是回來的東西。
今早 4.2 發版以來,我們的 SSO 登入一直回 500。團隊裡沒人登得進去。Chrome 和 Safari 上一樣,兩個不同的租戶也一樣。
問題
這張工單應該由哪個團隊負責?
83%
高
87% 技術
技術以 87% 勝出,但帳號佔著 13%——而這正是應該存在的分歧,因為 SSO 故障確實卡在兩者之間。一個光禿禿的標籤會把它藏起來。如果你的路由判錯是有代價的,13% 就是該拿來設門檻的那個數。
請求與回應原文
請求
{
"state": "Our SSO login has been throwing a 500 since the 4.2 release this morning. Nobody on the team can get in. Same on Chrome and Safari, two different tenants.",
"model": "jev-latest",
"questions": {
"queue": {
"type": "choice",
"instructions": "Which team should own this ticket?",
"criteria": {
"Billing": "Payments, invoices, refunds, plan changes",
"Technical": "Bugs, outages, API errors, integrations",
"Account": "Login, permissions, seats, data export",
"Sales": "Pricing, upgrades, contracts"
}
}
}
}回應
{
"model": "jev-1.13.0",
"answers": {
"queue": {
"type": "choice",
"choice": "Technical",
"confidence": 0.83,
"probabilities": {
"Technical": 0.87,
"Sales": 0,
"Account": 0.13,
"Billing": 0
}
}
}
}答案裡有什麼
- type "choice"
- 與提問型別對應。
- choice string
- 機率最高的那個選項。
- probabilities map<string, number>
- 你定義的每個選項及其機率。它們之和為 1。
- confidence number
- 0 到 1,由機率的分散程度算出。有一個明確的尖峰就是高信賴度;平鋪開來就是低。
規則與限制
-
criteria把每個選項對應到一段描述,或者在名字本身已經說明問題時對應到null。 - 一個 Choice 最多接受 255 個選項。把團隊或類別的完整清單交給模型,而不是一份精簡名單——每個選項只花幾個 token。
- 如果你的清單可能涵蓋不了所有輸入,就加一個
Other或None of the above選項,好讓模型有辦法說「都不合適」。
什麼時候該用 Choice
- 答案是你程式裡已經有的封閉集合——佇列、類別、狀態、下一步動作。
- 你想看到第二名,而不只是冠軍。
- 你在做路由,而各個去向的代價差異大到你想為每個選項單獨設門檻。
什麼時候該換別的
- 這些選項是同一把尺上有序的檔位——低、中、高。Score 知道它們有序,還能落在兩檔之間;Choice 只會把它們當成互不相干的標籤。
- 可能同時有多個選項為真。那就每個選項問一個 Noul。