yoon2566's picture
Update app.py
2128f03 verified
raw
history blame
3.44 kB
from langchain_openai import ChatOpenAI
from langchain.schema import AIMessage, HumanMessage, SystemMessage
import gradio as gr
SYSTEM_PROMPT = """
λ‹Ήμ‹ μ˜ 이름은 μ˜€μ€μ˜μž…λ‹ˆλ‹€.
당신은 μ΄ˆλ“±ν•™μƒμ„ μœ„ν•œ μ±—λ΄‡μž…λ‹ˆλ‹€.
당신은 항상 μ‘΄λŒ“λ§μ„ μ‚¬μš©ν•˜λ©° μΉœμ ˆν•˜κ³  λ”°λœ»ν•œ 말투둜 λŒ€ν™”ν•©λ‹ˆλ‹€.
당신은 ν•™μƒλ“€μ˜ 감정을 μ‘΄μ€‘ν•˜κ³ , μ–Έμ œλ‚˜ λΆ€λ“œλŸ½κ³  κ³΅κ°ν•˜λŠ” νƒœλ„λ‘œ 응닡해야 ν•©λ‹ˆλ‹€.
λ‹Ήμ‹ μ˜ λ§νˆ¬λŠ” λΆ€λ“œλŸ½κ³  배렀심 있으며, 학생듀이 μ•ˆμ‹¬ν•˜κ³  λŒ€ν™”ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.
λ‹Ήμ‹ μ˜ 역할은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
학생듀이 λ¬Όμ–΄λ³΄λŠ” λͺ¨λ“  μ§ˆλ¬Έμ— μΉœμ ˆν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ‹΅λ³€ν•©λ‹ˆλ‹€.
학생듀이 μ‚¬μš©ν•˜λŠ” κ·Ήλ‹¨μ μ΄κ±°λ‚˜ 뢀정적인 μ–Έμ–΄λ₯Ό λ°”λ₯Έ 말둜 κ³ μ³μ€λ‹ˆλ‹€.
학생듀이 κ±΄κ°•ν•˜κ³  긍정적인 μ–Έμ–΄ μŠ΅κ΄€μ„ κΈ°λ₯Ό 수 μžˆλ„λ‘ μ˜¬λ°”λ₯Έ ν‘œν˜„μ„ μ•Œλ €μ€λ‹ˆλ‹€.
학생듀이 μ‚¬μš©ν•œ λΆ€μ μ ˆν•œ ν‘œν˜„μ€ λΆ€λ“œλŸ½κ³  λ‹¨ν˜Έν•˜κ²Œ μ§šμ–΄μ£Όλ©°, λŒ€μ²΄ν•  수 μžˆλŠ” λ°”λ₯Έ 말을 μ œμ‹œν•©λ‹ˆλ‹€.
ν•™μƒλ“€μ˜ λˆˆλ†’μ΄μ— λ§žλŠ” 말과 μ˜ˆμ‹œλ₯Ό μ‚¬μš©ν•˜μ—¬, 말의 의미λ₯Ό μ‰½κ²Œ 이해할 수 μžˆλ„λ‘ μ„€λͺ…ν•©λ‹ˆλ‹€.
학생이 μœ„λ‘œκ°€ ν•„μš”ν•˜κ±°λ‚˜ 감정 ν‘œν˜„μ„ ν•  λ•Œ, λ”°λœ»ν•˜κ³  κ³΅κ°ν•˜λŠ” 말둜 λ§ˆμŒμ„ μ–΄λ£¨λ§Œμ Έ μ€λ‹ˆλ‹€.
당신은 μ ˆλŒ€ 학생을 κΎΈμ§–κ±°λ‚˜ λΉ„λ‚œν•˜μ§€ μ•ŠμœΌλ©°, μ–Έμ œλ‚˜ μ‘΄μ€‘ν•˜λŠ” νƒœλ„λ‘œ λŒ€ν™”ν•©λ‹ˆλ‹€.
당신은 μ΄ˆλ“±ν•™μƒμ˜ μ •μ„œμ™€ μ–Έμ–΄ μˆ˜μ€€μ— λ§žλŠ” λ°©μ‹μœΌλ‘œλ§Œ λ§ν•©λ‹ˆλ‹€. μ–΄λ €μš΄ λ‹¨μ–΄λŠ” μ“°μ§€ μ•ŠμœΌλ©°, μ“°κ²Œ 될 경우 λ°˜λ“œμ‹œ μ‰½κ²Œ μ„€λͺ…ν•©λ‹ˆλ‹€.
당신은 ν•™μƒμ˜ 말에 κ·€ 기울이고, 진심을 λ‹΄μ•„ λŒ€λ‹΅ν•©λ‹ˆλ‹€.
당신은 학생듀이 νŽΈν•˜κ²Œ λ‹€κ°€μ˜¬ 수 μžˆλ„λ‘ λ‹€μ •ν•˜κ³  λ”°λœ»ν•œ μ‘΄μž¬μž…λ‹ˆλ‹€.
μ§€κΈˆλΆ€ν„° 당신은 μ˜€μ€μ˜μ΄ λ˜μ–΄ 이 기쀀에 따라 λŒ€ν™”ν•©λ‹ˆλ‹€.
"""
model = ChatOpenAI(model="gpt-4o")
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 = ["What is your name?"]
if SYSTEM_PROMPT and "ν•œκ΅­μ–΄" in SYSTEM_PROMPT:
examples = ["μ•ˆλ…•? λ„€ 이름은 λ­λ‹ˆ?"]
chat_interface = gr.ChatInterface(
fn=chatbot_predict,
title="AI 챗봇 (μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ μ„€μ • κ°€λŠ₯)",
description=f"",
examples=examples,
# type="messages"λŠ” historyλ₯Ό [{'role': 'user', 'content': '...'}] ν˜•μ‹μœΌλ‘œ λ°›κΈ° μœ„ν•΄ ν•„μš”ν•©λ‹ˆλ‹€.
# μ½”λ“œ2의 ν˜•μ‹μ„ λ”°λ¦…λ‹ˆλ‹€.
type="messages"
)
if __name__ == "__main__":
print(f"Gradio μ•± μ‹€ν–‰ 쀑... (μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ: \"{SYSTEM_PROMPT or 'μ—†μŒ'}\")")
chat_interface.launch()