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。