智能体如何识别用户意图?训练小型分类器并给低置信请求拒识

智能体收到“查订单”“退货”“查优惠”时,先分类用户意图,遇到不确定或不支持的请求应停下追问。下面训练一个本地字符特征分类器,展示最高类别概率,并用演示阈值把低置信请求标为“转人工确认”。

智能体收到“查订单”“退货”“查优惠”时,先分类用户意图,遇到不确定或不支持的请求应停下追问。下面训练一个本地字符特征分类器,展示最高类别概率,并用演示阈值把低置信请求标为“转人工确认”。

准备与运行

本文只使用人工构造的教学材料,没有把示例结果当作真实项目效果。以下代码在 Windows 的 Python 3.11 独立环境执行通过。先在空目录运行安装命令,再将完整代码保存为 demo.py,执行 python demo.py。

智能体如何识别用户意图?训练小型分类器并给低置信请求拒识

python -m pip install scikit-learn==1.9.1

把意图边界写在训练样本里

本例只定义“订单查询、退款申请、发票办理”三类。训练句都由作者编写,不能当成真实用户分布。每个类别都要包含不同说法,且“订单状态”和“退款进度”需要明确区分;如果一个请求同时包含两件事,应拆成多意图任务或先追问,而不是将整句强制压成一个标签。

字符 2 到 3 元特征适合做小型中文入门演示,逻辑回归输出类别概率。代码读取最高值并与阈值比较,展示一个拒识机制;这个概率没有做校准,不等于真实正确率。

拒识阈值需要用真实错判代价调整

脚本同时打印每句最可能的标签与最大概率。高风险动作如退款执行,需要更严格的业务授权与身份核验;意图分类只负责解释请求,不能直接等同于允许调用退款工具。对于未知或低置信请求,给用户可理解的澄清问题。

正式上线要从真实但合规的历史工单构造独立验证集,分别统计各类误报、漏报、多意图和拒识比例。阈值不是照抄本例数值,而是按误判代价和人工承接能力定。

完整代码

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline

train = ["我的订单到哪了", "查一下订单状态", "包裹什么时候到", "物流怎么没更新",
         "我想申请退款", "退货退款怎么弄", "请把订单的钱退回", "退款多久能到账",
         "我要开电子发票", "发票抬头怎么改", "补开发票", "发票发到邮箱"]
y = ["订单查询"]*4 + ["退款申请"]*4 + ["发票办理"]*4
clf = make_pipeline(TfidfVectorizer(analyzer="char", ngram_range=(2,3)),
                    LogisticRegression(max_iter=500, random_state=7))
clf.fit(train, y)
queries = ["查一下物流", "请开发票", "帮我预订机票"]
threshold = 0.50  # 仅用于演示,须在真实验证集调节
classes = clf.named_steps["logisticregression"].classes_
for q, probabilities in zip(queries, clf.predict_proba(queries)):
    best = int(probabilities.argmax())
    decision = classes[best] if probabilities[best] >= threshold else "转人工确认"
    print(q, "candidate", classes[best], "score", round(float(probabilities[best]),3), "decision", decision)
assert len(classes) == 3

运行结果与核对

下面是上述脚本在本地执行得到的输出;正式数据请按相同检查点复核。

查一下物流 candidate 订单查询 score 0.445 decision 转人工确认
请开发票 candidate 发票办理 score 0.501 decision 发票办理
帮我预订机票 candidate 订单查询 score 0.339 decision 转人工确认

核对每条输入都列出 candidate、score 和 decision。“帮我预订机票”不属于三个意图,应进入确认;本例已知的“查一下物流”也被拒识,说明阈值带来人工承接成本。若运行环境变化导致未知句被接收,应把它加入验证集并重新设定阈值或显式未知类,不能只看训练集表现。

适用边界

样本和阈值都是教学设定,概率未校准,拒识不保证覆盖所有域外问法。本文没有实际调用智能体工具,也没有验证退款等业务权限。

常见问题

为什么最高概率也会判断错?

模型总会在已知类别中给一个最高项;“最高”只是在这些类别之间相对最大。要结合独立验证集、域外样本与拒识规则判断能否自动处理。

参考资料

以下官方资料已于 2026 年 10 月 1 日核对,分别用于确认文中接口或方法定义。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31721.html

赞 (0)
AI小管家的头像AI小管家
客服文本分类该用传统 NLP 还是大模型?用固定标签和复核成本做选择
上一篇 2小时前
AI 评论分析怎样找具体问题?按方面词归组并保留原句证据
下一篇 2小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部