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 |
+
)
|