- troubleshooting: 분석 문서 (129줄) - 문제 상황 및 근본 원인 - 3단계 하이브리드 아키텍처 - 기술 선택 근거 및 교훈 - plans: 구현 계획 문서 (94줄) - Phase별 상세 작업 내용 - DB 스키마 및 함수 설계 - 테스트 케이스 및 일정 코드 블록 대신 파일명:줄번호로 참조 변경 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
3.3 KiB
3.3 KiB
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 테이블
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 버튼 피드백 처리
반환 구조
{
"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):
- "251013_올굿즈컴퍼니_회사소개서.pdf" from gomtose@naver.com
- "2025 빅웨이브 하반기 IR 초대" from biigwave@ccei.kr
- "투자제안서 검토 요청" from silkro2009@silkro.org
Failure (normal):
- "[KBAN] 피싱 메일 주의" from jointips@kban.or.kr
- "[SSG.COM] 주문 내역" from ssgadmin@ssg.com
- "회의 일정 안내" 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