Update emotion addressing plan: add services layer (follow 311 principles)

This commit is contained in:
Claude-51124 2025-12-04 15:53:38 +09:00
parent 817a619fd3
commit 51e9930b98

View File

@ -45,31 +45,47 @@ LLM 역할: 결정된 호칭 자연스럽게 사용만
**부정 감정**: fear, anger, sadness, disgust
**감정 소스**: emotion_readings 최근 10분 평균 (현재 메시지 가중치 2배)
## 구현
## 구현 (계층 분리 원칙 준수)
### 1. database.py
**추가**: `get_user_preferred_name(user_id, current_emotion) -> str`
- user 테이블에서 name, metadata 조회
- emotion_readings 최근 10분 평균 계산
- 규칙 적용하여 호칭 반환
### 계층 구조
```
router.py (감정 분석 후)
services/addressing_service.py (신규, 호칭 결정 비즈니스 로직)
state/database.py (DB CRUD만)
```
### 2. router.py:264-283
**추가**:
### 1. services/addressing_service.py (신규)
**기능**: 호칭 결정 비즈니스 로직
- `get_preferred_name(user_id: str, current_emotion: str) -> str`
- state 호출: user 정보, 최근 감정 조회
- 호칭 규칙 적용 (직책 → 긍정감정=nickname → 부정감정=정식이름)
- 약 100줄 예상
### 2. state/database.py
**기존 함수 확인 후**:
- 없으면 추가: `get_user_basic_info(user_id)` - name, metadata 반환
- 없으면 추가: `get_recent_emotions(user_id, minutes=10)` - 감정 평균
- DB CRUD만, 비즈니스 로직 금지
### 3. router.py:264-283
**수정**: 감정 분석 후 addressing_service 호출
```python
# 감정 분석 후
preferred_name = await get_user_preferred_name(user_id, user_emotion)
from app.services.addressing_service import get_preferred_name
preferred_name = await get_preferred_name(user_id, user_emotion)
context['preferred_name'] = preferred_name
```
### 3. llm_service.py:131-132
**수정**: system_instruction에 호칭 지시 추가
### 4. llm_service.py:131-132
**수정**: system_instruction에 호칭 지시
```python
preferred_name = enhanced_context.get('preferred_name', '사용자')
system_instruction += f"사용자를 '{preferred_name}'으로 호칭하세요. "
```
### 4. tables.md
**추가**: user 테이블 metadata 컬럼 설명
### 5. tables.md
**추가**: user.metadata 컬럼 문서화
```
| metadata | JSONB | YES | nickname, position, short_name, preferences |
```