TypeSafe 的所有 Score 和 Choice 答案都包含一个 probabilities 属性,表示各选项(Choice)或各级别(Score)上的概率分布。分布的形状正体现了模型的确信程度:概率集中在一个结果上意味着一个确定的答案,分布分散则意味着不确定。
答案的 confidence 属性把这一形状压缩为 0 到 1 之间的单个数值,这样你就可以直接对它设置阈值,而无需自己做数学运算。(Noul 答案不带该属性。)
置信度由概率推导而来
confidence 是根据答案中已经给出的概率分布计算出的统计量。TypeSafe 会替你计算,并在每个 Choice 和 Score 答案上返回它,因此常见场景下你无需做任何额外工作。
Move a slider to change an option's probability. The other probabilities adjust to keep the total at 100%.
How this demo calculates Confidence
TypeSafe computes confidence from how the probability is spread across the options. All of it on one option gives 1.0; the more evenly it spreads, the lower the confidence. This demo uses (3 × largest probability − 1) / 2 to approximate confidence for three options.
一个稳妥的默认选择: 我们提供 confidence 作为适合大多数用例的便捷度量,但你并不受限于我们的定义。根据你要评估的对象,其他度量方式可能更适合你,这也正是我们在响应中提供完整 probabilities 的原因。不同计算方式的利弊是一个专门话题,我们会把它放到单独的 cookbook 中讨论而不在本页展开,届时会在此附上链接!
对于 Choice,分布是各选项上的 probabilities。对于 Score,则是各级别上的分布。在这两种情况下,分布越平坦,置信度越低:Choice 的低置信度往往意味着没有任何选项明显胜出,Score 的低置信度往往意味着各级别含义模糊、涉及多个维度,或者 state 中的信息不足以做出判断。
“我不知道”是一个有用的信号
如果一个智能系统——无论是人还是机器——无法表达真实的不确定性,这个系统就无法被信任。
置信度为模型提供了说出“我对这个不太确定”的内置机制。这让你可以在代码中针对不同确定程度实现不同的行为,而这正是构建真正可靠系统的基础。
在代码中使用置信度的三条路径
一个有用的入门模式是把置信度划分为三个区间,每个区间对应不同的系统行为:
高置信度: 自动执行。模型的判断很明确,无需人工介入即可继续。
中等置信度: 谨慎推进。模型有一个合理的答案但并不确定。视具体场景,你可以让用户确认、标记以待审查,或在行动前先收集更多信息。
低置信度: 不要行动。转给人工、请求澄清,或回退到其他系统。模型在告诉你:它掌握的信息不足,或者这个问题不适合它。
边界划在哪里,取决于风险的高低。
阈值随风险而变
置信度阈值不是一个数字。同一个系统内,不同的动作应根据出错的后果设置不同的门槛。
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 的置信度下限会拦下模型真正不确定的所有情况。在此之上,破坏性操作免确认执行的门槛要高于只读操作。你的代码编码了这种风险容忍度。
正确的阈值取决于你的领域,以及模型在你的用例上的表现。从保守的阈值开始,用你自己的数据测试,并随着对结果的观察进行调整。