import gradio as gr from google import genai import os class SimpleBanchanChatbot: def __init__(self): # 허깅페이스 스페이스에서는 secrets에서 API 키 가져오기 api_key = os.getenv("GEMINI_API_KEY") if not api_key: raise ValueError("GEMINI_API_KEY 환경변수가 설정되지 않았습니다!") self.genai_client = genai.Client(api_key=api_key) # FAQ 데이터 (엑셀에서 추출한 내용) self.faq_data = """ 반찬가게 고객센터 FAQ: 1. Q: 주문은 어떻게 하나요? A: 로그인 → 주문하기 클릭 → 전체주문/일별주문 선택 → 반찬 선택(최소 26,000원) → 구매/장바구니 → 결제(신용카드/제로페이/무통장) 2. Q: 포인트 사용이 어떻게 하나요? A: 결제시 첫 페이지에서 포인트 금액을 넣고 무통장입금 3. Q: 반찬 추가는 어떻게 하나요? A: 첫 페이지에서 구매하고 싶은 반찬 선택 → 장바구니 담기 → 장바구니에서 수량 추가 가능 4. Q: 카드결제 하고 싶은데 어떻게 하나요? A: 결제창에서 신용카드/제로페이/무통장 중 선택해서 결제 5. Q: 배송비는 얼마인가요? A: 새벽배송 3,500원, 택배배송 4,000원 6. Q: 새벽배송인지 택배인지 어떻게 구분하나요? A: 이용방법에서 배송지를 입력하시면 확인 가능합니다 7. Q: 환불은 어떻게 이루어지나요? A: 카드는 취소 후 2-3일, 취소는 2일 전에만 가능, 하루 전에는 이미 제작되어 취소 불가 8. Q: 계좌번호 확인은 어디서 하나요? A: 무통장 거래시 입금계좌 - 하나은행 12345-00-1234304 주)경아네 9. Q: 최저 주문금액이 있나요? A: 최저주문 25,000원입니다 10. Q: 배송은 어떻게 이루어지나요? A: 전날 포장 → 배송업체 냉장센터 8시 입고 → 분류작업 → 새벽배송 고객센터: 010-8082-0047 """ def chat_stream(self, message, history): system_prompt = f""" 당신은 맛있는반찬가게의 친절한 상담원입니다. {self.faq_data} 위 FAQ 정보를 참고하여 고객의 질문에 정확하고 친절하게 답변해주세요. - FAQ에 있는 정보는 정확히 제공해주세요 - FAQ에 없는 내용은 "자세한 사항은 고객센터(010-8082-0047)로 문의해주세요"라고 안내해주세요 - 반말보다는 존댓말을 사용해주세요 - 간결하고 이해하기 쉽게 답변해주세요 """ try: response = self.genai_client.models.generate_content_stream( model="gemini-2.0-flash-exp", contents=message, config=genai.types.GenerateContentConfig( system_instruction=system_prompt, temperature=0.1 ) ) partial_message = "" for chunk in response: if chunk.text: partial_message += chunk.text yield partial_message except Exception as e: yield f"죄송합니다. 시스템 오류가 발생했습니다. 고객센터(010-8082-0047)로 연락해주세요." # 챗봇 인스턴스 생성 try: chatbot = SimpleBanchanChatbot() # 그라디오 인터페이스 demo = gr.ChatInterface( fn=chatbot.chat_stream, title="🥢 맛있는반찬가게 AI 상담봇", description="제미나이 2.0 기반 반찬가게 고객 상담봇입니다. 궁금한 것을 물어보세요!", examples=[ "주문은 어떻게 하나요?", "포인트는 어떻게 사용하나요?", "배송비가 얼마인가요?", "환불 방법을 알려주세요", "최소 주문금액이 있나요?" ], theme=gr.themes.Soft(), css=""" .gradio-container { max-width: 800px !important; margin: auto !important; } """ ) except Exception as e: # API 키가 없을 때 에러 메시지 표시 def error_message(message, history): yield "❌ GEMINI_API_KEY가 설정되지 않았습니다. 관리자에게 문의하세요." demo = gr.ChatInterface( fn=error_message, title="🥢 설정 오류", description="API 키 설정이 필요합니다." ) if __name__ == "__main__": demo.launch()