From 72bb66b8ebe275f1fb0cceb8b3645f65856a15f3 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 14 Oct 2025 15:56:28 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20coldmail=20=ED=95=98=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=A6=AC=EB=93=9C=20=ED=95=84=ED=84=B0=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EA=B3=84=ED=9A=8D=20=EC=A0=95=EA=B5=90=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- ...aude_coldmail_filter_tokenization_issue.md | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) 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개):