置信度
TypeSafe 如何报告确定性、它与概率有何不同,以及如何使用它来控制系统行为。
TypeSafe 的所有 Score 和 Choice 答案都包含一个 probabilities 属性,表示在选项(对于 Choice)或等级(对于 Score)上的概率分布。该分布的形状才告诉你模型有多确定:集中在一个结果上意味着答案有把握,分散开来则意味着答案不确定。
答案的 confidence 属性把该形状压缩成一个 0 到 1 之间的单一数字,因此你无需自己计算就能对它设阈值。(Noul 答案不带此属性。)
置信度由概率推导而来
confidence 是一个统计量,由答案已经给出的概率分布计算得出。TypeSafe 会为你计算它,并在每个 Choice 和 Score 答案中返回,因此常见情况下你这边无需额外工作。
这个控件可以在浏览器里拖动查看不同概率分布对应的置信度。本地静态版无法运行它,请到官网原页面体验。 打开官网原页面
一个稳妥的默认值: 我们提供 confidence 作为适配大多数用例的便捷度量,但你绝不会被锁定在我们的定义上。取决于你在评估什么,另一种度量可能更适合你,这正是我们在响应中给出完整 probabilities 的原因。不同计算方式的利弊是一个专门话题,我们会把它放在单独一篇实践手册中而不是本页,等写好时会把链接加在这里!
对于 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 的置信度下限会捕捉模型报告为真正不确定的任何情况。在此之上,对于无需确认即可执行的门槛,破坏性操作要比只读操作更高。你的代码编码了风险容忍度。
正确的阈值取值取决于你的领域,以及模型在你的用例上的表现。从保守的阈值开始,用自己的数据测试,并随着观察结果进行调整。