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:
parent
3138475f72
commit
72bb66b8eb
@ -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개):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user