1.在nlu文件中增加意图
首先现在nlu.yml文件中加入你想加入的意图(Registered_capital)
- intent: Registered_capital
examples: |
- [铁大大](company)注册基金多少钱
- [铁大大](company)创立时注册了多少资金
- [铁大大](company)的初始注册资本是多少
- [铁大大](company)成立时注册了多少钱
- [铁大大](company)注册的资金是多少
- [铁大大](company)的注册资本有多少
`2.修改domain.yml文件将你新加的意图(intents)添加在domain.yml文件中
- 首先在domain.yml文件中的intents(意图)中加入你的意图名称(Registered_capital)
intents:
- Registered_capital: #注册资金
use_entities: true
- 在domain.yml文件中的entities(实体)中加入你意图中的实体名称(company)(如果已经存在了,则不需要再添加)
entities:
- company #公司
- 在domain.yml文件中的slots(槽值)中加入你意图中的实体(company)(只需要修改实体名,其余跟其他的一样)
slots:
company:
type: rasa.shared.core.slots.TextSlot
initial_value: null
auto_fill: true
influence_conversation: true
- 在domain.yml 文件中的actions(动作)中把你新增的动作名称(FindTheCorrespondingcompany)添加进去
actions:
- FindTheCorrespondingcompany # 注册资金
- 在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框架中没有知识图谱的可以忽略