置信度
置信度
TypeSafe 如何报告确定性、它与概率有何区别,以及如何用它控制系统的行为。
TypeSafe 返回的每个 score(评分)和 choice(选择)答案都带一个 probabilities 属性,表示各选项(choice)或各档位(score)上的概率分布。这个分布的形状说明了模型有多确定:集中在一个结果上,就是有把握的答案;铺得很开,就是没把握的答案。
答案的 confidence 属性把那个形状压缩成 0 到 1 之间的一个数,让你直接拿它做阈值判断,不用自己算。(noul 答案不带这个属性。)
置信度由概率分布推导而来
confidence 是一个统计量,由答案已经给出的概率分布算出。TypeSafe 替你算好,并在每个 choice 和 score 答案上返回,所以常见场景你这边不用额外做任何事。
示例:三个选项的 choice 问题
看概率分布如何改变置信度
置信度
概率
拖动滑块改变某个选项的概率。其它概率会自动调整,使总和保持 100%。
选中:选项 A
这个演示怎么算置信度
TypeSafe 根据概率在各选项上的铺开程度来计算置信度。全部集中在一个选项上就是 1.0;铺得越均匀,置信度越低。这个演示用 (3 × 最大概率 − 1) / 2 来近似三个选项下的置信度。
对 Choice 来说,分布就是各选项上的 probabilities。对 Score 来说,就是各档位上的分布。两种情况里,分布越平就意味着置信度越低:Choice 上置信度低,通常说明没有一个选项明显胜过其它选项;Score 上置信度低,通常说明档位含义模糊、涉及多个维度,或者状态里给的信息不够。
「我不知道」是个有用的信号
一个智能系统,不管是人还是机器,如果不能诚实地表达不确定,就不值得信任。
置信度给模型提供了一个内置机制,让它能说「这个我没把握」。这样你的代码就能针对不同的确定程度采取不同的行为 —— 这是构建真正可靠系统的基础。
在代码里使用置信度的三条路径
一个有用的起步模式,是把置信度划成三段,每段触发不同的系统行为:
高置信度: 直接行动。模型判断明确,你可以不用人工介入就继续。
中等置信度: 谨慎推进。模型的答案合理,但并不确定。视上下文而定,你可以让用户确认、标记待复核,或者先收集更多信息再行动。
低置信度: 不要行动。路由给人工、请求澄清,或者回退到别的系统。模型是在告诉你:信息不够,或者这个问题不适合它。
这些边界画在哪里,取决于风险有多大。
阈值随风险变化
置信度阈值不是一个数。同一个系统里的不同动作,应该根据出错的后果,按不同水平来设闸。
response = client.system_one(
state=user_message,
questions={
"action": Choice(
instructions="What is the user trying to do?",
criteria={
"check_balance": "View account balance",
"approve_transfer": "Approve the pending withdrawal request",
"support": "Get help with an issue",
},
),
},
)
action = response.answers["action"]
confidence = action.confidence
if confidence < 0.5:
# Model is genuinely unsure. Don't guess.
route_to_human(user_message)
elif action.choice == "check_balance":
# Low stakes. Showing the wrong screen is recoverable.
show_balance(account_id)
elif action.choice == "approve_transfer":
if confidence > 0.9:
# High stakes, high confidence. Proceed with confirmation.
confirm_then_execute(account_id)
else:
# High stakes, moderate confidence. Verify first.
ask_user_to_confirm(account_id)
0.5 这个置信度下限,能兜住模型确实没把握的一切。在这之上,无需确认即可行动的阈值,对破坏性操作要比只读操作更高。风险容忍度就写在你的代码里。