使用Rasa ReminderScheduled程序崩溃,时区错误问题求助
解决Rasa ReminderScheduled的时区识别错误问题
我之前在Windows 10的Ubuntu子系统里用Rasa的ReminderScheduled功能时,也碰到过一模一样的错误!先给你拆解下问题,再说说几个靠谱的解决办法。
错误原因
这个错误根源不在Rasa本身,而是它底层依赖的APScheduler定时任务库在WSL环境下没法自动识别本地时区。WSL的时区配置和原生Linux系统不太一样,单纯设置TZ环境变量,APScheduler还是没法正确读取到时区信息,所以才会抛出那个要求你显式指定时区的错误。
可行的解决办法
1. 在Rasa配置文件里显式指定时区
这是最直接的Rasa官方推荐方式,修改你的endpoints.yml文件,添加调度器的时区配置:
# 保留你原本的action_endpoint配置 action_endpoint: url: "http://localhost:5055/webhook" # 添加scheduler配置,指定时区 scheduler: rasa_sdk.scheduler.APScheduler: timezone: "Europe/London"
配置完之后,重启Rasa核心服务和action服务器,再测试ReminderScheduled功能应该就能正常运行了。
2. 在Python启动代码中手动指定APScheduler时区
如果不想修改配置文件,也可以在初始化Rasa Agent的时候,直接给调度器指定时区:
from rasa.core.agent import Agent from rasa.core.interpreter import RasaNLUInterpreter from rasa.core.endpoints import EndpointConfig from apscheduler.schedulers.background import BackgroundScheduler from pytz import timezone # 初始化带时区的调度器 scheduler = BackgroundScheduler(timezone="Europe/London") # 加载Agent时传入这个调度器 interpreter = RasaNLUInterpreter("models/nlu") agent = Agent.load( "models/dialogue", interpreter=interpreter, action_endpoint=EndpointConfig(url="http://localhost:5055/webhook"), scheduler=scheduler ) # 后续的启动代码不变 agent.handle_channel(ConsoleInputChannel())
3. 修复WSL系统的时区配置
如果想从根本上解决时区识别问题,可以直接修正WSL的系统时区:
# 先查看可用的时区列表,找到你需要的 timedatectl list-timezones # 设置时区,比如伦敦 sudo timedatectl set-timezone Europe/London # 验证设置是否生效 timedatectl
设置完成后,重启WSL终端或者重新运行你的Python脚本,这时候再设置os.environ['TZ']应该就能生效了,APScheduler也能自动识别时区了。
之前你设置TZ环境变量没用,就是因为WSL本身的系统时区配置不正确,APScheduler优先读取系统时区,而不是环境变量里的设置,所以得先把系统时区搞定才行。
内容的提问来源于stack exchange,提问作者Charlotte Junod
相关产品推荐
相关产品推荐

