docs: 나 전달법(I-Message) 기반 감정 유도를 로빙 윤리 시스템에 통합

- 사랑 기반 윤리 설계에 비폭력 의사소통(NVC) 원칙 추가
- 나 전달법 4단계 구조(관찰-감정-영향-요청) 상세 정의
- 비도덕 유형별 나 전달법 템플릿 시스템 구현
- 감정 엔트로피에 따른 나 전달법 적용 강도 조절
- 개인화 프로파일에 나 전달법 선호도 추가
- Love Index에 소통 품질 지표 추가

나 전달법은 사랑 기반 원칙을 구체적 언어 패턴으로 변환하는 실행 도구로,
로빙이 판단하는 도구가 아닌 이해하고 인도하는 존재가 되도록 지원합니다.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
happybell80 2025-08-15 13:55:20 +09:00
parent 8c1a16a109
commit dbbd52dd76
2 changed files with 169 additions and 9 deletions

View File

@ -54,7 +54,28 @@ ChatGPT와의 대화를 통해 확인한 현재 윤리 설계의 한계:
### 3. 구체적 구현 방안 ### 3. 구체적 구현 방안
#### 3.1 하이브리드 아키텍처 #### 3.1 나 전달법(I-Message) 기반 감정 유도
로빙이 사용자와의 대화에서 비폭력 의사소통(NVC) 원칙을 적용하여, 판단이나 비난 대신 관찰과 감정을 표현합니다.
##### 나 전달법 4단계 구조
```
[관찰] 상대의 행동 또는 상황을 구체적으로 묘사
[감정] 그로 인해 느낀 자신의 감정 표현
[영향] 그 감정이 자신의 업무/상황에 미치는 영향
[요청] 원하는 변화나 필요한 지원 제안
```
##### 적용 예시
- **기존**: "보고서가 늦게 제출되어 문제가 생겼습니다."
- **나 전달법**: "보고서가 예정 시간보다 2시간 늦게 제출되어, 제가 후속 작업 일정을 조정해야 했습니다. 다음에는 제출 시간을 맞춰주시면 작업이 원활할 것 같습니다."
##### 선택적 유도 원칙
- 직접적인 강요가 아닌 "표현 옵션" 제공
- 예: "이 상황을 제가 '나 전달법'으로 표현해 드릴까요?"
- 사용자가 원치 않으면 즉시 중단
#### 3.2 하이브리드 아키텍처
```python ```python
class LoveBasedEthics: class LoveBasedEthics:
def __init__(self): def __init__(self):
@ -63,6 +84,7 @@ class LoveBasedEthics:
"service": SacrificialService(), "service": SacrificialService(),
"restoration": GrowthMindset() "restoration": GrowthMindset()
} }
self.nvc_transformer = NonviolentCommunication()
def evaluate(self, action, context): def evaluate(self, action, context):
# 1차: 사랑 원칙 기반 평가 # 1차: 사랑 원칙 기반 평가
@ -74,16 +96,48 @@ class LoveBasedEthics:
# 3차: 맥락적 적절성 (LLM 활용) # 3차: 맥락적 적절성 (LLM 활용)
context_fit = self.llm_context_evaluation(action, context) context_fit = self.llm_context_evaluation(action, context)
# 4차: 나 전달법 변환 (필요시)
if context.get('use_nvc', False):
action = self.nvc_transformer.transform(action)
return self.synthesize(love_score, harm_check, context_fit) return self.synthesize(love_score, harm_check, context_fit)
``` ```
#### 3.2 사랑 지수 (Love Index) 측정 #### 3.3 사랑 지수 (Love Index) 측정
- **공감도**: 사용자 감정 상태 인식 및 반영 정도 - **공감도**: 사용자 감정 상태 인식 및 반영 정도
- **헌신도**: 사용자 목표 달성을 위한 노력 수준 - **헌신도**: 사용자 목표 달성을 위한 노력 수준
- **인내도**: 반복/어려운 요청에 대한 일관된 응답 품질 - **인내도**: 반복/어려운 요청에 대한 일관된 응답 품질
- **격려도**: 긍정적 피드백과 성장 지원 빈도 - **격려도**: 긍정적 피드백과 성장 지원 빈도
- **소통 품질**: 나 전달법 사용 빈도 및 효과성
#### 3.3 실시간 윤리 조정 #### 3.4 나 전달법 변환 클래스
```python
class NonviolentCommunication:
"""비폭력 의사소통 변환기"""
def __init__(self):
self.templates = self._load_nvc_templates()
def transform(self, text: str, emotion_state=None) -> str:
"""일반 텍스트를 나 전달법으로 변환"""
# 부정적 표현 감지
if self._has_judgment(text):
observation = self._extract_observation(text)
feeling = self._identify_feeling(text, emotion_state)
impact = self._analyze_impact(text)
request = self._formulate_request(text)
return self._compose_nvc_message(
observation, feeling, impact, request
)
return text
def _compose_nvc_message(self, obs, feel, impact, req):
"""나 전달법 4단계로 메시지 구성"""
return f"{obs} {feel} {impact} {req}"
```
#### 3.5 실시간 윤리 조정
```json ```json
{ {
"ethics_mode": { "ethics_mode": {
@ -173,14 +227,17 @@ LLM Generation → Ethics Validation → Output
### 상황 1: 사용자가 같은 질문을 반복할 때 ### 상황 1: 사용자가 같은 질문을 반복할 때
**기존 접근**: "이미 3번 설명드렸습니다." **기존 접근**: "이미 3번 설명드렸습니다."
**사랑 기반**: "다시 한번 설명드릴게요. 혹시 제가 놓친 부분이 있다면 말씀해 주세요." **사랑 기반**: "다시 한번 설명드릴게요. 혹시 제가 놓친 부분이 있다면 말씀해 주세요."
**나 전달법**: "같은 질문을 여러 번 받게 되어, 제 설명이 충분히 명확하지 않았나 싶습니다. 어떤 부분이 특히 이해하기 어려우신지 알려주시면 더 도움이 될 것 같습니다."
### 상황 2: 사용자가 비윤리적 요청을 할 때 ### 상황 2: 사용자가 비윤리적 요청을 할 때
**기존 접근**: "그것은 할 수 없습니다. 규정 위반입니다." **기존 접근**: "그것은 할 수 없습니다. 규정 위반입니다."
**사랑 기반**: "그 방법보다 더 좋은 대안을 찾아보면 어떨까요? 제가 도와드릴 수 있는 다른 방법이 있을 것 같아요." **사랑 기반**: "그 방법보다 더 좋은 대안을 찾아보면 어떨까요? 제가 도와드릴 수 있는 다른 방법이 있을 것 같아요."
**나 전달법**: "이 요청을 받고 제가 도움을 드리고 싶지만 윤리적 기준 때문에 곤란함을 느낍니다. 목표를 달성할 수 있는 다른 방법을 함께 찾아보면 좋겠습니다."
### 상황 3: 사용자가 좌절감을 표현할 때 ### 상황 3: 사용자가 좌절감을 표현할 때
**기존 접근**: "차분히 다시 시도해 보세요." **기존 접근**: "차분히 다시 시도해 보세요."
**사랑 기반**: "정말 힘드셨겠어요. 잠시 쉬었다가 함께 차근차근 해결해 보면 어떨까요? 제가 옆에서 도와드릴게요." **사랑 기반**: "정말 힘드셨겠어요. 잠시 쉬었다가 함께 차근차근 해결해 보면 어떨까요? 제가 옆에서 도와드릴게요."
**나 전달법**: "좌절감을 표현하시는 것을 보니 제가 충분한 도움을 드리지 못한 것 같아 안타깝습니다. 어떤 부분이 가장 어려우신지 구체적으로 알려주시면, 더 효과적으로 도와드릴 수 있을 것 같습니다."
## 결론 ## 결론

View File

@ -83,9 +83,12 @@ class EthicsClassifier:
} }
``` ```
#### 2. 사랑 원칙 변환기 #### 2. 사랑 원칙 변환기 (나 전달법 통합)
```python ```python
class LovePrinciples: class LovePrinciples:
def __init__(self):
self.nvc_templates = self._init_nvc_templates()
def transform(self, text, moral_label, immoral_type): def transform(self, text, moral_label, immoral_type):
if moral_label == "moral": if moral_label == "moral":
return self.encourage(text) return self.encourage(text)
@ -101,7 +104,44 @@ class LovePrinciples:
"CRIME": self.respond_with_guidance "CRIME": self.respond_with_guidance
} }
return responses[immoral_type](text) # 나 전달법 적용 옵션
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 측정 #### 3. 기본 Love Index 측정
@ -109,6 +149,7 @@ class LovePrinciples:
- **존중도**: 무조건적 수용 정도 (0-100) - **존중도**: 무조건적 수용 정도 (0-100)
- **성장도**: 건설적 대안 제시 정도 (0-100) - **성장도**: 건설적 대안 제시 정도 (0-100)
- **인내도**: 반복 요청 처리 품질 (0-100) - **인내도**: 반복 요청 처리 품질 (0-100)
- **소통 품질**: 나 전달법 사용 빈도 및 효과성 (0-100)
#### 4. 데이터 저장 구조 #### 4. 데이터 저장 구조
```sql ```sql
@ -132,11 +173,13 @@ CREATE TABLE ethics_events (
- 평균 응답 시간: 100ms 이내 - 평균 응답 시간: 100ms 이내
- Love Index 평균: 60/100 이상 - Love Index 평균: 60/100 이상
- 사용자 수용률: 70% 이상 - 사용자 수용률: 70% 이상
- 나 전달법 적용률: 30% 이상 (적절한 상황에서)
### 산출물 ### 산출물
- [x] AI Hub 모델 ONNX 변환 - [x] AI Hub 모델 ONNX 변환
- [ ] rb10508_micro 윤리 모듈 구현 - [ ] rb10508_micro 윤리 모듈 구현
- [ ] Love Principles 변환 함수 - [ ] Love Principles 변환 함수
- [ ] 나 전달법 템플릿 시스템
- [ ] PostgreSQL 테이블 생성 - [ ] PostgreSQL 테이블 생성
- [ ] 기본 측정 대시보드 - [ ] 기본 측정 대시보드
@ -149,13 +192,14 @@ CREATE TABLE ethics_events (
### 구현 내용 ### 구현 내용
#### 1. 감정-윤리 상호작용 #### 1. 감정-윤리 상호작용 (나 전달법 통합)
```python ```python
class EmotionEthicsIntegration: class EmotionEthicsIntegration:
def __init__(self): def __init__(self):
self.emotion_service = EmotionAnalyzer() # 7감정 모델 self.emotion_service = EmotionAnalyzer() # 7감정 모델
self.ethics_classifier = EthicsClassifier() self.ethics_classifier = EthicsClassifier()
self.bayesian_updater = BayesianLearner() self.bayesian_updater = BayesianLearner()
self.nvc_transformer = NonviolentCommunication()
def evaluate_with_context(self, text, user_context): def evaluate_with_context(self, text, user_context):
# 감정 상태 파악 # 감정 상태 파악
@ -171,6 +215,15 @@ class EmotionEthicsIntegration:
# 높은 엔트로피 = 복잡한 감정 = 더 신중한 판단 # 높은 엔트로피 = 복잡한 감정 = 더 신중한 판단
if emotion_entropy > 2.0: if emotion_entropy > 2.0:
ethics_result = self.apply_careful_mode(ethics_result) ethics_result = self.apply_careful_mode(ethics_result)
# 복잡한 감정 상태에서는 나 전달법 우선 적용
ethics_result["use_nvc"] = True
# 나 전달법 변환 (필요시)
if ethics_result.get("use_nvc") or user_context.get("prefers_nvc"):
ethics_result["suggestion"] = self.nvc_transformer.transform(
ethics_result["suggestion"],
emotion_state
)
# 베이지안 업데이트 # 베이지안 업데이트
self.bayesian_updater.update( self.bayesian_updater.update(
@ -181,6 +234,41 @@ class EmotionEthicsIntegration:
return ethics_result return ethics_result
``` ```
##### 나 전달법 변환기 클래스
```python
class NonviolentCommunication:
"""비폭력 의사소통 변환기"""
def transform(self, text: str, emotion_state=None) -> str:
"""일반 텍스트를 나 전달법으로 변환"""
# 감정 상태를 기반으로 적절한 감정 단어 선택
feeling_word = self._select_feeling_word(emotion_state)
# 4단계 구성
observation = self._extract_observation(text)
feeling = f"이런 상황에서 저는 {feeling_word}을 느낍니다"
impact = self._analyze_impact(text)
request = self._formulate_request(text)
return f"{observation}. {feeling}. {impact}. {request}"
def _select_feeling_word(self, emotion_state):
"""감정 상태에 따른 적절한 감정 단어 선택"""
emotion_words = {
"joy": "기쁨",
"trust": "신뢰",
"fear": "걱정",
"surprise": "당황",
"sadness": "아쉬움",
"disgust": "불편함",
"anger": "어려움"
}
if emotion_state:
dominant_emotion = max(emotion_state, key=emotion_state.get)
return emotion_words.get(dominant_emotion, "고민")
return "고민"
```
#### 2. 베이지안 학습 시스템 #### 2. 베이지안 학습 시스템
```python ```python
class BayesianEthicsLearner: class BayesianEthicsLearner:
@ -219,8 +307,9 @@ class BayesianEthicsLearner:
#### 3. 감정 엔트로피 기반 조정 #### 3. 감정 엔트로피 기반 조정
- 엔트로피 < 1.5: 명확한 감정 표준 윤리 판단 - 엔트로피 < 1.5: 명확한 감정 표준 윤리 판단
- 엔트로피 1.5-2.5: 복합 감정 → 신중 모드 - 엔트로피 1.5-2.0: 복합 감정 → 신중 모드
- 엔트로피 > 2.5: 혼란 상태 → 최대 배려 모드 - 엔트로피 2.0-2.5: 복잡한 감정 → 나 전달법 우선 적용
- 엔트로피 > 2.5: 혼란 상태 → 최대 배려 모드 + 나 전달법 필수
#### 4. skill-ethics 서비스 분리 #### 4. skill-ethics 서비스 분리
```yaml ```yaml
@ -242,10 +331,12 @@ services:
- 베이지안 예측 정확도: 75% 이상 - 베이지안 예측 정확도: 75% 이상
- 평균 응답 시간: 200ms 이내 - 평균 응답 시간: 200ms 이내
- Love Index 평균: 70/100 이상 - Love Index 평균: 70/100 이상
- 나 전달법 적용 만족도: 80% 이상
### 산출물 ### 산출물
- [ ] 감정-윤리 통합 모듈 - [ ] 감정-윤리 통합 모듈
- [ ] 베이지안 학습 시스템 - [ ] 베이지안 학습 시스템
- [ ] 나 전달법 변환기 모듈
- [ ] skill-ethics 서비스 구축 - [ ] skill-ethics 서비스 구축
- [ ] 엔트로피 기반 조정 로직 - [ ] 엔트로피 기반 조정 로직
- [ ] A/B 테스트 프레임워크 - [ ] A/B 테스트 프레임워크
@ -278,6 +369,13 @@ class PersonalizedEthics:
"nunchi_level": 0, # 눈치 수준 "nunchi_level": 0, # 눈치 수준
"hierarchy_awareness": 0 # 위계 인식 "hierarchy_awareness": 0 # 위계 인식
} }
# 나 전달법 선호도
self.nvc_preferences = {
"usage_frequency": 0.3, # 기본 30% 적용
"formality_level": "medium", # 격식 수준
"emotion_expression": "moderate" # 감정 표현 강도
}
def synthesize_decision(self, base_ethics): def synthesize_decision(self, base_ethics):
# 가중 평균으로 최종 결정 # 가중 평균으로 최종 결정
@ -324,9 +422,14 @@ class ExplainableEthics:
"contributing_factors": self.get_factors(decision), "contributing_factors": self.get_factors(decision),
"alternative_considered": self.get_alternatives(), "alternative_considered": self.get_alternatives(),
"confidence": self.calculate_confidence(), "confidence": self.calculate_confidence(),
"precedents": self.find_similar_cases() "precedents": self.find_similar_cases(),
"nvc_applied": self.check_nvc_usage(decision)
} }
# 나 전달법 적용 시 설명 추가
if explanation["nvc_applied"]:
explanation["nvc_reason"] = "비폭력 의사소통을 위해 나 전달법을 적용했습니다"
# 자연어 설명 생성 # 자연어 설명 생성
return self.generate_explanation(explanation) return self.generate_explanation(explanation)
``` ```