原文出处:https://mp.weixin.qq.com/s/QBV5FFg7wIHBwYKDcz5VTQ

本文旨在阐明作者的个人见解,只用于学习参考;本文大部分聚焦于"自然语言理解(NLU部分)"...

常见的Bot设计架构:

 一、NLU 是什么?

在任务型对话系统中,自然语言理解(NLU)模块的核心目标是:  

将用户输入的自然语言(文本/语音)转化为结构化的语义表示,供下游对话管理(DM)和动作执行使用。

可以从图中得出其中很重要的两部分:"意图识别"和"槽位填充",具体又是什么呢?后续会再次提及,让我们先看向所示结构化例子:

{
  "intent": "book_movie_ticket",
  "slots": {
    "movie": "战狼2",
    "time": "今天下午",
    "cinema": null
  }
}

这个结构化表示 = 意图(Intent) + 槽位(Slots)

  • 意图:用户想做什么?(分类问题)

  • 槽位:完成这件事需要哪些具体参数?(序列标注 + 预测问题)

二者必须协同设计:槽位定义依赖意图,意图边界也受槽位语义影响。

二、意图识别:三层混合架构(L1 / L2 / L3)

层级方法技术实现适用输入占比部署方式
L1:规则兜底关键词、正则、有限状态机(FSM).*?(密码|账号).*?(忘|重置)高频、高确定性、高风险指令(如“密码忘了”“我要投诉”)~20–30%本地硬编码,零依赖
L2:小模型主力Embedding(BGE/E5) + 轻量分类器(LR/SVM/MLP)BGE-base → 768维向量 → Logistic Regression → 概率分布语义清晰但表达多样的常规任务(如“Outlook收不到邮件”)~50–60%本地部署(CPU/GPU服务)
L3:LLM兜底LLM 做 zero-shot / few-shot 分类Prompt + GPT-4/Qwen-Max → 返回意图模糊、错字、多意图、新奇表达(如“那个系统打不开”)~10–20%调用云 API(按需降级)

在意图识别系统中,OOD 流转是指当 L2 层判定用户输入为 分布外意图(OOD)后,将请求从 L2 轻量识别模块转移至 L3 深度处理模块的完整链路,其核心目标是解决 L2 预定义意图覆盖不足的问题,确保所有用户咨询都能得到有效响应,而非直接丢弃或误判。

OOD 兜底:L2 无法识别的意图,必须携带 L2 的置信度数据同步至 L3,辅助 L3 快速判定。

L2 中的 Embedding 模型:
  • 作用:将句子转为语义向量,作为分类器的输入特征(不是用于相似度检索!)

  • 主流选择:BGE、E5、text2vec(中文场景)、OpenAI Embeddings(仅API场景)

  • 部署:企业级系统几乎全部本地部署(合规+低延迟+成本可控)

L2 中的轻量分类器:
  • 本质:一个极小的监督模型(如 Logistic Regression),输出维度 = 预定义意图数

  • 是否预定义意图? → 是! 模型无法处理未见过的意图(OOD)

  • 置信度过滤:仅当 max(概率分布) > 阈值(如0.7) 才采纳结果,否则转 L3

  • 部署:模型文件(.pkl/.onnx)直接集成到服务中,无需独立API

高保真例子(暂时跳过L1阶段进入到L2阶段):

我们以电商智能客服的意图识别场景为例,构建 L2 意图识别的高保真业务流程,完整还原从用户输入到意图判定的全链路,同时体现 Embedding 模型、轻量分类器、置信度阈值、OOD 流转的核心逻辑:

一、场景基础配置
业务域:电商售后客服(处理订单相关咨询)
L2 组件选型
Embedding 模型:本地部署的BGE-large-zh(中文场景适配,输出 768 维语义向量)
轻量分类器:训练好的Logistic Regression 模型(.onnx 格式集成在客服服务中)
预定义意图集合(共 4 类)
I1:查询订单物流
I2:申请订单退款
I3:修改收货地址
I4:咨询商品售后保修
置信度阈值:0.7(低于则转 L3 人工 / 大模型深度识别)

二、场景 1:置信度达标,直接判定意图
用户输入:“我的快递怎么还没到?都下单 3 天了”
L2 第一步:Embedding 向量转换
本地 BGE 模型将这句话转为 768 维语义向量(如 [0.023, -0.156, 0.089,..., 0.112],仅示意),作为分类器输入特征。
L2 第二步:轻量分类器打分
Logistic Regression 模型基于向量,为 4 个预定义意图输出置信度(概率分布):
I1(查物流):0.92
I2(退订单):0.03
I3(改地址):0.02
I4(问保修):0.03
L2 第三步:置信度过滤
最大值 0.92 > 阈值 0.7,判定为意图有效,直接采纳I1(查询订单物流),并触发下游物流查询接口,自动回复用户 “已为你查询到订单物流,当前状态为 XX,预计明日送达”。

三、场景 2:置信度不达标,转 L3 流程
用户输入:“你们家有没有新品充电宝上架?”
L2 第一步:Embedding 向量转换
BGE 模型将该语句转为语义向量,因这句话和售后订单无关,向量特征与 4 个预定义意图的匹配度均较低。
L2 第二步:轻量分类器打分
分类器输出置信度分布:
I1(查物流):0.21
I2(退订单):0.15
I3(改地址):0.12
I4(问保修):0.25
L2 第三步:置信度过滤
最大值 0.25 < 阈值 0.7,判定为OOD(未定义意图),触发 L3 流转逻辑:将用户问句和 L2 的打分结果同步至 L3 的大模型模块,由大模型识别 “咨询新品上架” 的意图,并转接商品导购客服回复。

四、场景 3:边缘阈值案例(接近阈值但达标)
用户输入:“我想把收货的小区改成隔壁的 XX 小区”
L2 分类器打分:I3(改地址)置信度 0.71,其余意图置信度均 < 0.1
判定结果:0.71 略高于 0.7 阈值,采纳 I3 意图,触发地址修改的风控校验流程(如验证用户手机号),完成地址修改。

三、槽位填充:与意图强绑定的结构化抽取

槽位填充不是命名实体识别(NER)! NER 是通用任务(标“地名”),槽位填充是任务特定角色标注(标“出发地” vs “目的地”)。

1. 槽位设计原则

  • 每个意图有专属槽位 schema,例如:

    intent: book_movie_ticket
    slots:
      - name: movie      # 类型:电影实体,必填
      - name: time       # 类型:datetime,必填
      - name: cinema     # 类型:影院实体,可选(可预测)

2. 槽位填充的实现方式(按 L1/L2/L3 分层)

层级槽位填充方法
L1(规则)- 正则捕获组(如 订(.*?)电影票 → movie) - 关键词+位置规则(“今天”→ time) - 硬编码映射(“战狼” → 默认“战狼2”)
L2(小模型)- 解耦方案:先判 intent,再调用该 intent 对应的 BERT-CRF / BiLSTM-CRF 序列标注模型 - 联合方案:用 Joint BERT 同时输出 intent + slots(效果更好,但复杂)
L3(LLM)- Prompt 要求 LLM 输出 JSON: {"intent": "...", "slots": {"movie": "战狼2"}} - 可结合上下文/知识图谱做智能填充

3. 槽位预测(Slot Prediction)——不只是抽取!

当用户未提供某些槽位时,不能盲目追问,应先尝试预测:

  • 基于上下文:上一轮提到的城市

  • 基于用户画像:常去影院、常用时间段

  • 基于实时数据:当前上映影片、附近影院排片

  • 基于知识图谱:实体链接(“战狼” → 《战狼2》)

 产品体验关键:预测能减少交互轮次,体现“智能感”。

高保真流程示例(mermaid代码):

graph TD
    A[用户输入:“帮我订战狼的票”] --> B{L1: 规则匹配?}
    B -- 匹配正则“订.*?票” --> C[意图 = book_movie_ticket]
    C --> D[L1 槽位:正则捕获“战狼” → movie]
    D --> E{cinema/time 为空?}
    E -- 是 --> F[调用用户位置+排片数据预测 cinema/time]
    F --> G[生成追问:“您想看XX影城今天下午场吗?”]

    B -- 未匹配 --> H[L2: BGE + LR 分类]
    H -- 置信度 >0.7 --> I[意图 = book_movie_ticket]
    I --> J[L2 槽位:BERT-CRF 识别 movie=战狼]
    J --> K[同上预测+追问]

    H -- 置信度 <0.7 --> L[L3: 调 LLM]
    L --> M[LLM 返回结构化 intent+slots]
    M --> N[进入对话管理]

其他部分:

对话管理(DM)是整个系统的 “决策中枢”,核心作用是衔接前后模块、把控对话逻辑,具体包含这两部分 + 交互关系:

1. 对话管理的子模块

  • 状态跟踪(DST):负责记录对话的上下文状态(比如用户之前说过的内容、已确认的信息等),保证对话的连贯性(比如不会重复询问用户已说过的信息)。

  • 策略优化(DPO):决定对话的下一步策略(比如是否需要追问用户补充信息、该调用哪个知识库的内容、如何推进对话目标)。

2. 对话管理的交互逻辑

  • 输入:接收 自然语言理解(NLU)传递来的 “用户意图 + 槽位信息”;

  • 资源调用:从知识管理模块(行业知识库 + 对话知识库)获取所需的专业 / 历史对话内容;

  • 输出:将处理后的对话决策传递给自然语言生成(NLG),用于生成回复内容。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐