You need to enable JavaScript to run this app. Rasa调用jupyter.chat函数传入TrainingResult触发model_path类型错误
优惠活动
大模型
产品
解决方案
定价
更多

Rasa调用jupyter.chat函数传入TrainingResult触发model_path类型错误

Rasa Jupyter环境调用chat方法报TypeError的排查与解决

核心报错根因

从错误调用栈最底层的genericpath.exists()触发逻辑就能定位问题:os.stat()方法仅支持接收字符串、字节、PathLike类型的路径值、整数句柄,但实际传入方法的路径参数是TrainingResult类的内存对象,类型完全不匹配,和模型文件是否存在没有关系。

排查步骤

  • 先定位参数错配位置:在调用chat()之前增加两行校验代码
    print(type(model_path))
    print(model_path)
    chat(model_path, endpoints)
    
    运行后如果打印出的类型是<class 'rasa.model_training.TrainingResult'>,即可完全确认是传参类型错配。
  • 这种错配90%以上出现在Notebook连续调试场景:写代码时直接把rasa.train()方法的返回值(也就是TrainingResult内存对象)赋值给了model_path字段,没有把内存对象转换成实际的模型文件路径。

解决方法

分两种场景处理:

  • 场景1:训练已经完成、模型已经导出到本地
    直接去项目根目录下的models/文件夹,找到训练生成的.tar.gz格式模型包,把完整的字符串路径赋值给model_path即可,不要传内存里的训练结果对象:
    model_path = "models/20240612-160500.tar.gz"
    endpoints = "endpoints.yml"
    chat(model_path, endpoints)
    
  • 场景2:在Notebook里连续执行训练、调试流程
    不需要手动翻找models文件夹,直接从TrainingResult对象的内置字段里取路径即可——Rasa的TrainingResult实例本身就带有.model属性,存的就是导出模型的真实字符串路径:
    # 执行训练流程
    train_res = rasa.train(
        domain="domain.yml",
        config="config.yml",
        training_files="data/"
    )
    # 从训练结果中取出合法的路径字符串
    model_path = train_res.model
    endpoints = "endpoints.yml"
    chat(model_path, endpoints)
    
  • 兜底校验:传参之前手动跑一次os.path.exists(model_path),确认值的类型是字符串、且路径真实存在,避免后续出现路径找不到的报错。

内容的提问来源于stack exchange,提问作者shizra tariq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 02:27:04