rasa对话系统踩坑记(四)

前面几篇介绍了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系统里面集成闲聊的功能了,是不是有点简单,肯定还会有坑,还要继续踩啊,也是醉了。最后展示下效果


1.png

这里的“今天天气怎么样?”意图不在我的模型中,所以这里会调用第三方闲聊的api,并将结果返回。好吧,这个坑还要继续踩,先聊到这儿吧。
原创文章,转载请说明出处

你可能感兴趣的:(rasa对话系统踩坑记(四))