MALOUDA-PSA 2025-06-15 22:11 采纳率: 85.6%
浏览 6
已结题

rasa配置自定义中间件问题

(rasa-env) D:\rasa>rasa train --debug 2> train2.log
YamlValidationException: Failed to validate 'data\rules.yml'. Please make sure the file is correct and all mandatory parameters are specified. Here are the errors found during validation:
  in data\rules.yml:3:
      Key 'triggers' was not defined. Path: '/rules/0'
  in data\rules.yml:3:
      Key 'actions' was not defined. Path: '/rules/0'

其中 data/rules.yml:

version: "3.1"
rules:
- rule: "stock query rule"
  triggers:
    - intent: query_stocks
  actions:
    - action: action_query_stocks

domain.yml

version: "3.1"

intents:
  - query_stocks
  - greet
  - goodbye
  - affirm
  - deny
  - mood_great
  - mood_unhappy
  - bot_challenge

responses:
  utter_greet:
    - text: "Hey! How are you?"

  utter_cheer_up:
    - text: "Here is something to cheer you up:"
      image: "https://i.imgur.com/nGF1K8f.jpg"

  utter_did_that_help:
    - text: "Did that help you?"

  utter_happy:
    - text: "Great, carry on!"

  utter_goodbye:
    - text: "Bye"

  utter_iamabot:
    - text: "I am a bot, powered by Rasa."

  utter_ask_price:
    - text: "您想查询价格低于多少的股票?"

  utter_ask_stk_type:
    - text: "您想查询哪个板块的股票?"

session_config:
  session_expiration_time: 60
  carry_over_slots_to_new_session: true

actions:
  - action_query_stocks

entities:
  - number
  - stk_type

slots:
  stk_type:
    type: text
    mappings:
      - type: from_entity
        entity: stk_type
        intent: query_stocks

rasa3.6 版本 , python3.8

  • 写回答

5条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-06-15 22:21
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。

    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    根据您提供的错误信息和配置文件,问题出在 rules.yml 文件的验证上。Rasa 3.6 对规则文件的格式要求比较严格。以下是解决方案:

    问题分析

    错误信息显示:

    1. Key 'triggers' was not defined
    2. Key 'actions' was not defined

    虽然您的 rules.yml 中确实定义了这些字段,但可能是格式或缩进问题导致的验证失败。

    解决方案

    1. 修正 rules.yml 文件格式
    version: "3.1"
    rules:
      - rule: stock query rule
        condition:
          - active_loop: null
        steps:
          - intent: query_stocks
          - action: action_query_stocks
    

    或者使用 Rasa 3.x 推荐的格式:

    version: "3.1"
    rules:
      - rule: stock query rule
        steps:
          - intent: query_stocks
          - action: action_query_stocks
    
    1. 确保 domain.yml 中正确引用了自定义动作
    actions:
      - action_query_stocks
    
    1. 验证自定义动作文件
      确保 actions/actions.py 中有对应的动作实现:
    from typing import Any, Text, Dict, List
    from rasa_sdk import Action, Tracker
    from rasa_sdk.executor import CollectingDispatcher
    
    
    class ActionQueryStocks(Action):
        def name(self) -> Text:
            return "action_query_stocks"
    
    
        async def run(self, dispatcher: CollectingDispatcher,
                     tracker: Tracker,
                     domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
            # 实现查询逻辑
            dispatcher.utter_message(text="正在查询股票信息...")
            return []
    

    验证流程

    开始

    常见问题排查

    1. 缩进问题:YAML 对缩进非常敏感,确保使用空格而非制表符
    2. 版本兼容性:Rasa 3.x 的规则语法与 2.x 有所不同
    3. 文件编码:确保文件保存为 UTF-8 编码

    如果问题仍然存在,可以尝试:

    1. 删除 __pycache__ 目录和 .rasa 缓存目录
    2. 检查 Python 环境是否干净
    3. 使用 rasa data validate 命令验证数据完整性

    希望这些解决方案能帮助您解决问题!如果还有其他问题,请提供更多错误细节。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月28日
  • 已采纳回答 6月20日
  • 创建了问题 6月15日