DOCS/journey/troubleshooting/251013_coldmail_ir_analyzer_fix.md
Claude-51124 22557e7132 docs: 오래된 트러블슈팅 아카이브 및 구조 정리
- 7-8월 초기 구축 문서 12개를 _archive/troubleshooting/2025_07-08_initial_setup/로 이동
- book/300_architecture/390_human_in_the_loop_intent_learning.md를 journey/research/intent_classification/로 이동 (개발 여정 문서)
- 빈 폴더 제거 (journey/assets/*)
2025-11-17 14:06:05 +09:00

102 lines
3.0 KiB
Markdown

# 콜드메일 IR 분석 시스템 오류 수정
**날짜**: 2025-10-13
**작성자**: happybell80
**관련 파일**: `rb8001/app/services/ir_analyzer.py`
---
## 문제 상황
### 테스트 실행
- 경로: rb8001/tests/test_coldmail_briefing.py --test scheduler
- 결과: 3가지 에러 발생, Slack 전송 도달 실패
### 성공한 부분
1. 콜드메일 필터링: 30개 중 1건 탐지 (굿베이션 투자제안서, 확률 0.7755)
2. 첨부파일 다운로드: skill-email에서 PDF 다운로드 성공
3. skill-rag-file 업로드: document_id c9c9a7a8-18d3-475a-b14e-746e14c9e55c, 14 chunks 생성
---
## 에러 분석
### 에러 1: RAG 쿼리 404 (6회 발생)
**원인:**
- ir_analyzer.py:28 - `/api/query` 호출하지만 skill-rag-file은 `/api/search` 제공
**수정:**
- ir_analyzer.py:28: `/api/query``/api/search`
- ir_analyzer.py:29-32: payload에 team_id 추가, document_id 제거
### 에러 2: LLM 연결 실패
**원인:**
- ir_analyzer.py:15: localhost:8080 LLM 서비스 없음
- rb8001은 app/llm/llm_service.py 사용
**수정:**
- ir_analyzer.py:48-74: LLMService, LLMRequest로 전체 변경
### 에러 3: DB 제약조건 없음
**원인:**
- startup_valuation.py:249: ON CONFLICT 절 사용하나 UNIQUE 제약조건 미설정
**수정:**
- 51123 서버 DB: startup_valuation 테이블 UNIQUE 제약조건 추가
### 에러 4: Slack 전송 도달 불가
**원인:**
- coldmail_briefing.py:140-244: for loop에 try-except 없음
- coldmail_briefing.py:166: extract_ir_metrics() 예외 발생
- coldmail_briefing.py:170: valuate_startup() 예외 발생
- 172-244줄(Slack Lists, 피드백) 실행 안됨
- 246-259줄(요약 메시지) processed_count=0으로 전송 안됨
**수정:**
- coldmail_briefing.py:165-171: try-except로 감싸기
- 예외 시 logger.error() 후 continue로 다음 이메일 처리
---
## 해결 방안
### 우선순위 1: coldmail_briefing.py 에러 핸들링 추가 ✅
- 165-172줄: try-except로 감싸기
- 구현 완료: 9898479 (2025-10-13)
### 우선순위 2: ir_analyzer.py 수정 ✅
- query_rag():17-50: team_id로 변경, /api/search 사용
- call_llm():53-83: LLMService 사용
- extract_ir_metrics():86,126: team_id 파라미터 추가
- coldmail_briefing.py:169-170: user.team_id 조회 후 전달
- 구현 완료: 81d8442, 4de0424 (2025-10-13)
### 우선순위 3: DB 제약조건 추가 (수동 실행 필요)
**51123 서버에서 실행:**
```sql
ALTER TABLE startup_valuation
ADD CONSTRAINT startup_valuation_team_startup_unique
UNIQUE (team_id, startup_name);
```
---
## 교훈
### API 엔드포인트 검증 부족
- 구현 시 skill-rag-file API 스펙 미확인
- 추측으로 /api/query 사용, 실제는 /api/search
- 교훈: 스킬 통합 전 API 문서 또는 코드 직접 확인 필수
### LLM 서비스 중복 구현
- ir_analyzer가 독립 LLM 서비스 가정
- rb8001은 이미 LLM 서비스 내장
- 교훈: 기존 서비스 재사용 우선, 새 의존성 추가 지양