""" 인사/종료 응답 핸들러 ────────────────────── 인사, 종료 의도에 대한 특별 응답 생성 """ from typing import List, Dict, Any, Optional class GreetingHandler: """인사 및 종료 응답 생성기""" # 퀵 리플라이 템플릿 GREETING_QUICK_REPLIES = [ "통행료 조회", "하이패스 문의", "환불 신청", "휴게소 안내" ] FAREWELL_QUICK_REPLIES = [ "추가 문의하기", "처음으로", "상담 종료" ] def generate_greeting_response( self, query: str, matched_keywords: List[str], bot_id: Optional[str] = None ) -> Dict[str, Any]: """인사 응답 생성 Args: query: 원본 질문 matched_keywords: 매칭된 키워드 bot_id: 봇 ID Returns: 응답 딕셔너리 (answer, quick_replies 포함) """ answer = ( "안녕하세요! 한국도로공사 채팅상담 챗봇입니다. 😊\n\n" "고속도로 이용과 관련하여 궁금하신 점을 편하게 물어보세요.\n\n" "📌 자주 묻는 질문\n" "• 통행료 조회 및 환불\n" "• 하이패스 발급 및 사용법\n" "• 휴게소 및 편의시설 안내\n" "• 고속도로 소음/환경 민원\n\n" "무엇을 도와드릴까요?" ) return { "answer": answer, "matched_questions": [], "scores": [], "num_references": 0, "botId": bot_id, "intent": "greeting", "quick_replies": self.GREETING_QUICK_REPLIES, "rerank_info": { "used": False, "detail": "Greeting intent detected" } } def generate_farewell_response( self, query: str, matched_keywords: List[str], bot_id: Optional[str] = None ) -> Dict[str, Any]: """종료 인사 응답 생성""" # 감사 표현이 있는지 확인 thanks_keywords = ["감사", "고마워", "고맙", "도움"] has_thanks = any(kw in query for kw in thanks_keywords) if has_thanks: answer = ( "도움이 되셨다니 기쁩니다! 😊\n\n" "한국도로공사를 이용해 주셔서 감사합니다.\n" "궁금하신 점이 더 있으시면 언제든지 다시 찾아주세요.\n\n" "안전운전 하세요! 🚗" ) else: answer = ( "상담을 종료하시겠습니까?\n\n" "추가로 궁금하신 사항이 있으시면\n" "언제든지 질문해 주세요.\n\n" "한국도로공사를 이용해 주셔서 감사합니다. 😊" ) return { "answer": answer, "matched_questions": [], "scores": [], "num_references": 0, "botId": bot_id, "intent": "farewell", "quick_replies": self.FAREWELL_QUICK_REPLIES, "rerank_info": { "used": False, "detail": "Farewell intent detected" } } def generate_response( self, intent_name: str, query: str, matched_keywords: List[str], bot_id: Optional[str] = None ) -> Dict[str, Any]: """의도에 따른 응답 생성 (greeting, farewell만) Args: intent_name: "greeting" 또는 "farewell" query: 원본 질문 matched_keywords: 매칭된 키워드 bot_id: 봇 ID Returns: 응답 딕셔너리 """ if intent_name == "greeting": return self.generate_greeting_response(query, matched_keywords, bot_id) elif intent_name == "farewell": return self.generate_farewell_response(query, matched_keywords, bot_id) else: # complaint는 더 이상 여기서 처리하지 않음 (RAG 파이프라인으로) raise ValueError(f"Unknown intent: {intent_name}")