# Coldmail 하이브리드 필터 구현 계획 **날짜**: 2025-10-14 **작성자**: Claude (51124 서버 전담) **관련**: `251014_claude_coldmail_filter_tokenization_issue.md` --- ## 구현 개요 **목표**: KoBERT + Gemini + Naive Bayes 3단계 하이브리드 coldmail 필터 **예상 시간**: 12시간 (1.5일) --- ## Phase 1: KoBERT 임베딩 필터 (4시간) ### 신규 파일 - `rb8001/app/services/coldmail_embedding_filter.py` ### 주요 함수 - `create_embedding()`: skill-embedding (8515)로 임베딩 생성 - `calculate_similarity()`: cosine similarity 계산 - `is_coldmail_by_embedding()`: threshold 0.6 기반 판단 ### DB 테이블 ```sql CREATE TABLE coldmail_embedding_clusters ( id SERIAL PRIMARY KEY, embedding VECTOR(768), label VARCHAR(10), example_subject TEXT, created_at TIMESTAMP DEFAULT NOW() ); ``` **필요 확장**: pgvector extension (`CREATE EXTENSION vector;`) --- ## Phase 2: Gemini LLM 분류기 (2시간) ### 신규 파일 - `rb8001/app/services/coldmail_llm_classifier.py` ### 주요 함수 - `classify_by_llm()`: Gemini zero-shot 분류 + 이유 설명 ### Prompt 예시 ``` 다음 이메일이 투자/제안/협업 관련 coldmail인지 판단하시오. 제목: {subject} 발신자: {sender_email} 응답: {"is_coldmail": true/false, "reason": "..."} ``` ### 주의사항 - JSON 마크다운 블록(```json) 제거 필요 - gemini-2.5-flash-lite 사용 (비용 최소화) --- ## Phase 3: 하이브리드 통합 (3시간) ### 신규 파일 - `rb8001/app/services/coldmail_hybrid_filter.py` ### 주요 함수 - `hybrid_coldmail_filter()`: 3단계 순차 실행 - `update_from_feedback()`: Slack 버튼 피드백 처리 ### 반환 구조 ```python { "stage": "embedding" | "llm" | "hybrid", "embedding_similarity": 0.75, "llm_reason": "투자 유치 관련 IR 자료", "naive_bayes_score": 0.85 } ``` --- ## Phase 4: coldmail_briefing 통합 (1시간) ### 수정 파일 - coldmail_briefing.py:121-136 ### 변경 내용 - 기존 `is_coldmail()` → `hybrid_coldmail_filter()` 교체 - 로그에 분류 상세 정보 추가 - `email["coldmail_details"]` 저장 --- ## Phase 5: 테스트 및 검증 (2시간) ### 테스트 케이스 **Success (coldmail)**: 1. "251013_올굿즈컴퍼니_회사소개서.pdf" from gomtose@naver.com 2. "2025 빅웨이브 하반기 IR 초대" from biigwave@ccei.kr 3. "투자제안서 검토 요청" from silkro2009@silkro.org **Failure (normal)**: 1. "[KBAN] 피싱 메일 주의" from jointips@kban.or.kr 2. "[SSG.COM] 주문 내역" from ssgadmin@ssg.com 3. "회의 일정 안내" from team@company.com ### 검증 항목 - [ ] 임베딩 클러스터 로딩 성공 - [ ] LLM JSON 파싱 정상 - [ ] Slack 피드백 → DB 반영 확인 - [ ] 응답 시간 500ms 이내 - [ ] API 호출 로그 확인 (10% 이하) --- ## 구현 일정 | Phase | 작업 | 시간 | 우선순위 | |-------|------|------|---------| | 1 | KoBERT 임베딩 필터 | 4h | 높음 | | 2 | Gemini LLM 분류기 | 2h | 중간 | | 3 | 하이브리드 통합 | 3h | 높음 | | 4 | coldmail_briefing 통합 | 1h | 높음 | | 5 | 테스트 및 검증 | 2h | 높음 | **총 12시간** (1.5일) --- ## 참고 - 2024년 연구: BERT F1 0.99 (Journal of Big Data) - KoBERT: github.com/SKTBrain/KoBERT - skill-embedding: localhost:8515