国产精品免费嫩草研究院|无遮羞动漫在线观看AV|国产麻豆精品传媒AV国产在线|村在线观看|寂寞情人1正版|韩国床震韩国床震古|精品系列专区久久

報時機器人的rasa shell執行流程分析

??本文以報時機器人為載體,介紹了報時機器人的對話能力范圍、配置文件功能和訓練和運行命令,重點介紹了rasa shell命令啟動后的程序執行過程 。
一.報時機器人項目結構

報時機器人的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服務)對話的橋梁 。
報時機器人的rasa shell執行流程分析

文章插圖
1.rasa/cli/shell.py文件??在rasa/cli/shell.py文件中,def shell(args: argparse.Namespace) -> None函數如下:
報時機器人的rasa shell執行流程分析

文章插圖
2.rasa/cli/run.py文件??在rasa/cli/run.py文件中,def run(args: argparse.Namespace) -> None函數如下:
報時機器人的rasa shell執行流程分析

文章插圖
3.rasa/api.py文件??在rasa/api.py文件中,def run(...) -> None函數如下:
報時機器人的rasa shell執行流程分析

文章插圖
??在run()函數中調用serve_application()函數如下:
報時機器人的rasa shell執行流程分析

文章插圖
4.rasa/core/run.py文件??在rasa/core/run.py文件中,serve_application()函數如下:
報時機器人的rasa shell執行流程分析

文章插圖
??在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)注冊給定事件的偵聽器:

經驗總結擴展閱讀