对话机器人 Rasa(五):自动化测试

文章目录

    自动化的必要性

    手动跑一遍覆盖各种问题的对话,太耗费时间了。例如,即便最简单的有十几个意图识别的对话场景,手动测试一遍都需要很长时间。
    而且记不住有哪些 rule … 需要对照着 nlu.yml 文件才能记起来。

    比较高效的方式是,跑一遍自动化测试,然后将失败的 case 摘出来,手动跑一遍交互式训练。

    还有另外一个好处,就是之后现场演示的时候,可以照着自动化测试的 test case 来演示,以保证万无一失。避免像百度文心一言一样,发布会上连现场演示的勇气都没有。

    测试文件

    > ls tests/
    test_stories.yml
    

    似乎没有 test_rules.yml 这样的文件,只能用 test_stories.yml 了。对于我目前的简单规则场景,有种杀鸡用牛刀的感觉。

    写两个测试

    对应简单规则,可以把所有 rules 都写在一个 story 里。

    - story: simple rules
      steps:
      - user: |
          你好
        intent: greet
      - action: utter_greet
    
      - user: |
          你是谁
        intent: bot_challenge
      - action: utter_iamabot
    
      - user: |
          人工客服联系方式
        intent: human_tel
      - action: utter_human_tel
    
      - user: |
          你真聪明
        intent: praise
      - action: utter_praise
    
      - user: |
          再见
        intent: goodbye
      - action: utter_goodbye
    

    执行测试

    rasa test
    

    测试结果

    全部通过的结果:

    2023-04-19 16:40:55 INFO     rasa.core.test  - Finished collecting predictions.
    2023-04-19 16:40:55 INFO     rasa.core.test  - Evaluation Results on CONVERSATION level:
    2023-04-19 16:40:55 INFO     rasa.core.test  -  Correct:          7 / 7
    2023-04-19 16:40:55 INFO     rasa.core.test  -  Accuracy:         1.000
    2023-04-19 16:40:55 INFO     rasa.core.test  - Stories report saved to results/story_report.json.
    ...
    // 下面这行日志没有意义,因为即便是失败的,也会有这条。
    2023-04-19 16:41:53 INFO     rasa.nlu.test  - Every intent was predicted correctly by the model.
    

    有一例失败的结果:

    2023-04-19 17:29:57 INFO     rasa.core.test  - Evaluation Results on CONVERSATION level:
    2023-04-19 17:29:57 INFO     rasa.core.test  -  Correct:          7 / 8
    2023-04-19 17:29:57 INFO     rasa.core.test  -  Accuracy:         0.875
    2023-04-19 17:29:57 INFO     rasa.core.test  - Stories report saved to results/story_report.json.
    

    查看具体哪个 story 失败了

    结果文件在 results/failed_test_stories.yml, 里面里有对应的失败 case 记录。

    > cat results/failed_test_stories.yml
    version: "3.1"
    stories:
    - story: oxygen_benefit (./tests/test_stories.yml)
      steps:
      - intent: oxygen_benefit  # predicted: greet: 你好
      - action: utter_oxygen_benefit
    

    如果全部 test case 通过,则显示:

    > cat results/failed_test_stories.yml
    # None of the test stories failed - all good!¶
    

    还有一个 warnings 文件,不知道有什么作用:

    > cat results/stories_with_warnings.yml
    # No warnings for test stories¶
    

    但是对于复杂的多轮对话的场景,可以参考:

    对话机器人 Rasa(三十九):使用 Python 编写自动化测试脚本

    参考

    • https://rasa.com/docs/rasa/testing-your-assistant/

    查看合集

    📖 对话机器人 Rasa 中文系列教程

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式