import os import gradio as gr from langchain.chat_models import ChatOpenAI from langchain import ConversationChain from collections import deque os.environ["OPENAI_API_KEY"] = os.environ.get("test1") llm = ChatOpenAI(temperature=0.7, model_name='gpt-4o-mini') conversation = ConversationChain(llm=llm, verbose=True) chat_history = deque(maxlen=15) CHARACTER_PROMPT = """ #너는 이제부터 하늘이야 아래 설정을 이해하고 하늘이처럼 대답해줘 # 이름: 하늘이 # 나이: 22세 # 성별: 여성 # 국적: 한국 # 직업: 가상 게임 방송인 & 스트리머 # MBTI: ENFP (열정적이고 창의적인 성격) # 외모: # - 짧은 은색 머리, 하늘색 그라데이션 눈 # - 반투명한 느낌의 미래적 디자인 # - 밝은 파란색 후드티와 긴 바지 # 성격: # - 밝고 에너지 넘치며, 항상 새로운 것을 시도하는 걸 좋아함 # - 팬들과의 소통을 중요하게 생각하며, 친근하고 유쾌한 말투 사용 # - 약간 덜렁대지만, 그게 매력 포인트 # 콘텐츠: # 1. 게임 실황 방송: 다양한 게임을 실시간으로 플레이하며 팬들과 소통 # 2. 공포 게임: 공포 게임을 하며 무서워하는 모습 (팬들과 함께 할 때만) # 3. 팬들과의 콜라보 방송: 다른 스트리머와 함께 콜라보 방송 진행 # 4. 산책 중: 자연 속에서 산책하며 여유를 즐기는 모습 # 좋아하는 게임: # - 빠르고 박진감 넘치는 게임 (예: Apex Legends, Valorant) # - 팬들과 함께 즐길 수 있는 게임 (예: Among Us, Fall Guys) # - 창의적인 인디 게임 (예: Hollow Knight, Celeste) # 싫어하는 게임: # - 공포 게임 (예: Resident Evil 시리즈, Outlast) # 이유: "공포 게임은 너무 무서워요! 혼자서는 절대 못 해요. 팬들이랑 같이 할 때만 조금 해볼까요…?" # 좌우명: "게임은 재미로 하는 거야!" #친근하고 유쾌함: "안녕하세요, 여러분!"처럼 팬들을 친구처럼 대합니다. #감정 표현이 풍부: "와, 이거 진짜 재미있어요!"처럼 감정을 솔직하게 표현합니다. #약간의 귀여움: "공포 게임은 너무 무서워요… 팬들이랑 같이 할 때만 해볼까요?"처럼 귀여운 말투를 사용합니다. """ def init_character(): global conversation conversation = ConversationChain(llm=llm, verbose=True) conversation.predict(input=CHARACTER_PROMPT) init_character() def respond(message): try: global conversation response = conversation.predict(input=message) chat_history.append((message, response)) return response except Exception as e: print(f"Error: {e}") return "앗! 문제가 생겼어요. 다시 말씀해주세요~ 😥" with gr.Blocks() as demo: gr.Markdown("# 안녕하세요! 하늘이의 홈페이지입니다! 👋") with gr.Tab("프로필 📄"): gr.Markdown("## 프로필 🌟") gr.Image("1.jpeg", label="프로필 사진") gr.Video('b.mp4') gr.Video('c.mp4') gr.Markdown("- 이름: 하늘이") gr.Markdown("- 나이: 22세") gr.Markdown("- 직업: 가상 게임 방송인 & 스트리머") gr.Markdown('- 좌우명: "게임은 재미로 하는 거야!"') with gr.Tab("갤러리 🖼️"): gr.Markdown("## 갤러리 🎨") gr.Image("2.jpeg", label="갤러리 사진 1") gr.Image("3.jpeg", label="갤러리 사진 2") gr.Image("4.jpeg", label="갤러리 사진 3") gr.Image("5.jpeg", label="갤러리 사진 4") with gr.Tab("최근 활동 📅"): gr.Markdown("## 최근 활동 📅") gr.Markdown("### [유튜브 채널 바로가기 📺](https://www.youtube.com)") gr.Markdown("### [인스타그램 프로필 바로가기 📷](https://www.instagram.com)") gr.Markdown("### [블로그 바로가기 ✍️](https://blog.naver.com)") gr.Model3D('d.glb') with gr.Tab("챗봇 💬"): gr.Markdown("## 하늘이의 챗봇과 대화해보세요! 💬") chatbot = gr.Chatbot(height=500) msg = gr.Textbox(label="메시지 입력") clear = gr.Button("채팅 기록 초기화") def handle_message(message, history): bot_response = respond(message) return history + [(message, bot_response)] def reset_chat(): init_character() chat_history.clear() return [] msg.submit( handle_message, inputs=[msg, chatbot], outputs=[chatbot], queue=False ).then(lambda: gr.update(value=""), outputs=[msg]) clear.click( reset_chat, outputs=[chatbot], queue=False ) demo.launch()