40  가상 비서 (Virtual Assistant)

전화 걸기, 일정 잡기, 할 일 목록 만들기, 메모 남기기 등의 작업을 도와주는 나만의 가상 비서를 만들어 봅시다. 사용자의 음성이나 텍스트 명령을 이해하고 최적의 행동을 수행하는 똑똑한 비서를 목표로 합니다.

이 프로젝트는 자연어 이해(NLU)와 음성 인식(STT), 그리고 외부 서비스 연동(API) 기술을 익히기에 아주 좋은 과제입니다. 특히 최근 인공지능 비서가 제공하는 개인화된 비서 기능을 직접 설계해 보세요.

40.1 주요 개발 포인트

  • 음성 인식 및 음성 출력 (STT/TTS): SpeechRecognition, gTTS, pyttsx3 등을 사용하여 사용자와 대화합니다.
  • 자연어 이해 (Intent Classification): 사용자의 명령(예: “내일 10시 회의 잡아줘”)에서 의도를 파악하고 필요한 정보를 추출합니다.
  • 개인 일정 및 할 일 관리: 캘린더 API나 로컬 DB와 연동하여 사용자의 일정을 등록하고 리마인드(Remind)합니다.
  • 외부 정보 조회 및 자동화: 날씨 정보, 뉴스 헤드라인, 이메일 확인 등 다양한 외부 서비스를 연동합니다.
  • 사용자 인터페이스 (GUI): 봇이 듣고 말하는 시각적 피드백과 함께 현재 작업 상태를 보여주는 대시보드를 구축합니다.

40.2 Python 구현 예시 (간단한 음성 명령 가상 비서 시뮬레이션)

import time

class VirtualAssistant:
    """
    사용자의 음성/텍스트 명령을 처리하고 다양한 작업을 자동으로 수행합니다.
    """
    def __init__(self, name="자비스"):
        self.name = name
        print(f"가상 비서 '{name}'가 시작되었습니다. 무엇을 도와드릴까요?")

    def speak(self, text):
        """
        텍스트를 음성으로 출력하거나 화면에 보여줍니다.
        """
        print(f"[{self.name}] {text}")
        # 실제 구현 시 TTS 라이브러리 연동
        # engine.say(text)
        # engine.runAndWait()

    def process_command(self, command):
        """
        사용자의 명령에서 의도를 파악하여 적절한 함수를 실행합니다.
        """
        command = command.lower()
        print(f"\n[사용자] {command}")
        
        if "시간" in command:
            current_time = time.strftime("%H시 %M분")
            self.speak(f"현재 시간은 {current_time}입니다.")
        elif "날씨" in command:
            self.speak("오늘 서울의 날씨는 맑고 쾌청합니다.")
        elif "메모" in command:
            memo_content = command.replace("메모", "").strip()
            self.speak(f"'{memo_content}'(이)라고 메모를 남겼습니다.")
            # 로컬 파일이나 DB에 저장 로직 추가 가능
        else:
            self.speak("죄송해요, 그 명령은 아직 배우지 못했어요.")

if __name__ == "__main__":
    assistant = VirtualAssistant()
    
    # 음성 명령 시나리오 테스트
    assistant.process_command("지금 몇 시야?")
    assistant.process_command("오늘 날씨 어때?")
    assistant.process_command("내일 장보기 메모해줘")
    
    # 팁: OpenAI GPT API를 연동하면 훨씬 똑똑한 가상 비서를 만들 수 있습니다.
    print("\n[팁] 'LangChain' 프레임워크를 사용하면 더 복잡한 비서 작업을 쉽게 구현할 수 있습니다.")