??本文以报时机器人为载体,介绍了报时机器人的对话能力范围、配置文件功能和训练和运行命令,重点介绍了rasa shell命令启动后的程序执行过程 。
一.报时机器人项目结构

文章插图
1.对话能力范围(1)能够识别欢迎语意图(greet)和拜拜意图(goodbye)(2)能够识别时间意图(query_time)(3)能够识别日期意图(query_date)(4)能够识别星期几意图(query_weekday)
2.配置文件功能(1)nlu.yml:主要包含意图、例子、对实体的标注等 。(2)stories.yml文件:用户和机器人之间对话的表示,用户输入意图,机器人响应action 。(3)actions.py:自定义的action,比如action_query_time、action_query_date、action_query_weekday 。(4)config.yml:主要包含nlu(分词、特征提取和分类等)和dialog policy(记忆、规则、机器学习等) 。(5)domain.yml:主要包含意图、视图、槽位、响应、动作等 。(6)credentials.yml:主要和其它对话平台集成,比如facebook、slack等 。(7)endpoints.yml:action_endpoint(调用自定义action)、tracker_store对话存储(内存、redis、mongodb等)、event_broker消息队列(RabbitMQ、Kafka等) 。
3.训练和运行命令(1)训练模型使用NLU数据和stories训练模型 , 模型保存在./models中 。
rasa train
说明:关于如何把数据集按照比例拆分为训练集和测试集 , 在训练集上训练模型 , 在测试集上测试模型,可以参考《聊天机器人框架Rasa资源整理》 。(2)启动action服务器使用Rasa SDK开启action服务器 。rasa run actions
(3)启动rasa服务器和客户端通过命令行的方式加载训练模型,然后同聊天机器人进行对话 。rasa shell
二.rasa shell执行流程分析??整体思路是通过rasa shell加载和解析模型,通过消息处理的方式建立起用户(客户端)和聊天机器人(rasa服务)对话的桥梁 。
文章插图
1.rasa/cli/shell.py文件??在
rasa/cli/shell.py
文件中 , def shell(args: argparse.Namespace) -> None
函数如下:
文章插图
2.rasa/cli/run.py文件??在
rasa/cli/run.py
文件中 , def run(args: argparse.Namespace) -> None
函数如下:
文章插图
3.rasa/api.py文件??在
rasa/api.py
文件中,def run(...) -> None
函数如下:
文章插图
??在
run()
函数中调用serve_application()
函数如下:
文章插图
4.rasa/core/run.py文件【报时机器人的rasa shell执行流程分析】??在
rasa/core/run.py
文件中,serve_application()
函数如下:
文章插图
??在
serve_application()
函数中启动了一个基于Sanic的Web服务器,通过configure_app()
方法构建了app,然后通过run()
方法启动 , 如下所示:app = configure_app(input_channels,cors,auth_token,enable_api,response_timeout,jwt_secret,jwt_method,port=port,endpoints=endpoints,log_file=log_file,conversation_id=conversation_id,use_syslog=use_syslog,syslog_address=syslog_address,syslog_port=syslog_port,syslog_protocol=syslog_protocol,request_timeout=request_timeout,)......app.run(host=interface,port=port,ssl=ssl_context,backlog=int(os.environ.get(ENV_SANIC_BACKLOG, "100")),workers=number_of_workers,)
??通过register_listener(listener, event)
注册给定事件的侦听器:app.register_listener(partial(load_agent_on_start, model_path, endpoints, remote_storage), "before_server_start",)app.register_listener(close_resources, "after_server_stop")
5.rasa/core/agent.py文件??通过load_agent_on_start()
方法加载一个agent 。在rasa/core/agent.py
文件中,load_agent()
函数如下所示:
文章插图
??在
load_agent()
函数中,加载模型代码是agent.load_model(model_path)
。在Agent类的def load_model()
方法中,关于初始化MessageProcessor代码如下:self.processor = MessageProcessor(model_path=model_path,tracker_store=self.tracker_store,lock_store=self.lock_store,action_endpoint=self.action_endpoint,generator=self.nlg,http_interpreter=self.http_interpreter,)
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 微信如何发朋友圈(怎么转发别人的朋友圈)
- 石头扫地机器人t7怎么连手机_石头扫地机器人t7连接手机方法
- 如何恢复不是本人的微信聊天记录(怎么防止第三方恢复微信聊天记录)
- 微信怎样建立只有自己一个人的微信群(微信群管理制度公告)
- 古代的夏日饮品 古人的“续命水”养生又解暑
- 手相女右手解析 教你如何看懂女人的手相
- 关东煮设备多少钱一台 关东煮机器多少钱一台
- 我24小时便利店员 关东煮机器多少钱一台
- 过年回家的句子心情短语 过年回家感人的句子
- 找二婚女人的三大忌【找二婚女人注意事项】