You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在RASA NLU/CORE中捕获置信度(confidence)值

当然有办法捕获置信度值啦!而且结合你提到的tracker、slots这类思路,不管你用的是主流对话AI框架还是自定义开发,都有可行的方案。我给你梳理几个实用的方向:

1. 直接从意图预测结果中提取置信度

绝大多数对话AI框架在输出意图预测结果时,都会附带对应的置信度分数。拿常用的Rasa举例,不管是调用NLU预测接口,还是在自定义动作里,你都能从tracker的最新消息数据里拿到这个值:

# 在Rasa自定义动作中获取当前意图的置信度
latest_intent_info = tracker.latest_message['intent']
confidence_score = latest_intent_info.get('confidence', 0.0)

拿到分数后,直接用if/else判断就行——比如你设定0.7作为阈值,当置信度低于这个值时,就返回预设的“抱歉,这个问题我暂时无法处理”之类的标准回复。

2. 用Tracker+Slots持久化追踪置信度

如果你需要在整个对话流程中随时调用这个置信度值,可以把它存在自定义的slot里,就像追踪用户其他信息那样。还是以Rasa为例:
首先在domain.yml里定义一个专门的slot:

slots:
  intent_confidence:
    type: float
    influence_conversation: false  # 这个值不影响对话路径,只是用来做判断用

然后写一个自定义动作,把获取到的置信度存入这个slot:

from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.events import SlotSet

class ActionStoreIntentConfidence(Action):
    def name(self) -> str:
        return "action_store_intent_confidence"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: dict) -> list:
        # 获取最新意图的置信度
        confidence = tracker.latest_message['intent']['confidence']
        # 存入slot
        return [SlotSet("intent_confidence", confidence)]

之后在任何需要判断的环节,都可以通过tracker.get_slot("intent_confidence")取出这个值,再执行对应的逻辑。

3. 框架全局配置自动处理低置信请求

有些框架还支持直接在配置里设置置信度阈值,自动帮你处理超出范围的请求。比如Rasa可以在config.yml的NLU pipeline里设置:

pipeline:
  - name: WhitespaceTokenizer
  - name: CountVectorsFeaturizer
  - name: DIETClassifier
    epochs: 100
    intent_confidence_threshold: 0.7  # 低于这个值的意图会被标记为低置信

然后在domain.yml里定义一个out_of_scope意图,配置好对应的回复。当框架检测到意图置信度低于阈值时,会自动触发这个意图的回复,不用你手动写if/else逻辑,省心很多。

如果你是自己从零开发的模型,那只要在模型预测的时候,让模型额外输出置信度分数(比如分类模型的softmax输出值),然后在业务逻辑层拿到这个分数做判断就行,核心思路是一致的。

内容的提问来源于stack exchange,提问作者Walter U.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:17:27