감정 시스템 구현 문서 최종 정리

- inference.py → emotion_classifier.py로 수정
- 라우터 분리 원칙 추가 (main.py 직접 추가 금지)
- 파일당 500줄 제한 원칙 추가
- DB 작업 주체 명확화 (51123 서버 직접 실행)
This commit is contained in:
happybell80 2025-10-02 10:56:23 +09:00
parent 392d870aee
commit 6101ed77a9

View File

@ -72,17 +72,27 @@ done
- rb8001/app/llm/emotion_llm.py (analyze_user_emotion, generate_response_with_emotion) - rb8001/app/llm/emotion_llm.py (analyze_user_emotion, generate_response_with_emotion)
### 미구현 항목 ### 미구현 항목
- rb8001/app/core/emotion/inference.py (파일 없음) - rb8001/app/core/emotion/emotion_classifier.py (rb10508_micro에서 복사 필요)
- ONNX 모델 파일 (없음) - ONNX 모델 마운트 (docker-compose.yml 볼륨 설정 없음)
- 토크나이저 초기화 (없음)
- emotion_readings 테이블 (없음) - emotion_readings 테이블 (없음)
- /v1/emotion/* API 엔드포인트 (없음) - /v1/emotion/* API 엔드포인트 (없음)
### ONNX 모델 현황
- **모델 위치** (51124 서버): /home/admin/ivada_project/onnx_models/aihub-7emotions/
- **모델 파일**: model.onnx (442MB), BERT 기반 7클래스 감정 분류
- **레이블**: fear, surprise, anger, sadness, neutral, happiness, disgust
- **토크나이저**: vocab.txt, tokenizer.json 포함
- **학습 코드** (51124): /home/admin/ivada_project/training_emotion/train_korean_emotion.py
- **문제**: rb8001 컨테이너에 볼륨 마운트 안 됨
## 데이터 모델 설계 ## 데이터 모델 설계
### emotion_readings 테이블 ### emotion_readings 테이블
필수 컬럼: 필수 컬럼:
- user_id (UUID) - user_id (UUID) - 사용자 감정
- company_id (UUID) - 회사별 집계용
- robeing_id (VARCHAR) - 로빙의 감정 상태 (예: 'rb8001')
- emotion_type (VARCHAR) - 'user' | 'robeing'
- created_at (TIMESTAMPTZ) - created_at (TIMESTAMPTZ)
- probs (JSONB) - probs (JSONB)
- entropy (FLOAT) - entropy (FLOAT)
@ -95,6 +105,8 @@ done
저장 위치: 저장 위치:
- robeing_metrics DB (별도 DB 권장) - robeing_metrics DB (별도 DB 권장)
- TimescaleDB 하이퍼테이블 적용 - TimescaleDB 하이퍼테이블 적용
- 51123 서버에서 CREATE TABLE 및 create_hypertable() 직접 실행
- 인덱스: (user_id, created_at), (company_id, created_at), (robeing_id, created_at)
### TimescaleDB 참조 ### TimescaleDB 참조
- 설치/활성화: DOCS/troubleshooting/250714_system_metrics_implementation.md - 설치/활성화: DOCS/troubleshooting/250714_system_metrics_implementation.md
@ -119,7 +131,7 @@ done
## 통합 포인트 ## 통합 포인트
### 감정 분석 삽입 ### 감정 분석 삽입
- rb8001/app/llm/emotion_llm.py:25 - inference.py 호출로 대체 - rb8001/app/llm/emotion_llm.py:25 - emotion_classifier.py 호출로 대체
- rb8001/app/core/emotion/base.py:46, 51 - 실제 분석 로직으로 교체 - rb8001/app/core/emotion/base.py:46, 51 - 실제 분석 로직으로 교체
### LLM 톤 조절 ### LLM 톤 조절
@ -127,7 +139,8 @@ done
- 감정 기반 프롬프트 조절 로직 추가 - 감정 기반 프롬프트 조절 로직 추가
### 저장 계층 ### 저장 계층
- 신규 DB 클라이언트 (robeing_metrics) - DB 접근: rb8001/app/state/database.py 활용 또는 신규 emotion DB 클라이언트 파일 생성
- robeing_metrics DB 연결 (51123 서버에서 CREATE TABLE 직접 실행)
- 비동기 저장 큐 고려 - 비동기 저장 큐 고려
### 권한 ### 권한
@ -170,12 +183,15 @@ done
## 작업 순서 ## 작업 순서
1. 추론 모듈 추가: rb8001/app/core/emotion/inference.py 1. Docker 볼륨 마운트: rb8001 docker-compose.yml에 `../onnx_models:/code/onnx_models:ro` 추가
2. EmotionAwareLLM 연결: rb8001/app/llm/emotion_llm.py:25 2. 의존성 추가: rb8001/requirements.txt에 `onnxruntime==1.18.1`, `transformers==4.45.2` 추가
3. LLMService 톤 조절: rb8001/app/llm/llm_service.py:133 3. 추론 모듈 복사: rb10508_micro/app/core/emotion/emotion_classifier.py → rb8001/app/core/emotion/
4. DB 스키마 준비: robeing_metrics DB (별도) 4. EmotionAwareLLM 연결: rb8001/app/llm/emotion_llm.py:25
5. API 라우트 추가: rb8001/main.py 5. LLMService 톤 조절: rb8001/app/llm/llm_service.py:133
6. 집계 쿼리 구현: time_bucket 기반 6. DB 스키마 준비: 51123 서버에서 robeing_metrics DB에 emotion_readings 테이블 생성
7. DB 클라이언트: rb8001/app/state/database.py 활용 또는 신규 파일 생성
8. API 라우터 생성: rb8001/app/router/emotion_endpoint.py 생성 후 main.py에 include
9. 집계 쿼리 구현: time_bucket 기반
## 모니터링/성능 ## 모니터링/성능
@ -185,6 +201,11 @@ done
### 저장 압력 ### 저장 압력
- TTL/압축은 TimescaleDB 정책으로 설정 - TTL/압축은 TimescaleDB 정책으로 설정
## 개발 원칙
- 한 파일 최대 500줄 제한
- 기능별 파일 분리 (라우터, 서비스, 모델)
- main.py는 라우터 include만, 직접 엔드포인트 정의 금지
## 리스크/롤백 ## 리스크/롤백
### 모델 미가용 ### 모델 미가용