700===Dev Util/파이썬 챗봇

RASA(AI ChatBot) 로 만드는 교육용 AI 챗봇 😋

블로글러 2020. 11. 23. 12:51

안녕하세요! 오늘은 RASA를 활용한 교육용 AI 챗봇 구현 방법에 대해 알려드릴게요. 학생들의 질문에 24시간 대답해주는 똑똑한 선생님 비서를 만들어볼까요?

RASA가 뭔가요? 🤔

여러분이 스마트폰에서 사용하는 음성비서(시리, 빅스비)를 상상해보세요.

  • 내 질문을 이해하고
  • 적절한 답변을 해주는 비서가 있다면?
    RASA는 바로 이런 챗봇을 만들 수 있게 해주는 오픈소스 프레임워크예요!

쉽게 말해, RASA는 사람의 말을 이해하고 적절히 대답하는 AI 선생님을 만드는 레고 블록 세트라고 생각하면 됩니다. 프로그래밍 지식이 있다면 누구나 자신만의 챗봇을 만들 수 있어요 ✨

RASA의 핵심 구성요소 💫

RASA는 크게 5가지 블록으로 구성되어 있어요:

  1. Intent (의도) - 학생이 무엇을 원하는지 파악하는 능력
  2. "시험 일정이 언제야?" → ask_exam_schedule 의도로 인식
  3. Entities (개체) - 대화 속 중요 정보를 찾는 돋보기
  4. "수학 문제 풀이 방법 알려줘" → '수학'과 '문제 풀이'라는 중요 정보 추출
  5. Stories (대화 흐름) - 대화의 지도
  6. 학생 질문 → 챗봇 응답 → 추가 질문 → 추가 응답의 흐름을 정의
  7. Actions (행동) - 챗봇이 할 수 있는 행동들
  8. 답변하기, 정보 검색하기, 시험 일정 알려주기 등
  9. Domain (영역) - 챗봇의 지식 백과사전
  10. 챗봇이 알고 있는 모든 의도, 개체, 행동, 응답을 정의

설치 및 환경 설정 🛠️

1. 필요한 환경 설정하기

# 가상환경 만들기
python -m venv rasa_env

# 가상환경 활성화 (Windows)
rasa_env\Scripts\activate

# 가상환경 활성화 (Mac/Linux)
source rasa_env/bin/activate

# RASA 설치하기
pip install rasa

2. 프로젝트 시작하기

# 새 프로젝트 만들기
rasa init --no-prompt

# 또는 대화형으로 설정
rasa init

이 명령어를 실행하면 RASA가 기본 프로젝트 구조를 자동으로 만들어줍니다. 마치 레고 블록을 기본 형태로 조립해놓은 것과 같아요!

교육용 챗봇 설계하기 📝

1. 교육용 인텐트 설계

학생들이 무엇을 물어볼지 미리 생각해봅시다:

# data/nlu.yml
nlu:
- intent: greet
  examples: |
    - 안녕
    - 안녕하세요
    - 반가워요
    - 챗봇님 안녕하세요

- intent: ask_exam_schedule
  examples: |
    - 시험 일정이 언제예요?
    - 다음 시험은 언제인가요?
    - 기말고사 일정 알려줘
    - 중간고사가 언제야?

- intent: ask_homework
  examples: |
    - 숙제가 뭐였지?
    - 이번 주 과제가 뭐예요?
    - 제출해야 할 과제 알려줘
    - 숙제 확인하고 싶어요

2. 대화 흐름 만들기

학생과 챗봇 사이의 대화가 어떻게 진행될지 정의합니다:

# data/stories.yml
stories:
- story: 인사하고 시험 일정 물어보기
  steps:
  - intent: greet
  - action: utter_greet
  - intent: ask_exam_schedule
  - action: utter_exam_schedule

- story: 숙제 물어보기
  steps:
  - intent: ask_homework
  - action: utter_homework

3. 응답 정의하기

챗봇이 어떻게 대답할지 정의합니다:

# domain.yml
responses:
  utter_greet:
  - text: "안녕하세요! 교육봇입니다. 무엇을 도와드릴까요?"

  utter_exam_schedule:
  - text: "다음 시험은 6월 15일 월요일입니다. 시험 범위는 5~8장이에요."

  utter_homework:
  - text: "이번 주 숙제는 프로그래밍 과제 3번과 읽기 자료 요약본 제출입니다. 마감일은 금요일까지입니다."

한국어 처리를 위한 설정 🇰🇷

RASA는 기본적으로 영어에 최적화되어 있어요. 한국어를 잘 처리하려면 추가 설정이 필요합니다.

1. 한국어 파이프라인 설정하기

# config.yml
language: ko

pipeline:
  - name: WhitespaceTokenizer
  - name: RegexFeaturizer
  - name: LexicalSyntacticFeaturizer
  - name: CountVectorsFeaturizer
  - name: CountVectorsFeaturizer
    analyzer: char_wb
    min_ngram: 1
    max_ngram: 4
  - name: DIETClassifier
    epochs: 100
  - name: EntitySynonymMapper
  - name: ResponseSelector
    epochs: 100

2. 형태소 분석기 연동하기 (심화)

더 정확한 한국어 처리를 위해 KoNLPy와 같은 한국어 형태소 분석기를 연동할 수 있습니다.

# custom_tokenizer.py
from rasa.nlu.tokenizers.tokenizer import Tokenizer
from konlpy.tag import Mecab

class KoreanTokenizer(Tokenizer):
    def tokenize(self, message, attribute):
        mecab = Mecab()
        text = message.get(attribute)
        tokens = mecab.morphs(text)
        return self.convert_tokens_to_rasa_format(tokens, text)

그리고 config.yml에 추가:

pipeline:
  - name: "custom_tokenizer.KoreanTokenizer"
  # 나머지 파이프라인...

실제 교육용 챗봇 예제 📚

1. 수학 문제 풀이 안내 챗봇

# 인텐트 정의
- intent: ask_math_solution
  examples: |
    - 이차방정식 푸는 법 알려줘
    - 미분 어떻게 하는거야?
    - 적분 공식 알려주세요
    - 삼각함수 풀이방법 설명해줘

# 응답 정의
responses:
  utter_math_solution_quadratic:
  - text: "이차방정식 ax² + bx + c = 0의 근은 x = (-b ± √(b² - 4ac)) / 2a 입니다. 차근차근 계수를 대입해 볼까요?"

  utter_math_solution_calculus:
  - text: "미분은 함수의 순간 변화율을 구하는 과정입니다. 기본 공식은 f(x) = xⁿ일 때, f'(x) = n·xⁿ⁻¹ 입니다."

2. 커스텀 액션으로 동적 답변 구현하기

특정 교과 내용이나 학생별 맞춤 답변을 제공하려면 커스텀 액션을 사용합니다:

# actions.py
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher

class ActionCheckStudentProgress(Action):
    def name(self) -> Text:
        return "action_check_student_progress"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        # 학생 ID 추출 (예시)
        student_id = tracker.get_slot("student_id")

        # 실제로는 데이터베이스에서 학생 정보를 조회
        progress = get_student_progress(student_id)  # 가상의 함수

        if progress["status"] == "good":
            message = f"잘하고 있어요! 현재 진도는 {progress['chapter']}장, 평균 점수는 {progress['score']}점입니다."
        else:
            message = f"조금 더 노력이 필요해요. {progress['weak_point']} 부분을 복습하면 좋을 것 같아요."

        dispatcher.utter_message(text=message)
        return []

챗봇 학습 및 실행하기 🚀

1. 모델 학습하기

rasa train

2. 챗봇 테스트하기

rasa shell

3. 웹 인터페이스와 연동하기

# 액션 서버 실행 (별도 터미널에서)
rasa run actions

# RASA 서버 실행
rasa run --enable-api --cors "*"

교육용 챗봇의 장점 🌟

  1. 24/7 학습 지원
    • 선생님이 퇴근해도 질문에 답변 가능
    • 밤에 공부하는 학생들도 도움 받을 수 있음
  2. 개인화된 학습 경험
    • 학생별 진도와 취약점에 맞춘 답변 제공
    • 반복적인 질문도 인내심 있게 대응
  3. 교사 업무 경감
    • 반복적인 질문은 챗봇이 담당
    • 교사는 더 가치 있는 활동에 집중 가능
  4. 학습 데이터 수집
    • 학생들이 어떤 부분을 어려워하는지 데이터 확보
    • 교육 과정 개선에 활용 가능

주의할 점 ⚠️

  1. 충분한 학습 데이터 필요
    • 다양한 질문 패턴을 수집해야 함
    • 학생들의 실제 질문을 반영해야 정확도 상승
  2. 한국어 처리의 한계
    • 영어보다 한국어 처리가 까다로움
    • 형태소 분석기 연동으로 개선 가능
  3. 지속적인 업데이트 필요
    • 새로운 교육 내용 반영
    • 오답 패턴 수정

실제 구현 예시 📱

# 시험 일정을 데이터베이스에서 가져오는 커스텀 액션
class ActionExamSchedule(Action):
    def name(self) -> Text:
        return "action_exam_schedule"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:

        # 과목 엔티티 추출
        subject = tracker.get_slot("subject")

        # 데이터베이스에서 시험 일정 조회
        if subject:
            schedule = get_exam_schedule(subject)  # 가상의 함수
            message = f"{subject} 시험은 {schedule['date']}에 있습니다. 시험 범위는 {schedule['scope']}입니다."
        else:
            # 전체 시험 일정
            schedules = get_all_exam_schedules()  # 가상의 함수
            message = "다음 시험 일정입니다:\n"
            for subj, data in schedules.items():
                message += f"- {subj}: {data['date']} ({data['scope']})\n"

        dispatcher.utter_message(text=message)
        return []

마치며 🎁

RASA를 활용한 교육용 챗봇은 마치 24시간 근무하는 AI 조교와 같습니다. 학생들의 질문에 언제든지 답변하고, 학습 과정을 돕는 든든한 지원군이 될 수 있어요.

처음에는 설정과 학습 데이터 준비가 조금 번거롭게 느껴질 수 있지만, 한번 구축해놓으면 지속적으로 발전시킬 수 있는 강력한 교육 도구가 됩니다.

여러분만의 특별한 AI 선생님을 만들어보세요! 😊


궁금하신 점 있으시다면 댓글로 남겨주세요!

참고 자료

728x90
반응형