docs(plans): Gemini File Search 콜드메일 통합 TDD 테스트 계획
- 콜드메일 워크플로우 전체 분석 (컴퍼니엑스 → Slack Lists) - 현재 병목점: PDF 추출 실패 → evidence_count=0 → 신뢰도 0.6 고정 - 3가지 테스트 시나리오: PDF A/B, 신뢰도 개선, 하이브리드 E2E - 임베딩 차원 호환성: 384차원 vs 3,072차원 별도 컬렉션 - 테스트 위치: rb8001/tests/test_coldmail_gemini_integration.py
This commit is contained in:
parent
a9d14e1ffb
commit
7ed5c718a2
217
plans/251110_gemini_file_search_콜드메일_tdd_테스트_계획.md
Normal file
217
plans/251110_gemini_file_search_콜드메일_tdd_테스트_계획.md
Normal file
@ -0,0 +1,217 @@
|
||||
# Gemini File Search 콜드메일 통합 TDD 테스트 계획
|
||||
|
||||
**작성일**: 2025-11-10
|
||||
**작성자**: Claude Code
|
||||
**목표**: Gemini File Search API를 콜드메일 워크플로우에 통합하여 IR 분석 품질 개선
|
||||
|
||||
---
|
||||
|
||||
## 1. 배경
|
||||
|
||||
### 현재 콜드메일 워크플로우
|
||||
|
||||
참고: rb8001/app/services/workflows/coldmail_workflow.py:22-150
|
||||
|
||||
1. 컴퍼니엑스 이메일 조회 (NAVER WORKS)
|
||||
2. Naive Bayes 콜드메일 필터링
|
||||
3. PDF 첨부파일 다운로드
|
||||
4. skill-rag-file 업로드 (PyPDF2 → OCR)
|
||||
5. RAG 쿼리 6회 (IR 지표 추출)
|
||||
6. 베이지안 가치 평가
|
||||
7. Slack Lists 등록
|
||||
|
||||
### 병목점
|
||||
|
||||
참고:
|
||||
- skill-rag-file/app/api/upload.py:148-183
|
||||
- rb8001/app/services/startup_valuation.py:38-72, 296-314
|
||||
|
||||
**PDF 추출 실패 연쇄 효과**:
|
||||
- OCR 품질 낮음 → RAG 검색 0건
|
||||
- IR 지표 "N/A" → evidence_count=0
|
||||
- seed 30억·신뢰도 0.6 고정
|
||||
|
||||
### Gemini File Search 개선 효과
|
||||
|
||||
참고: DOCS/research/rag/251110_gemini_file_search_api_테스트_및_콜드메일_개선방안_평가.md:166-184
|
||||
|
||||
- 한글 OCR PDF 13.77초 안정 처리
|
||||
- IR 지표 정확 추출 → evidence_count ≥ 2
|
||||
- 신뢰도 0.7~0.8 상승
|
||||
- grounding_metadata로 근거 제공
|
||||
|
||||
---
|
||||
|
||||
## 2. 임베딩 차원 호환성
|
||||
|
||||
### 현재 시스템
|
||||
|
||||
- skill-embedding: multilingual-MiniLM-L12-v2 (384차원)
|
||||
- ChromaDB 컬렉션: skill_rag_file_{team_id}_documents
|
||||
|
||||
### Gemini 임베딩
|
||||
|
||||
- gemini-embedding-001: 3,072차원 (기본)
|
||||
- 설정 가능: 128~3,072 차원
|
||||
|
||||
### 호환성 전략
|
||||
|
||||
**옵션 1**: 별도 컬렉션 (team_id_gemini vs team_id_documents)
|
||||
**옵션 2**: Gemini 차원 384로 축소
|
||||
**추천**: 옵션 1 (성능 최대화)
|
||||
|
||||
---
|
||||
|
||||
## 3. 테스트 코드 위치
|
||||
|
||||
### 추천 위치
|
||||
|
||||
**파일**: `rb8001/tests/test_coldmail_gemini_integration.py`
|
||||
|
||||
**이유**:
|
||||
- rb8001/tests/에 기존 콜드메일 테스트 시리즈 있음
|
||||
- 전체 E2E 워크플로우 통합 테스트 가능
|
||||
- 실제 스케줄러 환경과 동일
|
||||
|
||||
**기존 콜드메일 테스트**:
|
||||
- test_coldmail_filter.py
|
||||
- test_coldmail_ontology.py
|
||||
- test_coldmail_full_scenario.py
|
||||
- test_e2e_coldmail_workflow.py
|
||||
|
||||
---
|
||||
|
||||
## 4. 테스트 시나리오
|
||||
|
||||
### 시나리오 1: PDF 처리 품질 A/B 테스트
|
||||
|
||||
**목적**: PyPDF2+OCR vs Gemini File Search IR 지표 추출 정확도
|
||||
|
||||
**Given**:
|
||||
- IR PDF 샘플: rb8001/state/ocr_tests/611938b0-kor.ocr.pdf
|
||||
- 또는 과거 콜드메일 첨부 PDF
|
||||
|
||||
**When**:
|
||||
- 경로 A: skill-rag-file (PyPDF2 → OCR → 384차원)
|
||||
- 경로 B: Gemini File Search (자동 색인 → 3,072차원)
|
||||
|
||||
**Then 검증**:
|
||||
- IR 지표 6개 추출 성공률 (사업분야, 단계, 매출, 성장률, 팀규모, 기술우위)
|
||||
- evidence_count 비교 (0~4개)
|
||||
- 처리 시간 비교
|
||||
|
||||
**성공 기준**:
|
||||
- Gemini evidence_count ≥ 2
|
||||
- 신뢰도 ≥ 0.7
|
||||
|
||||
### 시나리오 2: 밸류에이션 신뢰도 개선 검증
|
||||
|
||||
**목적**: evidence_count 증가로 신뢰도 0.6 → 0.7~0.8 상승 확인
|
||||
|
||||
**Given**:
|
||||
- evidence_count=0 과거 콜드메일 케이스
|
||||
- startup_valuation.py:296-314 함수 동작
|
||||
|
||||
**When**:
|
||||
- 동일 PDF를 Gemini로 재분석
|
||||
- IR 지표 재추출 → evidence_count 증가
|
||||
- valuate_startup() 재실행
|
||||
|
||||
**Then 검증**:
|
||||
- 기존: seed 30억, 신뢰도 0.6
|
||||
- 개선: seed 탈출, 신뢰도 0.7~0.8
|
||||
- compute_confidence() ev_boost 작동
|
||||
|
||||
**성공 기준**:
|
||||
- evidence_count: 0 → 2 이상
|
||||
- confidence: 0.6 → 0.7 이상
|
||||
- Slack Lists 상태: HOLD → 정상
|
||||
|
||||
### 시나리오 3: 하이브리드 운영 E2E 테스트
|
||||
|
||||
**목적**: 48시간 제약 우회 이중 저장 전체 플로우
|
||||
|
||||
**Given**:
|
||||
- 신규 콜드메일 수신 시뮬레이션
|
||||
|
||||
**When**:
|
||||
1. PDF 다운로드
|
||||
2. Gemini File Search 업로드 (임시)
|
||||
3. skill-rag-file 업로드 (영구)
|
||||
4. IR 분석: Gemini RAG 우선 사용
|
||||
5. Slack Lists 등록
|
||||
6. 48시간 후: Gemini 삭제, Chroma 검색
|
||||
|
||||
**Then 검증**:
|
||||
- 48시간 이내: Gemini 검색 성공, grounding 제공
|
||||
- 48시간 이후: Chroma 검색 성공
|
||||
- Slack Lists IR 파일 영구 유효
|
||||
- TCO 측정 (색인 비용 vs 운영 비용)
|
||||
|
||||
**성공 기준**:
|
||||
- 검색 영속성 보장
|
||||
- 결과 일관성 유지
|
||||
- 비용 효율성 검증
|
||||
|
||||
---
|
||||
|
||||
## 5. 구현 순서
|
||||
|
||||
### Phase 1: 기본 검증 (시나리오 1)
|
||||
1. test_coldmail_gemini_integration.py 생성
|
||||
2. PDF A/B 테스트 함수 작성
|
||||
3. IR 지표 추출 정확도 비교
|
||||
|
||||
### Phase 2: 품질 개선 검증 (시나리오 2)
|
||||
1. evidence_count 증가 테스트
|
||||
2. 신뢰도 향상 검증
|
||||
3. Slack Lists HOLD 상태 해소
|
||||
|
||||
### Phase 3: 운영 검증 (시나리오 3)
|
||||
1. 이중 저장 파이프라인 구현
|
||||
2. 48시간 영속성 테스트
|
||||
3. TCO 분석 및 의사결정
|
||||
|
||||
---
|
||||
|
||||
## 6. 제약사항
|
||||
|
||||
### Gemini API 한계
|
||||
|
||||
- 무료 tier: 분당 요청 제한
|
||||
- 저장 한도: 1GB (무료)
|
||||
- 파일 크기: 최대 100MB
|
||||
- 보존 기간: 48시간
|
||||
|
||||
### 기술적 제약
|
||||
|
||||
- 임베딩 차원 불일치 (384 vs 3,072)
|
||||
- 별도 컬렉션 필요
|
||||
- ChromaDB 스토리지 증가 (8배)
|
||||
|
||||
### 운영 고려사항
|
||||
|
||||
- 색인 비용: $0.15/1M 토큰
|
||||
- 외부 API 의존성
|
||||
- 데이터 보안 리스크
|
||||
|
||||
---
|
||||
|
||||
## 7. 다음 단계
|
||||
|
||||
### 즉시 실행 가능
|
||||
1. rb8001/tests/test_coldmail_gemini_integration.py 생성
|
||||
2. 시나리오 1 구현 (PDF A/B 테스트)
|
||||
3. 기존 IR PDF로 검증
|
||||
|
||||
### 의사결정 필요
|
||||
1. Gemini 차원 설정 (384 vs 3,072)
|
||||
2. 하이브리드 운영 여부
|
||||
3. 예산 승인 (유료 tier 전환)
|
||||
|
||||
---
|
||||
|
||||
**작성**: Claude Code, 2025-11-10
|
||||
**상태**: 계획 단계 (구현 전)
|
||||
**참고**: research/rag/251110_gemini_file_search_api_테스트_및_콜드메일_개선방안_평가.md
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user