File size: 4,530 Bytes
e52c8cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
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() |