在实际路线管理的过程中,往往会出现多个意图需要填槽,比如实体station,可以在多轮对话中满足查询路线,查询票价以及查询首末班车时间等意图。如果单独为每个实体赋予特定意图,在slot填充的场景下,可能会出现意图的错乱。你可以设置一个闲置的intent用于实体的获取,而不影响到原有的意图填槽。
首先是在domain.yml中配置闲置intent:
version: "3.0"
entities:
- station
intents:
# 原有意图
- ask_train_time
- ask_route
# 新增闲置意图
- spare_intent
并且在原始slot mapping的时候添加对闲置意图的匹配,如修改原有的slot的mapping为:
slots:
# for actions slots
start_station:
type: text
mappings:
- type: from_entity
entity: station
role: departure
# intent: ask_route #原有意图
intent: [ask_route, spare_intent] # 修正之后的意图
end_station:
type: text
mappings:
- type: from_entity
entity: station
role: destination
# intent: ask_route #原有意图
intent: [ask_route, spare_intent] # 修正之后的意图
station:
type: text
mappings:
- type: from_entity
entity: station
# intent: ask_train_time #原有意图
intent: [ask_train_time, spare_intent] # 修正之后的意图
这样的话在检测到闲置意图spare_intent也会作为slot进行填充,从而解决了意图冲突的问题。注:针对该意图不需要做额外的action配置,只是作为闲置意图用于占位。
仔细捋下来会觉得Rasa算是一个相对灵活的框架,以约定模板的方式提供了很多方便的配置。了解每个小类的设计之后,会觉得整个流程因为这些小的设置逐渐完善,甚至可以构建很复杂的对话场景。
网友评论