Files
exAichatbot_agent/exAiChatBot-chatbot2.0-agent/scripts/handlers/greeting_handler.py
T
Macbook 4b86b2a660 Agent 2.0 exdev 서버 배포 스택
- server-dev start/stop/deploy 및 Gitea push 자동 배포
- local-dev 로컬 개발 환경

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-21 22:57:30 +09:00

133 lines
4.3 KiB
Python

"""
인사/종료 응답 핸들러
──────────────────────
인사, 종료 의도에 대한 특별 응답 생성
"""
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}")