Rasa框架中新增 intents 流程

1.在nlu文件中增加意图

首先现在nlu.yml文件中加入你想加入的意图(Registered_capital)


- intent: Registered_capital
  examples: |
    - [铁大大](company)注册基金多少钱
    - [铁大大](company)创立时注册了多少资金
    - [铁大大](company)的初始注册资本是多少
    - [铁大大](company)成立时注册了多少钱
    - [铁大大](company)注册的资金是多少
    - [铁大大](company)的注册资本有多少

`2.修改domain.yml文件将你新加的意图(intents)添加在domain.yml文件中

  1. 首先在domain.yml文件中的intents(意图)中加入你的意图名称(Registered_capital)
intents:
- Registered_capital: #注册资金
    use_entities: true
  1. 在domain.yml文件中的entities(实体)中加入你意图中的实体名称(company)(如果已经存在了,则不需要再添加
entities:
- company  #公司
  1. 在domain.yml文件中的slots(槽值)中加入你意图中的实体(company)(只需要修改实体名,其余跟其他的一样)
slots:
  company:
    type: rasa.shared.core.slots.TextSlot
    initial_value: null
    auto_fill: true
    influence_conversation: true

  1. 在domain.yml 文件中的actions(动作)中把你新增的动作名称(FindTheCorrespondingcompany)添加进去
actions:
- FindTheCorrespondingcompany   # 注册资金
  1. 在domain.yml文件中的froms(表单)中增加新添意图中实体(company)的表单(company_from)(如果表单中已存在新添意图的实体表单,则不需要再添加
forms:
  company_form:    #公司表单
    required_slots:
      company:
      - entity: company
        type: from_entity
      - intent: enter_data
        type: from_text

3. 在config.yml文件中的 dimensions:里面增添新增意图中的实体(company)(如果要是已存在,则不用再添加

 dimensions:
  - company   #公司

4.在rules.yml中里面添加(主要作用是为了激活和提交表单

  • 在这个激活和提交表单里面都修改成自己新增的内容
  • ‘rule: 可以自己定义’
# 激活公司注册资金表单
- rule: activate query company_capital_from
  steps:
    - intent: Registered_capital
    - action: utter_timeout
    - action: company_from
    - active_loop: company_from
# 提交注册资金表单
- rule: deactivate contact company_from
  condition:
  - active_loop: company_from
  steps:
    - active_loop: null
    - action: FindTheCorrespondingcompany
    - action: utter_over

5.在stories.yml (故事模块) 里面根据你新增的意图去增加故事

  • 'story: query+自己定义’,
  • ‘intent:写你新增意图的名称 Registered_capital()’ ,
  • ‘第二个action:写你新增意图中实体的表单名称(company_from)’,
  • ‘第一个 active_loop:也是写你新增意图中实体的表单名称’
  • ‘第三个action:写你domain.yml文件中 actions 里定义的动作名称(FindTheCorrespondingcompany)’
stories:

- story: query company_capital    #注册资金
  steps:
  - intent: Registered_capital
  - action: utter_timeout
  - action: company_from
  - active_loop: company_from
  - active_loop: null
  - action: FindTheCorrespondingcompany
  - action: utter_over

6.新增意图后也需要在actions.py文件里面添加

  • 类名写: ‘class + 在domain.yml中的actions模块里面定义的动作名称’
  • 并且把这个类里面的实体修改为新增意图中的意图名称(company)

class FindTheCorrespondingcompany(Action):
    def name(self) -> Text:
        return "FindTheCorrespondingcompany"

    def run(
            self,
            dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: DomainDict,
    ) -> List[EventType]:
        company = tracker.get_slot('company')
        print(company)
        intentions = tracker.get_intent_of_latest_message()
        if type(company) != list:
            data = {'args': {company: ['company']}, 'question_types': [intentions]}
        else:
            data = {'args': {company[0]: ['company']}, 'question_types': [intentions]}
        parser = question_parser.QuestionPaser()
        searcher = answer_search.AnswerSearcher()
        print(data)
        sqls = parser.parser_main(data)  # 生成相关的查询语句
        print(sqls)
        final_answer = searcher.search_main(sqls)  # 查询相关内容
        print(final_answer)
        #  进行判断 输出结果
        if not final_answer:
            dispatcher.utter_message(template='utter_out')
            dispatcher.utter_message(template='utter_out1')
            try:
                if type(company) != list:
                    data = Spider_open.open_s(company[0])
                else:
                    data = Spider_open.open_s(company)
                data = data.split('"')[3]
                dispatcher.utter_message(text=data)
            except Exception as e:
                print(e, '阿法师打发')
                dispatcher.utter_message(template='utter_exception')
        else:
            answer = '\n'.join(final_answer)
            print(answer)
            dispatcher.utter_message(text=answer)
        return [SlotSet('company', None)]

7. 在answer_search.py文件中也需要添加函数仅限于有知识图谱的rasa

  • 这个函数用于根据给定的问题类型和答案数据生成相应的回答
  • 函数中’ question_type == ‘新增意图名称(Registered_capital)’ ’
    def answer_pre(self, question_type, answers):
        final_ans = []
        if not answers:
            return ''
        # 公司简介回复模版
        if question_type == 'Registered_capital':
            desc = [i['m.name'] for i in answers]
            subject = answers[0]['m.profile']
            final_ans = '{0}的注册资金:{1}'.format(subject, ';'.join(list(set(desc))[:self.num_limit]))

        return final_ans

8. 在question_parser.py这个文件中也需要做改动(仅限于有知识图谱的rasa)

  • 函数中’ question_type == ‘新增意图名称’(Registered_capital) ’
 def parser_main(self, res_classify):
        args = res_classify['args']
        entity_dict = self.build_entitydict(args)
        question_types = res_classify['question_types']
        sqls = []
        for question_type in question_types:
            sql_ = {}
            sql_['question_type'] = question_type
            sql = []
            #################################
            if question_type == 'Registered_capital':  #注册资金
                sql = self.sql_transfer(question_type, entity_dict.get('company'))
            #################################

            if sql:
                sql_['sql'] = sql

                sqls.append(sql_)

        return sqls

总结:以上就是在rasa框架中新增意图的配置流程 从nlu.yml —— domain.yml ——config.yml —— rules.yml —— stories.yml —— actions.py —— 'answer_search.py ——question_parser.py ’ 最后两个文件rasa框架中没有知识图谱的可以忽略

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值