본문 바로가기

업무/챗봇 (Rasa)

[Rasa] Fallback 커스텀액션 및 이벤트 ( UserUtteranceReverted, ActionExecuted )

 

[ 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에서 모든 액션이 실행된 이후 자동으로 트리거 => 대화 로그에 액션이 실행되었음을 기록.)

 

 


 

 

https://phyho.tistory.com/344

 

[Rasa] config.yml 파일 설정 _pipeline, policies (Fallback 커스텀 액션)

* config.yml 파일 설정 [ pipeline ]  nlu 레벨에서 사용자 입력을 처리하고 이해하는 과정에서 어떤 구성 요소를 사용할 지 결정. (주요구성요소) Tokenizer: 입력 문장을 토큰 단위로 분리Featurizer: 텍

phyho.tistory.com

 


 

[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