Rasa的工作流程

Rasa 的工作流程分为两个主要部分:NLU(自然语言理解)Core(对话管理)。整个流程包括从用户输入到最终响应的多个步骤,下面是详细的工作流程解析:

1. 用户输入

用户通过聊天界面(如微信、Telegram、Slack 或 Web 前端)发送自然语言消息,例如:

"我想预订一张明天去北京的火车票"

2. 自然语言理解(NLU)

Rasa 的 NLU 模块解析用户输入,提取意图和实体。

2.1 意图识别

NLU 模块会识别用户输入的意图(intent),例如:

intent: book_ticket
2.2 实体提取

同时,NLU 模块会从输入中提取出相关实体(entities),例如:

entities:
  - date: 明天
  - destination: 北京
过程:
  • 用户输入会经过 NLU 管道(Pipeline),管道中的组件会依次处理输入数据:
    • Tokenization(分词): 将句子分解为单词或短语。
    • Intent Classification(意图分类): 使用分类模型识别用户意图。
    • Entity Extraction(实体提取): 提取用户输入中的关键数据。

3. 槽位填充(Slot Filling)

Rasa Core 会将提取的实体填充到预定义的槽位(slots)中,用于存储对话中的关键数据。

  • 例如:
    slots:
      date: 明天
      destination: 北京
    

如果槽位未被完全填充,Rasa Core 可能会要求用户提供更多信息。


4. 对话管理(Core)

Rasa 的 Core 模块负责管理对话流,根据上下文和策略决定下一步的动作。

4.1 检查上下文
  • Rasa Core 会分析当前对话的状态,包括用户意图、已填充的槽位等。
  • 使用对话状态追踪器(Tracker)来记录对话的历史。
4.2 策略决策
  • 基于训练的对话模型或规则,Core 会决定下一步的动作(action)。
  • 动作可能是:
    • 发送固定回复:例如问候语或简单回答。
    • 触发自定义动作:如调用外部 API。
    • 向用户询问更多信息

5. 动作执行(Action Execution)

Core 模块触发动作并返回结果。

动作类型:
  1. 默认动作:

    • 响应定义在 domain.yml 文件中。
    • 例如:
      responses:
        utter_greet:
          - text: "你好!我可以帮您做什么?"
      
  2. 自定义动作:

    • 执行后台逻辑,例如访问数据库或调用外部 API。
    • 定义在 actions/ 文件夹内的 Python 文件中,使用 Rasa SDK。
    • 例如:
      class ActionBookTicket(Action):
          def name(self):
              return "action_book_ticket"
      
          def run(self, dispatcher, tracker, domain):
              destination = tracker.get_slot('destination')
              date = tracker.get_slot('date')
              # 调用API预订车票
              dispatcher.utter_message(f"为您预订了 {date} 去 {destination} 的火车票!")
              return []
      

6. 生成响应

Rasa 会将动作的结果转换为用户能理解的响应消息,通过连接的渠道(如微信或 Web 界面)发送给用户。

  • 示例响应:
    "为您预订了明天去北京的火车票!"
    

7. 持续对话

对话的状态会持续记录在对话状态追踪器中(Tracker Store),包括用户的意图、槽位值和历史消息。这样 Rasa 可以在下一轮对话中记住上下文。


工作流程总结图

用户输入 --> NLU 解析意图和实体 --> 槽位填充 --> Core 决策下一步动作
      --> 动作执行 --> 生成响应 --> 返回给用户 --> 持续对话

开发和运行流程

开发 Rasa 聊天机器人也需要遵循以下主要步骤:

1. 数据准备
  • NLU 数据: 定义用户意图和示例句子(data/nlu.yml)。
  • 对话数据: 定义对话流(data/stories.yml)。
  • 规则数据: 定义简单对话规则(data/rules.yml)。
  • 域文件: 定义意图、动作、槽位(domain.yml)。
2. 配置模型
  • 配置 NLU 管道和对话策略(config.yml)。
3. 训练模型
  • 使用命令训练 NLU 和 Core 模型:
    rasa train
    
4. 测试和调试
  • 使用 Rasa Shell 测试模型:
    rasa shell
    
5. 部署
  • 部署到生产环境,集成到消息平台(如微信、Telegram)或 Web 应用。

你可能感兴趣的:(rasa)