diff --git a/troubleshooting/251014_claude_coldmail_filter_tokenization_issue.md b/troubleshooting/251014_claude_coldmail_filter_tokenization_issue.md index 684deb3..9ca5be7 100644 --- a/troubleshooting/251014_claude_coldmail_filter_tokenization_issue.md +++ b/troubleshooting/251014_claude_coldmail_filter_tokenization_issue.md @@ -41,27 +41,39 @@ ## 구현 계획 (12시간) ### Phase 1: KoBERT 임베딩 필터 (4h) -**신규**: coldmail_embedding_filter.py -- create_embedding(): skill-embedding (8515)로 임베딩 생성 +**신규**: app/services/coldmail_embedding_filter.py +- create_embedding(): skill-embedding (8515) /embed 호출, 384차원 - calculate_similarity(): cosine similarity - 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) -**신규**: coldmail_llm_classifier.py +**신규**: app/services/coldmail_llm_classifier.py - classify_by_llm(): Gemini zero-shot + 이유 설명 - JSON 마크다운 블록 전처리 +- **모델**: gemini-2.5-flash-lite (emotion_classifier.py 참고) ### Phase 3: 하이브리드 통합 (3h) -**신규**: coldmail_hybrid_filter.py +**신규**: app/services/coldmail_hybrid_filter.py - hybrid_coldmail_filter(): 3단계 순차 실행 - update_from_feedback(): Slack 버튼 → 3모델 업데이트 +- **기존**: app/services/coldmail_filter.py:44-52 정규식 토큰화 교체 -### Phase 4: coldmail_briefing 통합 (1h) -**수정**: coldmail_briefing.py:121-136 -- is_coldmail() → hybrid_coldmail_filter() 교체 -- 분류 상세 정보 로그 추가 +### Phase 4: 아키텍처 리팩토링 (3h) +**신규**: app/services/coldmail_briefing_service.py +- _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) **테스트 케이스** (6개):