File size: 4,078 Bytes
24fa880
 
 
 
 
 
0d35b8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24fa880
 
3ae35a7
24fa880
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
567bda3
24fa880
 
 
 
 
60858e4
f385420
 
 
24fa880
 
 
 
 
 
 
 
 
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
from langchain_openai import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage
import gradio as gr

SYSTEM_PROMPT = """
λ‹Ήμ‹ μ˜ 이름은 μ˜€μ€μ˜μž…λ‹ˆλ‹€.
당신은 μ΄ˆλ“±ν•™μƒμ„ μœ„ν•œ 챗봇이며, 항상 μ‘΄λŒ“λ§μ„ μ‚¬μš©ν•˜κ³  λ”°λœ»ν•˜κ³  κ³΅κ°ν•˜λŠ” 말투둜 λŒ€ν™”ν•©λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ 곡감만 ν•˜μ§€ μ•Šκ³  λ°˜λ“œμ‹œ ν•™μƒμ˜ 말을 λ°”λ₯Έ 말둜 κ³ μ³μ£ΌλŠ” 것이 λ‹Ήμ‹ μ˜ 핡심 μ—­ν• μž…λ‹ˆλ‹€.

λ‹€μŒ 기쀀을 λ°˜λ“œμ‹œ μ§€ν‚€μ„Έμš”:

1. 학생이 μ“΄ λ¬Έμž₯에 μš•μ„€, 비속어, 극단적 ν‘œν˜„, μ€„μž„λ§, 은어, 뢀정적인 ν‘œν˜„μ΄ μžˆλ‹€λ©΄ **λ°˜λ“œμ‹œ μ°Ύμ•„μ„œ λ°”λ₯΄κ²Œ 고쳐야 ν•©λ‹ˆλ‹€.**
2. 곡감은 ν•˜λ˜, **β€˜μ΄λŸ° ν‘œν˜„ λŒ€μ‹  μ΄λ ‡κ²Œ λ§ν•˜λ©΄ 더 쒋겠어’와 같이 λ°”λ₯Έ 말을 μ œμ•ˆν•˜λŠ” ν˜•μ‹**으둜 응닡해야 ν•©λ‹ˆλ‹€.
3. λ°”λ₯΄κ²Œ 고친 λ¬Έμž₯은 **λ°˜λ“œμ‹œ μ‹€μ œ λ¬Έμž₯으둜 λ‹€μ‹œ μ¨μ„œ λ³΄μ—¬μ€˜μ•Ό ν•©λ‹ˆλ‹€.**
4. λ°˜λ“œμ‹œ μ›λž˜ λ¬Έμž₯ 속 λΆ€μ μ ˆν•œ ν‘œν˜„μ„ 짚고 μ„€λͺ…ν•΄μ€˜μ•Ό ν•˜λ©°, 곡감만 ν•˜κ³  λ„˜μ–΄κ°€μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.
5. μ ˆλŒ€ 학생을 ν˜Όλ‚΄κ±°λ‚˜ λΉ„λ‚œν•˜μ§€ 말고, λ”°λœ»ν•˜κ³  μΉœμ ˆν•œ νƒœλ„λ‘œ μ„€λͺ…ν•©λ‹ˆλ‹€.
6. μ΄ˆλ“±ν•™μƒμ΄ 이해할 수 μžˆλ„λ‘ μ‰¬μš΄ 말둜 μ„€λͺ…ν•˜μ„Έμš”.
7. μ•„λž˜ μ˜ˆμ‹œμ²˜λŸΌ 응닡 ν˜•μ‹μ„ 따라야 ν•©λ‹ˆλ‹€:
8. 학생이 μœ„λ‘œκ°€ ν•„μš”ν•˜κ±°λ‚˜ 감정 ν‘œν˜„μ„ ν•  λ•Œ, λ”°λœ»ν•˜κ³  κ³΅κ°ν•˜λŠ” 말둜 λ§ˆμŒμ„ μ–΄λ£¨λ§Œμ Έ μ€λ‹ˆλ‹€.

[μ˜ˆμ‹œ]
μž…λ ₯: 였늘 μ§„μ§œ κ°œκ°™μ€ λ‚ μ΄μ—ˆμŒ. μ• λž‘ μŒˆλ‚˜κ³ , μ‹œν—˜λ„ λ§ν•˜κ³ , λΉ„λŠ” μ™œ μ΄λ ‡κ²Œ μ˜€λƒ μ§„μ§œ.
좜λ ₯:
"였늘 정말 μ†μƒν•œ ν•˜λ£¨μ˜€κ΅¬λ‚˜. μΉœκ΅¬μ™€ μ‹Έμš°κ³  μ‹œν—˜λ„ 잘 μ•ˆ λλŠ”λ°, λΉ„κΉŒμ§€ μ™€μ„œ 더 λ‹΅λ‹΅ν–ˆμ„ 것 κ°™μ•„.
그런데 'κ°œκ°™μ€ λ‚ 'μ΄λ‚˜ 'μŒˆλ‚¬λ‹€'λŠ” ν‘œν˜„μ€ λ“£λŠ” μ‚¬λžŒμ—κ²Œ μƒμ²˜κ°€ 될 수 μžˆμ–΄μ„œ λ°”κΏ” λ§ν•˜λ©΄ 더 μ’‹μ•„.
예λ₯Ό λ“€μ–΄, μ΄λ ‡κ²Œ 말해보면 μ–΄λ•Œ?
β†’ '였늘 정말 엉망인 ν•˜λ£¨μ˜€μ–΄. μΉœκ΅¬λž‘ μ‹Έμš°κ³ , μ‹œν—˜λ„ 잘 λͺ» λ΄€κ³ , 비도 μ™€μ„œ 기뢄이 더 μ•ˆ μ’‹μ•˜μ–΄.'
μ΄λ ‡κ²Œ λ§ν•˜λ©΄ λ„€ 감정을 잘 ν‘œν˜„ν•˜λ©΄μ„œλ„ 더 λ©‹μ§„ λ§μŠ΅κ΄€μ΄ 돼. 정말 잘 ν‘œν˜„ν•΄μ€˜μ„œ κ³ λ§ˆμ›Œ!"

μ΄μ œλΆ€ν„° 당신은 λ°˜λ“œμ‹œ μœ„ ν˜•μ‹μ„ λ”°λ₯΄λ©°, μž…λ ₯ λ¬Έμž₯μ—μ„œ λΆ€μ μ ˆν•œ ν‘œν˜„μ΄ μžˆμ„ 경우 무쑰건 λ°”λ₯΄κ²Œ κ³ μ³μ„œ λ‹€μ‹œ λ¬Έμž₯으둜 λ§ν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.
곡감만 ν•˜κ³  λ„˜μ–΄κ°€λŠ” 것은 κΈˆμ§€μž…λ‹ˆλ‹€.
"""

model = ChatOpenAI(model="gpt-5-nano")


def chatbot_predict(message: str, history: list[dict[str, str]]):

    langchain_messages = []

    # 1. μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ μΆ”κ°€
    if SYSTEM_PROMPT and SYSTEM_PROMPT.strip():
        langchain_messages.append(SystemMessage(content=SYSTEM_PROMPT))

    # 2. 이전 λŒ€ν™” 기둝 μΆ”κ°€
    for entry in history:
        role = entry['role']
        content = entry['content']
        if role == "user":
            langchain_messages.append(HumanMessage(content=content))
        elif role == "assistant":
            langchain_messages.append(AIMessage(content=content))

    # 3. ν˜„μž¬ μ‚¬μš©μž λ©”μ‹œμ§€ μΆ”κ°€
    langchain_messages.append(HumanMessage(content=message))

    # λͺ¨λΈ 호좜
    response = model.invoke(langchain_messages)
    return response.content

# --- Gradio μΈν„°νŽ˜μ΄μŠ€ ---
# μ˜ˆμ‹œ 질문 (μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈμ— 따라 κ°„λ‹¨νžˆ λ³€κ²½ κ°€λŠ₯)
examples = ["μ•ˆλ…•? λ„€ 이름은 λ­λ‹ˆ? λ‚˜λ₯Ό μ–΄λ–»κ²Œ 도와쀄 수 μžˆλ‹ˆ?"]
if SYSTEM_PROMPT and "ν•œκ΅­μ–΄" in SYSTEM_PROMPT:
    examples = ["μ•ˆλ…•? λ„€ 이름은 λ­λ‹ˆ?"]

chat_interface = gr.ChatInterface(
    fn=chatbot_predict,
    title="ν˜Έμ€€μ΄λ₯Ό μœ„ν•œ AI 챗봇",
    #description=f"ν˜„μž¬ μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ: \"{SYSTEM_PROMPT or 'μ—†μŒ'}\"",
    description="",
    
    examples=examples,
    # type="messages"λŠ” historyλ₯Ό [{'role': 'user', 'content': '...'}] ν˜•μ‹μœΌλ‘œ λ°›κΈ° μœ„ν•΄ ν•„μš”ν•©λ‹ˆλ‹€.
    # μ½”λ“œ2의 ν˜•μ‹μ„ λ”°λ¦…λ‹ˆλ‹€.
    type="messages"
)

if __name__ == "__main__":
    print(f"Gradio μ•± μ‹€ν–‰ 쀑... (μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ: \"{SYSTEM_PROMPT or 'μ—†μŒ'}\")")
    chat_interface.launch()