rasa를 이용하여 챗봇을 구현중인 프로젝트에 참여하고 있는데 reminder를 구현하는 파트를 맡아 구현하였다. 사용자가 10초 이상 응답이 없을시 챗봇에서 자동으로 반응할 수 있도록 하였다.
먼저 리마인더가 무엇인지에 대해 알아보자.
Rasa에서 리마인더(reminder)는 사용자의 응답을 기다리는 동안 일정 시간이 경과하면 자동으로 특정 동작을 실행하도록 설정하는 기능을 말한다. 이를 통해 사용자로부터 응답을 기다리는 동안 챗봇이 대기 상태로 머무르지 않고, 일정 시간이 지나면 미리 정의된 액션을 수행하여 사용자에게 적시에 메시지를 전달하거나 특정 작업을 수행할 수 있다.
본 프로젝트에서는 Python의 threading 모듈을 활용하여 스레드를 생성하고, 스레드를 이용하여 사용자의 응답을 감지하고 일정 시간이 경과하면 리마인더를 출력하는 방식으로 구현하였다. 그리고 reminder가 다른 파일과는 별도로 동작 할 수 있도록 callback_server.py 파일내에 reminder 기능을 구현하였다. 본 코드에서는 사용자가 10초이상 응답이 없을 경우 reminder가 작동하도록 구현하였다.
한편, 스레드를 사용할 경우에 주의해야 할 점이 있다. 본 코드에서 발생할 수 있는 문제점은 이미 한번 실행된 스레드가 계속하여 메모리 공간을 차지하고 있을 수 있다는 것이다. 이를 해결하기 위해 리마인더 스레드를 저장할 리스트를 전역 변수로 선언하고 새로운 스레드를 시작하기 전에 이미 리마인더 스레드가 실행 중이라면, 스레드를 취소하고 리스트에서 제거하는 코드를 추가하였다.
사용자가 메시지를 보내면, 콜백 서버가 해당 메시지를 처리하고 챗봇의 응답을 콘솔에 출력한다. 또한, 리마인더를 사용하여 사용자가 일정 시간 이상 응답하지 않을 경우 리마인더 메시지를 출력하는 기능이 구현되어 있다.
# 리마인더 스레드를 저장할 리스트를 생성합니다.
reminder_threads = []
# 만약 이미 리마인더 스레드가 실행 중이라면, 스레드를 취소하고 리스트에서 제거합니다.
for thread in reminder_threads:
if thread.is_alive():
thread.cancel()
reminder_threads.remove(thread)
def send_reminder():
"""사용자의 응답이 없을 때 10초 후에 리마인더를 출력합니다."""
print("답변을 기다리고 있어요~")
다음 글에서는 구현한 리마인더를 어떻게 작동시킬 수 있는지에 대해 알아보도록 하겠다.
contact: kimyeongchaee@gmail.com