domain.yml 파일
# 인텐트
intents:
- booking
# 엔티티
entities:
- name
- companions
- date
# 슬롯
slots:
name:
type: text
influence_conversation: true
companions:
type: float
influence_conversation: true
date:
type: text
influence_conversation: true
# 응답
responses:
utter_ask_name:
- text: "예약자의 이름을 알려주세요."
utter_ask_companions:
- text: "동행자는 몇 명입니까?"
utter_ask_date:
- text: "예약할 날짜를 알려주세요."
- custom:
input_type: "date"
message: "날짜를 선택해주세요. (예: YYYY-MM-DD)"
min_date: "2023-01-01"
max_date: "2024-01-01"
# 폼
forms:
booking_form:
required_slots:
name:
- type: from_text
companions:
- type: from_entity
date:
- type: from_text
# 액션
actions:
- validate_booking_form
=> 인텐트 'booking' 에 대해 name, companions, data 세개의 사용자 입력값을 받는 경우,
response: 인텐트 'booking' 을 인지했을 때의 응답 ( 각 슬롯에 대한 사용자 입력값을 받기 위한 text응답)
slot : 'booking_form' 을 채우기 위한 슬롯값들을 name, companions, data 로 지정해준다.
아래처럼 사용자 입력값이 없는 경우 슬롯을 채울 기본값을 설정해줄 수 있다.
slots:
companions:
type: float
influence_conversation: true
initial_value: 1 # 기본값 설정
influence_conversation : true => 해당 슬롯값이 대화 흐름에 영향을 주는 경우 (기본값)
influence_conversation : false => 해당 슬롯값이 대화 흐름에 영향이 없고, 단순 데이터 저장 용도로 사용하는 경우.
forms: 필수슬롯값 지정.
- type이 from_text: 사용자 입력값을 그대로 슬롯에 반영.
- type이 from_entity: 사용자 입력값에서 해당 엔티티(companions)를 추출해서 해당 슬롯에 할당.
config.yml 파일에서 NLP 파이프라인 설정 필요
* 엔티티로 정의하지 않아도 'from_text' 타입이면 슬롯값으로만 정의해서 form을 채울 수 있는듯?
rules.yml
rules:
# 폼활성화
- rule: Activate booking_form
steps:
- intent: booking
- action: booking_form
- active_loop: booking_form
# 폼제출
- rule: Submit booking_form
condition:
- active_loop: booking_form
steps:
- action: booking_form
- active_loop: null
- action: utter_booking_message
- action: validate_booking_form
=> form 활성화와 form 제출을 별개의 규칙으로 지정해줘야 슬롯을 채우기 위한 active_loop가 작동한다.
* active_loop : 폼의 현재상태(활성화 상태). 폼이 활성화 되면 그 폼의 이름으로 설정된다.
[ Activate booking_form 규칙 ]
=> 'booking' 인텐트 트리거
=> 'booking_form' 액션 실행 (booking_form 활성화)
=> 폼이 활성화된 동안 rasa는 active_loop 를 참조하여 폼이 계속 진행중인지 확인.
active_loop 가 활성화된 상태에서는 domain에서 정의된 required_slots을 순차적으로 채운다.
[ Submit booking_form 규칙 ]
=> condition 조건에 부합하는 경우,
즉, booking_form 이 활성화 상태일 때 아래의 규칙 적용.
=> 'booking_form' 액션 실행 (booking_form 활성화)
=> active_loop 를 null로 만들어 현재 폼(booking_form)의 활성화 종료.
=> 이후 지정해준 액션들이 순차적으로 실행. ( 'utter_booking_message' & 'validate_booking_form' )
** 폼의 활성화, 제출 모두 action : (form이름) 으로 진행하고,
폼의 슬롯이 전부 채워지더라도 명시적으로 종료해줘야 다음 액션이 진행된다.
stories.yml
stories:
- story: booking_form
steps:
- intent: booking
- action: booking_form
- active_loop: booking_form
- active_loop: null
- action: utter_booking_message
- action: validate_booking_form
'업무 > 챗봇 (Rasa)' 카테고리의 다른 글
[Rasa] nlu_fallback 커스텀 액션 처리 (0) | 2024.10.12 |
---|---|
[Rasa] domain (+ 업데이트 중) (0) | 2024.08.30 |
[Rasa] json_to_yml.py 파일 정리 (+ 업데이트 중) (0) | 2024.08.27 |
[Rasa] config.yml 파일 설정 _pipeline, policies (Fallback 커스텀 액션) (0) | 2024.07.24 |
[Rasa] Fallback 커스텀액션 및 이벤트 ( UserUtteranceReverted, ActionExecuted ) (0) | 2024.07.24 |