我正在研究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查看domain.yml时,问题似乎是双惊叹号!!
allowempty: True
mapping:
intents:
type: !!python/str "seq"
阅读,另一篇关于here的双重感叹号的帖子。
答案 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做了一些意想不到的事情(我实际上对此一无所知)。