rasa 框架的新手。我一直在尝试制作一个简单的机器人,它可以简单地识别我提供我的名字的意图,然后 rasa 以包含我的名字的短语回应。问题是它似乎确实识别了意图,但如果我给它的名字没有包含在其中一个示例中,那么响应只包含 none 而不是我的名字(意味着插槽是空的)。我认为这是因为缺少示例,但我添加了 20 多个。如果提供的名称是示例中提供的名称之一,它只会填充该插槽。
此外,我似乎无法使用规则。我假设在技术层面上我可以只使用规则来解决一次性问题,例如提供名称和机器人响应你好,name。如果这是一个故事,我只能得到回应。
规则.yml:
# ask name confirmation
- rule: ask name confirmation
steps:
- intent: inform_name
- action: utter_greet_with_name
# respond with name
- rule: respond with name
steps:
- action: utter_respond_with_name
# respond without name
- rule: respond without name
condition:
- slot_was_set:
- name: null
steps:
- action: utter_respond_without_name
nlu.yml:
- intent: inform_name
examples: |
- I'm [Sarah](name).
- Hi, my name is [Chris](name).
- You can call me [Alex](name).
故事.yml:
stories:
- story: path 1
steps:
- intent: greet
- action: utter_greet
- intent: inform_name
- action: utter_greet_with_name
- intent: ask_name
- action: utter_respond_with_name
- story: path 2
steps:
- intent: greet
- action: utter_greet
- intent: ask_name
- action: utter_respond_without_name
domain.yml 的一部分
entities:
- name
# Define the 'name' slot with the 'from_text' mapping
slots:
name:
type: text
influence_conversation: true
mappings:
- type: from_entity
entity: name
谢谢!
通常,根据您的实体类别,您可以从不同的实体提取器中受益。您可以将 Duckling、SpaCy 和 CRF 添加到您的 Rasa 管道中。在这里,我建议使用
SpacyEntityExtractor
,因为它有一个预训练模型,非常适合识别名称、公司等。
这里需要先安装Spacy lib.
python -m pip install -U rasa[spacy]
python -m spacy download en_core_web_lg
然后您可以在
config.yml
中设置管道并添加以下行以部署实体提取器。
name: "SpacyNLP"
# language model to load
model: "en_core_web_lg"
和
- name: "SpacyEntityExtractor"
dimensions: ["PERSON"]
有关如何设置配置的更好说明,请参阅Rasa 文档