槽位填充

NLU核心任务之一:从用户自然语言中提取结构化关键信息,与意图识别配合让对话系统理解”用户想做什么”以及”涉及什么参数”

简介

槽位填充(Slot Filling)是自然语言理解(NLU)中与意图识别(Intent Recognition)配对的核心任务。意图识别回答”用户想做什么”(如退款),槽位填充回答”操作涉及哪些具体参数”(如商品名、订单号、退款原因)。两者协同工作时,系统从用户一句话中同时提取意图和槽位,输出结构化JSON——这就是智能客服MVP中”大模型做NLU翻译层”的完整含义。

槽位填充本质是一个序列标注或信息抽取问题,传统做法用BERT等预训练模型+CRF层做token级别的BIO标注,但在大模型时代更常见的做法是直接让LLM输出JSON格式的结构化抽取结果。

关键信息

  • 类型:技术 / NLP子任务
  • 领域:自然语言理解 / 对话系统 / 智能客服 / 语音助手
  • 核心输入:用户自然语言文本 + 槽位定义 schema(槽位名、类型、是否必填)
  • 核心输出:键值对形式的槽位值,通常与意图一起打包为JSON
  • 相关概念意图识别智能客服、对话管理器(状态机)

核心特性

槽位填充在对话系统中的位置

用户输入:"薯片碎了,订单号12345,我要退款"

意图识别 → intent: "apply_refund"
     +
槽位填充 → slots: {product: "薯片", issue: "破损", order_id: "12345"}

打包为结构化JSON

{
  "intent": "apply_refund",
  "slots": {
    "product": "薯片",
    "issue": "破损",
    "order_id": "12345"
  }
}

对话管理器(状态机)→ 检查必要槽位是否齐全 → 齐全则调API / 缺失则追问

槽位的三种基本类型

类型说明示例
必填槽位执行操作前必须获取的参数退款需要 order_id
可选槽位有则更精准、无则用默认值退款原因(破损/漏发/不喜欢)影响审批流
追问槽位第一次NLU未提取到,需要对话管理器发起追问”请问您的订单号是多少?“

槽位缺失时的处理——对话管理器的追问逻辑

当NLU输出的槽位不全时,对话管理器(状态机)负责判断下一步:

  • 缺失必填槽位 → 生成追问(“请问您的订单号是多少?”)
  • 槽位值模糊 → 生成确认(“您说的是订单12345吗?”)
  • 槽位齐全 → 直接调用业务API

这就是为什么智能客服MVP架构中大模型只做NLU、确定性流程用状态机——追问逻辑是确定的,不需要大模型生成。

与意图识别的关系

槽位填充和意图识别是一对联合作业:

  • 意图决定槽位模板:不同的意图需要不同的槽位。退款意图需要 {order_id, product, issue},查物流只需要 {order_id}
  • 槽位反哺意图消歧:某些情况下槽位填充的结果可以辅助意图消歧——用户提到”退款”和”订单号”,即使NLU对”apply_refund”置信度不高,槽位的存在也能增加判断信心

不同素材中的观点

  • 2026-05-26-智能客服MVP三件事:嘻嘻李在零食品牌智能客服项目中,将槽位填充与意图识别一起交给通义千问完成——输入用户自然语言+预定义意图列表+槽位定义,输出包含 intent 和 slots 的JSON。方案中槽位填充的准确率受益于大模型的理解能力(能从”薯片碎了”中抽取 product=“薯片”、issue=“破损”,即使没有明确说”破损”),同时确定性状态机接管槽位校验和追问——大模型只管”填槽”,填不全时由代码补问。这一分工既发挥了LLM的语言理解优势,又避免了LLM自由生成追问的不确定性。

实用信息

槽位定义示例(退款场景)

意图:apply_refund(申请退款)
槽位定义:
- order_id: string, 必填, 用户在对话中提及的订单号
- product: string, 可选, 退款涉及的商品名
- issue: string, 可选, 退款原因,枚举值[破损, 漏发, 不喜欢, 其他]

适用场景

  • 客服系统(订单查询、退款申请、会员积分查询等需要提取参数的场景)
  • 语音助手(“提醒我明天下午3点开会” → {action: 提醒, time: 明天下午3点, event: 开会})
  • 订票/预约系统(“订一张周五北京到上海的高铁票” → {from: 北京, to: 上海, date: 周五, type: 高铁})
  • 表单自动填写(从自然语言描述中提取结构化字段)

不适用场景

  • 开放式对话(无预定义槽位模板可套用)
  • 需要多轮跨句信息聚合的复杂抽取(简单槽位填充只看单句)
  • 槽位值需要复杂推理的场景(如”比上次那个便宜一点的”——需要关联历史上下文)

相关页面