DOCS/plans/251014_claude_coldmail_hybrid_implementation.md
Claude-51124 bf6873a2f0 docs: 문서 작성 원칙 준수 (100줄 이하 분리, 코드 블록 최소화)
- troubleshooting: 분석 문서 (129줄)
  - 문제 상황 및 근본 원인
  - 3단계 하이브리드 아키텍처
  - 기술 선택 근거 및 교훈
- plans: 구현 계획 문서 (94줄)
  - Phase별 상세 작업 내용
  - DB 스키마 및 함수 설계
  - 테스트 케이스 및 일정

코드 블록 대신 파일명:줄번호로 참조 변경

Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-14 13:07:29 +09:00

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):

  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