rasa3.X 自定义action的注册问题

rasa3.X 自定义action的注册问题

文章目录

  • rasa3.X 自定义action的注册问题
  • 前言
  • 一、问题重述
  • 二、问题解决


前言

幸好在这之前抽时间稍微看了一点django源码,让我对于python的导入机制有了一个概念。虽然还不是很确切的知道python import机制,不过在看到类似_import_submodules,importlib.import_module等方法的时候,也能大概知道要干什么。


提示:以下是本篇文章正文内容,下面案例可供参考

一、问题重述

我详细询问了GPT-4-turbo,它给出的回答也是没有参考价值的,这个时候,我就下定决心要去看源码,看它具体是一个怎么样的导入过程。

我使用了pycharm,然后配置如图1。
rasa3.X 自定义action的注册问题_第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的现象

rasa3.X 自定义action的注册问题_第2张图片
图2

没办法,要不就保留这种错误,但是可以运行,要不就是把actions包删了,建一个与config同级的actions.py。这也就是为什么,现成的项目在actions不多的情况下,把actions拿出来,而不是放到一个包里面。

你可能感兴趣的:(rasa,python)