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:
parent
8c1a16a109
commit
dbbd52dd76
@ -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: 사용자가 좌절감을 표현할 때
|
||||||
**기존 접근**: "차분히 다시 시도해 보세요."
|
**기존 접근**: "차분히 다시 시도해 보세요."
|
||||||
**사랑 기반**: "정말 힘드셨겠어요. 잠시 쉬었다가 함께 차근차근 해결해 보면 어떨까요? 제가 옆에서 도와드릴게요."
|
**사랑 기반**: "정말 힘드셨겠어요. 잠시 쉬었다가 함께 차근차근 해결해 보면 어떨까요? 제가 옆에서 도와드릴게요."
|
||||||
|
**나 전달법**: "좌절감을 표현하시는 것을 보니 제가 충분한 도움을 드리지 못한 것 같아 안타깝습니다. 어떤 부분이 가장 어려우신지 구체적으로 알려주시면, 더 효과적으로 도와드릴 수 있을 것 같습니다."
|
||||||
|
|
||||||
## 결론
|
## 결론
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
```
|
```
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user