本地启动Rasa X后,浏览器访问出现500请求失败错误如何解决
Rasa X本地启动后访问出现500报错排查与解决
问题现象
本地环境完成Rasa X启动流程后,浏览器访问服务地址(默认http://localhost:5002)时,页面弹出“Request failed with status code 500”的报错。配套参考材料包含1份浏览器端报错截图、3份服务控制台运行日志截图,可还原完整异常触发链路。
控制台核心报错日志
两类先后触发的异常日志可直接定位问题方向:
- 初次触发的接口调用异常
[2021-01-15 07:30:20 +0530] [11592] [ERROR] Exception occurred while handling uri: 'http://localhost:5002/api/auth' Traceback (most recent call last): File "c:\users\adity\venv\lib\site-packages\rasa\cli\x.py", line 494, in run_locally local.main( TypeError: main() got an unexpected keyword argument 'domain_path' - 异常处理流程中触发的二次兼容报错
Traceback (most recent call last): File "c:\users\adity\venv\lib\site-packages\sanic\app.py", line 914, in handle_request response = await response File "c:\users\adity\venv\lib\site-packages\sanic_jwt\endpoints.py", line 36, in post access_token, output = await self.responses.get_access_token_output( File "c:\users\adity\venv\lib\site-packages\sanic_jwt\responses.py", line 19, in get_access_token_output access_token = await instance.auth.generate_access_token(user) File "c:\users\adity\venv\lib\site-packages\sanic_jwt\authentication.py", line 477, in generate_access_token return jwt.encode(payload, secret, algorithm=algorithm).decode("utf-8") AttributeError: 'str' object has no attribute 'decode'
根因判定
两类报错本质都是本地Python虚拟环境下的依赖版本不匹配导致的:
- 第一类参数不兼容报错:rasa-x本地启动流程调用rasa核心CLI模块时,传入的
domain_path参数与当前安装的rasa核心版本的main()方法签名不匹配,属于跨版本安装时接口定义不一致导致的调用错误。 - 第二类属性缺失报错:属于PyJWT版本与sanic-jwt代码逻辑不兼容。旧版PyJWT的
jwt.encode()方法返回bytes类型,需要额外调用.decode("utf-8")转为字符串;但PyJWT 2.0.0及以上版本中,jwt.encode()直接返回str类型,不再支持decode方法,与旧版sanic-jwt的代码逻辑冲突。
标准排查思路
- 核对当前虚拟环境下的依赖版本:通过
pip list命令导出rasa、rasa-x、sanic-jwt、PyJWT的安装版本,对比官方版本兼容矩阵,确认是否存在跨版本安装的问题。Windows环境可执行pip list | findstr "rasa jwt sanic"快速筛选相关依赖,Linux/macOS可执行pip list | grep -E "rasa|jwt|sanic"获取版本信息。 - 顺着报错链路核对方法签名:定位rasa-x启动模块中调用rasa核心CLI的代码位置,确认传入的
domain_path参数是否是当前rasa版本不支持的新增参数。 - 核对依赖间的逻辑兼容性:查看sanic-jwt源码中调用
jwt.encode()后的处理逻辑,确认与当前安装的PyJWT版本的返回值类型是否匹配。
可落地解决方法
- 优先选择版本固定方案:卸载当前环境下不匹配的依赖,按照官方推荐的兼容版本组合重新安装。对应2021年初的这个版本线,匹配的稳定组合为
rasa==2.0.8、rasa-x==0.35.0、PyJWT==1.7.1、sanic-jwt==1.4.0,可从根源解决参数不兼容、decode方法缺失两类问题。执行安装命令:pip install rasa==2.0.8 rasa-x==0.35.0 PyJWT==1.7.1 sanic-jwt==1.4.0 --force-reinstall - 临时源码适配方案:如果不想降级PyJWT版本,可手动修改sanic-jwt的报错位置源码,将
return jwt.encode(payload, secret, algorithm=algorithm).decode("utf-8")中的.decode("utf-8")后缀去掉,直接返回编码后的字符串即可适配新版PyJWT。注意:这类手动修改会在依赖重装后失效,仅适合临时调试场景。 - 环境清洁检查:启动前清理本地残留的Rasa X配置缓存、杀掉占用5002端口的残留进程,避免残留进程引发额外的接口调用异常。
内容的提问来源于stack exchange,提问作者adityarawal
相关产品推荐
相关产品推荐

