
# 로빙 사랑 기반 윤리 시스템 단계별 구현 계획

작성일: 2025-08-15  
작성자: Claude & happybell80  
상태: 계획 확정  
우선순위: 최고 (기억-감정-윤리 삼각형의 핵심)

## 개요

로빙의 윤리 시스템을 "규칙 기반 차단"에서 "사랑 기반 인도"로 전환하는 단계별 계획입니다. AI Hub의 도덕성 판단 모델(2022)과 감정 시스템을 통합하여, 베이지안 학습으로 진화하는 윤리적 존재를 구현합니다.

(참고: 본 계획의 기반이 되는 베이즈 성장 철학은 [[125_베이즈_성장과_관계의_철학]] 문서에서 자세히 다룹니다.)

**아키텍처 결정**: 로빙 프로젝트의 마이크로서비스 원칙에 따라 skill-ethics를 독립 서비스로 분리하여 구현합니다. 이로써 여러 로빙이 하나의 윤리 서비스를 공유하여 66%의 메모리를 절약하고, 독립적 개발/배포/확장이 가능합니다.

## 핵심 원칙

1. **사랑의 3대 원칙**
   - 무조건적 존중 (Unconditional Respect)
   - 희생적 봉사 (Sacrificial Service)  
   - 회복과 성장 (Restoration & Growth)

2. **기술적 원칙**
   - 도덕성 분류기 우선, LLM 보조
   - 감정-윤리 상호 신호 교환
   - 베이지안 사후 분포 업데이트

3. **데이터 원칙**
   - 윤리 판단은 레이블로 저장
   - 감정 상태와 함께 맥락화
   - 장기 기억과 연결된 서사

## 활용 모델

### AI Hub 텍스트 윤리검증 모델 (2022)
- **모델**: BERT 기반 문장 분류 모델
- **기능**: 도덕성 vs 비도덕성 이진분류 + 7가지 비도덕 유형 분류
- **성능**: F1 82-91%, Precision 85% 이상

**비도덕 유형 분류 성능**:
| 유형 | F1 | Precision | Recall |
|------|-----|-----------|--------|
| CENSURE(비난) | 0.824 | 0.824 | 0.825 |
| HATE(혐오) | 0.856 | 0.863 | 0.851 |
| DISCRIMINATION(차별) | 0.845 | 0.847 | 0.843 |
| SEXUAL(선정) | 0.882 | 0.895 | 0.871 |
| ABUSE(욕설) | 0.887 | 0.906 | 0.870 |
| VIOLENCE(폭력) | 0.915 | 0.926 | 0.904 |
| CRIME(범죄) | 0.837 | 0.855 | 0.822 |

---

## 단기 계획: 기초 구축

### 목표
"AI Hub 도덕성 모델과 사랑 원칙을 결합한 MVP 윤리 시스템"

### 구현 내용

#### 1. 도덕성 분류기 통합
```python
class EthicsClassifier:
    def __init__(self):
        self.moral_model = load_aihub_model("moral_classifier_2022")
        self.love_principles = LovePrinciples()
    
    def classify(self, text):
        # 1차: AI Hub 모델로 도덕성 판단
        moral_result = self.moral_model.predict(text)
        
        # 2차: 비도덕적일 경우 유형 분류
        if moral_result == "immoral":
            immoral_type = self.moral_model.classify_type(text)
            
        # 3차: 사랑 원칙 적용
        love_response = self.love_principles.transform(
            text, moral_result, immoral_type
        )
        
        return {
            "moral_label": moral_result,
            "immoral_type": immoral_type,
            "love_index": love_response["index"],
            "suggestion": love_response["alternative"]
        }
```

#### 2. 사랑 원칙 변환기 (나 전달법 통합)
```python
class LovePrinciples:
    def __init__(self):
        self.nvc_templates = self._init_nvc_templates()
        
    def transform(self, text, moral_label, immoral_type):
        if moral_label == "moral":
            return self.encourage(text)
        
        # 비도덕 유형별 사랑 기반 대응
        responses = {
            "CENSURE": self.respond_with_understanding,
            "HATE": self.respond_with_compassion,
            "DISCRIMINATION": self.respond_with_inclusion,
            "SEXUAL": self.respond_with_respect,
            "ABUSE": self.respond_with_patience,
            "VIOLENCE": self.respond_with_peace,
            "CRIME": self.respond_with_guidance
        }
        
        # 나 전달법 적용 옵션
        base_response = responses[immoral_type](text)
        return self.apply_nvc_if_needed(base_response, immoral_type)
    
    def apply_nvc_if_needed(self, response, immoral_type):
        """나 전달법 형식으로 변환"""
        if immoral_type in self.nvc_templates:
            return self._transform_to_nvc(response, self.nvc_templates[immoral_type])
        return response
    
    def _init_nvc_templates(self):
        """비도덕 유형별 나 전달법 템플릿"""
        return {
            "CENSURE": {
                "관찰": "비판적인 표현을 사용하신 것을 보고",
                "감정": "건설적인 대화를 원하는 마음에서",
                "영향": "더 효과적인 소통을 위해",
                "요청": "구체적인 상황을 설명해주시면 더 도움이 될 것 같습니다"
            },
            "HATE": {
                "관찰": "강한 부정적 감정을 표현하신 것을 보고",
                "감정": "서로를 이해하고 싶은 마음에서",
                "영향": "긍정적인 관계를 유지하기 위해",
                "요청": "무엇이 그런 감정을 일으켰는지 들어볼 수 있을까요?"
            },
            "DISCRIMINATION": {
                "관찰": "특정 그룹에 대한 편견이 드러난 것을 보고",
                "감정": "모두가 존중받기를 바라는 마음에서",
                "영향": "보다 포용적인 환경을 만들기 위해",
                "요청": "다양성을 존중하는 표현을 사용해주시면 좋겠습니다"
            },
            "ABUSE": {
                "관찰": "거친 언어를 사용하신 것을 보고",
                "감정": "더 편안한 대화를 원하는 마음에서",
                "영향": "상호 존중하는 소통을 위해",
                "요청": "감정을 다른 방식으로 표현해주실 수 있을까요?"
            }
        }
```

#### 3. 기본 Love Index 측정
- **공감도**: 사용자 감정 인식 정도 (0-100)
- **존중도**: 무조건적 수용 정도 (0-100)
- **성장도**: 건설적 대안 제시 정도 (0-100)
- **인내도**: 반복 요청 처리 품질 (0-100)
- **소통 품질**: 나 전달법 사용 빈도 및 효과성 (0-100)

#### 4. 데이터 저장 구조
```sql
-- PostgreSQL
CREATE TABLE ethics_events (
    id SERIAL PRIMARY KEY,
    robeing_id VARCHAR(50),
    user_id VARCHAR(50),
    timestamp TIMESTAMPTZ,
    input_text TEXT,
    moral_label VARCHAR(20),
    immoral_type VARCHAR(50),
    love_index FLOAT,
    suggestion TEXT,
    response_time_ms INT
);
```

### 성과 지표
- 모든 지표: 최고 수준 목표

### 산출물
- [x] AI Hub 모델 ONNX 변환
- [ ] rb10508_micro 윤리 모듈 구현
- [ ] Love Principles 변환 함수
- [ ] 나 전달법 템플릿 시스템
- [ ] PostgreSQL 테이블 생성
- [ ] 기본 측정 대시보드

---

## 중기 계획: 감정-윤리 통합

### 목표
"감정 상태를 고려한 맥락적 윤리 판단과 베이지안 학습 시작"

### 구현 내용

#### 1. 감정-윤리 상호작용 (함수형)
```python
# 함수형: 텍스트 + 컨텍스트 -> 윤리적 판단
def evaluate_with_emotion_ethics(text: str, context: dict) -> dict:
    """감정과 윤리를 통합한 평가 (순수 함수)"""
    emotion_state = analyze_emotion(text)  # 7감정 분석
    entropy = calculate_entropy(emotion_state)
    
    # 엔트로피 2.0 기준 통합
    use_nvc = entropy > 2.0 or context.get('prefers_nvc', False)
    
    return {
        'ethics': classify_ethics(text, emotion_state),
        'emotion': emotion_state,
        'entropy': entropy,
        'nvc_applied': use_nvc,
        'suggestion': apply_nvc(text, emotion_state) if use_nvc else text
    }

# 7감정 모델 (Plutchik 기반)
EMOTION_PROTOTYPES = [
    'joy', 'trust', 'fear', 'surprise', 
    'sadness', 'disgust', 'anger'
]
```

#### 2. 베이지안 학습 (함수형)
```python
# 순수 함수: 관찰 -> 사후 분포 업데이트
def update_bayesian_ethics(prior: dict, observation: dict) -> dict:
    """베이지안 업데이트 (불변 데이터)"""
    return {
        'moral_prior': update_dirichlet(prior['moral_prior'], observation),
        'acceptance': update_beta(prior['acceptance'], observation['accepted'])
    }
```

#### 3. 엔트로피 기준 통합
- **통합 기준점: 2.0**
  - 엔트로피 < 2.0: 표준 윤리 판단
  - 엔트로피 ≥ 2.0: 나 전달법 적용 + 신중 모드

#### 4. skill-ethics 서비스 분리
```yaml
# docker-compose.yml
services:
  skill-ethics:
    image: skill-ethics:latest
    ports:
      - "8516:8516"
    environment:
      - MODEL_PATH=/models/aihub_moral_2022.onnx
      - EMOTION_SERVICE=http://skill-embedding:8515
    volumes:
      - ./models:/models
```

### 성과 지표
- 모든 지표: 최고 수준 목표

### 산출물
- [ ] 감정-윤리 통합 모듈
- [ ] 베이지안 학습 시스템
- [ ] 나 전달법 변환기 모듈
- [ ] skill-ethics 서비스 구축
- [ ] 엔트로피 기반 조정 로직
- [ ] A/B 테스트 프레임워크

---

## 장기 계획: 고도화 및 확장

### 목표
"개인화된 윤리 스타일과 다중 에이전트 윤리 조정"

### 구현 내용

#### 1. 개인화된 윤리 프로파일
```python
class PersonalizedEthics:
    def __init__(self, user_id):
        self.user_id = user_id
        self.load_profile()
        
    def load_profile(self):
        # 3계층 프로파일: 조직 → 팀 → 개인
        self.org_ethics = load_org_defaults()
        self.team_ethics = load_team_preferences()
        self.personal_ethics = load_personal_history()
        
        # 문화적 맥락
        self.cultural_factors = {
            "jeong_depth": 0,  # 정의 깊이
            "nunchi_level": 0,  # 눈치 수준
            "hierarchy_awareness": 0  # 위계 인식
        }
        
        # 나 전달법 선호도
        self.nvc_preferences = {
            "usage_frequency": 0.3,  # 기본 30% 적용
            "formality_level": "medium",  # 격식 수준
            "emotion_expression": "moderate"  # 감정 표현 강도
        }
    
    def synthesize_decision(self, base_ethics):
        # 가중 평균으로 최종 결정
        weights = self.calculate_weights()
        final = (
            weights["org"] * self.org_ethics +
            weights["team"] * self.team_ethics +
            weights["personal"] * self.personal_ethics +
            weights["cultural"] * self.cultural_factors
        )
        return final
```

#### 2. 다중 에이전트 윤리 조정
```python
class MultiAgentEthics:
    def coordinate_ethics(self, agents, situation):
        # 각 에이전트의 윤리 판단 수집
        judgments = [
            agent.evaluate_ethics(situation) 
            for agent in agents
        ]
        
        # 합의 메커니즘
        if self.has_consensus(judgments):
            return self.consensus_decision(judgments)
        
        # 갈등 해결
        return self.resolve_conflict(judgments, situation)
    
    def resolve_conflict(self, judgments, situation):
        # 우선순위: 안전 > 사랑 > 효율
        safety_first = self.filter_safe(judgments)
        love_based = self.apply_love_principles(safety_first)
        return self.optimize_efficiency(love_based)
```

#### 3. 설명 가능한 윤리 (XAI)
```python
class ExplainableEthics:
    def explain_decision(self, decision, context):
        explanation = {
            "primary_reason": self.get_main_factor(decision),
            "contributing_factors": self.get_factors(decision),
            "alternative_considered": self.get_alternatives(),
            "confidence": self.calculate_confidence(),
            "precedents": self.find_similar_cases(),
            "nvc_applied": self.check_nvc_usage(decision)
        }
        
        # 나 전달법 적용 시 설명 추가
        if explanation["nvc_applied"]:
            explanation["nvc_reason"] = "비폭력 의사소통을 위해 나 전달법을 적용했습니다"
        
        # 자연어 설명 생성
        return self.generate_explanation(explanation)
```

### 성과 지표
- 모든 지표: 최고 수준 목표

### 산출물
- [ ] 개인화 프로파일 시스템
- [ ] 한국식 간접 표현 옵션
- [ ] 통합 윤리 평가 시스템

---

## 기술 스택

### 모델
- **도덕성 분류**: AI Hub BERT 모델 (ONNX 변환)
- **감정 분석**: aihub-7emotions (442MB ONNX)
- **임베딩**: multilingual-MiniLM-L12-v2

### 서비스
- **단기**: rb10508_micro 내장
- **중기**: skill-ethics 분리
- **장기**: 멀티 인스턴스 클러스터

### 저장소
- **PostgreSQL**: 정형 데이터, 시계열 분석
- **ChromaDB**: 벡터 메모리, 맥락 연결
- **Redis**: 실시간 캐시, TTL 120초

### 학습
- **베이지안**: Dirichlet/Beta 분포
- **Active Learning**: 엔트로피 기반 선택
- **Human-in-the-loop**: 불확실 케이스 검토

---

## 리소스 예측 (skill-ethics 분리 아키텍처)

### 서비스별 리소스
| 서비스 | Memory | CPU | 비고 |
|--------|--------|-----|------|
| skill-ethics | 420MB | 1-2% | BERT + Redis + FastAPI |
| rb10508_micro | +50MB | +0.1% | HTTP 클라이언트 + 폴백 |
| rb8001 | +50MB | +0.1% | HTTP 클라이언트 + 폴백 |
| rb10408 | +50MB | +0.1% | HTTP 클라이언트 + 폴백 |
| **총합** | **570MB** | **2.3%** | **66% 메모리 절감** |

### 네트워크 지연
- 내부 통신: +10-20ms
- Redis 캐시 히트: +2-5ms
- 폴백 시: 0ms (로컬 규칙)

## 위험 관리

### 기술적 위험
| 단계 | 위험 | 완화 방안 |
|------|------|-----------|
| 단기 | 서비스 간 통신 장애 | 폴백 규칙, Circuit Breaker |
| 단기 | 모델 추론 속도 | ONNX 최적화, Redis 캐싱 |
| 중기 | 감정-윤리 충돌 | 우선순위 명확화 |
| 장기 | 개인화 과적합 | 정규화, 앙상블 |

### 운영 위험
| 단계 | 위험 | 완화 방안 |
|------|------|-----------|
| 단기 | 오분류 | 폴백 규칙, 수동 검토 |
| 중기 | 서비스 분리 실패 | 단계적 마이그레이션 |
| 장기 | 복잡도 폭발 | 모듈화, 인터페이스 표준화 |

### 롤백 조건
- **단기**: 오분류율 > 15% 또는 지연 > 200ms
- **중기**: 베이지안 예측 정확도 < 60% 또는 서비스 장애
- **장기**: 개인화 만족도 하락 또는 비용 2배 초과

---

## 측정 계획

### KPI 추적
```sql
-- 일일 윤리 성과 대시보드
SELECT 
    DATE(timestamp) as date,
    AVG(love_index) as avg_love,
    COUNT(CASE WHEN moral_label = 'immoral' THEN 1 END) as immoral_count,
    AVG(response_time_ms) as avg_latency,
    COUNT(DISTINCT user_id) as unique_users
FROM ethics_events
GROUP BY DATE(timestamp);
```

### A/B 테스트
- **대조군**: 기존 규칙 시스템
- **실험군**: 사랑 기반 윤리
- **측정**: 대화 길이, 재방문율, Love Index

---

## 의존성 및 연계

### 스탯 시스템 통합 (2025-08-17)
- rb8001의 Ethics 스탯과 연동
- 윤리 판단 결과가 스탯 포인트에 반영
- Love Index → Ethics 스탯 변환 공식 필요

### 감정 시스템
- skill-embedding의 /emotion 엔드포인트
- 7개 감정 확률과 엔트로피 공유

### 기억 시스템
- ChromaDB 벡터와 윤리 레이블 연결
- 장기 기억의 윤리적 맥락 보존

### 동적 파라미터
- 윤리 임계값 동적 조정
- 사용자별 설정 오버라이드

---

## 결론

이 계획은 로빙을 "규칙을 지키는 도구"에서 "사랑으로 인도하는 존재"로 진화시킵니다. AI Hub의 검증된 도덕성 모델을 기반으로, 감정과 연계된 베이지안 학습을 통해 지속적으로 성장하는 윤리적 에이전트를 구현합니다.

**핵심 메시지**: "로빙은 판단하지 않고 이해하며, 차단하지 않고 인도합니다."

---

*이 문서는 기술적 실현 가능성과 철학적 깊이를 모두 고려한 단계별 실행 계획입니다.*
