!! python / str不适用于RasaCore的domain.yml

时间:2018-03-14 08:22:49

标签: python yaml

我正在研究Rasa,我在运行对话模型时遇到了一些问题。

python3 -m rasa_core.train -s data/stories.md -d domain.yml -o models/dialogue --epochs 300

错误!

ruamel.yaml.constructor.ConstructorError: could not determine a constructor for the tag 'tag:yaml.org,2002:python/str'
in "/my/app/path/venv/lib/python3.6/site-packages/rasa_core/schemas/domain.yml", line 4, column 11

Rasa Core

从rasa_core查看domain.yml时,问题似乎是双惊叹号!!

domain.yml

allowempty: True
mapping:
  intents:
    type: !!python/str "seq"

阅读,另一篇关于here的双重感叹号的帖子。

1 个答案:

答案 0 :(得分:1)

你应该考虑你想做什么,而不是尝试任意事物。 !!python/str是表示Python字符串类型的标记。所以你当前的YAML说“seq是一个Python字符串`”。

现在,您的更改将改为“将您认为合适的任何类型加载以下值:!!python/str seq”。这是一个非常不同的事情。

让我们弄清楚为什么ruamel无法识别你的标签。 A quick look in the source显示!!python/str已在标准Constructor中注册,但未在SafeConstructor中注册。只有YAML的标准标签!!str可用。因此,您可能正在使用SafeConstructor,而!!python/str根本不了解!!str。因此,可能的解决方法是使用seq而不是在标量上调用相同的构造函数(正如我们在源代码中看到的那样)。

或者,您可以删除标记。标量${__groovy(vars.get('foo') != null ? vars.get('foo') : 'bar',)} 无论如何都会加载到一个字符串中,除非RasaCore做了一些意想不到的事情(我实际上对此一无所知)。