Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目微服务架构设计及通信协议解密(六十三)

84 篇文章 16 订阅

   本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目微服务架构设计,着重对Rasa Agent(也称作Rasa server,或者Rasa dialogue management)和action server之间如何使用HTTP通信协议进行交互的过程进行详细的分析,包括微服务代码示例及Rasa SDK specification等。

一、Rasa对话机器人项目实战之教育领域Education Bot项目微服务架构设计及通信协议解密

  1. Rasa 3.X Architecure视角下的Agent和Action Server交互过程详解

      根据下面的架构图,当对话机器人预测一个自定义action时,Rasa Agent需要调用微服务,首先会通过aiohttp库发送HTTP POST请求给Rasa action server,这个POST请求的payload是使用JSON格式封装了请求的数据,然后在action server端接收到这个请求后就会执行相应的微服务action,之后会以JSON格式的payload返回responses和events给Rasa Agent,Rasa Agent会把responses发送给用户,并且把这些events添加到对话跟踪器tracker中,从而完成一个微服务的调用过程。Rasa提供的action server的SDK是使用Python开发的,当然你可以使用其它语言来开发自己的action server。

 2.  Rasa 3.X Architecure视角下的Message Handling生命周期详解

下面这幅图显示了Rasa对话机器人进行消息处理的基本步骤,但是没有包括以下内容:

-针对输入的用户消息,直接使用ResponseSelector进行处理,譬如FAQ的场景

-Action返回的response是发送到Rasa Agent,然后再通过channel返回给用户

这幅图表达的基本步骤是,当对话机器人接收到用户输入信息后,首先经过NLU部分的处理产生intents和entities,然后交给tracker处理,再由Policy使用tracker的内容做出预测,调用相应的微服务action,之后输出responses给Rasa Agent,同时把微服务返回的events添加到tracker中来更新tracker状态。

 3.  Endpoint Request 四大核心next_action、sender_id、tracker、domain详解

Rasa Agent发送HTTP POST请求给action server时,这个request的payload会包括以下数据:

-根据Dialogue Policies预测得到的action的名称

-对话ID

-tracker的状态信息

-domain配置信息

 4.  Endpoint Request 中Payload示例JSON内容详解

REQUEST BODY SCHEMA: application/json,包含以下四个部分的内容:

-next_action:需要在action server上被执行的action

-sender_id:当前对话用户的唯一标识ID

-tracker:存储对话状态的对话跟踪器

-domain:对话机器人作用域(Rasa系统配置)

以下是request payload样例,包含上面4部分的详细的内容:

{

  "next_action": "string",

  "sender_id": "string",

  "tracker": {

    "conversation_id": "default",

    "slots": {

      "slot_name": "slot_value"

    },

    "latest_message": {

      "entities": [

        {

          "start": 0,

          "end": 0,

          "value": "string",

          "entity": "string",

          "confidence": 0

        }

      ],

      "intent": {

        "confidence": 0.6323,

        "name": "greet"

      },

      "intent_ranking": [

        {

          "confidence": 0.6323,

          "name": "greet"

        }

      ],

      "text": "Hello!"

    },

    "latest_event_time": 1537645578.314389,

    "followup_action": "string",

    "paused": false,

    "events": [

      {

        "event": "slot",

        "timestamp": 1559744410

      }

    ],

    "latest_input_channel": "rest",

    "latest_action_name": "action_listen",

    "latest_action": {

      "action_name": "string",

      "action_text": "string"

    },

    "active_loop": {

      "name": "restaurant_form"

    }

  },

  "domain": {

    "config": {

      "store_entities_as_slots": false

    },

    "intents": [

      {

        "property1": {

          "use_entities": true

        },

        "property2": {

          "use_entities": true

        }

      }

    ],

    "entities": [

      "person",

      "location"

    ],

    "slots": {

      "property1": {

        "auto_fill": true,

        "initial_value": "string",

        "type": "string",

        "values": [

          "string"

        ]

      },

      "property2": {

        "auto_fill": true,

        "initial_value": "string",

        "type": "string",

        "values": [

          "string"

        ]

      }

    },

    "responses": {

      "property1": [

        {

          "text": "string"

        }

      ],

      "property2": [

        {

          "text": "string"

        }

      ]

    },

    "actions": [

      "action_greet",

      "action_goodbye",

      "action_listen"

    ]

  }

}

 5.  Endpoint Response两大核心events和response详解

    在Rasa中,对话是以事件序列来表示的,通过调用微服务action返回事件来改变对话状态,从而影响对话过程,所以Rasa对话过程是事件驱动的。并不是所有事件都是由自定义action来返回的,Rasa会自动跟踪一些事件譬如用户消息,而有些事件只有从微服务action返回后才能被跟踪到。

 6.  Endpoint Response中Payload示例JSON内容详解

RESPONSE SCHEMA: application/json,

返回code为200,表示action执行成功,response包含以下内容:

events:action返回的events

responses:需要返回给用户的responses列表

返回code为400,表示action执行被拒绝(譬如用户没有权限执行这个微服务action),等同于返回一个ActionExecutionRejected,response包含以下内容:

-action:被拒绝执行的action

-error:错误消息

返回code为500,表示action server在执行action时发生了异常。

以下是返回code为200的response payload样例:

{

  "events": [

    {

      "event": "slot",

      "timestamp": 1559744410

    }

  ],

  "responses": [

    {

      "text": "string",

      "buttons": [

        {

          "title": "string",

          "payload": "string"

        }

      ],

      "elements": [],

      "custom": {},

      "image": "string",

      "attachment": "string",

      "template": "string",

      "property1": "string",

      "property2": "string",

      "response": "string"

    }

  ]

}

 7.  Education Bot项目微服务过程及代码示例解析

在下面的微服务代码中,微服务的逻辑是在run方法中执行的,譬如通过dispatcher调用utter_message来输出信息,在return语句中可以根据需要返回事件,在下面的代码中,返回事件为空:

 8.  Rasa 3.X微服务OpenAPI  specification逐行解析

你可以从Rasa官网下载OpenAPI  specification。考虑到Rasa开放式的松耦合架构,Rasa Agent和action server版本可以不完全一致。从下载的specification来看,版本为3.0.2:

你可以运行以下命令来升级Rasa版本:

Rasa Agent需要以下配置来找到action server,下面是本地开发模式:

这是在项目中的endpoints.yml文件中使用的配置:

从action server实际输出信息可以看到:

在specification中,Rasa Agent发送HTTP POST请求给action server时需要使用以下配置:

下面这些是关于response定义的描述:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值