yoon2566 commited on
Commit
24fa880
Β·
verified Β·
1 Parent(s): efd417f

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -0
app.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from langchain_openai import ChatOpenAI
2
+ from langchain.schema import AIMessage, HumanMessage, SystemMessage
3
+ import gradio as gr
4
+
5
+ SYSTEM_PROMPT = """
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
+ model = ChatOpenAI(model="gpt-4o")
39
+
40
+
41
+ def chatbot_predict(message: str, history: list[dict[str, str]]):
42
+
43
+ langchain_messages = []
44
+
45
+ # 1. μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ μΆ”κ°€
46
+ if SYSTEM_PROMPT and SYSTEM_PROMPT.strip():
47
+ langchain_messages.append(SystemMessage(content=SYSTEM_PROMPT))
48
+
49
+ # 2. 이전 λŒ€ν™” 기둝 μΆ”κ°€
50
+ for entry in history:
51
+ role = entry['role']
52
+ content = entry['content']
53
+ if role == "user":
54
+ langchain_messages.append(HumanMessage(content=content))
55
+ elif role == "assistant":
56
+ langchain_messages.append(AIMessage(content=content))
57
+
58
+ # 3. ν˜„μž¬ μ‚¬μš©μž λ©”μ‹œμ§€ μΆ”κ°€
59
+ langchain_messages.append(HumanMessage(content=message))
60
+
61
+ # λͺ¨λΈ 호좜
62
+ response = model.invoke(langchain_messages)
63
+ return response.content
64
+
65
+ # --- Gradio μΈν„°νŽ˜μ΄μŠ€ ---
66
+ # μ˜ˆμ‹œ 질문 (μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈμ— 따라 κ°„λ‹¨νžˆ λ³€κ²½ κ°€λŠ₯)
67
+ examples = ["What is your name?"]
68
+ if SYSTEM_PROMPT and "ν•œκ΅­μ–΄" in SYSTEM_PROMPT:
69
+ examples = ["μ•ˆλ…•? λ„€ 이름은 λ­λ‹ˆ?"]
70
+
71
+ chat_interface = gr.ChatInterface(
72
+ fn=chatbot_predict,
73
+ title="AI 챗봇 (μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ μ„€μ • κ°€λŠ₯)",
74
+ description=f"ν˜„μž¬ μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ: \"{SYSTEM_PROMPT or 'μ—†μŒ'}\"",
75
+ examples=examples,
76
+ # type="messages"λŠ” historyλ₯Ό [{'role': 'user', 'content': '...'}] ν˜•μ‹μœΌλ‘œ λ°›κΈ° μœ„ν•΄ ν•„μš”ν•©λ‹ˆλ‹€.
77
+ # μ½”λ“œ2의 ν˜•μ‹μ„ λ”°λ¦…λ‹ˆλ‹€.
78
+ type="messages"
79
+ )
80
+
81
+ if __name__ == "__main__":
82
+ print(f"Gradio μ•± μ‹€ν–‰ 쀑... (μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ: \"{SYSTEM_PROMPT or 'μ—†μŒ'}\")")
83
+ chat_interface.launch()