[ Rasa SDK ]
events
from rasa_sdk.events import (
Restarted, SlotSet, SessionStarted, ActionExecuted, EventType,
FollowupAction, ActiveLoop, Form, UserUtteranceReverted, ConversationPaused , AllSlotsReset
)
* UserUtteranceReverted
대화의 특정 시점으로 되돌리는 역할. ( 사용자의 마지막 발화를 무효화 )
* action_default_fallback
from rasa_sdk import Action
from rasa_sdk.events import UserUtteranceReverted
class ActionHandleIncorrectInput(Action):
def name(self):
return "action_handle_incorrect_input"
def run(self, dispatcher, tracker, domain):
# 메시지를 보냅니다.
dispatcher.utter_message(text="I didn't understand that. Let's try again.")
# 마지막 발화를 되돌립니다.
return [UserUtteranceReverted()]
=> action_handle_incorrect_input 액션을 실행하면 지정한 메시지를 반환하며 마지막 발화를 무효화.
* ActionExecuted
Rasa의 대화 상태를 추적하고 관리하는 역할.
(Rasa에서 모든 액션이 실행된 이후 자동으로 트리거 => 대화 로그에 액션이 실행되었음을 기록.)
[Fallback 커스텀 액션 지정]
rasa 의 내장된 액션 중 ' action_default_fallback ' 에 대해 config.yml 파일에서 임계값을 지정해 설정할 수 있음.
* action_default_fallback
사용자의 메시지에 대한 적절한 응답을 찾지 못했을 때 실행되는 기본 폴백 액션.
** UserUtteranceReverted 이벤트 트리거
[ config.yml 파일 fallback 설정 ]
*FallbackClassifier ( pipeline 구성요소 _Rasa NLU에서 동작 )
NLU 레벨에서 인텐트 인식 신뢰도가 낮거나 모호할 때 fallback 인텐트를 트리거.
( pipeline )
pipeline:
- name: FallbackClassifier
threshold: 0.4 # NLU 인텐트 신뢰도 임계값
ambiguity_threshold: 0.1 # NLU 인텐트 예측의 신뢰도 임계값
fallback_intent_name: "custom_fallback" # 트리거할 인텐트
> threshold : NLU 모델이 특정 인텐트를 예측할 때, 해당 인텐트를 정상적으로 인식하기 위한 바탕이 되는 신뢰도 임계값.
인텐트의 신뢰도가 40%미만일 경우 fallback 인텐트 트리거.
> ambiguity_threshold : NLU 모델이 여러 인텐트를 예측할 때, 예측들 간의 신뢰도 차이를 바탕으로 해당 예측의 불확실성을 판단하기 위한 임계값.
예측된 여러 인텐트의 신뢰도 차이가 10% 이하일 경우 fallback 인텐트 트리거.
> fallback_intent_name : 트리거할 인텐트명. (없는 경우 자동으로 'nlu_fallback' 인텐트를 트리거 )
** 트리거할 fallback 인텐트는 domain에 정의필요, rule & stroy 파일에도 해당 인텐트에 대한 액션 지정 필요. **
** 아래 예시 참고
* RulePolicy ( policies 구성요소 _Rasa Core에서 동작 )
Core 레벨에서 대화의 흐름 중 적절한 응답을 찾지 못했을 때 fallback 액션을 실행.
( policies )
policies:
- name: RulePolicy
core_fallback_threshold: 0.3 # Core 정책 임계값
core_fallback_action_name: "action_default_fallback" # 트리거할 액션
enable_fallback_prediction: True # fallback 예측 활성화 여부
> core_fallback_threshold : 대화의 흐름 중 적절한 다음 액션을 예측할 때 사용되는 신뢰도 임계값.
모델의 다음 액션 예측 신뢰도가 30%미만일 경우 fallback 액션 실행.
> core_fallback_action_name : fallback 발생으로 실행할 액션명. (명시적 지정 필수.)
> enable_fallback_prediction : fallback 예측 활성화 여부.
'True' 로 설정하면, 모델이 신뢰도가 낮은 경우에 fallback 예측을 활성화해서 fallback 액션을 실행.
** 실행할 fallback 액션은 domain에 정의필요, rule & stroy 파일에도 해당 액션에 대한 규칙 지정 필요. **
** 아래 예시 참고
( domain.yml )
intents:
- nlu_fallback
actions:
- action_default_fallback
responses:
utter_fallback:
- text: "I'm sorry, I didn't understand that. Can you please rephrase?"
=> fallback 인텐트 (nlu_fallback), fallback 액션 (action_default_fallback), fallback 액션에 대한 response 지정.
( rules.yml )
version: "2.0"
rules:
- rule: Handle NLU fallback
steps:
- intent: nlu_fallback
- action: action_default_fallback
- rule: Handle core fallback
steps:
- action: action_default_fallback
=> fallback 인텐트에 대한 fallback 액션 처리규칙 지정 (Handle NLU fallback)
fallback 액션 처리규칙 지정. (Handle core fallback)
** 만일 추가 커스텀 액션이 필요하다면 action.py 에 ' action_default_fallback ' 에 대한 추가 로직 작성. **
[ Rasa 버전에 따른 fallback 설정 ]
Rasa 2.X 버전에서는
policies에 ' FallbackPolicy ' 를 사용하여 NLU와 Core 임계값을 한꺼번에 설정.
( policies )
policies:
- name: FallbackPolicy
nlu_threshold: 0.4 # NLU 신뢰도 임계값
core_threshold: 0.3 # Core 정책 임계값
fallback_action_name: "action_default_fallback"
Rasa 3.X 버전에서는 ( Rasa 2.X 버전에서도 가능 )
pipeline에 ' FallbackClassifier ' 를 사용해서 NLU 임계값 & policies에 ' RulePolicy ' 를 사용하여 Core 임계값 설정.
( pipeline )
pipeline:
- name: FallbackClassifier
threshold: 0.4 # NLU 신뢰도 임계값
ambiguity_threshold: 0.1
fallback_intent_name: "nlu_fallback"
( policies )
policies:
- name: RulePolicy
core_fallback_threshold: 0.3 # Core 정책 임계값
core_fallback_action_name: "action_default_fallback"
enable_fallback_prediction: True
'업무 > 챗봇 (Rasa)' 카테고리의 다른 글
[Rasa] json_to_yml.py 파일 정리 (+ 업데이트 중) (0) | 2024.08.27 |
---|---|
[Rasa] config.yml 파일 설정 _pipeline, policies (Fallback 커스텀 액션) (0) | 2024.07.24 |
[Rasa] rasa built-in actions (0) | 2024.07.23 |
[Rasa] 커스텀 액션 이벤트 (FollowupAction, Restarted) (0) | 2024.07.12 |
[Rasa] 챗봇_ slot 이벤트에 따른 action진행 (SlotSet) (2) | 2024.07.10 |