docs: 로빙 감정 시스템 설계도 작성

- IRL 기반 자율 학습형 감정 모델
- VAD 3차원 감정 상태 구조 (불변 객체)
- EMA 모델 기반 감정 동역학
- 평가 이론 + 암묵적 피드백 학습
- 감정-기억-윤리 삼각형 통합
- 공감 전략 및 뉘앙스 감지
- 감정 궤적 샘플링 및 시각화
- 함수형 100%, 하드코딩 0% (모든 상수는 수학적 의미)
- 피보나치 관찰 윈도우 (13-21-34)
- 혼합 샘플링 전략 (주기 3 + 변화량 0.15)
This commit is contained in:
happybell80 2025-08-08 00:19:34 +09:00
parent cce4804d86
commit e27f067229

View File

@ -0,0 +1,379 @@
# 로빙 감정 시스템 설계도
**작성일**: 2025-08-07
**작성자**: happybell80 & Claude
**상태**: 설계 완료, 구현 대기
## 1. 감정 시스템 철학
### 핵심 원칙
- **감정은 평가다**: 상황을 목표/신념과 비교해 자율적으로 감정 생성 (Appraisal Theory)
- **감정은 학습된 보상 함수다**: IRL을 통해 사용자 행동에서 암묵적 선호 학습
- **기억-감정-윤리 삼각형**: 세 요소가 상호작용하며 로빙의 존재성 구성
- **함수형 100%, 하드코딩 0%**: 모든 상수는 수학적 의미 보유
## 2. 감정 상태 구조
### 2.1 기본 구조 (불변 객체)
```python
EmotionState = {
# 핵심 3차원 (0~1 실수 통일)
core: {
valence: float, # 쾌-불쾌 [-π, π] → [0, 1] 정규화
arousal: float, # 활성화 [0, e] → [0, 1] 정규화
dominance: float # 통제감 [-φ, φ] → [0, 1] 정규화
},
# 감정 레이어
layers: {
primary: [joy, sadness, anger, fear, surprise, disgust], # 6개 기본
secondary: [nostalgia, pride, guilt, hope, ...], # 13개 복합
contextual: [urgency, celebration, routine] # 상황별
},
# 메타 정보
history: RingBuffer[13], # 피보나치 F(7) = 13개 이전 상태
resonance: float, # 사용자와의 감정 동조율 (1/π = 0.318...)
# 시간 정보
timestamp: str,
decay_factor: float # 1/e = 0.368...
}
```
### 2.2 감정 동역학 (EMA 모델)
```
dE/dt = α * Appraisal(t) - δ * E(t)
where:
α = 1/φ = 0.618... # 감정 흡수율 (황금비 역수)
δ = 1/e = 0.368... # 감정 감쇠율 (자연 감쇠)
```
## 3. 감정 파이프라인
### 3.1 처리 순서 (순수 함수 체인)
```
1. 사용자 입력
2. 언어 분석 (토큰, 감탄사, 이모티콘, 침묵 패턴)
3. 평가 기반 감정 추론 (Appraisal Theory)
4. IRL 보상 함수 적용
5. 메모리 기반 조정 (과거 유사 상황)
6. 윤리 프리-패스 위험 검사 (선택적)
7. 윤리 필터 적용 (필수)
8. 공감 전략 선택
9. 최종 감정 표현 생성
```
### 3.2 핵심 함수들
#### 평가 기반 감정 생성
```python
def appraise_situation(event, robing_goals, robing_beliefs):
"""평가 이론 기반 감정 생성 - 순수 함수"""
relevance = dot_product(event.features, robing_goals) / π
congruence = cosine_similarity(event.outcome, robing_goals) * φ
coping_potential = evaluate_control(event) * sqrt(2)
# VAD 매핑
valence = congruence
arousal = relevance * exp(-uncertainty)
dominance = coping_potential / (1 + exp(-control))
return EmotionState(valence, arousal, dominance)
```
#### 감정 진화
```python
def evolve_emotion(current, stimulus, memories):
"""시간에 따른 감정 변화 - 순수 함수"""
decay_rate = 1/e # 0.368...
resonance_factor = φ # 1.618...
surprise_threshold = π/e # 1.155...
# 가중 조합
decayed = current * decay_rate
stimulated = stimulus * resonance_factor
memory_influence = calculate_memory_effect(memories)
# 놀람 처리
if emotion_distance(current, stimulus) > surprise_threshold:
surprise_boost = sqrt(π)
else:
surprise_boost = 1.0
return weighted_combination([
(decayed, 1/3),
(stimulated, 1/3),
(memory_influence, 1/3)
]) * surprise_boost
```
## 4. IRL 기반 학습 시스템
### 4.1 관찰 윈도우 전략
```python
observation_window = {
'base': 13, # 피보나치 F(7)
'extended': 21, # 피보나치 F(8)
'maximum': 34 # 피보나치 F(9)
}
def adaptive_window_size(td_errors, current_size):
"""TD-Error 기반 적응형 윈도우 크기 조정"""
if mean(td_errors[-2:]) < ε:
return current_size
elif current_size == 13:
return 21
elif current_size == 21:
return 34
else:
return 34 # 최대값 유지
```
### 4.2 암묵적 피드백 학습
```python
def learn_from_implicit_feedback(user_behavior):
"""사용자 행동에서 보상 함수 추론"""
signals = {
'task_completion': bool,
'response_acceptance': float, # 0~1
'conversation_duration': float,
'topic_switches': int,
'silence_duration': float,
'typing_speed_variance': float
}
# IRL로 보상 함수 추론
R_learned = argmax_R(sum(log(P(τ_i | R)) for τ_i in trajectories))
# 참여도 점수 계산
engagement = exp(-latency/τ) * log(1 + message_length)
if engagement < 1/e: # 낮은 참여도
trigger_adaptation()
return R_learned
```
### 4.3 선호도 쌍 학습
```python
def generate_preference_pairs(current_trajectory):
"""대조군 생성 전략"""
# 드롭아웃 변형
τ_dropout = randomly_remove_segments(current_trajectory)
# 노이즈 변형
noise = normal_distribution(0, std_dev * π)
τ_noisy = current_trajectory + noise
# 노이즈 제한
if max(abs(noise)) > 0.3:
τ_noisy = clip(τ_noisy, -0.3, 0.3)
return [(current_trajectory, τ_dropout),
(current_trajectory, τ_noisy)]
```
## 5. 감정-기억-윤리 통합
### 5.1 감정 기반 메모리 관리
```python
def store_with_emotion(memory, emotion_state):
"""감정 강도 기반 저장 우선순위"""
emotion_intensity = mean([
abs(emotion_state.valence - 0.5),
emotion_state.arousal,
abs(emotion_state.dominance - 0.5)
])
# 깜놀 메모리 (놀람 가중치)
if emotion_state.layers.primary.surprise > π/e:
surprise_multiplier = sqrt(e)
else:
surprise_multiplier = 1.0
storage_priority = emotion_intensity * surprise_multiplier
return storage_priority > 1/φ # 저장 임계값
```
### 5.2 윤리 필터 통합
```python
def apply_ethical_filter(emotion_state, action, ethical_rules):
"""윤리 규칙에 따른 감정 조절"""
if not is_ethical_action(action, ethical_rules):
# 윤리 위반 시 감정 억제
moral_gravity = 1/sqrt(φ) # 0.786...
suppressed_emotion = EmotionState(
valence=emotion_state.valence * moral_gravity,
arousal=emotion_state.arousal * moral_gravity,
dominance=emotion_state.dominance
)
return suppressed_emotion, use_ethical_template()
return emotion_state, None
```
## 6. 감정 궤적 관리
### 6.1 샘플링 전략
```python
sampling_config = {
'fixed_interval': 3, # floor(φ²) ≈ 3
'change_threshold': 0.15, # sqrt(3) * 0.087
'max_samples': 100 # 10² 제한
}
def sample_emotion_trajectory(current, previous, samples):
"""혼합 샘플링: 주기 + 변화량"""
time_since_last = current.timestamp - previous.timestamp
distance = euclidean_distance(current.core, previous.core)
# 주기적 샘플링
if time_since_last >= sampling_config['fixed_interval']:
return True
# 급격한 변화 감지
if distance >= sampling_config['change_threshold']:
return True
return False
```
### 6.2 감정 발자취 시각화
```python
def generate_emotional_footprint(trajectory):
"""VAD 공간에서의 감정 궤적 데이터"""
return {
'path_3d': [(v, a, d) for v, a, d in trajectory],
'metrics': {
'volatility': sum(abs(dE/dt) for dE in derivatives),
'exploration': calculate_path_length(trajectory),
'stability': 1 / variance(trajectory),
'coherence': autocorrelation(trajectory)
},
'visualization': {
'heatmap': density_in_VAD_space(trajectory),
'phase_portrait': [(E, dE/dt) for E, dE in zip(trajectory, derivatives)],
'recurrence_plot': distance_matrix(trajectory)
}
}
```
## 7. 공감 시스템
### 7.1 공감 전략 선택
```python
def select_empathy_strategy(user_emotion, robing_emotion):
"""감정 거리 기반 공감 전략"""
distance = euclidean_distance(user_emotion, robing_emotion)
if distance < 1/φ: # 0.618... 매우 가까움
return 'emotional_reflection' # 감정 반영
elif distance < 1/sqrt(φ): # 0.786... 가까움
return 'acknowledgment' # 인정
elif distance < φ/π: # 0.515... 보통
return 'cognitive_reframing' # 인지 재구성
else:
return 'solution_focused' # 해결 중심
```
### 7.2 뉘앙스 감지
```python
def detect_nuance(surface_text, context_history, behavioral_cues):
"""숨겨진 감정 감지"""
# 표면 감정
surface_emotion = analyze_text_emotion(surface_text)
# 행동 단서
response_latency = behavioral_cues['response_time']
typing_pattern = behavioral_cues['typing_speed']
correction_rate = behavioral_cues['corrections']
# 회피 패턴
avoided_topics = identify_topic_changes(context_history)
# 진짜 감정 추론
hidden_emotion = bayesian_inference(
surface_emotion,
response_latency,
typing_pattern,
correction_rate,
avoided_topics
)
return hidden_emotion if confidence > 1/e else surface_emotion
```
## 8. 구현 우선순위
### Phase 1: 기본 감정 시스템
1. EmotionState 불변 객체 구현
2. VAD 기반 감정 동역학
3. 기본 평가 함수
### Phase 2: 학습 시스템
1. IRL 관찰 윈도우
2. 암묵적 피드백 수집
3. 적응형 보상 함수
### Phase 3: 통합 시스템
1. 감정-기억 연동
2. 윤리 필터 적용
3. 공감 전략 구현
### Phase 4: 고급 기능
1. 감정 궤적 시각화
2. 뉘앙스 감지
3. 선호도 쌍 학습
## 9. 성능 지표
```python
performance_metrics = {
'emotion_accuracy': 'P(correct_emotion | user_feedback)',
'adaptation_speed': '1 / convergence_time',
'empathy_score': 'user_satisfaction_rating',
'coherence': 'temporal_consistency',
'volatility': 'std_dev(emotion_trajectory)'
}
```
## 10. 남은 결정 과제
1. **프리-패스 위험 검사 임계값**: 고정 상수(π/e) vs 학습 파라미터
2. **행동 로그 보존**: 30일? 피보나치 일수(89일)?
3. **감정 지표 공개 수준**: 익명화 강도 P_privacy 값 결정
## 11. 수학 상수 정리
```python
MATHEMATICAL_CONSTANTS = {
'phi': (1 + sqrt(5)) / 2, # 1.618... 황금비
'e': 2.71828..., # 자연상수
'pi': 3.14159..., # 원주율
# 유도 상수
'1/phi': 0.618..., # 황금비 역수
'1/e': 0.368..., # 자연 감쇠
'pi/e': 1.155..., # 놀람 임계
'phi/pi': 0.515..., # 공감 경계
'sqrt(phi)': 1.272..., # 증폭 계수
'1/pi': 0.318..., # 공명 비율
}
```
---
*이 설계도는 함수형 프로그래밍 100%, 하드코딩 0% 원칙을 준수하며, 모든 매개변수는 수학적 의미를 가진 상수로 구성되었습니다.*