在Dialogflow中如何提取上一意图的用户输入值并在下一意图中使用
Dialogflow 多轮会话参数传递实现方案
这个需求可以通过Dialogflow原生的上下文(Context)和参数传递能力实现,不需要额外的外部存储,操作步骤如下:
步骤1:创建采集姓名的初始意图
- 意图命名可设为获取用户姓名,配置触发该意图的训练短语,比如“你好”“哈喽”“在吗”这类首次打招呼的内容
- 开启该意图的槽位填充(Slot Filling)功能,新增1个必填参数:
- 参数名:
user_name - 关联实体:优先用系统自带的
@sys.given-name,如果中文姓名识别准确率不足,可以自定义姓名实体,或者临时用@sys.any代替 - 槽位提示语:“你好呀,请问怎么称呼你?”
- 参数名:
- 在该意图的输出上下文配置项中,新增一个上下文,比如命名为
user_info,有效期设置为2(至少覆盖下一轮会话即可)
步骤2:创建后续应答的触发意图
- 意图命名可设为服务入口应答,在该意图的输入上下文配置项中,填入上一步创建的
user_info,确保只有第一个意图完成姓名采集、输出该上下文后,本意图才会被触发 - 配置训练短语,覆盖用户答复姓名的常见表达,比如“我叫张三”“张三”“你可以叫我张三”,标注出短语中的姓名部分对应
user_name参数,关联和上一步相同的实体即可 - 在响应内容中直接引用参数即可,写法如下:
Dialogflow会自动把Hi $user_name,请问我可以为您提供什么帮助?$user_name替换为用户输入的真实姓名
额外配置说明
如果后续更多轮次的会话都需要调用用户姓名,把user_info上下文的有效期调整到对应轮次数即可,有效期内所有设置了user_info为输入上下文的意图,都可以直接调用$user_name参数。
如果是接入了Webhook做自定义逻辑处理,在Webhook接收到的请求体的queryResult.parameters字段中,也可以直接获取到user_name的取值,无需额外做持久化存储。
内容的提问来源于stack exchange,提问作者IDK
相关产品推荐
相关产品推荐

