rasa3.X 自定义action的注册问题
文章目录
- rasa3.X 自定义action的注册问题
- 前言
- 一、问题重述
前言
幸好在这之前抽时间稍微看了一点django源码,让我对于python的导入机制有了一个概念。虽然还不是很确切的知道python import机制,不过在看到类似_import_submodules,importlib.import_module等方法的时候,也能大概知道要干什么。
提示:以下是本篇文章正文内容,下面案例可供参考
一、问题重述
我详细询问了GPT-4-turbo,它给出的回答也是没有参考价值的,这个时候,我就下定决心要去看源码,看它具体是一个怎么样的导入过程。
我使用了pycharm,然后配置如图1。
图1
然后debug进去一点一点看,发现了如下的调用链:
- rasa_sdk.endpoint
- run
- create_app
- executor.register_package
- rasa_sdk.executor
- register_package
- self._import_submodules(package)
- self._register_all_actions()
- self.register_action(action)
顺着这个调用链,我最终发现了,原来rasa init创建项目,是把actions.py放到了actions包里面,然而我又创建了一个action.py与action包同级,就导致了导入错乱。
知道了这个问题后,我就把自建的actions.py代码放到那个里面,然后删除自建的。
那么,现在运行就一切ok了吗?
不。如果actions.action.py中还导入了例如utils等自建的代码,因为代码层级会出现图2的现象
图2
没办法,要不就保留这种错误,但是可以运行,要不就是把actions包删了,建一个与config同级的actions.py。这也就是为什么,现成的项目在actions不多的情况下,把actions拿出来,而不是放到一个包里面。