Update app.py
Browse files
app.py
CHANGED
|
@@ -4,48 +4,94 @@ import os
|
|
| 4 |
|
| 5 |
class SimpleBanchanChatbot:
|
| 6 |
def __init__(self):
|
| 7 |
-
|
| 8 |
-
api_key = os.getenv("GEMINI_API_KEY")
|
| 9 |
-
if not api_key:
|
| 10 |
-
raise ValueError("GEMINI_API_KEY ํ๊ฒฝ๋ณ์๊ฐ ์ค์ ๋์ง ์์์ต๋๋ค!")
|
| 11 |
-
|
| 12 |
-
self.genai_client = genai.Client(api_key=api_key)
|
| 13 |
|
| 14 |
-
#
|
| 15 |
self.faq_data = """
|
| 16 |
๋ฐ์ฐฌ๊ฐ๊ฒ ๊ณ ๊ฐ์ผํฐ FAQ:
|
| 17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
1. Q: ์ฃผ๋ฌธ์ ์ด๋ป๊ฒ ํ๋์?
|
| 19 |
-
A: ๋ก๊ทธ์ธ โ ์ฃผ๋ฌธํ๊ธฐ ํด๋ฆญ โ
|
| 20 |
|
| 21 |
-
2. Q:
|
| 22 |
-
A:
|
| 23 |
|
| 24 |
3. Q: ๋ฐ์ฐฌ ์ถ๊ฐ๋ ์ด๋ป๊ฒ ํ๋์?
|
| 25 |
A: ์ฒซ ํ์ด์ง์์ ๊ตฌ๋งคํ๊ณ ์ถ์ ๋ฐ์ฐฌ ์ ํ โ ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ โ ์ฅ๋ฐ๊ตฌ๋์์ ์๋ ์ถ๊ฐ ๊ฐ๋ฅ
|
| 26 |
|
| 27 |
-
|
| 28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
|
| 30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
A: ์๋ฒฝ๋ฐฐ์ก 3,500์, ํ๋ฐฐ๋ฐฐ์ก 4,000์
|
| 32 |
|
| 33 |
-
|
| 34 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
|
| 36 |
-
|
| 37 |
-
|
|
|
|
| 38 |
|
| 39 |
-
|
| 40 |
-
|
| 41 |
|
| 42 |
-
|
| 43 |
-
|
| 44 |
|
| 45 |
-
|
| 46 |
-
|
|
|
|
| 47 |
|
| 48 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49 |
"""
|
| 50 |
|
| 51 |
def chat_stream(self, message, history):
|
|
@@ -67,7 +113,7 @@ class SimpleBanchanChatbot:
|
|
| 67 |
contents=message,
|
| 68 |
config=genai.types.GenerateContentConfig(
|
| 69 |
system_instruction=system_prompt,
|
| 70 |
-
temperature=0.1
|
| 71 |
)
|
| 72 |
)
|
| 73 |
|
|
@@ -78,43 +124,35 @@ class SimpleBanchanChatbot:
|
|
| 78 |
yield partial_message
|
| 79 |
|
| 80 |
except Exception as e:
|
| 81 |
-
yield f"์ฃ์กํฉ๋๋ค. ์์คํ
์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ณ ๊ฐ์ผํฐ(010-8082-0047)๋ก ์ฐ๋ฝํด์ฃผ์ธ์."
|
| 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 |
-
except Exception as e:
|
| 109 |
-
# API ํค๊ฐ ์์ ๋ ์๋ฌ ๋ฉ์์ง ํ์
|
| 110 |
-
def error_message(message, history):
|
| 111 |
-
yield "โ GEMINI_API_KEY๊ฐ ์ค์ ๋์ง ์์์ต๋๋ค. ๊ด๋ฆฌ์์๊ฒ ๋ฌธ์ํ์ธ์."
|
| 112 |
-
|
| 113 |
-
demo = gr.ChatInterface(
|
| 114 |
-
fn=error_message,
|
| 115 |
-
title="๐ฅข ์ค์ ์ค๋ฅ",
|
| 116 |
-
description="API ํค ์ค์ ์ด ํ์ํฉ๋๋ค."
|
| 117 |
-
)
|
| 118 |
|
| 119 |
if __name__ == "__main__":
|
| 120 |
-
demo.launch(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
|
| 5 |
class SimpleBanchanChatbot:
|
| 6 |
def __init__(self):
|
| 7 |
+
self.genai_client = genai.Client(api_key=os.getenv("GEMINI_API_KEY"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
+
# ์์
์์ ์ถ์ถํ ๋ชจ๋ FAQ ๋ฐ์ดํฐ
|
| 10 |
self.faq_data = """
|
| 11 |
๋ฐ์ฐฌ๊ฐ๊ฒ ๊ณ ๊ฐ์ผํฐ FAQ:
|
| 12 |
|
| 13 |
+
== ๊ธฐ๋ณธ ์ ๋ณด ==
|
| 14 |
+
โข ๊ณ ๊ฐ์ผํฐ: 010-8082-0047
|
| 15 |
+
โข ์
๊ธ๊ณ์ข: ํ๋์ํ 12345-00-1234304 ์ฃผ)๊ฒฝ์๋ค
|
| 16 |
+
โข ์ต์ ์ฃผ๋ฌธ๊ธ์ก: 26,000์
|
| 17 |
+
|
| 18 |
+
== ์ฃผ๋ฌธ ๊ด๋ จ ==
|
| 19 |
1. Q: ์ฃผ๋ฌธ์ ์ด๋ป๊ฒ ํ๋์?
|
| 20 |
+
A: โ ๋ก๊ทธ์ธ โ โก ์ฃผ๋ฌธํ๊ธฐ ํด๋ฆญ โ โข ์ ์ฒด์ฃผ๋ฌธ ๋๋ ์ผ๋ณ์ฃผ๋ฌธ ํด๋ฆญ โ โฃ ๋์๊ณ ์ถ์ ๋ฐ์ฐฌ ํด๋ฆญ(์ต์ 26,000์) โ โค ๊ตฌ๋งค๋ฒํผ ๋ฐ ์ฅ๋ฐ๊ตฌ๋ ๋ฒํผ ํด๋ฆญ โ โฅ ๊ฒฐ์ ์ฐฝ์์ ์ ์ฉ์นด๋/์ ๋กํ์ด/๋ฌดํต์ฅ ์ค ์ ํํ์ฌ ๊ฒฐ์
|
| 21 |
|
| 22 |
+
2. Q: ์ฒซ์ฃผ๋ฌธ ๋ฐฉ๋ฒ์ด ๊ถ๊ธํด์
|
| 23 |
+
A: ์ฒซ๋ฐฉ๋ฌธ ๊ฐ์ฌํฉ๋๋ค. ์ด์ฉ๋ฐฉ๋ฒ๊ณผ ๋ฐฐ์ก์ง์ญ์ ํ์ธ โ ํ์๊ฐ์
ํ ๋ก๊ทธ์ธ โ ์ฃผ๋ฌธ์ฐฝ์์ ์ํ๋ ๋ฐ์ฐฌ ์ ํ โ ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ โ ๊ตฌ๋งค๋ฒํผ์ผ๋ก ๊ฒฐ์
|
| 24 |
|
| 25 |
3. Q: ๋ฐ์ฐฌ ์ถ๊ฐ๋ ์ด๋ป๊ฒ ํ๋์?
|
| 26 |
A: ์ฒซ ํ์ด์ง์์ ๊ตฌ๋งคํ๊ณ ์ถ์ ๋ฐ์ฐฌ ์ ํ โ ์ฅ๋ฐ๊ตฌ๋ ๋ด๊ธฐ โ ์ฅ๋ฐ๊ตฌ๋์์ ์๋ ์ถ๊ฐ ๊ฐ๋ฅ
|
| 27 |
|
| 28 |
+
== ๊ฒฐ์ ๊ด๋ จ ==
|
| 29 |
+
4. Q: ์นด๋๊ฒฐ์ ๋ ์ด๋ป๊ฒ ํ๋์?
|
| 30 |
+
A: ๊ฒฐ์ ์ฐฝ์์ ์ ์ฉ์นด๋/์ ๋กํ์ด/๋ฌดํต์ฅ ์ค ์ ํํด์ ๊ฒฐ์ ํ๋ฉด ๋ฉ๋๋ค
|
| 31 |
+
|
| 32 |
+
5. Q: ํฌ์ธํธ ์ฌ์ฉ์ ์ด๋ป๊ฒ ํ๋์?
|
| 33 |
+
A: ๊ฒฐ์ ์ ์ฒซ ํ์ด์ง์์ ํฌ์ธํธ ๊ธ์ก์ ์
๋ ฅํ๊ณ ๋ฌดํต์ฅ์
๊ธ์ผ๋ก ๊ฒฐ์
|
| 34 |
+
|
| 35 |
+
6. Q: ์ ๊ฒฐ์ ๋ ์ด๋ป๊ฒ ํ๋์?
|
| 36 |
+
A: ์ ๊ฒฐ์ ๋ 3๊ฐ์ง๋ก ๋๋ฉ๋๋ค - ์นด๋์ ๊ฒฐ์ , ์ ๋กํ์ด, ํ๊ธ๊ฒฐ์ . ์ ๊ฒฐ์ ํ ํํ์ด์ง ๊ฒ์๊ธ์ ๋จ๊ธฐ๊ฑฐ๋ ๊ณ ๊ฐ์ผํฐ๋ก ๋ฌธ์ ์ฃผ์๋ฉด ๋ฉ๋๋ค
|
| 37 |
|
| 38 |
+
7. Q: ๊ณ์ข๋ฒํธ ํ์ธ์ ์ด๋์ ํ๋์?
|
| 39 |
+
A: ๋ฌดํต์ฅ ๊ฑฐ๋์ ์
๊ธ๊ณ์ข๊ฐ ๋์ต๋๋ค. ํ๋์ํ 12345-00-1234304 ์ฃผ)๊ฒฝ์๋ค
|
| 40 |
+
|
| 41 |
+
8. Q: ๊ฒฐ์ ๊ฐ ์๋ผ์
|
| 42 |
+
A: ์ ์ฉ์นด๋ ๊ฒฐ์ ์๋ ์ ๊ณ ๊ฐ์ผํฐ(010-8082-0047)๋ก ์ฐ๋ฝ์ฃผ์ธ์
|
| 43 |
+
|
| 44 |
+
== ๋ฐฐ์ก ๊ด๋ จ ==
|
| 45 |
+
9. Q: ๋ฐฐ์ก๋น๋ ์ผ๋ง์ธ๊ฐ์?
|
| 46 |
A: ์๋ฒฝ๋ฐฐ์ก 3,500์, ํ๋ฐฐ๋ฐฐ์ก 4,000์
|
| 47 |
|
| 48 |
+
10. Q: ์๋ฒฝ๋ฐฐ์ก์ธ์ง ํ๋ฐฐ์ธ์ง ์ด๋ป๊ฒ ๊ตฌ๋ถํ๋์?
|
| 49 |
+
A: ์ด์ฉ๋ฐฉ๋ฒ์์ ๋ฐฐ์ก์ง๋ฅผ ์
๋ ฅํ์๋ฉด ํ์ธ ๊ฐ๋ฅํฉ๋๋ค
|
| 50 |
+
|
| 51 |
+
11. Q: ๋ฐฐ์ก์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์?
|
| 52 |
+
A: ์ ๋ ํฌ์ฅ โ ๋ฐฐ์ก์
์ฒด ๋์ฅ์ผํฐ 8์ ์
๊ณ โ ๋ถ๋ฅ ์์
โ ์๋ฒฝ๋ฐฐ์ก(2-7์)/ํ๋ฐฐ๋ฐฐ์ก(๋ค์๋ ํ๋ฃจ ์ค)
|
| 53 |
+
|
| 54 |
+
12. Q: ๋ฐ์ฐฌ์ด ์์ง ์์์ด์
|
| 55 |
+
A: ์ฃ์กํฉ๋๋ค. ๋ฐฐ์ก์
์ฒด์ ํ์ธ ํ ์ฐ๋ฝ๋๋ฆฌ๊ฒ ์ต๋๋ค
|
| 56 |
|
| 57 |
+
== ์ทจ์/ํ๋ถ ๊ด๋ จ ==
|
| 58 |
+
13. Q: ์ทจ์๋ ์ด๋ป๊ฒ ํ๋์?
|
| 59 |
+
A: ์ทจ์๋ 2์ผ ์ ์๋ง ๊ฐ๋ฅํฉ๋๋ค. ํ๋ฃจ ์ ์๋ ๋ฐ์ฐฌ์ด ์ด๋ฏธ ์ ์๋์ด ์ทจ์๊ฐ ์๋ฉ๋๋ค
|
| 60 |
|
| 61 |
+
14. Q: ํ๋ถ์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์?
|
| 62 |
+
A: ์นด๋๋ ์ทจ์ ํ ํ๋ถ๊น์ง 2-3์ผ ์์. ์นด๋์ทจ์๋ ๋ฌธ์ ๋จ๊ธฐ์๋ฉด ์ ๋ฆฝ๊ธ ํฌ์ธํธ๊ฐ ์นด๋์ทจ์๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค
|
| 63 |
|
| 64 |
+
15. Q: ๋ฐ์ฐฌ์ด ์ํ ๊ฒ ๊ฐ์์
|
| 65 |
+
A: ์ฃ์กํฉ๋๋ค. ๋ฐฐ์ก๊ณผ์ ์์ ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ๊ณ์ขํ๋ถ/์นด๋์ทจ์/์ ๋ฆฝ๊ธ ์ค ํธํ์ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ถํด๋๋ฆฌ๊ฒ ์ต๋๋ค
|
| 66 |
|
| 67 |
+
== ๋ฉ๋ด/์ํ ๊ด๋ จ ==
|
| 68 |
+
16. Q: ์ ๊ธฐ์ ๊ตฌ์ฑ์ ์ด๋ป๊ฒ ๋๋์?
|
| 69 |
+
A: ๊ณ ๊ฐ๋์ด ์ ํํ๊ธฐ ์ด๋ ค์ด ๋ถ์ ์ํด ๋ง๋ จ๋์์ต๋๋ค. ๊ตญ1๊ฐ + ๋ฐ์ฐฌ4๊ฐ (๋ฉ์ธ1๊ฐ, ์๋ธ1๊ฐ, ๋๋ฌผ ๋ฐ ๋ฐ์ฐฌ2๊ฐ)
|
| 70 |
|
| 71 |
+
17. Q: ๋ฐ์ฐฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ ์ด๋ป๊ฒ ๋๋์?
|
| 72 |
+
A: ๋ฐ์ฐฌ๋ช
์ ๋ง์ํด์ฃผ์๋ฉด ์๋ ค๋๋ฆฌ๊ฒ ์ต๋๋ค
|
| 73 |
+
|
| 74 |
+
18. Q: ๏ฟฝ๏ฟฝ์์ฑ๋ถ์ ์ ์ ์๋์?
|
| 75 |
+
A: ๊ฐ๋ฅํฉ๋๋ค. ๋ฐ์ฐฌ๋ช
์ ๋ง์ํด์ฃผ์๋ฉด ์์์ฑ๋ถ ์๋ ค๋๋ฆฝ๋๋ค
|
| 76 |
+
|
| 77 |
+
19. Q: ์์ฐ์ง๋ฅผ ์๊ณ ์ถ์ด์
|
| 78 |
+
A: ์์ฐ์งํ๋ฅผ ๋งํฌ๋ก ์ ๊ณตํด๋๋ฆฝ๋๋ค
|
| 79 |
+
|
| 80 |
+
== ์ด๋ฒคํธ/ํํ ๊ด๋ จ ==
|
| 81 |
+
20. Q: ์ด๋ฒคํธ๋ ์ด๋์ ๋ณด๋์?
|
| 82 |
+
A: ์ด๋ฒคํธ ์ฃผ๋ฌธ์ฐฝ์ด ๋ณ๋๋ก ์์ต๋๋ค
|
| 83 |
+
|
| 84 |
+
21. Q: ์๊ฐํ๋ฉด ํํ์ด ์๋์?
|
| 85 |
+
A: ์๊ฐํด์ฃผ์๋ฉด ๊ฐ์ฌํฉ๋๋ค. ์๊ฐํ์ ๋ถ๊ณผ ์๊ฐ๋ฐ์ ๋ถ ๋ชจ๋์๊ฒ ์๋น์ค์ฐฌ ๋๋ ํฌ์ธํธ ์ ๋ฆฝ๊ธ์ผ๋ก ํํ์ ๋๋ฆฝ๋๋ค
|
| 86 |
+
|
| 87 |
+
22. Q: ํ๊ธฐ ๋จ๊ธฐ๋ฉด ์ด๋ค ํํ์ด ์๋์?
|
| 88 |
+
A: ํ๊ธฐ๋ฅผ ๋จ๊ฒจ์ฃผ์๋ฉด 500ํฌ์ธํธ๋ฅผ ์ ๋ฆฝํด๋๋ฆฝ๋๋ค
|
| 89 |
+
|
| 90 |
+
== ๊ธฐํ ==
|
| 91 |
+
23. Q: ์ฃผ๋ฌธ ๋๋ฝ์ธ ๊ฒ ๊ฐ์์
|
| 92 |
+
A: ์ฃ์กํฉ๋๋ค. ํ์ธํด๋ณด๊ฒ ์ต๋๋ค. ์์ด๋๋ฅผ ์
๋ ฅํด์ฃผ์ธ์
|
| 93 |
+
|
| 94 |
+
๋ชจ๋ ๋ฌธ์์ฌํญ์ ๊ณ ๊ฐ์ผํฐ 010-8082-0047๋ก ์ฐ๋ฝ์ฃผ์ธ์.
|
| 95 |
"""
|
| 96 |
|
| 97 |
def chat_stream(self, message, history):
|
|
|
|
| 113 |
contents=message,
|
| 114 |
config=genai.types.GenerateContentConfig(
|
| 115 |
system_instruction=system_prompt,
|
| 116 |
+
temperature=0.1 # ์ผ๊ด๋ ๋ต๋ณ์ ์ํด ๋ฎ๊ฒ ์ค์
|
| 117 |
)
|
| 118 |
)
|
| 119 |
|
|
|
|
| 124 |
yield partial_message
|
| 125 |
|
| 126 |
except Exception as e:
|
| 127 |
+
yield f"์ฃ์กํฉ๋๋ค. ์์คํ
์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ณ ๊ฐ์ผํฐ(010-8082-0047)๋ก ์ฐ๋ฝํด์ฃผ์ธ์. ์ค๋ฅ: {str(e)}"
|
| 128 |
|
| 129 |
# ์ฑ๋ด ์ธ์คํด์ค ์์ฑ
|
| 130 |
+
chatbot = SimpleBanchanChatbot()
|
| 131 |
+
|
| 132 |
+
# ๊ทธ๋ผ๋์ค ์ธํฐํ์ด์ค
|
| 133 |
+
demo = gr.ChatInterface(
|
| 134 |
+
fn=chatbot.chat_stream,
|
| 135 |
+
title="๐ฅข ๋ง์๋๋ฐ์ฐฌ๊ฐ๊ฒ AI ์๋ด๋ด",
|
| 136 |
+
description="๊ฐ๋จํ๊ณ ๋น ๋ฅธ ๋ฐ์ฐฌ๊ฐ๊ฒ ์๋ด๋ด (์ ๋ฏธ๋์ด 2.0 + FAQ ๋ฐ์ดํฐ)",
|
| 137 |
+
examples=[
|
| 138 |
+
"์ฃผ๋ฌธ์ ์ด๋ป๊ฒ ํ๋์?",
|
| 139 |
+
"ํฌ์ธํธ๋ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์?",
|
| 140 |
+
"๋ฐฐ์ก๋น๊ฐ ์ผ๋ง์ธ๊ฐ์?",
|
| 141 |
+
"ํ๋ถ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ์ธ์",
|
| 142 |
+
"์ต์ ์ฃผ๋ฌธ๊ธ์ก์ด ์๋์?"
|
| 143 |
+
],
|
| 144 |
+
theme=gr.themes.Soft(),
|
| 145 |
+
css="""
|
| 146 |
+
.gradio-container {
|
| 147 |
+
max-width: 800px !important;
|
| 148 |
+
margin: auto !important;
|
| 149 |
+
}
|
| 150 |
+
"""
|
| 151 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 152 |
|
| 153 |
if __name__ == "__main__":
|
| 154 |
+
demo.launch(
|
| 155 |
+
server_name="0.0.0.0",
|
| 156 |
+
server_port=7860,
|
| 157 |
+
share=True
|
| 158 |
+
)
|