无需重复响应列表,如何循环触发intent?笑话机器人场景问询
嘿,当然可以直接触发smalltalk.agent.telljoke意图来实现这个需求!不用非得新建一个重复意图,下面给你两种靠谱的实现方式:
方法一:通过事件触发复用原意图
这种方式不需要改动原意图的核心逻辑,只加个触发开关就行:
- 第一步:给
smalltalk.agent.telljoke意图添加一个自定义触发事件,比如trigger_new_joke。这样这个意图不仅能被用户的"Tell me a joke"触发,还能被这个事件主动唤起。 - 第二步:创建一个极简的辅助意图(比如叫
ask_for_another_joke),训练短语只需要覆盖"another one"、"tell me another joke"这类用户会说的内容。同时给这个辅助意图设置输入上下文为joke_delivered(你需要先给smalltalk.agent.telljoke设置这个输出上下文,生命周期设2-3轮就够,确保只有刚听完笑话的用户才会触发)。 - 第三步:在辅助意图
ask_for_another_joke的响应设置里,不要加任何文本,直接选择触发事件为trigger_new_joke。这样用户说"another one"时,就会直接唤起原意图,机器人自动讲新笑话,完美实现循环。
方法二:用Webhook复用核心逻辑
如果你的笑话是通过Webhook动态生成的,那这种方式更直接:
- 把生成并返回笑话的逻辑单独封装在一个Webhook函数里,绑定给
smalltalk.agent.telljoke意图。 - 创建辅助意图
ask_for_another_joke(同样带上joke_delivered输入上下文),也绑定同一个Webhook函数。这样不管是用户第一次请求笑话,还是后续要"another one",都会调用同一个逻辑返回新笑话,相当于间接复用了原意图的核心功能。
小提醒
- 上下文的生命周期别设太长,2-3轮刚好,避免用户隔了好几个话题后说"another one"还触发笑话逻辑,显得突兀。
- 如果用事件触发,记得在平台设置里确认原意图的事件触发功能是开启的,有些平台默认可能需要手动启用。
内容的提问来源于stack exchange,提问作者iBadGamer
相关产品推荐
相关产品推荐

