本文继续围绕工业级业务对话平台和框架Rasa,深入解析Rasa与ElasticSearch整合项目的微服务源码。
一、基于ElasticSearch的Rasa项目实战之微服务源码解析
- Rasa微服务和ElasticSearch整合中代码架构分析
Rasa微服务是指Rasa server使用在endpoint.yml文件里定义的URL来发送HTTP POST请求(通过aiohttp工具包进行远程异步通信)给action server来调用远程actions,这样的设计模式称为代理模式。对于用户来说,只知道在和对话机器人进行交互。
为了整合ElasticSearch进行知识库查询,需要自定义一个action “ActionElasticsearchKnowledgeBase”,并创建基于ElasticSearch的knowledge base并继承自rasa_sdk提供的KnowledgeBase接口,这个接口提供了一个默认实现InMemoryKnowledgeBase,在实际项目开发中,如果使用基于内存的knowledge base,就不能实现对知识库中存储的领域知识的动态更新,所以一般需要建立自定义的知识库。
2. KnowledgeBase源码解析
在KnowledgeBase的初始化方法中,使用lambda函数来定义每一个指代mapping:
下面定义了获取object的attribute的方法,注意方法使用了async关键字,这样就可以在执行读取数据等耗时操作时不会对后续操作造成阻塞:
根据lambda函数对传入的object_type转换为对用户友好的信息表示: