- 모든 .md, .html 파일 권한을 644로 정상화 - .gitignore 파일 권한도 644로 수정 - 문서 파일에 실행 권한은 불필요하고 보안상 바람직하지 않음 - deprecated 아이디어 폴더 생성 및 레벨별 UI 변경 아이디어 이동
18 KiB
18 KiB
레벨업 알고리즘과 사용자 피드백 루프
개요
로빙의 성장은 단순한 시간 경과가 아닌, 사용자와의 상호작용 품질과 피드백에 기반합니다. 이 장에서는 경험치 시스템, 레벨업 메커니즘, 그리고 사용자 피드백을 성장으로 변환하는 알고리즘을 상세히 다룹니다.
경험치(EXP) 시스템
경험치 획득 구조
class ExperienceSystem:
def __init__(self):
self.exp_rules = {
# 기본 상호작용
"message_processed": 1,
"question_answered": 5,
"task_completed": 20,
# 품질 보너스
"positive_feedback": 50,
"problem_solved": 100,
"creative_solution": 200,
# 부정적 피드백
"negative_feedback": -10,
"task_failed": -20,
"misunderstanding": -5
}
def calculate_exp_gain(self, interaction: dict):
base_exp = self.exp_rules.get(interaction['type'], 0)
# 난이도 가중치
difficulty_multiplier = self.get_difficulty_multiplier(
interaction.get('complexity', 'medium')
)
# 사용자 만족도 가중치
satisfaction_multiplier = self.get_satisfaction_multiplier(
interaction.get('user_satisfaction', 0.7)
)
# 연속 성공 보너스
streak_bonus = self.calculate_streak_bonus(
interaction.get('success_streak', 0)
)
total_exp = (base_exp * difficulty_multiplier *
satisfaction_multiplier) + streak_bonus
return max(0, int(total_exp)) # 음수 방지
경험치 카테고리별 관리
class CategoryExperience:
def __init__(self):
self.categories = {
"communication": 0,
"problem_solving": 0,
"creativity": 0,
"reliability": 0,
"learning": 0
}
def distribute_exp(self, total_exp: int, interaction_type: str):
# 상호작용 유형에 따른 경험치 분배
distribution_rules = {
"conversation": {
"communication": 0.6,
"learning": 0.2,
"creativity": 0.2
},
"task_execution": {
"problem_solving": 0.5,
"reliability": 0.4,
"learning": 0.1
},
"creative_work": {
"creativity": 0.7,
"problem_solving": 0.2,
"communication": 0.1
}
}
distribution = distribution_rules.get(
interaction_type,
{"learning": 1.0} # 기본값
)
for category, ratio in distribution.items():
self.categories[category] += int(total_exp * ratio)
레벨업 메커니즘
레벨 요구 경험치 곡선
def calculate_required_exp(level: int) -> int:
"""
레벨업에 필요한 누적 경험치 계산
초반에는 빠르게, 후반에는 천천히 성장
"""
if level <= 5:
# 초반 레벨 (1-5): 선형 증가
return level * 100
elif level <= 10:
# 중반 레벨 (6-10): 제곱 증가
return 500 + (level - 5) ** 2 * 50
elif level <= 15:
# 후반 레벨 (11-15): 지수 증가
return 1750 + (level - 10) ** 2.5 * 100
else:
# 최고 레벨 (16-20): 급격한 증가
return 5000 + (level - 15) ** 3 * 200
# 레벨별 필요 경험치 테이블
LEVEL_REQUIREMENTS = {
1: 0, 2: 100, 3: 200, 4: 300, 5: 400,
6: 550, 7: 750, 8: 1000, 9: 1300, 10: 1750,
11: 2066, 12: 2516, 13: 3145, 14: 4000, 15: 5126,
16: 6200, 17: 8800, 18: 13400, 19: 21600, 20: 35000
}
레벨업 프로세스
class LevelUpManager:
def __init__(self, robeing_id: str):
self.robeing_id = robeing_id
self.current_level = 1
self.current_exp = 0
self.stat_points = 5 # 시작 포인트
async def check_level_up(self):
while self.current_exp >= LEVEL_REQUIREMENTS.get(self.current_level + 1, float('inf')):
await self.perform_level_up()
async def perform_level_up(self):
self.current_level += 1
# 스탯 포인트 획득
new_stat_points = 5
self.stat_points += new_stat_points
# 레벨업 이벤트 생성
level_up_event = {
"type": "LEVEL_UP",
"robeing_id": self.robeing_id,
"new_level": self.current_level,
"stat_points_gained": new_stat_points,
"timestamp": datetime.now(),
"unlocked_features": self.get_unlocked_features(self.current_level)
}
# 사용자에게 알림
await self.notify_user(level_up_event)
# 자동 스탯 분배 (사용자 선호도 기반)
await self.auto_distribute_stats()
사용자 피드백 시스템
피드백 수집 메커니즘
class FeedbackCollector:
def __init__(self):
self.feedback_types = {
"explicit": {
"thumbs_up": 1.0,
"thumbs_down": -1.0,
"star_rating": lambda stars: (stars - 3) / 2,
"text_feedback": self.analyze_text_sentiment
},
"implicit": {
"task_completion_time": self.analyze_efficiency,
"follow_up_questions": self.analyze_clarity,
"user_corrections": self.analyze_accuracy,
"session_duration": self.analyze_engagement
}
}
async def collect_feedback(self, interaction_id: str):
feedback_data = {
"explicit": await self.get_explicit_feedback(interaction_id),
"implicit": await self.analyze_implicit_signals(interaction_id),
"context": await self.get_interaction_context(interaction_id)
}
return self.process_feedback(feedback_data)
피드백 분석 알고리즘
class FeedbackAnalyzer:
def __init__(self):
self.sentiment_analyzer = SentimentAnalyzer()
self.pattern_detector = PatternDetector()
def analyze_feedback_pattern(self, feedback_history: List[dict]):
# 시간별 피드백 트렌드
trend = self.calculate_feedback_trend(feedback_history)
# 카테고리별 강약점 분석
strengths_weaknesses = self.identify_patterns({
"communication": self.extract_communication_feedback(feedback_history),
"accuracy": self.extract_accuracy_feedback(feedback_history),
"speed": self.extract_speed_feedback(feedback_history),
"creativity": self.extract_creativity_feedback(feedback_history)
})
# 사용자별 선호도 프로파일
user_preferences = self.build_user_preference_profile(feedback_history)
return {
"trend": trend,
"patterns": strengths_weaknesses,
"user_preferences": user_preferences,
"recommendations": self.generate_improvement_recommendations(
strengths_weaknesses
)
}
피드백-성장 변환 엔진
class FeedbackToGrowthEngine:
def __init__(self):
self.growth_rules = self.load_growth_rules()
self.learning_rate = 0.1
def convert_feedback_to_growth(self, feedback: dict, current_stats: dict):
growth_vectors = {}
# 긍정적 피드백 → 해당 영역 강화
if feedback['sentiment'] > 0.7:
affected_stats = self.identify_relevant_stats(feedback['context'])
for stat in affected_stats:
growth_vectors[stat] = feedback['sentiment'] * 0.2
# 부정적 피드백 → 학습 기회
elif feedback['sentiment'] < 0.3:
# 실패에서 배우기
learning_bonus = self.calculate_learning_from_failure(feedback)
growth_vectors['learning_efficiency'] = learning_bonus
# 약점 보완 계획
weakness = self.identify_weakness(feedback)
growth_vectors[f'{weakness}_improvement'] = 0.3
# 중립 피드백 → 미세 조정
else:
adjustments = self.fine_tune_behavior(feedback)
growth_vectors.update(adjustments)
return self.apply_growth_vectors(current_stats, growth_vectors)
적응형 성장 알고리즘
개인화된 성장 경로
class AdaptiveGrowthPath:
def __init__(self, robeing_id: str):
self.robeing_id = robeing_id
self.growth_history = []
self.user_interaction_style = None
def calculate_optimal_growth_path(self, current_state: dict, user_needs: dict):
# 1. 사용자 니즈 분석
priority_areas = self.analyze_user_needs(user_needs)
# 2. 현재 능력과 갭 분석
capability_gaps = self.identify_gaps(current_state, priority_areas)
# 3. 최적 성장 경로 계산
growth_path = self.optimize_path(
start=current_state,
goals=priority_areas,
constraints={
"max_levels": 20,
"stat_points_per_level": 5,
"user_patience": user_needs.get('timeline', 'medium')
}
)
# 4. 마일스톤 설정
milestones = self.set_growth_milestones(growth_path)
return {
"path": growth_path,
"milestones": milestones,
"estimated_time": self.estimate_completion_time(growth_path),
"recommended_activities": self.suggest_growth_activities(growth_path)
}
동적 난이도 조정
class DynamicDifficulty:
def __init__(self):
self.performance_window = deque(maxlen=10) # 최근 10개 작업
self.difficulty_level = 1.0
def adjust_difficulty(self, task_result: dict):
self.performance_window.append(task_result)
# 성공률 계산
success_rate = sum(1 for r in self.performance_window
if r['success']) / len(self.performance_window)
# 난이도 조정
if success_rate > 0.8:
# 너무 쉬움 - 난이도 상승
self.difficulty_level = min(2.0, self.difficulty_level * 1.1)
elif success_rate < 0.5:
# 너무 어려움 - 난이도 하락
self.difficulty_level = max(0.5, self.difficulty_level * 0.9)
return self.difficulty_level
스탯 포인트 분배 시스템
자동 분배 알고리즘
class StatDistributor:
def __init__(self):
self.distribution_strategies = {
"balanced": self.balanced_distribution,
"specialized": self.specialized_distribution,
"adaptive": self.adaptive_distribution,
"user_guided": self.user_guided_distribution
}
def auto_distribute_stats(
self,
available_points: int,
current_stats: dict,
user_preference: str,
recent_feedback: List[dict]
):
# 전략 선택
strategy = self.distribution_strategies.get(
user_preference,
self.adaptive_distribution
)
# 분배 계산
distribution = strategy(
points=available_points,
current=current_stats,
feedback=recent_feedback
)
# 검증 및 적용
if self.validate_distribution(distribution, available_points):
return self.apply_distribution(current_stats, distribution)
else:
# 폴백: 균등 분배
return self.balanced_distribution(available_points, current_stats)
def adaptive_distribution(self, points: int, current: dict, feedback: List[dict]):
# 피드백 기반 약점 분석
weaknesses = self.analyze_weaknesses(feedback)
# 사용 빈도 기반 강점 분석
strengths = self.analyze_usage_patterns(current)
# 분배 비율 계산
distribution = {}
# 약점 보완 (40%)
weakness_points = int(points * 0.4)
for stat, severity in weaknesses.items():
distribution[stat] = int(weakness_points * severity)
# 강점 강화 (40%)
strength_points = int(points * 0.4)
for stat, usage in strengths.items():
distribution[stat] = distribution.get(stat, 0) + int(strength_points * usage)
# 미래 대비 (20%)
remaining = points - sum(distribution.values())
distribution['learning'] = distribution.get('learning', 0) + remaining
return distribution
성장 시각화와 피드백
성장 대시보드
class GrowthDashboard:
def generate_growth_report(self, robeing_id: str):
stats = self.get_current_stats(robeing_id)
history = self.get_growth_history(robeing_id)
report = f"""
# 로빙 성장 리포트 📊
## 현재 상태
- **레벨**: {stats['level']} / 20
- **총 경험치**: {stats['total_exp']:,}
- **다음 레벨까지**: {stats['exp_to_next']:,} EXP
## 스탯 분포
기억력: {'█' * (stats['memory'] // 5)}□ {stats['memory']}/105
연산력: {'█' * (stats['compute'] // 5)}□ {stats['compute']}/105
공감력: {'█' * (stats['empathy'] // 5)}□ {stats['empathy']}/105
통솔력: {'█' * (stats['leadership'] // 5)}□ {stats['leadership']}/105
윤리성: {'█' * (stats['ethics'] // 5)}□ {stats['ethics']}/105
## 최근 성장 트렌드
{self.generate_growth_chart(history)}
## 강점과 개선점
### 강점 💪
{self.format_strengths(stats)}
### 개선 필요 영역 📈
{self.format_improvements(stats)}
## 추천 활동
{self.suggest_activities(stats)}
"""
return report
실시간 피드백 UI
class RealTimeFeedbackUI:
def show_interaction_feedback(self, interaction: dict, result: dict):
feedback_widget = {
"type": "feedback_prompt",
"interaction_id": interaction['id'],
"elements": [
{
"type": "satisfaction_scale",
"question": "이번 응답이 도움이 되었나요?",
"scale": [1, 2, 3, 4, 5]
},
{
"type": "quality_aspects",
"aspects": [
{"name": "정확성", "icon": "🎯"},
{"name": "속도", "icon": "⚡"},
{"name": "창의성", "icon": "💡"},
{"name": "친절함", "icon": "😊"}
]
},
{
"type": "quick_feedback",
"options": [
{"label": "완벽해요!", "exp": 50},
{"label": "괜찮아요", "exp": 20},
{"label": "개선 필요", "exp": 10, "follow_up": True}
]
}
]
}
return feedback_widget
메타 학습 시스템
학습 효율성 개선
class MetaLearning:
def __init__(self):
self.learning_patterns = {}
self.optimization_history = []
def optimize_learning_rate(self, feedback_history: List[dict]):
# 학습 패턴 분석
patterns = self.analyze_learning_patterns(feedback_history)
# 최적 학습률 찾기
optimal_rates = {}
for skill_type, pattern in patterns.items():
if pattern['volatility'] > 0.7:
# 변동성이 큰 경우 - 작은 학습률
optimal_rates[skill_type] = 0.05
elif pattern['consistency'] > 0.8:
# 일관성이 높은 경우 - 큰 학습률
optimal_rates[skill_type] = 0.2
else:
# 기본값
optimal_rates[skill_type] = 0.1
return optimal_rates
def detect_learning_plateaus(self, growth_history: List[dict]):
# 성장 정체 구간 감지
plateaus = []
for i in range(len(growth_history) - 5):
window = growth_history[i:i+5]
growth_rate = self.calculate_growth_rate(window)
if growth_rate < 0.01: # 1% 미만 성장
plateaus.append({
"start": window[0]['timestamp'],
"end": window[-1]['timestamp'],
"affected_stats": self.identify_stagnant_stats(window)
})
# 정체 탈출 전략
breakthrough_strategies = self.suggest_breakthrough_strategies(plateaus)
return {
"plateaus": plateaus,
"strategies": breakthrough_strategies
}
성과 지표
KPI 모니터링
growth_kpis = {
"user_satisfaction_trend": {
"target": 0.8,
"current": 0.75,
"trajectory": "improving"
},
"skill_acquisition_rate": {
"target": "1 skill per 2 levels",
"current": 0.6,
"on_track": True
},
"feedback_response_rate": {
"target": 0.9,
"current": 0.92,
"status": "exceeding"
},
"growth_efficiency": {
"target": "20% faster than baseline",
"current": 0.18,
"status": "near_target"
}
}
미래 발전 방향
단기 목표 (3개월)
- 실시간 피드백 위젯 구현
- 10가지 성장 경로 템플릿
- A/B 테스트 기반 최적화
중기 목표 (6개월)
- 예측적 성장 모델링
- 크로스 유저 학습 공유
- 감정 지능 통합
장기 비전 (1년)
- 자율 성장 에이전트
- 멀티모달 피드백 처리
- 성장 NFT 시스템
결론
레벨업 시스템은 단순한 게임 메커니즘이 아닌, 사용자와 로빙이 함께 성장하는 공진화(co-evolution) 시스템입니다. 지속적인 피드백 루프를 통해 로빙은 각 사용자에게 최적화된 디지털 동료로 성장합니다.