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

如何为Slot filling chatbot实现两类提示(含suggestion chips)功能?

嘿,我来给你拆解下怎么实现这款槽位填充聊天机器人的需求,分几个核心环节梳理,都是实战中好用的思路:

一、对话初始阶段的开放式问题设计

首先要跳出“上来就硬问参数”的思维,得像真人聊天一样开场,引导用户自然表达,同时悄悄捕捉潜在的槽位信息。举个例子:

  • 如果是订机票的机器人,别说“请输入出发地”,改成:“最近有没有出行计划呀?不管是订机票还是查行程,我都能帮到你~”
  • 如果是外卖机器人,开场可以是:“今天想吃点啥?我帮你快速筛选合适的商家哦~”

这样用户大概率会主动提到关键信息(比如“下周三去上海”“我想吃川菜”),你就能自动提取对应的槽位(日期/目的地、菜系),后续只需要补全缺失的参数就行,完全贴合自然对话节奏。

二、通用缺失参数提示的实现

核心是先做好槽位状态跟踪,再根据缺失情况生成自然的提示,而不是机械的指令。

1. 先搞个槽位跟踪机制

用一个简单的字典就能搞定,比如:

# 以订机票场景为例,定义需要的槽位和初始状态
slot_tracker = {
    "departure_city": None,  # 出发城市
    "arrival_city": None,    # 到达城市
    "travel_date": None      # 出行日期
}

2. 生成自然的缺失提示

写个函数来检测缺失槽位,然后把生硬的“请提供XX”转化成口语化的表达:

def generate_missing_slot_prompt(slot_tracker):
    # 找出所有未填充的槽位
    missing_slots = [slot for slot, value in slot_tracker.items() if value is None]
    if not missing_slots:
        return "好的,所有信息我都齐啦,这就帮你处理~"
    
    # 优先处理最关键的第一个缺失槽位(你可以自己定义优先级)
    target_slot = missing_slots[0]
    # 把槽位名映射成用户听得懂的自然语言
    slot_label_map = {
        "departure_city": "出发城市",
        "arrival_city": "到达城市",
        "travel_date": "出行日期"
    }
    
    # 生成基础提示
    base_prompt = f"对啦,还需要你告诉我你的{slot_label_map[target_slot]}哦~"
    return base_prompt
三、Suggestion Chips的触发与实现

Chips的核心作用是降低用户输入成本,尤其是当用户多次输入不符合要求,或者槽位有固定可选范围的时候触发。

1. 触发时机

  • 场景1:用户输入的内容不符合槽位规则(比如出发地输入了不存在的城市,日期格式不对)
  • 场景2:槽位本身有明确的可选范围(比如常用城市、固定日期选项)
  • 场景3:用户连续两次未正确填充该槽位(避免反复无效沟通)

2. 具体实现示例

在刚才的提示函数里加入chips逻辑,比如:

def generate_missing_slot_prompt(slot_tracker, user_input_history=None):
    missing_slots = [slot for slot, value in slot_tracker.items() if value is None]
    if not missing_slots:
        return "好的,所有信息我都齐啦,这就帮你处理~"
    
    target_slot = missing_slots[0]
    slot_label_map = {
        "departure_city": "出发城市",
        "arrival_city": "到达城市",
        "travel_date": "出行日期"
    }
    base_prompt = f"对啦,还需要你告诉我你的{slot_label_map[target_slot]}哦~"
    
    # 针对不同槽位添加suggestion chips
    chips_config = {
        "departure_city": ["北京", "上海", "广州", "深圳"],
        "travel_date": ["明天", "后天", "本周六", "下周一"]
    }
    
    # 判断是否需要触发chips:比如用户之前输入错误,或者槽位有预设选项
    need_chips = False
    if target_slot in chips_config:
        need_chips = True
    # 如果有历史输入,且用户之前填错了该槽位,也触发chips
    if user_input_history and target_slot in user_input_history and not user_input_history[target_slot]:
        need_chips = True
    
    if need_chips:
        chips = chips_config[target_slot]
        # 把chips格式化成友好的选项(用反引号突出)
        chips_str = " | ".join([f"`{chip}`" for chip in chips])
        base_prompt += f"\n你可以直接选择:{chips_str}"
    
    return base_prompt

3. 错误场景下的chips触发

比如用户输入“火星”作为出发地,机器人可以这样回复:

抱歉,暂时不支持这个出发地哦~你可以从这些城市里选:北京 | 上海 | 广州 | 深圳

几个实用小技巧
  • Chips选项别太多,3-5个最合适,避免用户选择困难
  • 可以根据用户的历史对话调整chips顺序,比如用户之前经常订北京出发的机票,就把北京放在第一个
  • 开放式对话和槽位捕捉要平衡,别为了抓槽位打断用户的自然表达,比如用户说“我想下周三去上海看朋友”,要自动提取日期和目的地,只问缺失的出发地就行

内容的提问来源于stack exchange,提问作者Mikul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:16:41