前面几篇介绍了rasa-nlu-gao中自定义的几个模块,最近也没有怎么新增特别的模块,只是在词向量这块不断在尝试。后续项目里用了google的bert做词向量生成,当然这个也已经集成到了rasa-nlu-gao里面了。项目里是采用了bert-as-service,使用这个repo提供bert model的service。具体的用法可以参照config_embedding_bilstm.yml这个配置文件。
- name: "bert_vectors_featurizer"
ip: '172.16.10.46'
port: 5555
然而这篇想讲的不是模块的编写和使用。现在做的这个对话系统是在特定领域的耳聋遗传咨询,然而前天给老板汇报,老板说要支持闲聊的功能,我当时是拒绝的。然后经过一天的思考,现在已经能够实现了:)
所以呢,这里说说集成第三方闲聊接口的实现方法。这里的闲聊模型我们没有自己训练,因为代价太大效果也不见得多好。所以调用的图灵机器人openapi,当然你可以调用其他第三方的接口。那怎么集成到rasa-core之中呢?
这里我的思路是(后面可能会做些调整),如果在意图识别和action识别低于某个阈值时候,将调用第三方api。这里需要在train_dialogue里面加上FallbackPolicy这个方法,
def train_dialogue(domain_file, model_path, training_folder):
agent = Agent(domain_file, policies=[
MemoizationPolicy(max_history=8),
KerasPolicy(MaxHistoryTrackerFeaturizer(BinarySingleStateFeaturizer(),
max_history=8)),
FallbackPolicy(nlu_threshold=0.7, core_threshold=0.3, fallback_action_name="action_default_fallback")])
training_data = agent.load_data(training_folder)
agent.train(training_data, epochs=100)
agent.persist(model_path)
比如这里,给意图的阈值为0.7,action的阈值为0.3,就是说意图和预测的action分别低于这两个值的时候,会调用action_default_fallback这个自定义的action。而action_default_fallback在rasa-core写法如下:
class ActionDefaultFallback(Action):
def name(self):
return "action_default_fallback"
def run(self, dispatcher, tracker, domain):
text = tracker.latest_message.get('text')
message = get_response(text)
if message['code'] == 100000:
dispatcher.utter_message("{}".format(message['text']))
else:
dispatcher.utter_template('utter_default', tracker)
return [UserUtteranceReverted()]
这里需要去看rasa-core中action的文档了。而图灵机器人api的调用,网上也有好多教程,我这里用的是v1的api
def get_response(msg):
key = apikey
api = 'http://www.tuling123.com/openapi/api?key={}&info={}'.format(
key, msg)
return requests.get(api).json()
apikey获取需要去图灵官网注册获取,每天有1000次免费调用,想更多需要付费了,如果有自己的闲聊模型或者更好的第三方那再好不过。
这里就已经完成在rasa系统里面集成闲聊的功能了,是不是有点简单,肯定还会有坑,还要继续踩啊,也是醉了。最后展示下效果
这里的“今天天气怎么样?”意图不在我的模型中,所以这里会调用第三方闲聊的api,并将结果返回。好吧,这个坑还要继续踩,先聊到这儿吧。
原创文章,转载请说明出处