docs: coldmail 하이브리드 필터 구현 계획 정교화

- Phase 1: skill-embedding(8515) /embed 엔드포인트, 384차원 명시
- Phase 2: Gemini gemini-2.5-flash-lite 모델명 추가
- Phase 3: coldmail_filter.py:44-52 정규식 교체 위치 명시
- Phase 4: scheduler→services 리팩토링 상세화 (76-263줄, 8단계 워크플로우)
- DB: pgvector extension, coldmail_embedding_clusters 스키마 추가
- 환경변수: SKILL_EMBEDDING_URL 참조 파일 명시

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
happybell80 2025-10-14 15:56:28 +09:00
parent 3138475f72
commit 72bb66b8eb

View File

@ -41,27 +41,39 @@
## 구현 계획 (12시간) ## 구현 계획 (12시간)
### Phase 1: KoBERT 임베딩 필터 (4h) ### Phase 1: KoBERT 임베딩 필터 (4h)
**신규**: coldmail_embedding_filter.py **신규**: app/services/coldmail_embedding_filter.py
- create_embedding(): skill-embedding (8515)로 임베딩 생성 - create_embedding(): skill-embedding (8515) /embed 호출, 384차원
- calculate_similarity(): cosine similarity - calculate_similarity(): cosine similarity
- is_coldmail_by_embedding(): threshold 0.6 - is_coldmail_by_embedding(): threshold 0.6
- **환경변수**: SKILL_EMBEDDING_URL (emotion_classifier.py:9, embedding_client.py:14 참고)
**DB**: coldmail_embedding_clusters 테이블 (pgvector extension, VECTOR(384) 필요) **DB**: coldmail_embedding_clusters 테이블
- pgvector extension 설치 필요: CREATE EXTENSION IF NOT EXISTS vector;
- 컬럼: id, embedding VECTOR(384), label TEXT, created_at TIMESTAMP
### Phase 2: Gemini LLM 분류기 (2h) ### Phase 2: Gemini LLM 분류기 (2h)
**신규**: coldmail_llm_classifier.py **신규**: app/services/coldmail_llm_classifier.py
- classify_by_llm(): Gemini zero-shot + 이유 설명 - classify_by_llm(): Gemini zero-shot + 이유 설명
- JSON 마크다운 블록 전처리 - JSON 마크다운 블록 전처리
- **모델**: gemini-2.5-flash-lite (emotion_classifier.py 참고)
### Phase 3: 하이브리드 통합 (3h) ### Phase 3: 하이브리드 통합 (3h)
**신규**: coldmail_hybrid_filter.py **신규**: app/services/coldmail_hybrid_filter.py
- hybrid_coldmail_filter(): 3단계 순차 실행 - hybrid_coldmail_filter(): 3단계 순차 실행
- update_from_feedback(): Slack 버튼 → 3모델 업데이트 - update_from_feedback(): Slack 버튼 → 3모델 업데이트
- **기존**: app/services/coldmail_filter.py:44-52 정규식 토큰화 교체
### Phase 4: coldmail_briefing 통합 (1h) ### Phase 4: 아키텍처 리팩토링 (3h)
**수정**: coldmail_briefing.py:121-136 **신규**: app/services/coldmail_briefing_service.py
- is_coldmail() → hybrid_coldmail_filter() 교체 - _run_coldmail_briefing() 이동 (scheduler/jobs/coldmail_briefing.py:76-263)
- 분류 상세 정보 로그 추가 - 8단계 워크플로우: 시간 계산 → 메일 조회 → 콜드메일 필터 → 첨부파일 처리 → IR 분석 → 가치평가 → Slack Lists → 피드백 버튼
**수정**: app/scheduler/jobs/coldmail_briefing.py
- register(), _parse_cron(), _run_coldmail_briefing_with_logging() 유지 (1-75줄)
- is_coldmail() → hybrid_coldmail_filter() 교체 (133줄)
**LangGraph 검토**: 250925_langgraph_vs_n8n_comparison.md
- 체크포인트 기반 실패 복구 (IR 분석 실패 시 재시도)
### Phase 5: 테스트 및 검증 (2h) ### Phase 5: 테스트 및 검증 (2h)
**테스트 케이스** (6개): **테스트 케이스** (6개):