You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rasa 3.6.8自定义NumberPolicy故障排查及train方法疑问

问题解答

1. 代码中导致无法正常工作的问题

  • 占位符未替换:NAME_OF_THE_ACTION是硬编码占位符,必须替换成你在domain文件中定义的实际动作名称(比如action_handle_number),否则无法找到对应动作的索引。
  • 缩进错误:if user_msg.isnumeric():语句前多了一个空格,Python对缩进严格,会触发语法错误,需修正缩进与上一行对齐。
  • 必要导入缺失:代码未包含依赖模块的导入语句,需添加以下内容:
    from rasa.core.policies.policy import Policy, Resource
    from rasa.core.domain import Domain
    from rasa.shared.core.trackers import DialogueStateTracker, TrackerWithCachedStates
    from rasa.shared.utils.common import Text, Dict, Any, Optional
    from rasa.core.policies.recipe import DefaultV1Recipe
    
  • 优先级可能不足:当前优先级设为6,若其他内置政策(如RulePolicy默认优先级为7)优先级更高,会先触发其他政策,导致你的自定义政策无法生效。建议将优先级调高(比如设为8),确保它先执行判断。
  • 数字匹配范围有限:isnumeric()仅匹配纯整数格式,若需支持带小数的数字(如"12.3"),需改用user_msg.replace('.', '').isnumeric()并额外判断小数点数量,或用正则匹配数字格式。

2. train方法的必要性

必须实现train方法,因为Policy是抽象类,train是抽象方法,不实现会触发TypeError。由于你标记了is_trainable=False,方法内不需要编写训练逻辑,可简化为返回空资源:

def train(
    self,
    training_trackers: List[TrackerWithCachedStates],
    domain: Domain,
    **kwargs: Any,
) -> Resource:
    return Resource.empty()

不能直接写pass,因为方法声明了返回类型为Resource,必须返回符合类型要求的对象。

内容的提问来源于stack exchange,提问作者Hassan Sammour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:43:14