import logging
from .models import Quest
from datetime import timedelta
import openai, random
openai.api_key = "sk-proj-Mvq2HLSZo0FmHsOP49hcT3BlbkFJulzKwqczqk6uBZ0ID4wW"
logger = logging.getLogger(__name__)
keywords = {
'운동': ['exercise', 'workout', 'run', 'walk', 'weight training', 'stretch'],
'사회공헌': ['volunteer', 'donations', 'talent donation', 'mentorship', 'support'],
'자기개발': ['learn', 'skill', 'read', 'study', 'research'],
'명상': ['meditate', 'relax', 'breathe', 'mindfulness', 'meditation']
}
def determine_quest_type(quest_text):
for quest_type, words in keywords.items():
if any(word in quest_text.lower() for word in words):
return quest_type
return random.choice(list(keywords.keys())) # 기타가 아닌 랜덤으로 키워드 중 하나 선택
def determine_complete_time(quest_text):
time_keywords = {
'short': ['quick', 'short', 'few minutes', '10 minutes', '15 minutes'],
'medium': ['moderate', 'half an hour', '30 minutes', '45 minutes'],
'long': ['long', 'one hour', '1 hour', 'two hours', '2 hours']
}
for duration, words in time_keywords.items():
if any(word in quest_text.lower() for word in words):
if duration == 'short':
return timedelta(minutes=15)
elif duration == 'medium':
return timedelta(minutes=45)
elif duration == 'long':
return timedelta(hours=1, minutes=30)
return timedelta(minutes=30) # 기본값을 30분으로 설정
def generate_quests(user, diary):
hero_name = user.hero_name
diary_contents = diary.contents
quest_types = list(keywords.keys())
# 다섯 가지 키워드 중 랜덤으로 하나를 선택
selected_quest_type = random.choice(quest_types)
selected_keyword = random.choice(keywords[selected_quest_type])
# 답변 예시
example_responses = {
'운동': [
"30분 달리기",
"60분 웨이트트레이닝하기",
"20분 요가하기",
"10분 스트레칭하기"
],
'사회공헌': [
"120분 봉사하기",
"30분간 재능기부하기",
"1시간 동안 음식 나누기",
"기부를 위한 1시간 모금 활동"
],
'자기개발': [
"60분 파이썬 공부하기",
"30분 독서하기",
"45분 온라인 강의 듣기",
"새로운 기술 1시간 연습하기"
],
'명상': [
"15분 명상하기",
"30분 심호흡하기",
"20분 요가와 명상하기",
"10분 마음 챙김 연습하기"
]
}
example = random.choice(example_responses[selected_quest_type])
prompt = f"Create a quest related to {selected_quest_type} in korean for a hero named {hero_name} based on the following diary entry: {diary_contents}. The quest should realistically include elements such as {selected_keyword}. An example quest could be: '{example}'. Please generate one quest only."
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a quest generator for a hero."},
{"role": "user", "content": prompt}
],
max_tokens=500,
n=1, # 한 번에 하나의 퀘스트만 생성
temperature=0.7,
)
quests = response.choices
quest_objects = []
for quest in quests:
quest_text = quest['message']['content'].strip().split('\n')[0]
quest_type = determine_quest_type(quest_text)
complete_time = determine_complete_time(quest_text)
quest_object = Quest(contents=quest_text, user=user, type=quest_type, complete_time=complete_time)
quest_objects.append(quest_object)
# 로그에 생성된 퀘스트 출력
logger.debug(f"Generated quest for user {user.user_name}: {quest_objects}")
# 콘솔에 생성된 퀘스트 출력
for quest_object in quest_objects:
print(f"의뢰: {quest_object.contents}, 유형형: {quest_object.type}, Time: {quest_object.complete_time}")
return quest_objects
import logging
from .models import Quest
from datetime import timedelta
import openai, random
openai.api_key = "sk-proj-Mvq2HLSZo0FmHsOP49hcT3BlbkFJulzKwqczqk6uBZ0ID4wW"
logger = logging.getLogger(__name__)
keywords = {
'운동': ['exercise', 'workout', 'run', 'walk', 'weight training', 'stretch'],
'사회공헌': ['volunteer', 'donations', 'talent donation', 'mentorship', 'support'],
'자기개발': ['learn', 'skill', 'read', 'study', 'research'],
'명상': ['meditate', 'relax', 'breathe', 'mindfulness', 'meditation'],
'취미': ['your own hobby', 'paint', 'draw', 'music', 'play', 'sports']
}
def determine_quest_type(quest_text):
for quest_type, words in keywords.items():
if any(word in quest_text.lower() for word in words):
return quest_type
return '기타'
def determine_complete_time(quest_text):
time_keywords = {
'short': ['quick', 'short', 'few minutes', '10 minutes', '15 minutes'],
'medium': ['moderate', 'half an hour', '30 minutes', '45 minutes'],
'long': ['long', 'one hour', '1 hour', 'two hours', '2 hours']
}
for duration, words in time_keywords.items():
if any(word in quest_text.lower() for word in words):
if duration == 'short':
return timedelta(minutes=15)
elif duration == 'medium':
return timedelta(minutes=45)
elif duration == 'long':
return timedelta(hours=1, minutes=30)
return timedelta(minutes=30) # 기본값을 30분으로 설정
def generate_quests(user, diary):
hero_name = user.hero_name
diary_contents = diary.contents
quest_types = list(keywords.keys())
# 다섯 가지 키워드 중 랜덤으로 하나를 선택
selected_quest_type = random.choice(quest_types)
selected_keyword = random.choice(keywords[selected_quest_type])
# 답변 예시
example_responses = {
'운동': [
"30분 달리기",
"60분 웨이트트레이닝하기"
],
'사회공헌': [
"120분 봉사하기",
"30분간 재능기부하기"
],
'자기개발': [
"60분 파이썬 공부하기",
"30분 독서하기"
],
'명상': [
"15분 명상하기",
"30분 심호흡하기"
],
'취미': [
"30분 그림 그리기",
"60분 나만의 취미하기"
]
}
example = random.choice(example_responses[selected_quest_type])
prompt = f"Create a quest related to {selected_quest_type} in korean for a hero named {hero_name} based on the following diary entry: {diary_contents}. The quest should realistically include elements such as {selected_keyword}. An example quest could be: '{example}'. Please generate one quest only."
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a quest generator for a hero."},
{"role": "user", "content": prompt}
],
max_tokens=500,
n=3,
temperature=0.7,
)
quests = response.choices
quest_objects = []
for quest in quests:
quest_text = quest.message['content'].strip().split('\n')[0]
quest_type = determine_quest_type(quest_text)
complete_time = determine_complete_time(quest_text)
quest_object = Quest(contents=quest_text, user=user, type=quest_type, complete_time=complete_time)
quest_objects.append(quest_object)
# 로그에 생성된 퀘스트 출력
logger.debug(f"Generated quest for user {user.user_name}: {quest_object}")
# 콘솔에 생성된 퀘스트 출력
print(f"Quest: {quest_object.contents}, Type: {quest_object.type}, Time: {quest_object.complete_time}")
return quest_objects