启动流¶
本页介绍了控制流启动时间的不同方法:使用命令生成器、预测意图以及使用流守卫。
启动流¶
流可以由以下 Rasa 组件之一触发:SingleStepLLMCommandGenerator、MultiStepLLMCommandGenerator 或 NLUCommandAdapter。
SingleStepLLMCommandGenerator
和 MultiStepLLMCommandGenerator
均使用每个流的描述、正在运行的对话和其他上下文来决定何时启动流。为每个流编写清晰而独特的描述很重要,可以帮助 LLM 决定触发哪个流,或者在用户未提供足够信息时发出澄清命令。
NLUCommandAdapter
使用预测意图来启动流。为了通过 NLUCommandAdapter
触发流,你需要为流定义 NLU 触发器。
流守卫是启动流前必须满足的条件。添加流守卫可以对触发流的时间进行额外的控制。
NLU 触发器¶
nlu_trigger
字段是可选的。如果存在,它包含可以启动流的意图列表。
如果不想使用置信度阈值,请列出意图名称:
flows:
my_flow:
description: "A flow triggered with <intent-name>"
nlu_trigger:
- intent: <intent-name>
steps:
- action: my_action
如果仅希望在置信度高于阈值时触发流,请使用以下语法:
flows:
my_flow:
description: "A flow triggered with <intent-name>"
nlu_trigger:
- intent:
name: <intent-name>
confidence_threshold: 0 # threshold value, optional
steps:
- action: my_action
NLU 触发器中的多意图¶
可以为 nlu_trigger
列出多个意图。如果预测到任何这些意图,流将由 NLUCommandAdapter 启动。
警告
为了实际使用 nlu_trigger
,你需要在配置文件中的 NLU 管道中将 LLMCommandGenerator
添加到 NLUCommandAdapter 之前。
阻止流启动¶
流守卫¶
流守卫是通过在流定义中添加额外的 if
字段来指定的。例如,以下显示用户最新账单的流只有在槽 authenticated
和 email_verified
都为 true
时才会触发。
flows:
show_latest_bill:
description: A flow with a flow guard.
if: slots.authenticated AND slots.email_verified
steps:
- action: my_action
如果 if
键后的条件不满足,则无法启动流。但是,也有一些例外情况: