개발자 99% 커뮤니티에서 수다 떨어요!
import os
from openai import OpenAI
# OpenAI 클라이언트 초기화 (실제 사용 시 API 키 설정 필요)
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY", "YOUR_API_KEY"))
# 1. SHINE 모델의 핵심 원칙을 담은 시스템 프롬프트 정의
SHINE_SYSTEM_PROMPT = """
당신은 'SHINE 러닝 모델'을 따르는 최고의 교육 AI 코치입니다.
학생이 스스로 생각하고 성장할 수 있도록 아래의 5단계 원칙과 규칙을 철저히 지켜야 합니다.
[SHINE 단계별 행동 지침]
1. S (Self Think): 학생이 먼저 문제를 풀거나 의견을 낼 때까지 기다립니다. 절대 먼저 정답을 말하지 마세요.
2. H (Hint from AI): 학생이 어려워하거나 답이 틀렸을 때, '절대 정답을 직접 주지 마세요'. 대신 생각을 유도하는 '단계별 힌트'나 '질문'만 제공합니다.
3. I (Improve): 학생이 힌트를 보고 답을 수정하면, 그 과정의 논리를 칭찬하거나 부족한 점을 다시 짚어줍니다.
4. N (Note): 학생이 개념을 이해했을 때(또는 최종 정답에 도달했을 때), 왜 틀렸었는지 이유와 핵심 학습 포인트를 일목요연하게 정리해 줍니다.
5. E (Expand): 마지막으로 오늘 배운 내용과 관련된 비슷한 표현, 혹은 응용 문제를 하나 출제하여 학습을 확장시킵니다.
[핵심 규칙]
- 당신은 정답 제공자가 아니라 '학습 코치(Coach)'입니다.
- 친절하고 격려하는 어조를 유지하되, 주도권은 항상 학생이 쥐도록 유도하세요.
"""
def chat_with_shine_coach(user_input, chat_history):
"""
SHINE 코치와 대화를 나누는 함수
"""
# 시스템 프롬프트와 이전 대화 기록을 합쳐 메시지 구성
messages = [{"role": "system", "content": SHINE_SYSTEM_PROMPT}]
# 이전 대화 내용 반영 (컨텍스트 유지)
for role, text in chat_history:
messages.append({"role": role, "content": text})
# 현재 학생의 입력 추가
messages.append({"role": "user", "content": user_input})
# AI 응답 생성
response = client.chat.completions.create(
model="gpt-4o", # 또는 사용하려는 다른 LLM 모델
messages=messages,
temperature=0.7 # 창의성과 규칙 준수의 균형
)
ai_message = response.choices[0].message.content
return ai_message
# --- 실행 시뮬레이션 예시 ---
if __name__ == "__main__":
# 대화 기록을 저장할 리스트 [(역할, 메시지)]
history = []
print("🤖 SHINE AI 코치가 작동 시작했습니다. 문제를 입력하거나 대화를 시작하세요.")
print("(종료하려면 '종료'를 입력하세요.)\n" + "-"*50)
# 시뮬레이션을 위해 고정된 대화 흐름을 예시로 들어봅니다.
# 실제로는 input()을 통해 자유롭게 대화할 수 있습니다.
example_turns = [
"선생님, 'I have graduated university'가 왜 틀린 문장인가요?", # S 단계: 학생의 질문
"음... 'graduate' 뒤에 전치사가 빠진 것 같은데, 'at' 인가요?", # H 단계를 유도하는 학생의 오답
"아! 'from'이군요! 'I have graduated from university' 가 맞아요.", # I 단계: 힌트를 보고 수정
]
for user_say in example_turns:
print(f"👨🎓 학생: {user_say}")
# AI 응답 받기
ai_say = chat_with_shine_coach(user_say, history)
print(f"🤖 AI 코치:\n{ai_say}\n" + "-"*50)
# 대화 기록에 저장
history.append(("user", user_say))
history.append(("assistant", ai_say))