TypeSafe 基础置信度

TypeSafe 的所有 Score 和 Choice 答案都包含一个 probabilities 属性,表示各选项(Choice)或各级别(Score)上的概率分布。分布的形状正体现了模型的确信程度:概率集中在一个结果上意味着一个确定的答案,分布分散则意味着不确定。

答案的 confidence 属性把这一形状压缩为 0 到 1 之间的单个数值,这样你就可以直接对它设置阈值,而无需自己做数学运算。(Noul 答案不带该属性。)

置信度由概率推导而来

confidence 是根据答案中已经给出的概率分布计算出的统计量。TypeSafe 会替你计算,并在每个 Choice 和 Score 答案上返回它,因此常见场景下你无需做任何额外工作。

Choice question with three options
See how probability distribution changes confidence
Confidence
0.85

Move a slider to change an option's probability. The other probabilities adjust to keep the total at 100%.

Selected: Option A
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 中的信息不足以做出判断。

“我不知道”是一个有用的信号

如果一个智能系统——无论是人还是机器——无法表达真实的不确定性,这个系统就无法被信任。

置信度为模型提供了说出“我对这个不太确定”的内置机制。这让你可以在代码中针对不同确定程度实现不同的行为,而这正是构建真正可靠系统的基础。

在代码中使用置信度的三条路径

一个有用的入门模式是把置信度划分为三个区间,每个区间对应不同的系统行为:

高置信度: 自动执行。模型的判断很明确,无需人工介入即可继续。

中等置信度: 谨慎推进。模型有一个合理的答案但并不确定。视具体场景,你可以让用户确认、标记以待审查,或在行动前先收集更多信息。

低置信度: 不要行动。转给人工、请求澄清,或回退到其他系统。模型在告诉你:它掌握的信息不足,或者这个问题不适合它。

边界划在哪里,取决于风险的高低。

阈值随风险而变

置信度阈值不是一个数字。同一个系统内,不同的动作应根据出错的后果设置不同的门槛。

python
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 的置信度下限会拦下模型真正不确定的所有情况。在此之上,破坏性操作免确认执行的门槛要高于只读操作。你的代码编码了这种风险容忍度。

正确的阈值取决于你的领域,以及模型在你的用例上的表现。从保守的阈值开始,用你自己的数据测试,并随着对结果的观察进行调整。